Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge pull request #65 from fabienchaix/master
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 27 Feb 2016 16:22:54 +0000 (17:22 +0100)
committerMartin Quinson <martin.quinson@ens-rennes.fr>
Sat, 27 Feb 2016 16:22:54 +0000 (17:22 +0100)
Adding test for concurrency and cleaner concurrency support

458 files changed:
.gitignore
CMakeLists.txt
ChangeLog
TODO
doc/doxygen/inside_cmake.doc
doc/doxygen/inside_tests.doc
doc/doxygen/install.doc
examples/java/CMakeLists.txt [deleted file]
examples/java/async/CMakeLists.txt
examples/java/bittorrent/CMakeLists.txt
examples/java/chord/CMakeLists.txt
examples/java/cloud/CMakeLists.txt
examples/java/cloud/energy/CMakeLists.txt
examples/java/cloud/migration/CMakeLists.txt
examples/java/commTime/CMakeLists.txt
examples/java/energy/CMakeLists.txt
examples/java/io/CMakeLists.txt
examples/java/kademlia/CMakeLists.txt
examples/java/master_slave_bypass/CMakeLists.txt
examples/java/master_slave_kill/CMakeLists.txt
examples/java/masterslave/CMakeLists.txt
examples/java/migration/CMakeLists.txt
examples/java/mutualExclusion/CMakeLists.txt
examples/java/pingPong/CMakeLists.txt
examples/java/priority/CMakeLists.txt
examples/java/startKillTime/CMakeLists.txt
examples/java/suspend/CMakeLists.txt
examples/java/tracing/CMakeLists.txt
examples/msg/actions/CMakeLists.txt
examples/msg/actions/actions.c
examples/msg/actions/actions.tesh
examples/msg/actions/actions.txt [deleted file]
examples/msg/actions/actions_allReduce.txt [deleted file]
examples/msg/actions/actions_barrier.txt [deleted file]
examples/msg/actions/actions_bcast.txt [deleted file]
examples/msg/actions/actions_reduce.txt [deleted file]
examples/msg/actions/actions_with_isend.txt [deleted file]
examples/msg/actions/deployment_split.xml
examples/msg/actions/mpi_actions_shared.txt [new file with mode: 0644]
examples/msg/actions/mpi_actions_split_p0.txt [moved from examples/msg/actions/actions_split_p0.txt with 100% similarity]
examples/msg/actions/mpi_actions_split_p1.txt [moved from examples/msg/actions/actions_split_p1.txt with 100% similarity]
examples/msg/actions/storage_actions.txt [moved from examples/msg/actions/actions_io.txt with 100% similarity]
examples/msg/bittorrent/CMakeLists.txt
examples/msg/chainsend/CMakeLists.txt
examples/msg/chord/CMakeLists.txt
examples/msg/chord/run_chord [deleted file]
examples/msg/cloud/CMakeLists.txt
examples/msg/energy/consumption/CMakeLists.txt
examples/msg/energy/onoff/CMakeLists.txt
examples/msg/energy/pstate/CMakeLists.txt
examples/msg/energy/vm/CMakeLists.txt
examples/msg/exception/CMakeLists.txt
examples/msg/exception/exception.c
examples/msg/gpu/CMakeLists.txt
examples/msg/gtnets/CMakeLists.txt
examples/msg/icomms/CMakeLists.txt
examples/msg/io/CMakeLists.txt
examples/msg/kademlia/CMakeLists.txt
examples/msg/masterslave/CMakeLists.txt
examples/msg/mc/CMakeLists.txt
examples/msg/migration/CMakeLists.txt
examples/msg/ns3/CMakeLists.txt
examples/msg/parallel_task/CMakeLists.txt
examples/msg/pastry/CMakeLists.txt
examples/msg/pmm/CMakeLists.txt
examples/msg/pmm/msg_pmm.c
examples/msg/pmm/pmm.tesh
examples/msg/pmm/pmm_9_deploy.xml [deleted file]
examples/msg/priority/CMakeLists.txt
examples/msg/properties/CMakeLists.txt
examples/msg/properties/msg_prop.c
examples/msg/semaphores/CMakeLists.txt
examples/msg/sendrecv/CMakeLists.txt
examples/msg/start_kill_time/CMakeLists.txt
examples/msg/start_kill_time/sk_time.c
examples/msg/suspend/CMakeLists.txt
examples/msg/suspend/deployment_suspend.xml [deleted file]
examples/msg/suspend/suspend.c
examples/msg/suspend/suspend.tesh
examples/msg/token_ring/CMakeLists.txt
examples/msg/token_ring/ring_call.c
examples/msg/tracing/CMakeLists.txt
examples/platforms/optorsim/gridpp_grid_2004.conf [moved from examples/platforms/conf/gridpp_grid_2004.conf with 100% similarity]
examples/platforms/optorsim/lcg_sept2004_grid.conf [moved from examples/platforms/conf/lcg_sept2004_grid.conf with 100% similarity]
examples/platforms/optorsim/transform_optorsim_platform.pl [moved from examples/platforms/conf/transform_optorsim_platform.pl with 100% similarity]
examples/platforms/syscoord/generate_peer_platform.pl
examples/platforms/syscoord/median_harvard.syscoord
examples/platforms/syscoord/median_harvard.xml [deleted file]
examples/platforms/syscoord/median_meridian.syscoord
examples/platforms/syscoord/median_meridian.xml [deleted file]
examples/platforms/syscoord/median_p2psim.syscoord
examples/platforms/syscoord/median_p2psim.xml [deleted file]
examples/s4u/README
examples/s4u/basic/CMakeLists.txt
examples/s4u/io/CMakeLists.txt
examples/s4u/io/s4u_io_test.cpp
examples/simdag/CMakeLists.txt
examples/simdag/dax/CMakeLists.txt
examples/simdag/dot/CMakeLists.txt
examples/simdag/goal/CMakeLists.txt
examples/simdag/io/CMakeLists.txt
examples/simdag/properties/CMakeLists.txt
examples/simdag/scheduling/CMakeLists.txt
examples/smpi/CMakeLists.txt
examples/smpi/MM/CMakeLists.txt
examples/smpi/MM/MM_mpi.c
examples/smpi/energy/CMakeLists.txt
examples/smpi/energy/f77/CMakeLists.txt
examples/smpi/energy/f90/CMakeLists.txt
examples/smpi/mvmul.c
examples/smpi/replay_multiple/CMakeLists.txt
examples/smpi/smpi_msg_masterslave/CMakeLists.txt
include/simgrid/forward.h
include/simgrid/jedule/jedule_platform.h
include/simgrid/modelchecker.h
include/simgrid/msg.h
include/simgrid/s4u/comm.hpp
include/simgrid/s4u/engine.hpp
include/simgrid/s4u/file.hpp
include/simgrid/s4u/host.hpp
include/simgrid/s4u/mailbox.hpp
include/simgrid/s4u/storage.hpp
include/simgrid_config.h.in
include/xbt/base.h
include/xbt/graph.h
include/xbt/graphxml.h [deleted file]
include/xbt/graphxml_parse.h [deleted file]
include/xbt/hash.h
include/xbt/matrix.h
include/xbt/misc.h
include/xbt/replay.h
include/xbt/str.h
include/xbt/sysdep.h
include/xbt/system_error.hpp [new file with mode: 0644]
include/xbt/virtu.h
src/bindings/lua/lua_platf.cpp
src/include/mc/datatypes.h
src/include/mc/mc.h
src/include/surf/surf.h
src/include/surf/surfxml_parse_values.h [deleted file]
src/include/xbt/win32_ucontext.h
src/instr/jedule/jedule_platform.cpp
src/mc/AddressSpace.hpp
src/mc/ChunkedData.cpp
src/mc/ChunkedData.hpp
src/mc/DwarfExpression.cpp
src/mc/DwarfExpression.hpp
src/mc/Frame.cpp
src/mc/Frame.hpp
src/mc/LocationList.cpp
src/mc/LocationList.hpp
src/mc/ModelChecker.cpp
src/mc/ModelChecker.hpp
src/mc/ObjectInformation.cpp
src/mc/PageStore.cpp
src/mc/Process.cpp
src/mc/Process.hpp
src/mc/RegionSnapshot.cpp
src/mc/RegionSnapshot.hpp
src/mc/Type.hpp
src/mc/Variable.hpp
src/mc/mc_base.cpp
src/mc/mc_base.h
src/mc/mc_checkpoint.cpp
src/mc/mc_client.cpp
src/mc/mc_client.h
src/mc/mc_client_api.cpp
src/mc/mc_comm_determinism.cpp
src/mc/mc_comm_pattern.cpp
src/mc/mc_compare.cpp
src/mc/mc_config.cpp
src/mc/mc_diff.cpp
src/mc/mc_dwarf.cpp
src/mc/mc_dwarf.hpp
src/mc/mc_global.cpp
src/mc/mc_hash.cpp
src/mc/mc_hash.hpp
src/mc/mc_ignore.cpp
src/mc/mc_ignore.h
src/mc/mc_liveness.cpp
src/mc/mc_liveness.h
src/mc/mc_member.cpp
src/mc/mc_memory.cpp
src/mc/mc_mmalloc.h
src/mc/mc_mmu.h
src/mc/mc_pair.cpp
src/mc/mc_private.h
src/mc/mc_protocol.h
src/mc/mc_record.cpp
src/mc/mc_record.h
src/mc/mc_replay.h
src/mc/mc_request.cpp
src/mc/mc_request.h
src/mc/mc_safety.cpp
src/mc/mc_safety.h
src/mc/mc_smx.cpp
src/mc/mc_smx.h
src/mc/mc_snapshot.cpp
src/mc/mc_snapshot.h
src/mc/mc_state.cpp
src/mc/mc_state.h
src/mc/mc_unw.cpp
src/mc/mc_unw.h
src/mc/mc_visited.cpp
src/mc/mc_xbt.cpp
src/mc/mc_xbt.hpp
src/mc/remote_ptr.hpp [new file with mode: 0644]
src/mc/simgrid_mc.cpp
src/msg/msg_actions.cpp
src/msg/msg_deployment.cpp
src/msg/msg_environment.cpp
src/msg/msg_global.cpp
src/msg/msg_gos.cpp
src/msg/msg_host.cpp
src/msg/msg_io.cpp
src/msg/msg_mailbox.cpp
src/msg/msg_mailbox.h [deleted file]
src/msg/msg_private.h
src/msg/msg_process.cpp
src/msg/msg_synchro.cpp
src/msg/msg_task.cpp
src/msg/msg_vm.cpp
src/portable.h
src/s4u/s4u_actor.cpp
src/s4u/s4u_async.cpp
src/s4u/s4u_comm.cpp
src/s4u/s4u_engine.cpp
src/s4u/s4u_file.cpp
src/s4u/s4u_host.cpp
src/s4u/s4u_mailbox.cpp
src/s4u/s4u_storage.cpp
src/simdag/sd_dotloader.cpp
src/simdag/sd_task.cpp
src/simdag/sd_workstation.cpp
src/simgrid/host.cpp
src/simgrid/sg_config.c
src/simix/libsmx.cpp
src/simix/popping_private.h
src/simix/smx_global.cpp
src/simix/smx_host.cpp
src/simix/smx_io.cpp
src/simix/smx_network.cpp
src/simix/smx_process.cpp
src/simix/smx_vm.cpp
src/smpi/smpi_group.cpp
src/smpi/smpi_replay.cpp
src/surf/HostImpl.cpp [moved from src/surf/host_interface.cpp with 87% similarity]
src/surf/HostImpl.hpp [moved from src/surf/host_interface.hpp with 94% similarity]
src/surf/callbacks.cpp [deleted file]
src/surf/callbacks.h [deleted file]
src/surf/cpu_cas01.cpp
src/surf/cpu_cas01.hpp
src/surf/cpu_interface.cpp
src/surf/cpu_interface.hpp
src/surf/cpu_ti.cpp
src/surf/cpu_ti.hpp
src/surf/host_clm03.hpp
src/surf/instr_routing.cpp
src/surf/network_cm02.cpp
src/surf/network_cm02.hpp
src/surf/network_constant.hpp
src/surf/network_ib.cpp
src/surf/network_interface.cpp
src/surf/network_interface.hpp
src/surf/network_ns3.cpp
src/surf/network_ns3.hpp
src/surf/plugins/energy.cpp
src/surf/plugins/energy.hpp
src/surf/ptask_L07.cpp
src/surf/ptask_L07.hpp
src/surf/sg_platf.cpp
src/surf/surf_c_bindings.cpp
src/surf/surf_interface.cpp
src/surf/surf_interface.hpp
src/surf/surf_private.h
src/surf/surf_routing.cpp
src/surf/surf_routing.hpp
src/surf/surf_routing_RoutedGraph.cpp
src/surf/surf_routing_cluster.cpp
src/surf/surf_routing_cluster_fat_tree.cpp
src/surf/surf_routing_cluster_torus.cpp
src/surf/surf_routing_dijkstra.cpp
src/surf/surf_routing_floyd.cpp
src/surf/surf_routing_full.cpp
src/surf/surf_routing_none.cpp
src/surf/surf_routing_private.hpp [deleted file]
src/surf/trace_mgr.hpp
src/surf/virtual_machine.cpp
src/surf/virtual_machine.hpp
src/surf/vm_hl13.cpp
src/surf/xml/platf.hpp
src/surf/xml/platf_private.hpp
src/surf/xml/simgrid.dtd
src/surf/xml/simgrid_dtd.c
src/surf/xml/simgrid_dtd.h
src/surf/xml/surfxml_parseplatf.cpp
src/surf/xml/surfxml_sax_cb.cpp
src/xbt/dict.c
src/xbt/fifo_private.h
src/xbt/graph.c
src/xbt/graph_private.h
src/xbt/graphxml.c [deleted file]
src/xbt/graphxml.dtd [deleted file]
src/xbt/graphxml_parse.c [deleted file]
src/xbt/log.c
src/xbt/snprintf.c
src/xbt/xbt_matrix.c
src/xbt/xbt_replay.c
src/xbt/xbt_sha.c
src/xbt/xbt_str.c
src/xbt/xbt_strbuff.c
src/xbt/xbt_virtu.c
teshsuite/bug-17132/CMakeLists.txt
teshsuite/java/semaphore/CMakeLists.txt
teshsuite/java/sleep_host_off/CMakeLists.txt
teshsuite/mc/CMakeLists.txt
teshsuite/mc/dwarf/CMakeLists.txt
teshsuite/mc/dwarf/dwarf.cpp
teshsuite/mc/dwarf_expression/CMakeLists.txt
teshsuite/mc/dwarf_expression/dwarf_expression.cpp
teshsuite/mc/replay/CMakeLists.txt
teshsuite/msg/get_sender/CMakeLists.txt
teshsuite/msg/host_on_off/CMakeLists.txt
teshsuite/msg/host_on_off_processes/CMakeLists.txt
teshsuite/msg/pid/CMakeLists.txt
teshsuite/msg/process/CMakeLists.txt
teshsuite/msg/process_join/CMakeLists.txt
teshsuite/msg/storage/CMakeLists.txt
teshsuite/msg/task_destroy_cancel/CMakeLists.txt
teshsuite/msg/trace/CMakeLists.txt
teshsuite/simdag/availability/CMakeLists.txt
teshsuite/simdag/basic/CMakeLists.txt
teshsuite/simdag/incomplete/CMakeLists.txt
teshsuite/simdag/network/mxn/CMakeLists.txt
teshsuite/simdag/network/p2p/CMakeLists.txt
teshsuite/simdag/partask/CMakeLists.txt
teshsuite/simdag/platforms/CMakeLists.txt
teshsuite/simdag/platforms/Dijkstra.xml
teshsuite/simdag/platforms/basic_parsing_test.tesh
teshsuite/simdag/platforms/basic_parsing_test_sym_full.tesh
teshsuite/simdag/platforms/bob0_state_file.trace [deleted file]
teshsuite/simdag/platforms/bob2_availability_file.trace [deleted file]
teshsuite/simdag/platforms/bob2_state_file.trace [deleted file]
teshsuite/simdag/platforms/bogus_two_hosts_asymetric-2.xml [deleted file]
teshsuite/simdag/platforms/bogus_two_hosts_asymetric.tesh
teshsuite/simdag/platforms/carol.fail [moved from teshsuite/simdag/platforms/bob.fail with 100% similarity]
teshsuite/simdag/platforms/erin.avail [moved from teshsuite/simdag/platforms/bob0_availability_file.trace with 57% similarity]
teshsuite/simdag/platforms/flatifier.cpp
teshsuite/simdag/platforms/flatifier.tesh
teshsuite/simdag/platforms/four_hosts_Dijkstra_ns3.xml
teshsuite/simdag/platforms/four_hosts_floyd_bis.xml [deleted file]
teshsuite/simdag/platforms/get_full_link.tesh
teshsuite/simdag/platforms/host_attributes.xml [new file with mode: 0644]
teshsuite/simdag/platforms/link.bw [moved from teshsuite/simdag/platforms/link1.bw with 100% similarity]
teshsuite/simdag/platforms/link.fail [moved from teshsuite/simdag/platforms/link1.fail with 100% similarity]
teshsuite/simdag/platforms/link.lat [moved from teshsuite/simdag/platforms/link1.lat with 100% similarity]
teshsuite/simdag/platforms/link_attributes.xml [new file with mode: 0644]
teshsuite/simdag/platforms/one_host.xml [deleted file]
teshsuite/simdag/platforms/one_host_availability.xml [deleted file]
teshsuite/simdag/platforms/one_host_properties.xml [deleted file]
teshsuite/simdag/platforms/one_host_state_file.xml [deleted file]
teshsuite/simdag/platforms/one_host_state_off.xml [deleted file]
teshsuite/simdag/platforms/one_host_state_on.xml [deleted file]
teshsuite/simdag/platforms/one_host_trace_file.xml [deleted file]
teshsuite/simdag/platforms/one_host_trace_inside.xml [deleted file]
teshsuite/simdag/platforms/one_link_availability.xml [deleted file]
teshsuite/simdag/platforms/one_link_fatpipe.xml [deleted file]
teshsuite/simdag/platforms/one_link_shared.xml [deleted file]
teshsuite/simdag/platforms/one_link_state_file.xml [deleted file]
teshsuite/simdag/platforms/random.xml [deleted file]
teshsuite/simdag/platforms/two_clusters.xml
teshsuite/simdag/platforms/two_clusters_symmetric.xml [deleted file]
teshsuite/simix/check_defaults/CMakeLists.txt
teshsuite/simix/stack_overflow/CMakeLists.txt
teshsuite/smpi/CMakeLists.txt
teshsuite/smpi/allgather/CMakeLists.txt
teshsuite/smpi/allgatherv/CMakeLists.txt
teshsuite/smpi/allreduce/CMakeLists.txt
teshsuite/smpi/allreduce/allreduce_coll_automatic.tesh [new file with mode: 0644]
teshsuite/smpi/allreduce/allreduce_coll_large.tesh
teshsuite/smpi/alltoall/CMakeLists.txt
teshsuite/smpi/alltoallv/CMakeLists.txt
teshsuite/smpi/barrier/CMakeLists.txt
teshsuite/smpi/bcast/CMakeLists.txt
teshsuite/smpi/compute/CMakeLists.txt
teshsuite/smpi/gather/CMakeLists.txt
teshsuite/smpi/hvector/CMakeLists.txt
teshsuite/smpi/indexed/CMakeLists.txt
teshsuite/smpi/isp/umpire/CMakeLists.txt
teshsuite/smpi/mpich3-test/CMakeLists.txt
teshsuite/smpi/mpich3-test/attr/CMakeLists.txt
teshsuite/smpi/mpich3-test/coll/CMakeLists.txt
teshsuite/smpi/mpich3-test/comm/CMakeLists.txt
teshsuite/smpi/mpich3-test/datatype/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/attr/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/coll/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/comm/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/datatype/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/ext/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/info/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/init/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/pt2pt/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/rma/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/topo/CMakeLists.txt
teshsuite/smpi/mpich3-test/f77/util/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/coll/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/datatype/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/info/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/init/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/pt2pt/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/rma/CMakeLists.txt
teshsuite/smpi/mpich3-test/f90/util/CMakeLists.txt
teshsuite/smpi/mpich3-test/group/CMakeLists.txt
teshsuite/smpi/mpich3-test/info/CMakeLists.txt
teshsuite/smpi/mpich3-test/init/CMakeLists.txt
teshsuite/smpi/mpich3-test/perf/CMakeLists.txt
teshsuite/smpi/mpich3-test/pt2pt/CMakeLists.txt
teshsuite/smpi/mpich3-test/rma/CMakeLists.txt
teshsuite/smpi/mpich3-test/topo/CMakeLists.txt
teshsuite/smpi/pingpong/CMakeLists.txt
teshsuite/smpi/reduce/CMakeLists.txt
teshsuite/smpi/scatter/CMakeLists.txt
teshsuite/smpi/shared/CMakeLists.txt
teshsuite/smpi/struct/CMakeLists.txt
teshsuite/smpi/vector/CMakeLists.txt
teshsuite/surf/lmm_usage/CMakeLists.txt
teshsuite/surf/lmm_usage/lmm_usage.c
teshsuite/surf/maxmin_bench/CMakeLists.txt
teshsuite/surf/surf_usage/CMakeLists.txt
teshsuite/surf/surf_usage/surf_usage.cpp
teshsuite/surf/surf_usage/surf_usage.tesh
teshsuite/surf/surf_usage/surf_usage2.cpp
teshsuite/surf/trace_usage/CMakeLists.txt
teshsuite/surf/trace_usage/trace_usage.cpp
teshsuite/surf/trace_usage/trace_usage.tesh
teshsuite/xbt/graphxml_usage/CMakeLists.txt [deleted file]
teshsuite/xbt/graphxml_usage/graph.xml [deleted file]
teshsuite/xbt/graphxml_usage/graphxml_usage.c [deleted file]
teshsuite/xbt/graphxml_usage/graphxml_usage.tesh [deleted file]
teshsuite/xbt/heap_bench/CMakeLists.txt
teshsuite/xbt/log_large/CMakeLists.txt
teshsuite/xbt/log_usage/CMakeLists.txt
teshsuite/xbt/mallocator/CMakeLists.txt
teshsuite/xbt/mmalloc/CMakeLists.txt
teshsuite/xbt/parallel_log/CMakeLists.txt
teshsuite/xbt/parmap_bench/CMakeLists.txt
teshsuite/xbt/parmap_test/CMakeLists.txt
tools/cmake/DefinePackages.cmake
tools/cmake/Distrib.cmake
tools/cmake/MaintainerMode.cmake
tools/cmake/MakeExe.cmake [deleted file]
tools/cmake/MakeLibWin.cmake
tools/cmake/PrintArgs.cmake
tools/cmake/Tests.cmake
tools/cmake/UnitTesting.cmake
tools/cmake/src/internal_config.h.in
tools/graphicator/CMakeLists.txt
tools/graphicator/graphicator.c

index be91017..4d9f154 100644 (file)
@@ -24,7 +24,6 @@ CTestResults.xml
 ### Maintainer mode
 src/simdag/dax_dtd.l
 src/surf/xml/simgrid_dtd.l
-src/xbt/graphxml.l
 ### Jedule
 examples/simdag/scheduling/simgrid.jed
 teshsuite/simdag/platforms/simgrid.jed
@@ -227,7 +226,6 @@ examples/simdag/ex_sd_test2
 examples/simdag/ex_sd_test_console
 examples/simdag/goal/goal_test
 examples/simdag/io/sd_io
-examples/simdag/metaxml/sd_meta
 examples/simdag/properties/sd_prop
 examples/simdag/scheduling/minmin_test
 examples/simdag/scheduling/Montage_25.jed
@@ -268,7 +266,7 @@ examples/smpi/smpi_traced.trace
 examples/smpi/toto.txt
 examples/smpi/ttest01
 src/replay/replay
-src/testall
+testall
 teshsuite/bug-17132/bug-17132
 teshsuite/datadesc_usage.out
 teshsuite/java/semaphore/java_semaphore_gc_compiled
@@ -276,6 +274,8 @@ teshsuite/java/sleep_host_off/java_sleep_host_off_compiled
 teshsuite/mc/dwarf/dwarf
 teshsuite/mc/dwarf_expression/dwarf-expression
 teshsuite/mc/replay/random_bug
+teshsuite/mc/with_mutex_handling
+teshsuite/mc/without_mutex_handling
 teshsuite/msg/get_sender/get_sender
 teshsuite/msg/host_on_off/host_on_off
 teshsuite/msg/host_on_off/host_on_off_recv
@@ -1026,7 +1026,6 @@ teshsuite/surf/maxmin_bench/maxmin_bench
 teshsuite/surf/surf_usage/surf_usage
 teshsuite/surf/surf_usage/surf_usage2
 teshsuite/surf/trace_usage/trace_usage
-teshsuite/xbt/graphxml_usage/graphxml_usage
 teshsuite/xbt/heap_bench/heap_bench
 teshsuite/xbt/log_large/log_large_test
 teshsuite/xbt/log_large_test
index ea6d1be..c2cd759 100644 (file)
@@ -299,8 +299,6 @@ endif()
 
 CHECK_INCLUDE_FILES("stdlib.h;stdarg.h;string.h;float.h" STDC_HEADERS)
 CHECK_INCLUDE_FILE("valgrind/valgrind.h" HAVE_VALGRIND_VALGRIND_H)
-CHECK_INCLUDE_FILE("socket.h" HAVE_SOCKET_H)
-CHECK_INCLUDE_FILE("stat.h" HAVE_STAT_H)
 CHECK_INCLUDE_FILE("sys/stat.h" HAVE_SYS_STAT_H)
 CHECK_INCLUDE_FILE("sys/ptrace.h" HAVE_SYS_PTRACE_H)
 CHECK_INCLUDE_FILE("windows.h" HAVE_WINDOWS_H)
@@ -312,31 +310,21 @@ CHECK_INCLUDE_FILE("sys/time.h" HAVE_SYS_TIME_H)
 CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
 CHECK_INCLUDE_FILE("sys/sysctl.h" HAVE_SYS_SYSCTL_H)
 CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H)
-CHECK_INCLUDE_FILE("string.h" HAVE_STRING_H)
 CHECK_INCLUDE_FILE("ucontext.h" HAVE_UCONTEXT_H)
-CHECK_INCLUDE_FILE("stdio.h" HAVE_STDIO_H)
 CHECK_INCLUDE_FILE("linux/futex.h" HAVE_FUTEX_H)
 
 CHECK_FUNCTION_EXISTS(gettimeofday HAVE_GETTIMEOFDAY)
 CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
 CHECK_FUNCTION_EXISTS(getdtablesize HAVE_GETDTABLESIZE)
 CHECK_FUNCTION_EXISTS(sysconf HAVE_SYSCONF)
-CHECK_FUNCTION_EXISTS(readv HAVE_READV)
 CHECK_FUNCTION_EXISTS(popen HAVE_POPEN)
-CHECK_FUNCTION_EXISTS(signal HAVE_SIGNAL)
 
-CHECK_SYMBOL_EXISTS(snprintf stdio.h HAVE_SNPRINTF)
-CHECK_SYMBOL_EXISTS(vsnprintf stdio.h HAVE_VSNPRINTF)
-CHECK_SYMBOL_EXISTS(asprintf stdio.h HAVE_ASPRINTF)
 CHECK_SYMBOL_EXISTS(vasprintf stdio.h HAVE_VASPRINTF)
 
 if(MINGW) 
-  # The detection of asprintf fails on MinGW, assumingly because it's
+  # The detection of vasprintf fails on MinGW, assumingly because it's
   # defined as an inline function in stdio.h instead of a regular
   # function. So force the result to be 1 despite of the test.
-  set(HAVE_SNPRINTF 1)
-  set(HAVE_VSNPRINTF 1)
-  set(HAVE_ASPRINTF 1)
   set(HAVE_VASPRINTF 1)
 endif()
 
@@ -608,10 +596,7 @@ if(WIN32)
   try_compile(HAVE_UCONTEXT
     ${CMAKE_BINARY_DIR}
     ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_AC_CHECK_MCSC.c
-    COMPILE_DEFINITIONS _XBT_WIN32
-    INCLUDE_DIRECTORIES
-      ${CMAKE_HOME_DIRECTORY}/src/include
-      ${CMAKE_HOME_DIRECTORY}/src/xbt
+    COMPILE_DEFINITIONS -D_XBT_WIN32 -I${CMAKE_HOME_DIRECTORY}/src/include -I${CMAKE_HOME_DIRECTORY}/src/xbt
   )
 else()
   # We always provide our own implementation of ucontext on Windows.
@@ -760,56 +745,7 @@ endif()
 ## System checks
 ##
 
-### check for a working snprintf
-if(HAVE_SNPRINTF AND HAVE_VSNPRINTF OR WIN32)
-  if(CMAKE_CROSSCOMPILING)
-    set(RUN_SNPRINTF_FUNC "cross")
-    #set(PREFER_PORTABLE_SNPRINTF 1)
-  else()
-    try_run(RUN_SNPRINTF_FUNC_VAR COMPILE_SNPRINTF_FUNC_VAR
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_snprintf.c
-      )
-  endif()
-
-  if(CMAKE_CROSSCOMPILING)
-    set(RUN_VSNPRINTF_FUNC "cross")
-    set(PREFER_PORTABLE_VSNPRINTF 1)
-  else()
-    try_run(RUN_VSNPRINTF_FUNC_VAR COMPILE_VSNPRINTF_FUNC_VAR
-      ${CMAKE_BINARY_DIR}
-      ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_vsnprintf.c
-      )
-  endif()
-
-  set(PREFER_PORTABLE_SNPRINTF 0)
-  if(RUN_VSNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN")
-    set(PREFER_PORTABLE_SNPRINTF 1)
-  endif()
-  if(RUN_SNPRINTF_FUNC_VAR MATCHES "FAILED_TO_RUN")
-    set(PREFER_PORTABLE_SNPRINTF 1)
-  endif()
-endif()
-
-### check for asprintf function familly
-if(HAVE_ASPRINTF)
-  SET(simgrid_need_asprintf "")
-  SET(NEED_ASPRINTF 0)
-else()
-  SET(simgrid_need_asprintf "#define SIMGRID_NEED_ASPRINTF 1")
-  SET(NEED_ASPRINTF 1)
-endif()
-
-if(HAVE_VASPRINTF)
-  SET(simgrid_need_vasprintf "")
-  SET(NEED_VASPRINTF 0)
-else()
-  SET(simgrid_need_vasprintf "#define SIMGRID_NEED_VASPRINTF 1")
-  SET(NEED_VASPRINTF 1)
-endif()
-
 ### check for addr2line
-
 find_path(ADDR2LINE NAMES addr2line    PATHS NO_DEFAULT_PATHS  )
 if(ADDR2LINE)
   set(ADDR2LINE "${ADDR2LINE}/addr2line")
@@ -1045,7 +981,10 @@ include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Tests.cmake)
 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/CTestConfig.cmake)
 
 ### Define subdirectories
-include(${CMAKE_HOME_DIRECTORY}/tools/cmake/MakeExe.cmake)
+foreach(cmakefile ${CMAKEFILES_TXT})
+  string(REPLACE "/CMakeLists.txt" "" repository ${cmakefile})
+  add_subdirectory("${CMAKE_HOME_DIRECTORY}/${repository}")
+endforeach()
 
 ### Setup the distrib
 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Distrib.cmake)
index ec75dfc..116bc1d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -29,6 +29,8 @@ SimGrid (3.13) UNRELEASED; urgency=low
    - Rename from 'power' to 'speed' the attributes describing the amount of
      flops that a <host>, <peer>, <cluster> or <cabinet> can deliver per second.
    - In <trace_connect>, attribute kind="POWER" is now kind="SPEED".
+   - In <host> and <link>, attributes availability and state are gone.
+     It was redundent with state and availability traces, and with peak values.
    - The DOCTYPE points to the right URL:
      http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd
      (the file at this address now documents the changelog since its v1)
@@ -78,6 +80,7 @@ SimGrid (3.13) UNRELEASED; urgency=low
  * Kill the queue data container: it made more sense with GRAS.
  * Kill the xbt_peer_t data type: it's useless without GRAS.
  * Kill rm_cb feature of config sets: it was never useful.
+ * Kill graphxml parsing feature. It was not used.
  * New functions:
    - xbt_dynar_sort_strings(), when the content is char*
    - xbt_str_parse_int / xbt_str_parse_double, wrapping strtol/strtod
diff --git a/TODO b/TODO
index c3617dd..fbcc497 100644 (file)
--- a/TODO
+++ b/TODO
      generate the tarball, or keep using cmake -E tar, but use git-ls-files
      to get the list of files to pack.
 
-* /* FIXME: better place? */
-  int vasprintf  (char **ptr, const char *fmt, va_list ap);
-  char *bprintf(const char*fmt, ...) _XBT_GNUC_PRINTF(1,2);
+* Replace XBT with the C++ standard library
 
-* Replace XBT with the C++ standard library, once everything is ported
-  to C++
-
-* Some XBT datacontainers seem to overlap. Kill some of them?
+* Some XBT datacontainers seem to overlap. Kill some of them all.
     - replace fifo with dynars
     - replace set with SWAG
index b2de29f..5d47cfb 100644 (file)
@@ -120,27 +120,22 @@ set(txt_files
   )
 \endverbatim
 
-Then, you have to follow these steps:
-\li Add the following line to <project/directory>/tools/cmake/MakeExe.cmake:
+Then, you have to add your CMakeLists.txt to CMAKEFILES_TXT in <project/directory>/tools/cmake/DefinePackages.cmake:
 \verbatim
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/<path_where_is_CMakeList.txt>)
-\endverbatim
-
-\li Add your CMakeLists.txt to CMAKE_SOURCE_FILES in <project/directory>/tools/cmake/DefinePackages.cmake:
-\verbatim
-set(CMAKE_SOURCE_FILES
-  CMakeLists.txt
-  ....
+set(CMAKEFILES_TXT
   <path_to_your_CMakeList.txt>
   )
 \endverbatim
 
-\li Add the tesh file and register your example to the testing
-  infrastructure. See \ref inside_tests_add_integration for more
-  details.
+And finally, add the tesh file and register your example to the
+testing infrastructure. See \ref inside_tests_add_integration for more
+details.
 
 Once you're done, you must run "make distcheck" to ensure that you did
-not forget to add any file to the distributed archives.
-
+not forget to add any file to the distributed archives. This ensures
+that everything was commited correctly, so you have to first commit
+before running "make distcheck". If you forgot something, you want to
+"git commit --amend". But never amend a commit that you already pushed
+to public repositories! Do a second commit in that case.
 
 */
index d806829..4502ac0 100644 (file)
@@ -41,17 +41,17 @@ ctest -R msg- -j5 --output-on-failure # You changed MSG and want to check that y
 
 \section inside_tests_rununit Running the unit tests
 
-All unit tests are packed into the testall binary, that lives in src/.
-These tests are run when you launch ctest, don't worry.
+All unit tests are packed into the testall binary, that lives at the
+source root. These tests are run when you launch ctest, don't worry.
 
 \verbatim
-make testall                        # Rebuild the test runner on need
-./src/testall                       # Launch all tests
-./src/testall --help                # revise how it goes if you forgot
-./src/testall --tests=-all          # run no test at all (yeah, that's useless)
-./src/testall --dump-only           # Display all existing test suite
-./src/testall --tests=-all,+dict    # Only launch the tests from the dict testsuite
-./src/testall --tests=-all,+foo:bar # run only the bar test from the foo suite.
+make testall                    # Rebuild the test runner on need
+./testall                       # Launch all tests
+./testall --help                # revise how it goes if you forgot
+./testall --tests=-all          # run no test at all (yeah, that's useless)
+./testall --dump-only           # Display all existing test suite
+./testall --tests=-all,+dict    # Only launch the tests from the dict testsuite
+./testall --tests=-all,+foo:bar # run only the bar test from the foo suite.
 \endverbatim
 
 
index 18fea41..10d3360 100644 (file)
@@ -93,8 +93,11 @@ SimGrid only uses very standard tools:
       You need cmake version 2.8.8 or higher. You may want to use ccmake
       for a graphical interface over cmake.
   - LibBoost:
-    - osX: with <a href="http://www.finkproject.org/">fink</a>: `sudo fink install boost1.53.nopython`
+    - osX: with <a href="http://www.finkproject.org/">fink</a>: `fink install boost1.53.nopython`,
+      or with homebrew: `brew install boost`
     - debian: `apt-get install libboost-dev libboost-context-dev`
+  - Java (only needed if you want to use the Java bindings): Grab a
+    full JDK from http://www.oracle.com/technetwork/java/javase/downloads
 
 For platform specific details, please see  @ref install_cmake_mac and
 @ref install_cmake_windows.
@@ -266,6 +269,11 @@ warning that the "-pthread" argument is not used, if it appears.
 CMAKE_OSX_SYSROOT:PATH=/Applications/XCode.app/Contents/Developer/Platforms/MacOSX.platform/Developer
 @endverbatim
 
+In the El Capitan version of Max OS X, Apple decided that users don't
+need no /usr/include directory anymore. If you are hit by this pure
+madness, just run the following command to restore that classical
+UNIX directory: `xcode-select -install`
+
 \subsubsection install_cmake_windows Building on Windows
 
 Building from the source on Windows, may be something of an adventure.
diff --git a/examples/java/CMakeLists.txt b/examples/java/CMakeLists.txt
deleted file mode 100644 (file)
index 94da85f..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-set(tesh_files
-  ${tesh_files}
-  PARENT_SCOPE)
-set(xml_files
-  ${xml_files}
-  PARENT_SCOPE)
-set(examples_src
-  ${examples_src}
-  PARENT_SCOPE)
-set(bin_files
-  ${bin_files}
-  PARENT_SCOPE)
-set(txt_files
-  ${txt_files}
-  PARENT_SCOPE)
-
index 6aa09fe..1d03cef 100644 (file)
@@ -1,11 +1,9 @@
 set(example java_async)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/AsyncTest.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Forwarder.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/AsyncTest.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Forwarder.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java)
 
 if(enable_java)
   add_custom_command(
index 6d7c80e..47c6b1c 100644 (file)
@@ -1,13 +1,11 @@
 set(example java_bittorrent)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Bittorrent.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Connection.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/MessageTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Peer.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Tracker.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/TrackerTask.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Bittorrent.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Connection.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/MessageTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Peer.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Tracker.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/TrackerTask.java)
 
 if(enable_java)
   add_custom_command(
index f56a6da..702b214 100644 (file)
@@ -1,15 +1,13 @@
 set(example java_chord)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Chord.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/ChordTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/FindSuccessorAnswerTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/FindSuccessorTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/GetPredecessorAnswerTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/GetPredecessorTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/NotifyTask.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Chord.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/ChordTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/FindSuccessorAnswerTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/FindSuccessorTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/GetPredecessorAnswerTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/GetPredecessorTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/NotifyTask.java)
 
 if(enable_java)
   add_custom_command(
@@ -36,9 +34,3 @@ set(examples_src
   ${examples_src}
   ${sources}
   PARENT_SCOPE)
-set(bin_files
-  ${bin_files}
-  PARENT_SCOPE)
-set(txt_files
-  ${txt_files}
-  PARENT_SCOPE)
index 9a64392..00f8996 100644 (file)
@@ -1,10 +1,8 @@
 set(example java_cloud)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Cloud.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Cloud.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java)
 
 if(enable_java)
   add_custom_command(
index b02fcf6..77d4d4a 100644 (file)
@@ -1,8 +1,6 @@
 set(example java_cloud_energy)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Main.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/EnergyVMRunner.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Main.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/EnergyVMRunner.java)
 
 if(enable_java)
   add_custom_command(
index 4cd57c4..b826d27 100644 (file)
@@ -1,11 +1,9 @@
 set(example java_cloud_migration)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Daemon.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Main.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Test.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/TestHostOnOff.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/XVM.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Daemon.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/Main.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Test.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/TestHostOnOff.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/XVM.java)
 
 if(enable_java)
   add_custom_command(
index 5014ac6..2281db9 100644 (file)
@@ -1,10 +1,8 @@
 set(example java_commTime)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/CommTimeTest.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/CommTimeTest.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java)
 
 if(enable_java)
   add_custom_command(
index 2ad4d43..44612e5 100644 (file)
@@ -1,8 +1,6 @@
 set(example java_energy)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/EnergyConsumer.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Energy.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Energy.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/EnergyConsumer.java)
 
 if(enable_java)
   add_custom_command(
index c761d3b..12b1e2e 100644 (file)
@@ -1,10 +1,8 @@
 set(example java_io)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/IO.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Storage.java
-    ${CMAKE_CURRENT_SOURCE_DIR}/Client.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/IO.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Storage.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Client.java)
 
 if(enable_java)
   add_custom_command(
index 5767cd2..f153b38 100644 (file)
@@ -1,18 +1,16 @@
 set(example java_kademlia)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Answer.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Bucket.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Contact.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/FindNodeAnswerTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/FindNodeTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Kademlia.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/KademliaTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/PingAnswerTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/PingTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/RoutingTable.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Kademlia.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/Answer.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Bucket.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Common.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Contact.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/FindNodeAnswerTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/FindNodeTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/KademliaTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/PingAnswerTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/PingTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/RoutingTable.java)
 
 if(enable_java)
   add_custom_command(
index 7ed961f..715fffa 100644 (file)
@@ -1,10 +1,8 @@
 set(example java_master_slave_bypass)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/MsBypass.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/MsBypass.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java)
 
 if(enable_java)
   add_custom_command(
index 1c6971f..9f90f54 100644 (file)
@@ -1,10 +1,8 @@
 set(example java_master_slave_kill)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/MsKill.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/MsKill.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java)
 
 if(enable_java)
   add_custom_command(
index 3dabea0..7d1751f 100644 (file)
@@ -1,11 +1,9 @@
 set(example java_masterslave)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Forwarder.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Masterslave.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Masterslave.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/Forwarder.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/FinalizeTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java)
 
 if(enable_java)
   add_custom_command(
index 27a2553..1e0810d 100644 (file)
@@ -1,9 +1,7 @@
 set(example java_migration)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Emigrant.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Migration.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Policeman.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Migration.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/Emigrant.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Policeman.java)
 
 if(enable_java)
   add_custom_command(
index 02048a8..f15a42c 100644 (file)
@@ -1,12 +1,10 @@
 set(example java_mutualExclusion)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Coordinator.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/GrantTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/MutexCentral.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/ReleaseTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/RequestTask.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Coordinator.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/GrantTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/MutexCentral.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/Node.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/ReleaseTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/RequestTask.java)
 
 if(enable_java)
   add_custom_command(
index 1132494..dadb6c2 100644 (file)
@@ -1,10 +1,8 @@
 set(example java_pingPong)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTest.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTest.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java)
 
 if(enable_java)
   add_custom_command(
index 1eb9ee4..8c9a66f 100644 (file)
@@ -1,8 +1,6 @@
 set(example java_priority)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Priority.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Test.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Priority.java 
+            ${CMAKE_CURRENT_SOURCE_DIR}/Test.java)
 
 if(enable_java)
   add_custom_command(
index 1a1bdc5..8086745 100644 (file)
@@ -1,9 +1,7 @@
 set(example java_startKillTime)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/Master.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/StartKillTime.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Master.java 
+            ${CMAKE_CURRENT_SOURCE_DIR}/Slave.java 
+           ${CMAKE_CURRENT_SOURCE_DIR}/StartKillTime.java)
 
 if(enable_java)
   add_custom_command(
index d978b49..5254666 100644 (file)
@@ -1,9 +1,7 @@
 set(example java_suspend)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/DreamMaster.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/LazyGuy.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Suspend.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/Suspend.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/DreamMaster.java
+           ${CMAKE_CURRENT_SOURCE_DIR}/LazyGuy.java)
 
 if(enable_java)
   add_custom_command(
index e21c754..aa5e59f 100644 (file)
@@ -1,10 +1,8 @@
 set(example java_tracing)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java
-  ${CMAKE_CURRENT_SOURCE_DIR}/TracingTest.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java
+            ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java 
+            ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java 
+           ${CMAKE_CURRENT_SOURCE_DIR}/TracingTest.java)
 
 if(enable_java)
   add_custom_command(
index 071af06..e6a2fca 100644 (file)
@@ -1,8 +1,6 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-add_executable(actions actions.c)
-add_executable(storage_actions storage_actions.c)
-
-target_link_libraries(actions simgrid)
+add_executable       (actions         actions.c)
+target_link_libraries(actions         simgrid)
+add_executable       (storage_actions storage_actions.c)
 target_link_libraries(storage_actions simgrid)
 
 set(tesh_files
@@ -22,13 +20,8 @@ set(examples_src
   PARENT_SCOPE)
 set(txt_files
   ${txt_files}
-  ${CMAKE_CURRENT_SOURCE_DIR}/actions_io.txt
-  ${CMAKE_CURRENT_SOURCE_DIR}/actions_allReduce.txt
-  ${CMAKE_CURRENT_SOURCE_DIR}/actions_barrier.txt
-  ${CMAKE_CURRENT_SOURCE_DIR}/actions_bcast.txt
-  ${CMAKE_CURRENT_SOURCE_DIR}/actions_reduce.txt
-  ${CMAKE_CURRENT_SOURCE_DIR}/actions_split_p0.txt
-  ${CMAKE_CURRENT_SOURCE_DIR}/actions_split_p1.txt
-  ${CMAKE_CURRENT_SOURCE_DIR}/actions.txt
-  ${CMAKE_CURRENT_SOURCE_DIR}/actions_with_isend.txt
+  ${CMAKE_CURRENT_SOURCE_DIR}/mpi_actions_shared.txt
+  ${CMAKE_CURRENT_SOURCE_DIR}/mpi_actions_split_p0.txt
+  ${CMAKE_CURRENT_SOURCE_DIR}/mpi_actions_split_p1.txt
+  ${CMAKE_CURRENT_SOURCE_DIR}/storage_actions.txt
   PARENT_SCOPE)
index 81ef04e..f8b1b88 100644 (file)
@@ -8,7 +8,6 @@
 #include <stdlib.h>
 #include "simgrid/msg.h"        /* Yeah! If you want to use msg, you need to include simgrid/msg.h */
 #include "simgrid/simix.h"      /* semaphores for the barrier */
-#include "xbt.h"                /* calloc, printf */
 #include <xbt/replay.h>
 
 /** @addtogroup MSG_examples
index 0873dae..bce14de 100644 (file)
@@ -11,81 +11,32 @@ $ ${bindir:=.}/actions --log=actions.thres=verbose ${srcdir:=.}/../../platforms/
 > [ 32.703314] (0:maestro@) Simulation time 32.7033
 
 ! output sort 19
-$ ${bindir:=.}/actions --log=actions.thres=verbose ${srcdir:=.}/../../platforms/small_platform_fatpipe.xml deployment.xml actions_allReduce.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> WARNING: THIS BINARY IS KINDA DEPRECATED
-> This example is still relevant if you want to learn about MSG-based trace replay, but if you want to simulate MPI-like traces, you should use the newer version that is in the examples/smpi/replay directory instead.
-> [  0.000000] (1:p0@Tremblay) p0 comm_size 3 0.000000
-> [  7.171139] (2:p1@Ruby) p1 allReduce 5e8 5e8 7.171139
-> [  7.171139] (3:p2@Perl) p2 allReduce 5e8 5e8 7.171139
-> [  7.171139] (1:p0@Tremblay) p0 allReduce 5e8 5e8 7.171139
-> [ 12.268239] (2:p1@Ruby) p1 compute 5e8 5.097100
-> [ 12.268239] (1:p0@Tremblay) p0 compute 5e8 5.097100
-> [ 12.268239] (3:p2@Perl) p2 compute 5e8 5.097100
-> [ 12.268239] (0:maestro@) Simulation time 12.2682
-
-! output sort 19
-$ ${bindir:=.}/actions --log=actions.thres=verbose ${srcdir:=.}/../../platforms/small_platform_fatpipe.xml deployment.xml actions_barrier.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> WARNING: THIS BINARY IS KINDA DEPRECATED
-> This example is still relevant if you want to learn about MSG-based trace replay, but if you want to simulate MPI-like traces, you should use the newer version that is in the examples/smpi/replay directory instead.
-> [  0.000000] (1:p0@Tremblay) p0 comm_size 3 0.000000
-> [  0.000000] (2:p1@Ruby) p1 comm_size 3 0.000000
-> [  0.000000] (3:p2@Perl) p2 comm_size 3 0.000000
-> [  0.022653] (2:p1@Ruby) p1 recv p0 0.022653
-> [  0.022653] (1:p0@Tremblay) p0 send p1 1E7 0.022653
-> [  0.063430] (3:p2@Perl) p2 compute 4E6 0.040777
-> [  0.063430] (2:p1@Ruby) p1 compute 4E6 0.040777
-> [  0.068527] (1:p0@Tremblay) p0 compute 4.5E6 0.045874
-> [  0.068527] (0:maestro@) Simulation time 0.0685268
-
-! output sort 19
-$ ${bindir:=.}/actions --log=actions.thres=verbose ${srcdir:=.}/../../platforms/small_platform_fatpipe.xml deployment.xml actions_bcast.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/actions --log=actions.thres=verbose ${srcdir:=.}/../../platforms/small_platform_fatpipe.xml deployment.xml mpi_actions_shared.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > WARNING: THIS BINARY IS KINDA DEPRECATED
 > This example is still relevant if you want to learn about MSG-based trace replay, but if you want to simulate MPI-like traces, you should use the newer version that is in the examples/smpi/replay directory instead.
 > [  0.000000] (1:p0@Tremblay) p0 comm_size 3 0.000000
+> [  1.037020] (1:p0@Tremblay) p0 bcast 5e8 1.037020
 > [  1.037020] (2:p1@Ruby) p1 bcast 5e8 1.037020
 > [  1.037020] (3:p2@Perl) p2 bcast 5e8 1.037020
-> [  1.037020] (1:p0@Tremblay) p0 bcast 5e8 1.037020
-> [  3.075860] (2:p1@Ruby) p1 compute 2e8 2.038840
-> [  6.134119] (1:p0@Tremblay) p0 compute 5e8 5.097100
-> [  6.134119] (3:p2@Perl) p2 compute 5e8 5.097100
-> [  7.171139] (2:p1@Ruby) p1 bcast 5e8 4.095279
-> [  7.171139] (3:p2@Perl) p2 bcast 5e8 1.037020
-> [  7.171139] (1:p0@Tremblay) p0 bcast 5e8 1.037020
-> [  9.209979] (2:p1@Ruby) p1 compute 2e8 2.038840
-> [ 12.268239] (1:p0@Tremblay) p0 compute 5e8 5.097100
-> [ 12.268239] (3:p2@Perl) p2 compute 5e8 5.097100
-> [ 13.305258] (2:p1@Ruby) p1 reduce 5e8 5e8 4.095279
-> [ 13.305258] (3:p2@Perl) p2 reduce 5e8 5e8 1.037020
-> [ 18.402358] (1:p0@Tremblay) p0 reduce 5e8 5e8 6.134119
-> [ 18.402358] (0:maestro@) Simulation time 18.4024
-
-! output sort 19
-$ ${bindir:=.}/actions --log=actions.thres=verbose ${srcdir:=.}/../../platforms/small_platform_fatpipe.xml deployment.xml actions_reduce.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> WARNING: THIS BINARY IS KINDA DEPRECATED
-> This example is still relevant if you want to learn about MSG-based trace replay, but if you want to simulate MPI-like traces, you should use the newer version that is in the examples/smpi/replay directory instead.
-> [  0.000000] (1:p0@Tremblay) p0 comm_size 3 0.000000
-> [  1.037020] (2:p1@Ruby) p1 reduce 5e8 5e8 1.037020
-> [  1.037020] (3:p2@Perl) p2 reduce 5e8 5e8 1.037020
-> [  6.134119] (2:p1@Ruby) p1 compute 5e8 5.097100
-> [  6.134119] (1:p0@Tremblay) p0 reduce 5e8 5e8 6.134119
-> [  6.134119] (3:p2@Perl) p2 compute 5e8 5.097100
-> [ 11.231219] (1:p0@Tremblay) p0 compute 5e8 5.097100
-> [ 11.231219] (0:maestro@) Simulation time 11.2312
-
-! output sort 19
-$ ${bindir:=.}/actions --log=actions.thres=verbose ${srcdir:=.}/../../platforms/small_platform_fatpipe.xml deployment.xml actions_with_isend.txt "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> WARNING: THIS BINARY IS KINDA DEPRECATED
-> This example is still relevant if you want to learn about MSG-based trace replay, but if you want to simulate MPI-like traces, you should use the newer version that is in the examples/smpi/replay directory instead.
-> [  0.000000] (2:p1@Ruby) p1 Irecv p0 0.000000
-> [  0.000000] (3:p2@Perl) p2 Irecv p1 0.000000
-> [  2.072088] (1:p0@Tremblay) p0 send p1 1e9 2.072088
-> [  5.097100] (3:p2@Perl) p2 compute 5e8 5.097100
-> [ 10.194200] (2:p1@Ruby) p1 compute 1e9 10.194200
-> [ 10.194200] (2:p1@Ruby) p1 wait 0.000000
-> [ 12.266287] (1:p0@Tremblay) p0 compute 1e9 10.194200
-> [ 12.266287] (3:p2@Perl) p2 wait 7.169187
-> [ 12.266287] (2:p1@Ruby) p1 send p2 1e9 2.072088
-> [ 12.266287] (3:p2@Perl) p2 Isend p0 1e9 0.000000
-> [ 14.338375] (1:p0@Tremblay) p0 recv p2 2.072088
-> [ 17.363387] (3:p2@Perl) p2 compute 5e8 5.097100
-> [ 17.363387] (0:maestro@) Simulation time 17.3634
+> [  1.082894] (1:p0@Tremblay) p0 compute 4.5E6 0.045874
+> [  1.123670] (1:p0@Tremblay) p0 compute 4E6 0.040777
+> [  1.149156] (1:p0@Tremblay) p0 compute 2.5E6 0.025485
+> [  1.149156] (2:p1@Ruby) p1 Irecv p0 0.000000
+> [  1.149156] (3:p2@Perl) p2 Irecv p1 0.000000
+> [  3.221244] (1:p0@Tremblay) p0 send p1 1e9 2.072088
+> [  6.246256] (3:p2@Perl) p2 compute 5e8 5.097100
+> [ 11.343355] (2:p1@Ruby) p1 compute 1e9 10.194200
+> [ 11.343355] (2:p1@Ruby) p1 wait 0.000000
+> [ 11.343355] (2:p1@Ruby) p1 Isend p2 1e9 0.000000
+> [ 13.415443] (1:p0@Tremblay) p0 compute 1e9 10.194200
+> [ 13.415443] (3:p2@Perl) p2 wait 7.169187
+> [ 14.452463] (2:p1@Ruby) p1 reduce 5e8 5e8 1.037020
+> [ 14.452463] (3:p2@Perl) p2 reduce 5e8 5e8 1.037020
+> [ 19.549562] (1:p0@Tremblay) p0 reduce 5e8 5e8 6.134119
+> [ 19.549562] (2:p1@Ruby) p1 compute 5e8 5.097100
+> [ 19.549562] (3:p2@Perl) p2 compute 5e8 5.097100
+> [ 24.646662] (1:p0@Tremblay) p0 compute 5e8 5.097100
+> [ 31.817801] (0:maestro@) Simulation time 31.8178
+> [ 31.817801] (1:p0@Tremblay) p0 allReduce 5e8 5e8 7.171139
+> [ 31.817801] (2:p1@Ruby) p1 allReduce 5e8 5e8 7.171139
+> [ 31.817801] (3:p2@Perl) p2 allReduce 5e8 5e8 7.171139
diff --git a/examples/msg/actions/actions.txt b/examples/msg/actions/actions.txt
deleted file mode 100644 (file)
index 402a0e5..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-# sample action file
-tutu send toto 1e10
-toto recv tutu
-tutu sleep 12
-toto compute 12
diff --git a/examples/msg/actions/actions_allReduce.txt b/examples/msg/actions/actions_allReduce.txt
deleted file mode 100644 (file)
index 7dbc0b7..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-p0 init
-p1 init
-p2 init
-
-p0 comm_size 3
-p0 allReduce 5e8 5e8
-p1 allReduce 5e8 5e8
-p2 allReduce 5e8 5e8
-
-p0 compute 5e8
-p1 compute 5e8
-p2 compute 5e8
-
-p0 finalize
-p1 finalize
-p2 finalize
diff --git a/examples/msg/actions/actions_barrier.txt b/examples/msg/actions/actions_barrier.txt
deleted file mode 100644 (file)
index f13e229..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-p0 init
-p1 init
-p2 init
-
-p0 comm_size 3
-p0 send p1 1E7
-p0 barrier
-p0 compute 4.5E6
-
-p1 comm_size 3
-p1 recv p0
-p1 barrier
-p1 compute 4E6
-
-p2 comm_size 3
-p2 barrier
-p2 compute 4E6
-
-p0 finalize
-p1 finalize
-p2 finalize
diff --git a/examples/msg/actions/actions_bcast.txt b/examples/msg/actions/actions_bcast.txt
deleted file mode 100644 (file)
index efcf6f6..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-p0 init
-p1 init
-p2 init
-
-p0 comm_size 3
-p0 bcast 5e8
-p1 bcast 5e8
-p2 bcast 5e8
-
-p0 compute 5e8
-p1 compute 2e8
-p2 compute 5e8
-
-p0 bcast 5e8
-p1 bcast 5e8
-p2 bcast 5e8
-
-p0 compute 5e8
-p1 compute 2e8
-p2 compute 5e8
-
-p0 reduce 5e8 5e8
-p1 reduce 5e8 5e8
-p2 reduce 5e8 5e8
-
-p0 finalize
-p1 finalize
-p2 finalize
diff --git a/examples/msg/actions/actions_reduce.txt b/examples/msg/actions/actions_reduce.txt
deleted file mode 100644 (file)
index c2ac680..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-p0 init
-p1 init
-p2 init
-
-p0 comm_size 3
-p0 reduce 5e8 5e8
-p1 reduce 5e8 5e8
-p2 reduce 5e8 5e8
-
-p0 compute 5e8
-p1 compute 5e8
-p2 compute 5e8
-
-p0 finalize
-p1 finalize
-p2 finalize
diff --git a/examples/msg/actions/actions_with_isend.txt b/examples/msg/actions/actions_with_isend.txt
deleted file mode 100644 (file)
index f486fcb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# sample action file
-p0 init
-p1 init
-p2 init
-
-p0 send p1 1e9
-p0 compute 1e9
-p0 recv p2
-
-p1 Irecv p0
-p1 compute 1e9
-p1 wait
-p1 send p2 1e9
-
-p2 Irecv p1
-p2 compute 5e8
-p2 wait
-p2 Isend p0 1e9
-p2 compute 5e8
-
-p0 finalize
-p1 finalize
-p2 finalize
-
index f028595..c73bd33 100644 (file)
@@ -6,9 +6,9 @@
          ./actions homogeneous_3_hosts.xml deployment_split.xml  -->
 
   <process host="Tremblay" function="p0">
-    <argument value="actions_split_p0.txt"/>
+    <argument value="mpi_actions_split_p0.txt"/>
   </process>
   <process host="Ruby" function="p1">
-    <argument value="actions_split_p1.txt"/>
+    <argument value="mpi_actions_split_p1.txt"/>
   </process>
 </platform>
diff --git a/examples/msg/actions/mpi_actions_shared.txt b/examples/msg/actions/mpi_actions_shared.txt
new file mode 100644 (file)
index 0000000..088c23b
--- /dev/null
@@ -0,0 +1,54 @@
+# sample action file
+p0 init
+p1 init
+p2 init
+
+p0 comm_size 3
+p0 bcast 5e8
+p1 bcast 5e8
+p2 bcast 5e8
+
+p0 compute 4.5E6
+p0 compute 4E6
+p0 compute 2.5E6
+
+p0 barrier
+p1 barrier
+p2 barrier
+
+p0 send p1 1e9
+p0 compute 1e9
+
+p1 Irecv p0
+p1 compute 1e9
+p1 wait
+p1 Isend p2 1e9
+
+p2 Irecv p1
+p2 compute 5e8
+p2 wait
+
+p0 barrier
+p1 barrier
+p2 barrier
+
+p0 reduce 5e8 5e8
+p1 reduce 5e8 5e8
+p2 reduce 5e8 5e8
+
+p0 compute 5e8
+p1 compute 5e8
+p2 compute 5e8
+
+p0 barrier
+p1 barrier
+p2 barrier
+
+p0 allReduce 5e8 5e8
+p1 allReduce 5e8 5e8
+p2 allReduce 5e8 5e8
+
+p0 finalize
+p1 finalize
+p2 finalize
+
index ef1d6ec..322e8dc 100644 (file)
@@ -1,9 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(bittorrent "bittorrent.c" "messages.c" "peer.c" "tracker.c" "connection.c")
-
-### Add definitions for compile
-target_link_libraries(bittorrent simgrid )
+add_executable       (bittorrent bittorrent.c messages.c peer.c tracker.c connection.c)
+target_link_libraries(bittorrent simgrid)
 
 set(tesh_files
   ${tesh_files}
index 072a61f..773c0cb 100644 (file)
@@ -1,9 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(chainsend chainsend.c iterator.c common.c messages.c broadcaster.c peer.c)
-
-### Add definitions for compile
-target_link_libraries(chainsend simgrid )
+add_executable       (chainsend chainsend.c iterator.c common.c messages.c broadcaster.c peer.c)
+target_link_libraries(chainsend simgrid)
 
 set(tesh_files
   ${tesh_files}
index 15c131e..a931a21 100644 (file)
@@ -1,9 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(chord chord.c)
-
-### Add definitions for compile
-target_link_libraries(chord simgrid )
+add_executable       (chord chord.c)
+target_link_libraries(chord simgrid)
 
 set(tesh_files
   ${tesh_files}
@@ -22,5 +18,4 @@ set(examples_src
 set(bin_files
   ${bin_files}
   ${CMAKE_CURRENT_SOURCE_DIR}/generate.py
-  ${CMAKE_CURRENT_SOURCE_DIR}/run_chord
   PARENT_SCOPE)
diff --git a/examples/msg/chord/run_chord b/examples/msg/chord/run_chord
deleted file mode 100755 (executable)
index 8c3049b..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/bin/bash
-
-# This script runs Chord with the specified number of nodes.
-# Usage: ./run_chord nb_nodes
-# The platform file is chosen as the smallest platform of the files
-# examples/platforms/cluster_with_*_hosts.xml that contains enough nodes.
-
-# check arguments number
-if [ $# != 1 ]; then
-  echo "Usage: ./run_chord nb_nodes"
-  exit 1
-fi
-
-# pick an appropriate platform file
-if [ $1 -le 100 ]; then
-  platform=100
-else
-  if [ $1 -le 1000 ]; then
-    platform=1000
-  else
-    if [ $1 -le 10000 ]; then
-      platform=10000
-    else
-      if [ $1 -le 100000 ]; then
-       platform=100000
-      else
-       if [ $1 -le 300000 ]; then
-         platform=300000
-       else
-         echo "Cannot find a platform file large enough."
-         exit 2
-       fi
-      fi
-    fi
-  fi
-fi
-
-# set up the deployment file
-nb_lines=$[ $1 + 3]
-head -n $nb_lines chord300000.xml > tmp_depl.xml
-echo "</platform>" >> tmp_depl.xml
-
-# run Chord
-./chord -nb_bits=24 -timeout=50 "../../platforms/cluster_with_${platform}_hosts.xml" tmp_depl.xml
-
-# cleanup
-# rm tmp_depl.xml
-
index f32d0d9..0ff9719 100644 (file)
@@ -1,21 +1,17 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(master_worker_vm "master_worker_vm.c")
-add_executable(simple_vm "simple_vm.c")
-add_executable(migrate_vm "migrate_vm.c")
-add_executable(bound "bound.c")
-add_executable(scale "scale.c")
-add_executable(multicore "multicore.c")
-add_executable(two_tasks_vm "two_tasks_vm.c")
-
-### Add definitions for compile
+add_executable       (master_worker_vm master_worker_vm.c)
 target_link_libraries(master_worker_vm simgrid)
-target_link_libraries(simple_vm simgrid)
-target_link_libraries(migrate_vm simgrid)
-target_link_libraries(bound simgrid)
-target_link_libraries(scale simgrid)
-target_link_libraries(multicore simgrid)
-target_link_libraries(two_tasks_vm simgrid)
+add_executable       (simple_vm        simple_vm.c)
+target_link_libraries(simple_vm        simgrid)
+add_executable       (migrate_vm       migrate_vm.c)
+target_link_libraries(migrate_vm       simgrid)
+add_executable       (bound            bound.c)
+target_link_libraries(bound            simgrid)
+add_executable       (scale            scale.c)
+target_link_libraries(scale            simgrid)
+add_executable       (multicore        multicore.c)
+target_link_libraries(multicore        simgrid)
+add_executable       (two_tasks_vm     two_tasks_vm.c)
+target_link_libraries(two_tasks_vm     simgrid)
 
 set(tesh_files
   ${tesh_files}
index 687973b..5869c14 100644 (file)
@@ -1,8 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(energy_consumption energy_consumption.c)
-
-### Add definitions for compile
+add_executable       (energy_consumption energy_consumption.c)
 target_link_libraries(energy_consumption simgrid)
 
 set(tesh_files
index 73c7813..3832f22 100644 (file)
@@ -1,9 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(onoff onoff.c)
-
-### Add definitions for compile
-target_link_libraries(onoff simgrid )
+add_executable       (onoff onoff.c)
+target_link_libraries(onoff simgrid)
 
 set(tesh_files
   ${tesh_files}
index 80e3ab8..98706ad 100644 (file)
@@ -1,9 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(pstate pstate.c)
-
-### Add definitions for compile
-target_link_libraries(pstate simgrid )
+add_executable       (pstate pstate.c)
+target_link_libraries(pstate simgrid)
 
 set(tesh_files
   ${tesh_files}
index f0451c9..982bc54 100644 (file)
@@ -1,8 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(energy_vm energy_vm.c)
-
-### Add definitions for compile
+add_executable       (energy_vm energy_vm.c)
 target_link_libraries(energy_vm simgrid)
 
 set(tesh_files
index ba40be2..229288e 100644 (file)
@@ -1,8 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(exception exception.c)
-
-### Add definitions for compile
+add_executable       (exception exception.c)
 target_link_libraries(exception simgrid)
 
 set(tesh_files
index 18d5c10..3a11d2e 100644 (file)
@@ -4,8 +4,8 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include "xbt/log.h"
 #include "simgrid/msg.h"
-#include "xbt.h"
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test_exception,
                              "Messages specific for this msg example");
index f5e9f77..eb137cf 100644 (file)
@@ -1,23 +1,7 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
+add_executable       (test_MSG_gpu_task_create test_MSG_gpu_task_create.c)
+target_link_libraries(test_MSG_gpu_task_create simgrid)
 
-add_executable(test_MSG_gpu_task_create "test_MSG_gpu_task_create.c")
-
-### Add definitions for compile
-target_link_libraries(test_MSG_gpu_task_create simgrid )
-
-set(tesh_files
-  ${tesh_files}
-  PARENT_SCOPE)
-set(xml_files
-  ${xml_files}
-  PARENT_SCOPE)
 set(examples_src
   ${examples_src}
   ${CMAKE_CURRENT_SOURCE_DIR}/test_MSG_gpu_task_create.c
   PARENT_SCOPE)
-set(bin_files
-  ${bin_files}
-  PARENT_SCOPE)
-set(txt_files
-  ${txt_files}
-  PARENT_SCOPE)
index e1f1c49..9f6fe78 100644 (file)
@@ -1,8 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(gtnets gtnets.c)
-
-### Add definitions for compile
+add_executable       (gtnets gtnets.c)
 target_link_libraries(gtnets simgrid)
 
 set(tesh_files
index af87b61..306390f 100644 (file)
@@ -1,12 +1,8 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(peer peer.c)
-target_link_libraries(peer simgrid)
-
-add_executable(peer2 peer2.c)
+add_executable       (peer  peer.c)
+target_link_libraries(peer  simgrid)
+add_executable       (peer2 peer2.c)
 target_link_libraries(peer2 simgrid)
-
-add_executable(peer3 peer3.c)
+add_executable       (peer3 peer3.c)
 target_link_libraries(peer3 simgrid)
 
 set(tesh_files
index 558580c..c21e18d 100644 (file)
@@ -1,22 +1,11 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(file file.c)
-add_executable(file_unlink file_unlink.c)
-add_executable(storage storage.c)
-add_executable(remote remote.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(file simgrid pthread)
-  target_link_libraries(file_unlink simgrid pthread)
-  target_link_libraries(remote simgrid pthread)
-  target_link_libraries(storage simgrid pthread)
-else()
-  target_link_libraries(file simgrid)
-  target_link_libraries(file_unlink simgrid)
-  target_link_libraries(remote simgrid)
-  target_link_libraries(storage simgrid)
-endif()
+add_executable       (file        file.c)
+target_link_libraries(file        simgrid)
+add_executable       (file_unlink file_unlink.c)
+target_link_libraries(file_unlink simgrid)
+add_executable       (storage     storage.c)
+target_link_libraries(storage     simgrid)
+add_executable       (remote      remote.c)
+target_link_libraries(remote      simgrid)
 
 set(tesh_files
   ${tesh_files}
index fd295b5..c7e8dcc 100644 (file)
@@ -1,8 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(kademlia "kademlia.c" "node.c" "routing_table.c" "task.c" "answer.c")
-### Add definitions for compile
-target_link_libraries(kademlia simgrid )
+add_executable       (kademlia kademlia.c node.c routing_table.c task.c answer.c)
+target_link_libraries(kademlia simgrid)
 
 set(tesh_files
   ${tesh_files}
index 8e54c3e..bd7a720 100644 (file)
@@ -1,16 +1,13 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(masterslave_failure "masterslave_failure.c")
-add_executable(masterslave_forwarder "masterslave_forwarder.c")
-add_executable(masterslave_mailbox "masterslave_mailbox.c")
-add_executable(masterslave_kill "masterslave_kill.c")
-add_executable(masterslave_arg "masterslave_arg.c")
-
+add_executable       (masterslave_failure   masterslave_failure.c)
+target_link_libraries(masterslave_failure   simgrid)
+add_executable       (masterslave_forwarder masterslave_forwarder.c)
 target_link_libraries(masterslave_forwarder simgrid )
-target_link_libraries(masterslave_failure simgrid )
-target_link_libraries(masterslave_mailbox simgrid )
-target_link_libraries(masterslave_kill simgrid )
-target_link_libraries(masterslave_arg simgrid )
+add_executable       (masterslave_mailbox   masterslave_mailbox.c)
+target_link_libraries(masterslave_mailbox   simgrid)
+add_executable       (masterslave_kill      masterslave_kill.c)
+target_link_libraries(masterslave_kill      simgrid)
+add_executable       (masterslave_arg       masterslave_arg.c)
+target_link_libraries(masterslave_arg       simgrid)
 
 set(tesh_files
   ${tesh_files}
index 4361496..c3b7268 100644 (file)
@@ -1,30 +1,26 @@
 if(HAVE_MC)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-  add_executable(centralized centralized_mutex.c)
-  add_executable(bugged1     bugged1.c)
-  add_executable(bugged2     bugged2.c)
-  add_executable(bugged3     bugged3.c)
-  add_executable(electric_fence   electric_fence.c)
-  add_executable(bugged1_liveness bugged1_liveness.c)
-  add_executable(bugged2_liveness bugged2_liveness.c)
-
-  target_link_libraries(centralized simgrid )
-  target_link_libraries(bugged1     simgrid )
-  target_link_libraries(bugged2     simgrid )
-  target_link_libraries(bugged3     simgrid )
-  target_link_libraries(electric_fence     simgrid )
-  target_link_libraries(bugged1_liveness     simgrid )
-  target_link_libraries(bugged2_liveness     simgrid )
+  add_executable       (centralized      centralized_mutex.c)
+  target_link_libraries(centralized      simgrid)
+  add_executable       (bugged1          bugged1.c)
+  target_link_libraries(bugged1          simgrid)
+  add_executable       (bugged2          bugged2.c)
+  target_link_libraries(bugged2          simgrid)
+  add_executable       (bugged3          bugged3.c)
+  target_link_libraries(bugged3          simgrid)
+  add_executable       (electric_fence   electric_fence.c)
+  target_link_libraries(electric_fence   simgrid)
+  add_executable       (bugged1_liveness bugged1_liveness.c)
+  target_link_libraries(bugged1_liveness simgrid)
+  add_executable       (bugged2_liveness bugged2_liveness.c)
+  target_link_libraries(bugged2_liveness simgrid)
 
   if(HAVE_C_STACK_CLEANER)
-    add_executable(bugged1_liveness_cleaner_on      bugged1_liveness.c )
-    add_executable(bugged1_liveness_cleaner_off     bugged1_liveness.c )
-
-    target_link_libraries(bugged1_liveness_cleaner_on      simgrid )
-    target_link_libraries(bugged1_liveness_cleaner_off     simgrid )
-
+    add_executable       (bugged1_liveness_cleaner_on  bugged1_liveness.c)
+    target_link_libraries(bugged1_liveness_cleaner_on  simgrid)
     set_target_properties(bugged1_liveness_cleaner_on  PROPERTIES COMPILE_FLAGS "-DGARBAGE_STACK -fstack-cleaner")
+    
+    add_executable       (bugged1_liveness_cleaner_off bugged1_liveness.c)
+    target_link_libraries(bugged1_liveness_cleaner_off simgrid)
     set_target_properties(bugged1_liveness_cleaner_off PROPERTIES COMPILE_FLAGS "-DGARBAGE_STACK -fno-stack-cleaner")
   endif()
 endif()
index ea96ff4..fbb9b8c 100644 (file)
@@ -1,7 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(migration migration.c)
-target_link_libraries(migration simgrid )
+add_executable       (migration migration.c)
+target_link_libraries(migration simgrid)
 
 set(tesh_files
   ${tesh_files}
index fd2349b..9765d82 100644 (file)
@@ -1,7 +1,6 @@
 if(HAVE_NS3)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-  add_executable(ns3 "ns3.c")
-  target_link_libraries(ns3 simgrid )
+  add_executable       (ns3 ns3.c)
+  target_link_libraries(ns3 simgrid)
 endif()
 
 set(tesh_files
index d993ee4..9928fd2 100644 (file)
@@ -1,7 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(parallel_task parallel_task.c)
-target_link_libraries(parallel_task simgrid )
+add_executable       (parallel_task parallel_task.c)
+target_link_libraries(parallel_task simgrid)
 
 set(tesh_files
   ${tesh_files}
index b071ef5..3bd6d38 100644 (file)
@@ -1,7 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(pastry pastry.c)
-target_link_libraries(pastry simgrid )
+add_executable       (pastry pastry.c)
+target_link_libraries(pastry simgrid)
 
 set(tesh_files
   ${tesh_files}
index c28e689..9159113 100644 (file)
@@ -1,16 +1,10 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(msg_pmm     msg_pmm.c)
-target_link_libraries(msg_pmm simgrid )
+add_executable       (msg_pmm msg_pmm.c)
+target_link_libraries(msg_pmm simgrid)
 
 set(tesh_files
   ${tesh_files}
   ${CMAKE_CURRENT_SOURCE_DIR}/pmm.tesh
   PARENT_SCOPE)
-set(xml_files
-  ${xml_files}
-  ${CMAKE_CURRENT_SOURCE_DIR}/pmm_9_deploy.xml
-  PARENT_SCOPE)
 set(examples_src
   ${examples_src}
   ${CMAKE_CURRENT_SOURCE_DIR}/msg_pmm.c
index f1e02aa..587742a 100644 (file)
@@ -9,22 +9,15 @@
 #include "simgrid/msg.h"
 #include "xbt/matrix.h"
 #include "xbt/log.h"
-
-// #define BENCH_THIS_CODE /* Will only work from within the source tree as we require xbt/xbt_os_time.h, that is not public yet) */
-#ifdef BENCH_THIS_CODE
 #include "xbt/xbt_os_time.h"
-#endif
 
 /** @addtogroup MSG_examples
  * 
- * - <b>pmm/msg_pmm.c</b>: Parallel Matrix Multiplication is a little
- *   application. This is something that most MPI developper have
- *   written during their class, here implemented using MSG instead
- *   of MPI. 
+ * - <b>pmm/msg_pmm.c</b>: Parallel Matrix Multiplication is a little application. This is something that most MPI
+ *   developers have written during their class, here implemented using MSG instead of MPI.
  */
 
-XBT_LOG_NEW_DEFAULT_CATEGORY(msg_pmm,
-                             "Messages specific for this msg example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(msg_pmm, "Messages specific for this msg example");
 
 /* This example should always be executed using a deployment of
  * GRID_SIZE * GRID_SIZE nodes. */
@@ -144,15 +137,12 @@ int node(int argc, char **argv)
     receive_results(results);
 
     /* First add our results */
-    xbt_matrix_copy_values(C, sC, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE,
-                           0, 0, 0, 0, NULL);
+    xbt_matrix_copy_values(C, sC, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE, 0, 0, 0, 0, NULL);
 
     /* Reconstruct the rest of the result matrix */
     for (node = 1; node < GRID_NUM_NODES; node++){
-      xbt_matrix_copy_values(C, results[node]->sC,
-                             NODE_MATRIX_SIZE, NODE_MATRIX_SIZE,
-                             NODE_MATRIX_SIZE * results[node]->row,
-                             NODE_MATRIX_SIZE * results[node]->col,
+      xbt_matrix_copy_values(C, results[node]->sC, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE,
+                             NODE_MATRIX_SIZE * results[node]->row, NODE_MATRIX_SIZE * results[node]->col,
                              0, 0, NULL);
       xbt_matrix_free(results[node]->sC);
       xbt_free(results[node]);
@@ -173,8 +163,7 @@ int node(int argc, char **argv)
     result = xbt_new0(s_result_t, 1);
     result->row = myjob->row;
     result->col = myjob->col;
-    result->sC =
-      xbt_matrix_new_sub(sC, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE, 0, 0, NULL);
+    result->sC = xbt_matrix_new_sub(sC, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE, 0, 0, NULL);
     task = MSG_task_create("result",100,100,result);
     MSG_task_send(task, "0");
   }
@@ -217,8 +206,7 @@ static node_job_t wait_job(int selfid)
   msg_error_t err;
   snprintf(self_mbox, MAILBOX_NAME_SIZE - 1, "%d", selfid);
   err = MSG_task_receive(&task, self_mbox);
-  xbt_assert(err == MSG_OK, "Error while receiving from %s (%d)",
-             self_mbox, (int)err);
+  xbt_assert(err == MSG_OK, "Error while receiving from %s (%d)", self_mbox, (int)err);
   job = (node_job_t)MSG_task_get_data(task);
   MSG_task_destroy(task);
   XBT_VERB("Got Job (%d,%d)", job->row, job->col);
@@ -240,7 +228,6 @@ static void broadcast_matrix(xbt_matrix_t M, int num_nodes, int *nodes)
     MSG_task_dsend(task, node_mbox, task_cleanup);
     XBT_DEBUG("sub-matrix sent to %s", node_mbox);
   }
-
 }
 
 static void get_sub_matrix(xbt_matrix_t *sM, int selfid)
@@ -266,9 +253,6 @@ static void task_cleanup(void *arg){
   MSG_task_destroy(task);
 }
 
-/**
- * \brief Main function.
- */
 int main(int argc, char *argv[])
 {
 #ifdef BENCH_THIS_CODE
@@ -277,14 +261,18 @@ int main(int argc, char *argv[])
 
   MSG_init(&argc, argv);
 
-  char **options = &argv[1];
-  const char* platform_file = options[0];
-  const char* application_file = options[1];
-
-  MSG_create_environment(platform_file);
+  MSG_create_environment(argv[1]);
 
   MSG_function_register("node", node);
-  MSG_launch_application(application_file);
+  for(int i = 0 ; i< 9; i++) {
+    char *hostname = bprintf("node-%d.acme.org", i);
+    char **argvF = xbt_new(char *, 3);
+    argvF[0] = xbt_strdup("node");
+    argvF[1] = bprintf("%d", i);
+    argvF[2] = NULL;
+    MSG_process_create_with_arguments("node", node, NULL, MSG_host_by_name(hostname), 2, argvF);
+    xbt_free(hostname);
+  }
 
 #ifdef BENCH_THIS_CODE
   xbt_os_cputimer_start(timer);
@@ -326,13 +314,9 @@ static void create_jobs(xbt_matrix_t A, xbt_matrix_t B, node_job_t *jobs)
 
     /* Assign a sub matrix of A and B to the job */
     jobs[node]->A =
-      xbt_matrix_new_sub(A, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE,
-                         NODE_MATRIX_SIZE * row, NODE_MATRIX_SIZE * col,
-                         NULL);
+      xbt_matrix_new_sub(A, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE * row, NODE_MATRIX_SIZE * col, NULL);
     jobs[node]->B =
-      xbt_matrix_new_sub(B, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE,
-                         NODE_MATRIX_SIZE * row, NODE_MATRIX_SIZE * col,
-                         NULL);
+      xbt_matrix_new_sub(B, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE * row, NODE_MATRIX_SIZE * col, NULL);
 
     if (++col >= GRID_SIZE){
       col = 0;
index 44c61f4..bb6abf7 100644 (file)
@@ -3,7 +3,7 @@
 p Testing the Parallel Matrix Multiplication 
 
 ! timeout 120
-$ ./pmm/msg_pmm --log=msg_pmm.thres:verbose --log=no_loc ${srcdir:=.}/../platforms/cluster.xml ${srcdir:=.}/pmm/pmm_9_deploy.xml
+$ ./pmm/msg_pmm --log=msg_pmm.thres:verbose --log=no_loc ${srcdir:=.}/../platforms/cluster.xml
 > [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 0
 > [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 1
 > [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 2
diff --git a/examples/msg/pmm/pmm_9_deploy.xml b/examples/msg/pmm/pmm_9_deploy.xml
deleted file mode 100644 (file)
index 140d9f5..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <process host="node-0.acme.org" function="node"><argument value="0"/></process>
-  <process host="node-1.acme.org" function="node"><argument value="1"/></process>
-  <process host="node-2.acme.org" function="node"><argument value="2"/></process>
-  <process host="node-3.acme.org" function="node"><argument value="3"/></process>
-  <process host="node-4.acme.org" function="node"><argument value="4"/></process>
-  <process host="node-5.acme.org" function="node"><argument value="5"/></process>
-  <process host="node-6.acme.org" function="node"><argument value="6"/></process>
-  <process host="node-7.acme.org" function="node"><argument value="7"/></process>
-  <process host="node-8.acme.org" function="node"><argument value="8"/></process>
-</platform>
index 298eeef..a1e0d3d 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(priority priority.c)
+add_executable       (priority priority.c)
 target_link_libraries(priority simgrid)
 
 set(tesh_files
index 1c70616..7a047e1 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(msg_prop msg_prop.c)
+add_executable       (msg_prop msg_prop.c)
 target_link_libraries(msg_prop simgrid)
 
 set(tesh_files
index 15d2ee0..8e05705 100644 (file)
@@ -4,37 +4,18 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "simgrid/msg.h"            /* Yeah! If you want to use msg, you need to include simgrid/msg.h */
-#include "xbt/sysdep.h"         /* calloc, printf */
-
-/* Create a log channel to have nice outputs. */
-#include "xbt/log.h"
-#include "xbt/asserts.h"
-
-#include <stdio.h>
-#include <stdlib.h>
+#include "simgrid/msg.h"
 
 /** @addtogroup MSG_examples
  * 
- * - <b>properties/msg_prop.c</b> Attaching arbitrary informations to
- *   host, processes and such, and retrieving them with @ref
- *   MSG_host_get_properties, @ref MSG_host_get_property_value, @ref
- *   MSG_process_get_properties and @ref
- *   MSG_process_get_property_value. Also make sure to read the
- *   platform and deployment XML files to see how to declare these
- *   data.
- * 
+ * - <b>properties/msg_prop.c</b> Attaching arbitrary informations to host, processes and such, and retrieving them
+ *   with @ref MSG_host_get_properties, @ref MSG_host_get_property_value, @ref MSG_process_get_properties and
+ *   @ref MSG_process_get_property_value. Also make sure to read the platform and deployment XML files to see how to
+ *   declare these data.
  */
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(test, "Property test");
 
-int alice(int argc, char *argv[]);
-int bob(int argc, char *argv[]);
-int carole(int argc, char *argv[]);
-int david(int argc, char *argv[]);
-msg_error_t test_all(const char *platform_file,
-                     const char *application_file);
-
 static void test_host(const char*hostname) 
 {
   msg_host_t thehost = MSG_host_by_name(hostname);
@@ -47,7 +28,7 @@ static void test_host(const char*hostname)
 
   XBT_INFO("== Print the properties of the host '%s'", hostname);
   xbt_dict_foreach(props, cursor, key, data)
-      XBT_INFO("  Host property: '%s' -> '%s'", key, data);
+    XBT_INFO("  Host property: '%s' -> '%s'", key, data);
 
   XBT_INFO("== Try to get a host property that does not exist");
   value = MSG_host_get_property_value(thehost, noexist);
@@ -55,11 +36,8 @@ static void test_host(const char*hostname)
 
   XBT_INFO("== Try to get a host property that does exist");
   value = MSG_host_get_property_value(thehost, exist);
-  xbt_assert(value, "\tProperty %s is undefined (where it should)",
-              exist);
-  xbt_assert(!strcmp(value, "180"),
-              "\tValue of property %s is defined to %s (where it should be 180)",
-              exist, value);
+  xbt_assert(value, "\tProperty %s is undefined (where it should)", exist);
+  xbt_assert(!strcmp(value, "180"), "\tValue of property %s is defined to %s (where it should be 180)", exist, value);
   XBT_INFO("   Property: %s old value: %s", exist, value);
 
   XBT_INFO("== Trying to modify a host property");
@@ -68,31 +46,31 @@ static void test_host(const char*hostname)
   /* Test if we have changed the value */
   value = MSG_host_get_property_value(thehost, exist);
   xbt_assert(value, "Property %s is undefined (where it should)", exist);
-  xbt_assert(!strcmp(value, "250"),
-              "Value of property %s is defined to %s (where it should be 250)",
-              exist, value);
+  xbt_assert(!strcmp(value, "250"), "Value of property %s is defined to %s (where it should be 250)", exist, value);
   XBT_INFO("   Property: %s old value: %s", exist, value);
 
   /* Restore the value for the next test */
   MSG_host_set_property_value(thehost, exist, xbt_strdup("180"), xbt_free_f);
 }
 
-int alice(int argc, char *argv[]) { /* Dump what we have on the current host */
+static int alice(int argc, char *argv[]) { /* Dump what we have on the current host */
   test_host("host1");
   return 0;
 }
-int carole(int argc, char *argv[]) {/* Dump what we have on a remote host */
+
+static int carole(int argc, char *argv[]) {/* Dump what we have on a remote host */
   MSG_process_sleep(1); // Wait for alice to be done with its experiment
   test_host("host1");
   return 0;
 }
-int david(int argc, char *argv[]) {/* Dump what we have on a remote host */
+
+static int david(int argc, char *argv[]) {/* Dump what we have on a remote host */
   MSG_process_sleep(2); // Wait for alice and carole to be done with its experiment
   test_host("node-0.acme.org");
   return 0;
 }
 
-int bob(int argc, char *argv[])
+static int bob(int argc, char *argv[])
 {
   /* Get the property list of current bob process */
   xbt_dict_t props = MSG_process_get_properties(MSG_process_self());
@@ -103,7 +81,7 @@ int bob(int argc, char *argv[])
 
   XBT_INFO("== Print the properties of the process");
   xbt_dict_foreach(props, cursor, key, data)
-      XBT_INFO("   Process property: %s -> %s", key, data);
+    XBT_INFO("   Process property: %s -> %s", key, data);
 
   XBT_INFO("== Try to get a process property that does not exist");
 
@@ -113,54 +91,37 @@ int bob(int argc, char *argv[])
   return 0;
 }
 
-/** Test function */
-msg_error_t test_all(const char *platform_file,
-                     const char *application_file)
+int main(int argc, char *argv[])
 {
-  int host_number;
+  msg_error_t res = MSG_OK;
   unsigned int i;
   xbt_dynar_t hosts;
   msg_host_t host;
-  msg_error_t ret;
+
+  MSG_init(&argc, argv);
+  xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
+             "\tExample: %s msg_platform.xml msg_deployment.xml\n", argv[0], argv[0]);
 
   MSG_function_register("alice", alice);
   MSG_function_register("bob", bob);
   MSG_function_register("carole", carole);
   MSG_function_register("david", david);
 
-  MSG_create_environment(platform_file);
+  MSG_create_environment(argv[1]);
 
-  host_number = MSG_get_host_number();
-  XBT_INFO("There are %d hosts in the environment", host_number);
+  XBT_INFO("There are %d hosts in the environment", MSG_get_host_number());
 
   hosts = MSG_hosts_as_dynar();
 
   xbt_dynar_foreach(hosts, i, host){
-    XBT_INFO("Host '%s' runs at %.0f flops/s",MSG_host_get_name(host),
-       MSG_get_host_speed(host));
+    XBT_INFO("Host '%s' runs at %.0f flops/s",MSG_host_get_name(host), MSG_get_host_speed(host));
   }
 
-  MSG_launch_application(application_file);
+  MSG_launch_application(argv[2]);
 
-  ret = MSG_main();
+  res = MSG_main();
 
   xbt_dynar_free(&hosts);
 
-  return ret;
-}                               /* end_of_test_all */
-
-
-/** Main function */
-int main(int argc, char *argv[])
-{
-  msg_error_t res = MSG_OK;
-
-  MSG_init(&argc, argv);
-  xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
-           "\tExample: %s msg_platform.xml msg_deployment.xml\n", 
-           argv[0], argv[0]);
-   res = test_all(argv[1], argv[2]);
-
-  return res != MSG_OK;
+  return res!=MSG_OK;
 }
index fd337d8..17c4629 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(synchro synchro.c)
+add_executable       (synchro synchro.c)
 target_link_libraries(synchro simgrid)
 
 set(tesh_files
index 2f225fc..d9597cc 100644 (file)
@@ -1,11 +1,7 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(sendrecv sendrecv.c)
-add_executable(sendrecv_main sendrecv_main.c)
-
-### Add definitions for compile
-target_link_libraries(sendrecv simgrid )
-target_link_libraries(sendrecv_main simgrid )
+add_executable       (sendrecv      sendrecv.c)
+target_link_libraries(sendrecv      simgrid)
+add_executable       (sendrecv_main sendrecv_main.c)
+target_link_libraries(sendrecv_main simgrid)
 
 set(tesh_files
   ${tesh_files}
index bae4251..37d3069 100644 (file)
@@ -1,7 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(sk_time "sk_time.c")
-target_link_libraries(sk_time simgrid )
+add_executable       (sk_time sk_time.c)
+target_link_libraries(sk_time simgrid)
 
 set(tesh_files
   ${tesh_files}
index 8442325..820cc7e 100644 (file)
@@ -4,13 +4,9 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "simgrid/msg.h"        /* Yeah! If you want to use msg, you need to include simgrid/msg.h */
-#include "xbt/sysdep.h"         /* calloc */
+#include "simgrid/msg.h"
 
-/* Create a log channel to have nice outputs. */
-#include "xbt/log.h"
-XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,
-                             "Messages specific for this msg example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example");
 
 static int my_onexit(void* ignored1, void *ignored2) {
   XBT_INFO("Exiting now (done sleeping or got killed).");
@@ -27,34 +23,19 @@ static int sleeper(int argc, char *argv[])
   return 0;
 }
 
-/** Test function */
-static msg_error_t test_all(const char *platform_file,
-                            const char *application_file)
+int main(int argc, char *argv[])
 {
   msg_error_t res = MSG_OK;
 
-  MSG_create_environment(platform_file);
+  MSG_init(&argc, argv);
+  xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
+             "\tExample: %s msg_platform.xml msg_deployment.xml\n", argv[0], argv[0]);
+
+  MSG_create_environment(argv[1]);
   MSG_function_register("sleeper", sleeper);
-  MSG_launch_application(application_file);
+  MSG_launch_application(argv[2]);
 
   res = MSG_main();
-
   XBT_INFO("Simulation time %g", MSG_get_clock());
-  return res;
-}                               /* end_of_test_all */
-
-
-/** Main function */
-int main(int argc, char *argv[])
-{
-  msg_error_t res = MSG_OK;
-
-  MSG_init(&argc, argv);
-   xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
-           "\tExample: %s msg_platform.xml msg_deployment.xml\n", 
-           argv[0], argv[0]);
-  
-  test_all(argv[1], argv[2]);
-
   return res != MSG_OK;
 }
index 9126d38..f34c90a 100644 (file)
@@ -1,16 +1,10 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(suspend suspend.c)
-target_link_libraries(suspend simgrid )
+add_executable       (suspend suspend.c)
+target_link_libraries(suspend simgrid)
 
 set(tesh_files
   ${tesh_files}
   ${CMAKE_CURRENT_SOURCE_DIR}/suspend.tesh
   PARENT_SCOPE)
-set(xml_files
-  ${xml_files}
-  ${CMAKE_CURRENT_SOURCE_DIR}/deployment_suspend.xml
-  PARENT_SCOPE)
 set(examples_src
   ${examples_src}
   ${CMAKE_CURRENT_SOURCE_DIR}/suspend.c
diff --git a/examples/msg/suspend/deployment_suspend.xml b/examples/msg/suspend/deployment_suspend.xml
deleted file mode 100644 (file)
index 07fc567..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <process host="Jacquelin" function="dream_master"/>
-</platform>
index a36254a..13db39f 100644 (file)
@@ -4,23 +4,18 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "simgrid/msg.h"            /* Yeah! If you want to use msg, you need to include simgrid/msg.h */
-#include "xbt/sysdep.h"         /* calloc */
+#include "simgrid/msg.h"
 
-/* Create a log channel to have nice outputs. */
-#include "xbt/log.h"
-XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test,
-                             "Messages specific for this msg example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, "Messages specific for this msg example");
 
 #define SLEEP(duration)                                 \
   if (MSG_process_sleep(duration) != MSG_OK)            \
-    xbt_die("What's going on??? I failed to sleep!");   \
-  else                                                  \
-    (void)0
+    xbt_die("What's going on??? I failed to sleep!");
 
 /** @addtogroup MSG_examples
  * 
- * - <b>suspend/suspend.c</b>: Demonstrates how to suspend and resume processes using @ref MSG_process_suspend and @ref MSG_process_resume.
+ * - <b>suspend/suspend.c</b>: Demonstrates how to suspend and resume processes using
+ *   @ref MSG_process_suspend and @ref MSG_process_resume.
  */
 
 /** Lazy guy function. This process suspends itself asap.  */
@@ -42,8 +37,7 @@ static int lazy_guy(int argc, char *argv[])
   return 0;
 }                               /* end_of_lazy_guy */
 
-/** Dream master function. This process creates a lazy_guy process and
-    resumes it 10 seconds later. */
+/** Dream master function. This process creates a lazy_guy process and resumes it 10 seconds later. */
 static int dream_master(int argc, char *argv[])
 {
   msg_process_t lazy = NULL;
@@ -73,39 +67,20 @@ static int dream_master(int argc, char *argv[])
 
   XBT_INFO("OK, goodbye now.");
   return 0;
-}                               /* end_of_dram_master */
+}                               /* end_of_dream_master */
 
-/** Test function */
-static msg_error_t test_all(const char *platform_file,
-                            const char *application_file)
-{
-  msg_error_t res = MSG_OK;
-
-  {                             /*  Simulation setting */
-    MSG_create_environment(platform_file);
-  }
-  {                             /*   Application deployment */
-    MSG_function_register("dream_master", dream_master);
-    MSG_launch_application(application_file);
-  }
-  res = MSG_main();
-
-  XBT_INFO("Simulation time %g", MSG_get_clock());
-  return res;
-}                               /* end_of_test_all */
-
-
-/** Main function */
 int main(int argc, char *argv[])
 {
   msg_error_t res = MSG_OK;
 
   MSG_init(&argc, argv);
-  xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
-            "\tExample: %s msg_platform.xml msg_deployment_suspend.xml\n", 
-            argv[0], argv[0]);
+  xbt_assert(argc > 1, "Usage: %s platform_file\n\tExample: %s msg_platform.xml\n", argv[0], argv[0]);
 
-  test_all(argv[1], argv[2]);
+  MSG_create_environment(argv[1]);
+  MSG_function_register("dream_master", dream_master);
+  MSG_process_create("dream_master", dream_master, NULL, xbt_dynar_getfirst_as(MSG_hosts_as_dynar(), msg_host_t));
+  res = MSG_main();
 
+  XBT_INFO("Simulation time %g", MSG_get_clock());
   return res != MSG_OK;
 }
index 22766aa..72b8178 100644 (file)
@@ -3,7 +3,7 @@
 p Testing the suspend/resume feature of MSG
 
 ! output sort 19
-$ $SG_TEST_EXENV suspend/suspend ${srcdir:=.}/../platforms/platform.xml ${srcdir:=.}/suspend/deployment_suspend.xml  "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ $SG_TEST_EXENV suspend/suspend ${srcdir:=.}/../platforms/platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (1:dream_master@Jacquelin) Let's create a lazy guy.
 > [  0.000000] (1:dream_master@Jacquelin) Let's wait a little bit...
 > [  0.000000] (2:Lazy@Jacquelin) Nobody's watching me ? Let's go to sleep.
index 75f9151..26d0fcb 100644 (file)
@@ -1,13 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(token_ring ring_call.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(token_ring simgrid pthread )
-else()
-  target_link_libraries(token_ring simgrid)
-endif()
+add_executable       (token_ring ring_call.c)
+target_link_libraries(token_ring simgrid)
 
 set(tesh_files
   ${tesh_files}
index 06a4648..bc270cd 100644 (file)
@@ -4,32 +4,24 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <stdio.h>
-#include <stdlib.h>
 #include "simgrid/msg.h"
 
-int host(int argc, char *argv[]);
-unsigned int task_comp_size = 50000000;
-unsigned int task_comm_size = 1000000;
-
-int nb_hosts; /* All declared hosts */
-
-XBT_LOG_NEW_DEFAULT_CATEGORY(ring,
-                             "Messages specific for this msg example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(ring, "Messages specific for this msg example");
 
 /** @addtogroup MSG_examples
  * 
  *  @section MSG_ex_apps Examples of full applications
  * 
- * - <b>token_ring/ring_call.c</b>: Classical token ring
- *   communication, where a token is exchanged along a ring to reach
- *   every participant.
- * 
+ * - <b>token_ring/ring_call.c</b>: Classical token ring communication, where a token is exchanged along a ring to
+ *   reach every participant.
  */
 
-int host(int argc, char *argv[])
+static int host(int argc, char *argv[])
 {
-  int host_number = xbt_str_parse_int(MSG_process_get_name(MSG_process_self()), "Process name must be an integer but is: %s");
+  unsigned int task_comp_size = 50000000;
+  unsigned int task_comm_size = 1000000;
+  int host_number =
+          xbt_str_parse_int(MSG_process_get_name(MSG_process_self()), "Process name must be an integer but is: %s");
   char mailbox[256];
   msg_task_t task = NULL;
   XBT_ATTRIB_UNUSED int res;
@@ -43,13 +35,12 @@ int host(int argc, char *argv[])
     xbt_assert(res == MSG_OK, "MSG_task_get failed");
     XBT_INFO("Host \"%d\" received \"%s\"",host_number, MSG_task_get_name(task));
     MSG_task_destroy(task);
-  }
-  else{ //slave receive then send
+  } else{ //slave receive then send
     res = MSG_task_receive(&(task), MSG_process_get_name(MSG_process_self()));
     xbt_assert(res == MSG_OK, "MSG_task_get failed");
     XBT_INFO("Host \"%d\" received \"%s\"",host_number, MSG_task_get_name(task));
 
-    if(host_number+1 == nb_hosts)
+    if(host_number+1 == MSG_get_host_number())
       sprintf(mailbox, "0");
     else
       sprintf(mailbox, "%d", host_number+1);
@@ -61,23 +52,22 @@ int host(int argc, char *argv[])
 
 int main(int argc, char **argv)
 {
-  int i,res;
+  unsigned int i;
   MSG_init(&argc, argv);
   MSG_create_environment(argv[1]);
   xbt_dynar_t hosts = MSG_hosts_as_dynar();
-  nb_hosts =  xbt_dynar_length(hosts);
+  msg_host_t h;
   MSG_function_register("host", host);
 
-  XBT_INFO("Number of host '%d'",nb_hosts);
-  for(i = 0 ; i<nb_hosts; i++)
-  {
-    char* name_host = bprintf("%d",i);
-    MSG_process_create( name_host, host, NULL, xbt_dynar_get_as(hosts,i,msg_host_t) );
+  XBT_INFO("Number of host '%d'",MSG_get_host_number());
+  xbt_dynar_foreach (hosts, i, h){
+    char* name_host = bprintf("%u",i);
+    MSG_process_create(name_host, host, NULL, h);
     free(name_host);
   }
   xbt_dynar_free(&hosts);
 
-  res = MSG_main();
+  int res = MSG_main();
   XBT_INFO("Simulation time %g", MSG_get_clock());
   return res != MSG_OK;
 }
index 8cdba72..4711217 100644 (file)
@@ -1,23 +1,19 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-set(LIBRARY_OUTPUT_PATH "${CMAKE_HOME_DIRECTORY}/lib")
-
-add_executable(ms                         ${CMAKE_CURRENT_SOURCE_DIR}/ms.c)
-add_executable(categories                 ${CMAKE_CURRENT_SOURCE_DIR}/categories.c)
-add_executable(procmig                    ${CMAKE_CURRENT_SOURCE_DIR}/procmig.c)
-add_executable(simple                     ${CMAKE_CURRENT_SOURCE_DIR}/simple.c)
-add_executable(trace_platform             ${CMAKE_CURRENT_SOURCE_DIR}/trace_platform.c)
-add_executable(user_variables             ${CMAKE_CURRENT_SOURCE_DIR}/user_variables.c)
-add_executable(link_user_variables        ${CMAKE_CURRENT_SOURCE_DIR}/link_user_variables.c)
-add_executable(link_srcdst_user_variables ${CMAKE_CURRENT_SOURCE_DIR}/link_srcdst_user_variables.c)
-
-target_link_libraries(ms simgrid )
-target_link_libraries(categories simgrid )
-target_link_libraries(procmig simgrid )
-target_link_libraries(simple simgrid )
-target_link_libraries(trace_platform simgrid )
-target_link_libraries(user_variables simgrid )
-target_link_libraries(link_user_variables simgrid )
-target_link_libraries(link_srcdst_user_variables simgrid )
+add_executable       (ms                         ms.c)
+target_link_libraries(ms                         simgrid)
+add_executable       (categories                 categories.c)
+target_link_libraries(categories                 simgrid)
+add_executable       (procmig                    procmig.c)
+target_link_libraries(procmig                    simgrid)
+add_executable       (simple                     simple.c)
+target_link_libraries(simple                     simgrid)
+add_executable       (trace_platform             trace_platform.c)
+target_link_libraries(trace_platform             simgrid)
+add_executable       (user_variables             user_variables.c)
+target_link_libraries(user_variables             simgrid)
+add_executable       (link_user_variables        link_user_variables.c)
+target_link_libraries(link_user_variables        simgrid)
+add_executable       (link_srcdst_user_variables link_srcdst_user_variables.c)
+target_link_libraries(link_srcdst_user_variables simgrid)
 
 ## Clean generated files
 get_directory_property(extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
index 7b530e3..9e4c6a3 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env perl
 
-# Copyright (c) 2011, 2014. The SimGrid Team.
+# Copyright (c) 2011, 2014, 2016. The SimGrid Team.
 # All rights reserved.
 
 # This program is free software; you can redistribute it and/or modify it
@@ -9,34 +9,30 @@
 use strict;
 use warnings;
 
-my $toversion=3;
-my $nb_peer = $ARGV[0];
-my $i;
-
 print "<?xml version='1.0'?>\n";
-print "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n";
-print "<platform version=\"$toversion\">\n";
+print "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd\">\n";
+print "<platform version=\"4\">\n\n";
+
+print "<!-- This file was generated with the following command:\n          generate_peer_platform.pl $ARGV[0]\n-->\n\n";
 
-print "\n<config id=\"General\">\n";
-print "\t<prop id=\"coordinates\" value=\"yes\"></prop>\n";
-print "</config>\n\n";
+print "\t<config id=\"General\">\n";
+print "\t\t<prop id=\"coordinates\" value=\"yes\"></prop>\n";
+print "\t</config>\n\n";
 
-print "\t<AS  id=\"AS0\"  routing=\"Vivaldi\">\n";
+print "\t<AS id=\"AS0\" routing=\"Vivaldi\">\n";
 
 my $line;
 
-open SITES_LIGNE, $ARGV[0] or die "Unable to open $ARGV[1]\n";
-while(defined($line=<SITES_LIGNE>))
+open INPUT, $ARGV[0] or die "Unable to open $ARGV[1]: $!\n";
+while(defined($line=<INPUT>))
 {
-       #278 7.2 -9.4 h 2.3 
-               if($line =~ /^(.*) (.*) (.*) h (.*)$/)
-               {
-               print "\t\t<peer id=\"peer-$1\" coordinates=\"$2 $3 $4\" power=\"730000000.0\"\n";
-               print "\t\tbw_in=\"13380000\" bw_out=\"1024000\" lat=\"5E-4\" />\n\n";
-               }
-}
-                       
+    next if ($line =~ /^#/);
+    # 278 7.2 -9.4 h 2.3 
+    if($line =~ /^(.*) (.*) (.*) h (.*)$/) {
+       print "\t\t<peer id=\"peer-$1\" coordinates=\"$2 $3 $4\" speed=\"730Mf\" bw_in=\"13.38MBps\" bw_out=\"1.024MBps\" lat=\"500us\"/>\n";
+       next;
+    }
+    die "Parse error: $line\n";
+}                      
 print "\t</AS>\n";
-print "</platform>";
-
-print " \n";
+print "</platform>\n";
index 13cf361..c822242 100644 (file)
@@ -1,3 +1,6 @@
+# This data was retrieved from the OptorSim configuration files. 
+# Use the generate_peer_platform.pl script to turn it into a SimGrid platform file.
+#
 0 173.0 96.8 h 0.1 
 1 247.0 57.3 h 0.6 
 2 243.4 58.8 h 1.4 
diff --git a/examples/platforms/syscoord/median_harvard.xml b/examples/platforms/syscoord/median_harvard.xml
deleted file mode 100644 (file)
index fd29198..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-
-  <config id="General">
-    <prop id="network/coordinates" value="yes"></prop>
-  </config>
-
-  <AS  id="AS0"  routing="Vivaldi">
-    <peer id="peer-0"   coordinates="173.0 96.8 0.1" speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1"   coordinates="247.0 57.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2"   coordinates="243.4 58.8 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-3"   coordinates="-42.0 -35.2 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-4"   coordinates="170.4 78.2 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-5"   coordinates="116.3 -51.1 79.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-6"   coordinates="240.7 73.1 42.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-7"   coordinates="248.1 66.0 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-8"   coordinates="-136.1 31.0 59.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-9"   coordinates="-138.9 38.1 57.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-10"  coordinates="275.8 43.3 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-11"  coordinates="41.7 -10.3 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-12"  coordinates="262.3 31.0 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-13"  coordinates="251.8 79.9 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-14"  coordinates="251.7 64.5 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-15"  coordinates="-16.0 -13.4 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-16"  coordinates="250.1 67.1 18.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-17"  coordinates="264.4 77.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-18"  coordinates="247.1 62.5 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-19"  coordinates="19.4 -26.5 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-20"  coordinates="0.8 -42.7 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-21"  coordinates="241.2 62.5 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-22"  coordinates="-25.9 -16.1 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-23"  coordinates="-29.3 5.3 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-24"  coordinates="-41.9 -6.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-25"  coordinates="-28.5 0.3 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-26"  coordinates="31.4 -7.5 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-27"  coordinates="21.9 21.5 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-28"  coordinates="-21.5 -7.5 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-29"  coordinates="-34.2 -8.2 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-30"  coordinates="33.6 -22.7 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-31"  coordinates="-40.0 -26.3 11.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-32"  coordinates="-146.7 15.9 45.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-33"  coordinates="-42.5 3.8 11.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-34"  coordinates="-44.2 -13.8 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-35"  coordinates="43.9 3.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-36"  coordinates="-37.1 24.3 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-37"  coordinates="-7.7 11.2 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-38"  coordinates="-50.1 -21.1 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-39"  coordinates="13.4 22.5 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-40"  coordinates="-166.0 48.5 29.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-41"  coordinates="-33.8 -8.5 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-42"  coordinates="29.9 -18.7 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-43"  coordinates="-52.0 -5.7 34.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-44"  coordinates="-197.4 8.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-45"  coordinates="-40.6 10.3 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-46"  coordinates="-31.9 21.1 5.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-47"  coordinates="-44.7 -6.9 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-48"  coordinates="45.2 5.1 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-49"  coordinates="-40.2 14.6 17.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-50"  coordinates="-7.1 4.0 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-51"  coordinates="19.5 3.6 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-52"  coordinates="-216.1 3.4 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-53"  coordinates="-40.4 3.4 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-54"  coordinates="-194.1 16.3 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-55"  coordinates="-24.1 -6.7 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-56"  coordinates="-50.1 -12.8 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-57"  coordinates="-138.6 53.1 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-58"  coordinates="-48.1 -3.0 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-59"  coordinates="28.9 -6.5 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-60"  coordinates="24.1 3.5 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-61"  coordinates="-137.6 41.0 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-62"  coordinates="35.5 -30.7 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-63"  coordinates="34.5 -25.3 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-64"  coordinates="31.7 -31.2 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-65"  coordinates="33.9 -17.3 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-66"  coordinates="35.9 -10.6 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-67"  coordinates="33.1 -13.0 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-68"  coordinates="0.4 -10.7 17.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-69"  coordinates="-27.3 -8.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-70"  coordinates="-194.3 72.7 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-71"  coordinates="-19.0 -2.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-72"  coordinates="-45.2 -12.3 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-73"  coordinates="-45.2 -6.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-74"  coordinates="-45.2 -11.2 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-75"  coordinates="-24.4 -12.8 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-76"  coordinates="-21.7 -14.9 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-77"  coordinates="-9.8 -28.5 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-78"  coordinates="19.1 10.4 19.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-79"  coordinates="-192.7 21.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-80"  coordinates="-28.0 -12.7 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-81"  coordinates="-45.4 -2.9 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-82"  coordinates="-42.1 -2.8 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-83"  coordinates="-41.1 -1.2 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-84"  coordinates="-153.6 19.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-85"  coordinates="-125.7 16.6 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-86"  coordinates="-151.0 41.0 19.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-87"  coordinates="39.4 -27.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-88"  coordinates="-21.6 -8.5 11.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-89"  coordinates="-16.9 -10.5 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-90"  coordinates="10.3 -9.3 24.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-91"  coordinates="-13.6 16.9 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-92"  coordinates="-48.2 4.3 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-93"  coordinates="-11.5 -34.5 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-94"  coordinates="26.7 -26.3 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-95"  coordinates="-145.3 17.7 29.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-96"  coordinates="218.2 129.0 69.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-97"  coordinates="-47.4 -20.3 97.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-98"  coordinates="-19.5 -5.0 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-99"  coordinates="-13.0 -3.9 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-100" coordinates="39.2 -5.2 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-101" coordinates="35.4 11.4 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-102" coordinates="-45.6 -10.7 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-103" coordinates="-148.9 29.0 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-104" coordinates="-109.9 52.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-105" coordinates="-151.2 28.8 44.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-106" coordinates="-151.9 44.4 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-107" coordinates="108.3 88.7 58.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-108" coordinates="25.1 -12.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-109" coordinates="22.4 -29.2 17.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-110" coordinates="24.3 -32.3 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-111" coordinates="-40.6 -10.4 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-112" coordinates="-11.4 -17.8 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-113" coordinates="-118.7 50.3 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-114" coordinates="-3.1 -39.2 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-115" coordinates="-27.6 -15.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-116" coordinates="-21.6 -8.1 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-117" coordinates="-48.7 1.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-118" coordinates="-45.9 -9.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-119" coordinates="-43.0 -0.4 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-120" coordinates="-45.5 -16.9 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-121" coordinates="-22.0 -5.3 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-122" coordinates="-116.4 53.5 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-123" coordinates="-175.6 -9.6 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-124" coordinates="-17.8 -17.9 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-125" coordinates="-7.8 -29.9 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-126" coordinates="16.1 16.9 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-127" coordinates="-140.6 34.1 45.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-128" coordinates="-45.6 -12.4 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-129" coordinates="-43.6 -9.8 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-130" coordinates="-41.2 -18.4 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-131" coordinates="37.0 -5.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-132" coordinates="-130.3 24.0 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-133" coordinates="-109.0 65.9 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-134" coordinates="-3.7 -16.7 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-135" coordinates="25.2 -16.1 21.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-136" coordinates="-17.8 -0.6 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-137" coordinates="-16.3 -9.2 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-138" coordinates="16.9 25.3 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-139" coordinates="-11.3 -3.6 17.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-140" coordinates="-9.7 -19.6 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-141" coordinates="202.6 100.2 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-142" coordinates="-169.7 15.3 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-143" coordinates="117.2 64.5 29.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-144" coordinates="-137.8 62.2 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-145" coordinates="-19.5 -7.5 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-146" coordinates="33.5 -15.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-147" coordinates="-150.9 18.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-148" coordinates="-326.8 -126.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-149" coordinates="-87.5 83.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-150" coordinates="-164.6 8.4 41.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-151" coordinates="-153.2 46.9 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-152" coordinates="-168.9 12.3 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-153" coordinates="87.5 155.6 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-154" coordinates="29.7 -12.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-155" coordinates="35.6 -28.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-156" coordinates="-22.5 -5.3 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-157" coordinates="29.8 -20.4 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-158" coordinates="-44.5 -7.9 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-159" coordinates="-15.2 -8.5 14.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-160" coordinates="-103.1 44.0 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-161" coordinates="-42.6 -4.1 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-162" coordinates="-47.1 8.9 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-163" coordinates="-49.0 -14.9 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-164" coordinates="-42.9 -1.9 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-165" coordinates="-50.0 -5.9 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-166" coordinates="-8.3 -38.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-167" coordinates="33.7 -8.4 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-168" coordinates="-13.2 -34.3 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-169" coordinates="39.7 -27.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-170" coordinates="35.5 0.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-171" coordinates="139.5 107.5 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-172" coordinates="16.2 32.5 20.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-173" coordinates="-42.1 -4.2 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-174" coordinates="-50.5 -7.3 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-175" coordinates="33.5 -27.2 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-176" coordinates="-146.7 37.2 27.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-177" coordinates="-46.5 -17.1 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-178" coordinates="41.5 -22.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-179" coordinates="40.1 -5.5 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-180" coordinates="-142.5 16.7 37.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-181" coordinates="-53.6 -10.3 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-182" coordinates="30.7 -21.0 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-183" coordinates="24.0 -29.0 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-184" coordinates="-144.7 14.3 35.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-185" coordinates="-45.5 -7.8 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-186" coordinates="-42.7 -5.2 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-187" coordinates="33.0 -33.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-188" coordinates="-46.9 -4.3 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-189" coordinates="-46.9 -2.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-190" coordinates="36.0 -29.9 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-191" coordinates="29.8 -36.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-192" coordinates="42.7 -23.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-193" coordinates="-117.6 48.0 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-194" coordinates="-124.3 45.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-195" coordinates="37.1 -6.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-196" coordinates="40.9 -4.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-197" coordinates="28.6 -2.8 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-198" coordinates="-111.0 24.8 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-199" coordinates="-112.0 33.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-200" coordinates="25.4 -23.7 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-201" coordinates="33.7 -25.7 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-202" coordinates="32.2 -26.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-203" coordinates="193.3 -4.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-204" coordinates="-8.0 -35.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-205" coordinates="-11.7 -33.4 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-206" coordinates="-43.8 -1.7 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-207" coordinates="251.0 54.7 26.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-208" coordinates="252.9 85.9 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-209" coordinates="261.1 66.2 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-210" coordinates="247.6 63.0 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-211" coordinates="256.6 109.7 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-212" coordinates="246.4 78.1 10.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-213" coordinates="258.8 61.8 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-214" coordinates="245.5 62.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-215" coordinates="235.0 69.5 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-216" coordinates="284.3 47.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-217" coordinates="245.2 55.4 37.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-218" coordinates="252.9 69.6 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-219" coordinates="-21.8 -10.4 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-220" coordinates="-18.5 -10.7 14.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-221" coordinates="235.1 88.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-222" coordinates="259.9 65.1 38.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-223" coordinates="265.7 80.7 15.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-224" coordinates="267.3 107.0 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-225" coordinates="268.1 60.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-  </AS>
-</platform> 
index 427656d..163e2fa 100644 (file)
@@ -1,3 +1,6 @@
+# This data was retrieved from the OptorSim configuration files. 
+# Use the generate_peer_platform.pl script to turn it into a SimGrid platform file.
+#
 0 25.5 9.4 h 1.4 
 1 -12.7 -9.9 h 2.1 
 2 -15.7 9.9 h 14.7 
diff --git a/examples/platforms/syscoord/median_meridian.xml b/examples/platforms/syscoord/median_meridian.xml
deleted file mode 100644 (file)
index 5f3e148..0000000
+++ /dev/null
@@ -1,2509 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <config id="General">
-    <prop id="network/coordinates" value="yes"></prop>
-  </config>
-  <AS  id="AS0"  routing="Vivaldi">
-    <peer id="peer-0"    coordinates="25.5 9.4 1.4 "   speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1"    coordinates="-12.7 -9.9 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2"    coordinates="-15.7 9.9 14.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-3"    coordinates="27.1 7.2 19.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-4"    coordinates="11.4 10.7 24.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-5"    coordinates="27.1 14.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-6"    coordinates="110.1 31.2 43.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-7"    coordinates="-21.2 -25.2 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-8"    coordinates="-2.3 1.1 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-9"    coordinates="16.8 -11.1 15.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-10"   coordinates="-6.8 1.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-11"   coordinates="23.0 -4.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-12"   coordinates="29.9 -9.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-13"   coordinates="-2.2 7.2 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-14"   coordinates="26.1 -61.9 144.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-15"   coordinates="-39.4 1.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-16"   coordinates="26.5 -15.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-17"   coordinates="15.0 -0.5 34.5 " speed="730Mf"  bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-18"   coordinates="16.5 11.5 19.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-19"   coordinates="-37.9 85.0 69.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-20"   coordinates="-2.6 19.4 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-21"   coordinates="-104.4 -162.5 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-22"   coordinates="-41.8 -30.9 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-23"   coordinates="-9.9 10.4 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-24"   coordinates="8.5 15.3 31.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-25"   coordinates="6.0 -12.6 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-26"   coordinates="89.6 26.1 17.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-27"   coordinates="13.9 -31.4 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-28"   coordinates="13.6 10.0 25.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-29"   coordinates="32.2 34.0 104.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-30"   coordinates="23.5 21.2 24.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-31"   coordinates="-27.0 -12.1 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-32"   coordinates="18.4 -4.5 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-33"   coordinates="109.3 253.6 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-34"   coordinates="16.5 9.4 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-35"   coordinates="-35.9 -42.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-36"   coordinates="30.4 18.9 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-37"   coordinates="-23.1 -7.6 39.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-38"   coordinates="135.5 -21.0 83.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-39"   coordinates="17.5 6.7 18.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-40"   coordinates="22.3 13.6 21.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-41"   coordinates="-2.5 8.3 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-42"   coordinates="-10.3 -8.8 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-43"   coordinates="142.5 63.5 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-44"   coordinates="5.1 -2.9 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-45"   coordinates="-18.4 23.5 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-46"   coordinates="-26.3 -3.2 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-47"   coordinates="-21.6 11.6 89.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-48"   coordinates="-44.3 17.0 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-49"   coordinates="-59.8 -16.8 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-50"   coordinates="23.9 35.4 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-51"   coordinates="22.9 10.1 8.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-52"   coordinates="27.6 25.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-53"   coordinates="9.5 13.3 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-54"   coordinates="-34.2 20.0 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-55"   coordinates="-58.7 -11.7 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-56"   coordinates="-40.3 -27.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-57"   coordinates="19.7 -15.1 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-58"   coordinates="8.4 17.5 32.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-59"   coordinates="25.1 8.8 16.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-60"   coordinates="25.3 13.9 21.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-61"   coordinates="29.5 -58.9 17.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-62"   coordinates="-48.1 -6.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-63"   coordinates="-17.2 -1.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-64"   coordinates="10.6 18.7 33.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-65"   coordinates="1.9 -3.5 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-66"   coordinates="-3.6 1.6 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-67"   coordinates="-20.1 8.7 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-68"   coordinates="-22.0 5.6 31.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-69"   coordinates="-32.4 -9.4 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-70"   coordinates="13.3 7.2 20.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-71"   coordinates="23.2 10.9 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-72"   coordinates="7.0 17.8 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-73"   coordinates="34.1 37.7 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-74"   coordinates="-55.4 -5.1 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-75"   coordinates="-3.4 -4.4 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-76"   coordinates="22.6 0.8 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-77"   coordinates="23.2 15.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-78"   coordinates="21.6 16.4 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-79"   coordinates="12.0 14.2 20.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-80"   coordinates="90.3 79.5 66.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-81"   coordinates="-3.0 2.5 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-82"   coordinates="-7.2 19.4 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-83"   coordinates="5.9 15.2 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-84"   coordinates="-208.1 -127.0 325.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-85"   coordinates="0.6 8.0 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-86"   coordinates="16.3 17.6 29.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-87"   coordinates="-0.6 8.6 32.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-88"   coordinates="-1.8 6.5 18.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-89"   coordinates="-6.8 22.6 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-90"   coordinates="17.0 20.6 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-91"   coordinates="-39.1 -30.5 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-92"   coordinates="110.1 57.3 30.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-93"   coordinates="21.1 -4.7 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-94"   coordinates="-36.4 -12.8 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-95"   coordinates="33.2 -20.1 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-96"   coordinates="25.9 15.4 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-97"   coordinates="-1.0 3.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-98"   coordinates="-19.4 1.4 23.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-99"   coordinates="17.1 9.8 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-100"  coordinates="5.5 -16.5 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-101"  coordinates="3.3 1.8 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-102"  coordinates="1.4 23.0 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-103"  coordinates="-48.5 -29.4 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-104"  coordinates="7.6 -4.5 19.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-105"  coordinates="0.2 15.1 30.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-106"  coordinates="6.3 10.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-107"  coordinates="24.4 9.9 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-108"  coordinates="19.1 11.4 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-109"  coordinates="29.7 12.3 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-110"  coordinates="-0.9 13.4 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-111"  coordinates="19.3 -9.3 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-112"  coordinates="15.8 14.7 18.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-113"  coordinates="2.8 13.2 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-114"  coordinates="18.8 11.5 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-115"  coordinates="-10.4 -2.2 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-116"  coordinates="-45.7 -10.4 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-117"  coordinates="25.7 16.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-118"  coordinates="-0.7 17.5 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-119"  coordinates="30.2 1.9 22.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-120"  coordinates="0.1 2.7 38.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-121"  coordinates="3.0 19.1 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-122"  coordinates="-6.6 15.4 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-123"  coordinates="10.9 14.3 21.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-124"  coordinates="3.3 21.0 14.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-125"  coordinates="29.9 8.1 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-126"  coordinates="-43.0 -18.3 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-127"  coordinates="29.8 8.1 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-128"  coordinates="36.7 17.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-129"  coordinates="106.8 34.2 23.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-130"  coordinates="-29.1 -20.5 10.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-131"  coordinates="13.1 22.0 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-132"  coordinates="78.7 137.3 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-133"  coordinates="100.2 -6.3 185.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-134"  coordinates="0.4 20.3 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-135"  coordinates="24.0 -2.4 38.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-136"  coordinates="-4.1 1.1 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-137"  coordinates="7.7 19.2 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-138"  coordinates="-19.6 -5.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-139"  coordinates="9.7 3.1 24.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-140"  coordinates="112.9 69.0 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-141"  coordinates="-8.8 -9.0 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-142"  coordinates="26.2 12.9 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-143"  coordinates="32.9 0.6 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-144"  coordinates="-33.5 -9.2 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-145"  coordinates="21.8 13.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-146"  coordinates="29.9 14.0 99.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-147"  coordinates="-33.3 -41.3 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-148"  coordinates="12.1 14.0 21.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-149"  coordinates="12.6 4.8 28.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-150"  coordinates="-21.0 -24.0 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-151"  coordinates="13.1 13.2 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-152"  coordinates="20.1 23.0 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-153"  coordinates="6.4 15.0 30.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-154"  coordinates="25.1 4.0 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-155"  coordinates="28.8 29.7 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-156"  coordinates="10.5 -8.2 13.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-157"  coordinates="13.7 3.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-158"  coordinates="24.0 23.1 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-159"  coordinates="53.0 55.5 18.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-160"  coordinates="10.8 5.4 38.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-161"  coordinates="-74.9 -31.9 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-162"  coordinates="2.5 8.3 15.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-163"  coordinates="85.6 28.1 90.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-164"  coordinates="8.1 9.4 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-165"  coordinates="18.0 8.9 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-166"  coordinates="-6.4 0.1 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-167"  coordinates="23.9 29.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-168"  coordinates="19.2 19.4 40.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-169"  coordinates="4.1 9.2 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-170"  coordinates="2.5 32.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-171"  coordinates="2.5 0.2 30.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-172"  coordinates="-5.1 7.5 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-173"  coordinates="35.8 27.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-174"  coordinates="-35.4 2.7 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-175"  coordinates="27.0 9.4 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-176"  coordinates="9.5 5.3 17.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-177"  coordinates="-36.1 -15.7 14.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-178"  coordinates="-22.5 74.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-179"  coordinates="6.3 14.3 16.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-180"  coordinates="-23.3 -18.3 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-181"  coordinates="19.4 10.3 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-182"  coordinates="-16.7 37.0 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-183"  coordinates="12.5 13.7 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-184"  coordinates="14.5 14.1 14.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-185"  coordinates="28.9 15.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-186"  coordinates="-5.9 -4.6 15.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-187"  coordinates="-11.1 7.8 18.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-188"  coordinates="1.1 -2.9 13.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-189"  coordinates="-13.8 -5.3 47.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-190"  coordinates="28.1 38.3 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-191"  coordinates="35.0 16.3 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-192"  coordinates="-7.5 -5.1 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-193"  coordinates="52.3 60.9 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-194"  coordinates="0.6 2.3 22.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-195"  coordinates="22.9 3.2 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-196"  coordinates="17.8 6.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-197"  coordinates="9.0 13.0 71.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-198"  coordinates="-51.7 44.4 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-199"  coordinates="-40.8 -10.6 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-200"  coordinates="15.8 10.6 13.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-201"  coordinates="-25.4 8.9 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-202"  coordinates="-60.4 100.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-203"  coordinates="25.5 23.0 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-204"  coordinates="38.4 26.8 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-205"  coordinates="9.0 20.5 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-206"  coordinates="39.1 16.7 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-207"  coordinates="19.1 18.2 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-208"  coordinates="7.7 8.5 12.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-209"  coordinates="20.0 11.4 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-210"  coordinates="19.5 12.6 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-211"  coordinates="-22.5 14.0 17.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-212"  coordinates="-2.4 2.2 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-213"  coordinates="12.8 6.7 29.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-214"  coordinates="0.1 -2.0 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-215"  coordinates="7.7 -8.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-216"  coordinates="-11.1 -8.0 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-217"  coordinates="6.2 -7.1 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-218"  coordinates="-49.1 -25.9 23.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-219"  coordinates="15.0 19.0 34.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-220"  coordinates="-38.7 -6.1 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-221"  coordinates="6.0 -2.0 26.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-222"  coordinates="-47.5 -29.5 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-223"  coordinates="-27.4 2.5 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-224"  coordinates="29.8 3.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-225"  coordinates="-40.9 -3.1 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-226"  coordinates="35.1 35.6 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-227"  coordinates="-37.0 -6.4 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-228"  coordinates="15.9 5.1 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-229"  coordinates="-38.5 -8.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-230"  coordinates="32.0 4.9 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-231"  coordinates="-29.6 -2.4 5.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-232"  coordinates="3.7 8.6 31.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-233"  coordinates="9.9 2.0 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-234"  coordinates="-8.2 -2.6 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-235"  coordinates="18.9 -2.8 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-236"  coordinates="-18.0 -5.7 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-237"  coordinates="19.3 -1.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-238"  coordinates="14.8 23.7 29.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-239"  coordinates="-0.0 8.2 52.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-240"  coordinates="-22.4 -40.7 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-241"  coordinates="-13.3 -0.5 21.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-242"  coordinates="9.8 7.8 18.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-243"  coordinates="-25.7 -20.9 19.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-244"  coordinates="25.0 10.0 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-245"  coordinates="19.1 22.1 145.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-246"  coordinates="7.4 16.1 16.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-247"  coordinates="7.4 -2.7 22.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-248"  coordinates="4.9 19.9 11.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-249"  coordinates="12.3 -12.4 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-250"  coordinates="-19.9 11.6 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-251"  coordinates="2.1 2.3 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-252"  coordinates="0.1 3.6 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-253"  coordinates="24.5 26.8 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-254"  coordinates="-10.5 4.5 17.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-255"  coordinates="-17.4 33.1 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-256"  coordinates="17.6 1.7 27.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-257"  coordinates="-48.0 1.9 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-258"  coordinates="25.9 2.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-259"  coordinates="0.9 3.8 26.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-260"  coordinates="-70.8 21.0 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-261"  coordinates="17.1 1.8 18.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-262"  coordinates="3.3 -13.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-263"  coordinates="-49.1 -4.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-264"  coordinates="-28.0 8.0 48.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-265"  coordinates="2.9 2.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-266"  coordinates="113.8 15.0 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-267"  coordinates="32.1 13.9 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-268"  coordinates="-13.1 -33.9 30.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-269"  coordinates="-17.5 18.3 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-270"  coordinates="29.7 22.7 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-271"  coordinates="6.6 15.5 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-272"  coordinates="1.9 3.1 32.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-273"  coordinates="21.6 2.6 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-274"  coordinates="12.7 14.0 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-275"  coordinates="17.3 14.3 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-276"  coordinates="32.0 12.8 68.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-277"  coordinates="-30.2 -0.1 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-278"  coordinates="-12.5 1.7 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-279"  coordinates="31.1 22.2 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-280"  coordinates="24.0 11.6 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-281"  coordinates="52.9 2.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-282"  coordinates="23.1 18.8 17.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-283"  coordinates="-17.6 -36.1 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-284"  coordinates="14.1 -21.4 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-285"  coordinates="9.0 1.3 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-286"  coordinates="28.4 -14.6 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-287"  coordinates="27.1 8.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-288"  coordinates="3.7 7.1 11.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-289"  coordinates="-31.8 -34.4 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-290"  coordinates="19.9 20.1 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-291"  coordinates="25.5 18.9 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-292"  coordinates="-5.2 8.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-293"  coordinates="11.0 3.2 22.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-294"  coordinates="-6.4 12.2 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-295"  coordinates="29.9 13.3 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-296"  coordinates="9.7 6.8 31.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-297"  coordinates="-30.7 -29.5 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-298"  coordinates="3.7 31.4 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-299"  coordinates="6.5 19.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-300"  coordinates="25.0 3.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-301"  coordinates="-32.8 -7.0 20.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-302"  coordinates="7.2 13.4 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-303"  coordinates="15.1 16.1 39.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-304"  coordinates="-28.8 14.5 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-305"  coordinates="8.3 22.8 13.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-306"  coordinates="-1.1 8.6 27.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-307"  coordinates="-23.1 -9.6 33.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-308"  coordinates="13.7 -15.2 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-309"  coordinates="13.8 -5.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-310"  coordinates="10.9 -23.2 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-311"  coordinates="-14.2 24.1 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-312"  coordinates="17.9 14.3 37.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-313"  coordinates="-29.2 -21.6 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-314"  coordinates="-41.8 -11.4 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-315"  coordinates="-18.9 -1.0 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-316"  coordinates="-21.8 52.0 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-317"  coordinates="23.3 10.4 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-318"  coordinates="4.0 0.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-319"  coordinates="8.0 26.9 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-320"  coordinates="-24.9 -4.2 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-321"  coordinates="95.4 56.7 51.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-322"  coordinates="-17.5 44.3 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-323"  coordinates="22.4 19.4 22.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-324"  coordinates="18.3 9.6 21.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-325"  coordinates="12.9 5.8 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-326"  coordinates="45.6 -7.2 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-327"  coordinates="35.6 18.7 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-328"  coordinates="-13.4 8.4 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-329"  coordinates="-12.1 -1.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-330"  coordinates="14.6 4.6 16.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-331"  coordinates="17.3 14.7 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-332"  coordinates="27.3 36.8 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-333"  coordinates="-4.6 9.6 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-334"  coordinates="-38.9 15.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-335"  coordinates="13.9 9.9 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-336"  coordinates="85.9 60.8 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-337"  coordinates="-31.1 12.5 27.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-338"  coordinates="17.3 -5.5 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-339"  coordinates="-30.4 0.5 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-340"  coordinates="14.5 5.6 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-341"  coordinates="47.7 -30.5 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-342"  coordinates="31.0 11.5 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-343"  coordinates="-1.2 5.1 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-344"  coordinates="-30.2 40.2 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-345"  coordinates="-35.9 -17.4 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-346"  coordinates="-0.1 25.1 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-347"  coordinates="31.9 18.7 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-348"  coordinates="27.6 17.0 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-349"  coordinates="32.1 23.8 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-350"  coordinates="21.6 -21.4 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-351"  coordinates="52.6 9.8 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-352"  coordinates="-30.9 -16.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-353"  coordinates="23.8 20.9 46.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-354"  coordinates="19.7 16.9 14.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-355"  coordinates="-21.1 -19.7 31.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-356"  coordinates="-19.6 -26.2 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-357"  coordinates="-40.4 -18.4 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-358"  coordinates="33.4 17.2 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-359"  coordinates="-11.4 -20.0 20.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-360"  coordinates="-5.1 19.5 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-361"  coordinates="11.2 -2.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-362"  coordinates="-3.9 4.2 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-363"  coordinates="3.9 -3.8 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-364"  coordinates="-34.3 -18.6 17.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-365"  coordinates="29.3 18.3 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-366"  coordinates="25.7 26.8 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-367"  coordinates="19.3 16.2 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-368"  coordinates="30.9 -3.3 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-369"  coordinates="5.7 2.1 14.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-370"  coordinates="15.9 9.3 14.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-371"  coordinates="7.2 27.5 31.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-372"  coordinates="-28.1 -20.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-373"  coordinates="13.5 -3.0 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-374"  coordinates="20.6 31.6 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-375"  coordinates="-37.4 4.1 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-376"  coordinates="-47.4 -34.1 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-377"  coordinates="-22.7 -1.4 15.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-378"  coordinates="22.5 4.2 14.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-379"  coordinates="3.0 22.3 21.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-380"  coordinates="21.9 22.7 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-381"  coordinates="-38.8 -11.8 23.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-382"  coordinates="11.8 5.7 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-383"  coordinates="-4.2 14.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-384"  coordinates="34.4 9.0 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-385"  coordinates="24.2 9.9 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-386"  coordinates="38.1 -29.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-387"  coordinates="28.6 5.5 20.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-388"  coordinates="36.8 44.0 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-389"  coordinates="-5.1 1.1 42.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-390"  coordinates="-24.2 -33.5 200.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-391"  coordinates="9.5 8.6 22.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-392"  coordinates="0.4 8.6 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-393"  coordinates="17.5 5.9 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-394"  coordinates="11.8 5.2 15.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-395"  coordinates="-13.9 -38.6 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-396"  coordinates="14.5 -72.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-397"  coordinates="-15.0 -3.4 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-398"  coordinates="62.4 -2.0 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-399"  coordinates="-38.3 14.4 51.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-400"  coordinates="64.4 38.3 33.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-401"  coordinates="-1.3 22.5 21.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-402"  coordinates="18.3 28.9 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-403"  coordinates="-32.6 18.5 25.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-404"  coordinates="16.9 11.5 18.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-405"  coordinates="18.8 4.0 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-406"  coordinates="9.4 17.0 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-407"  coordinates="10.6 25.1 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-408"  coordinates="25.0 6.1 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-409"  coordinates="18.0 15.7 14.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-410"  coordinates="28.3 10.8 17.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-411"  coordinates="6.4 0.3 21.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-412"  coordinates="31.5 20.3 47.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-413"  coordinates="21.0 -3.9 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-414"  coordinates="-25.7 -15.3 120.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-415"  coordinates="-30.4 23.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-416"  coordinates="37.9 -4.0 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-417"  coordinates="24.1 5.5 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-418"  coordinates="-3.2 11.3 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-419"  coordinates="32.2 21.0 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-420"  coordinates="21.1 17.3 15.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-421"  coordinates="2.2 17.2 16.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-422"  coordinates="-23.1 -2.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-423"  coordinates="31.3 18.9 29.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-424"  coordinates="29.9 11.3 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-425"  coordinates="20.0 21.4 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-426"  coordinates="-41.9 -4.7 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-427"  coordinates="-5.8 0.7 14.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-428"  coordinates="2.6 4.9 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-429"  coordinates="23.0 11.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-430"  coordinates="139.7 149.8 80.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-431"  coordinates="-20.4 -15.7 33.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-432"  coordinates="-8.9 26.1 38.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-433"  coordinates="26.8 -15.0 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-434"  coordinates="-16.9 -6.5 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-435"  coordinates="28.1 14.7 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-436"  coordinates="23.0 22.9 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-437"  coordinates="23.6 16.6 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-438"  coordinates="16.7 8.4 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-439"  coordinates="3.4 -10.3 32.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-440"  coordinates="7.1 39.0 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-441"  coordinates="-61.7 7.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-442"  coordinates="-24.4 -4.0 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-443"  coordinates="45.2 48.7 115.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-444"  coordinates="13.1 -10.4 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-445"  coordinates="-26.9 -22.4 49.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-446"  coordinates="5.6 6.1 19.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-447"  coordinates="-10.6 4.3 16.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-448"  coordinates="-32.8 -21.5 15.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-449"  coordinates="16.0 10.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-450"  coordinates="-45.4 -21.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-451"  coordinates="11.9 11.7 23.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-452"  coordinates="13.0 -6.5 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-453"  coordinates="13.5 6.4 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-454"  coordinates="-5.1 8.4 14.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-455"  coordinates="11.4 12.6 20.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-456"  coordinates="9.5 9.6 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-457"  coordinates="-59.7 -32.3 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-458"  coordinates="37.7 17.6 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-459"  coordinates="7.6 11.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-460"  coordinates="-1.5 5.3 19.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-461"  coordinates="33.8 11.8 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-462"  coordinates="-14.5 36.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-463"  coordinates="94.6 120.0 105.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-464"  coordinates="-3.4 -5.6 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-465"  coordinates="-165.4 -67.3 80.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-466"  coordinates="23.1 -2.1 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-467"  coordinates="10.0 3.4 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-468"  coordinates="7.2 14.0 11.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-469"  coordinates="-68.2 10.8 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-470"  coordinates="132.0 25.5 32.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-471"  coordinates="31.7 1.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-472"  coordinates="26.9 33.4 10.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-473"  coordinates="29.9 21.2 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-474"  coordinates="27.4 26.3 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-475"  coordinates="99.9 77.7 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-476"  coordinates="39.3 20.8 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-477"  coordinates="35.2 4.3 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-478"  coordinates="29.0 10.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-479"  coordinates="-6.0 23.4 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-480"  coordinates="-1.6 7.7 28.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-481"  coordinates="29.3 19.5 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-482"  coordinates="-1.4 4.4 29.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-483"  coordinates="4.6 1.9 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-484"  coordinates="11.6 -1.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-485"  coordinates="18.9 15.7 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-486"  coordinates="-30.4 -31.6 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-487"  coordinates="15.0 1.8 25.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-488"  coordinates="9.6 3.9 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-489"  coordinates="30.9 20.4 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-490"  coordinates="245.2 137.8 24.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-491"  coordinates="-19.7 -2.9 256.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-492"  coordinates="-23.8 -2.8 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-493"  coordinates="29.5 26.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-494"  coordinates="34.3 10.2 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-495"  coordinates="33.5 12.0 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-496"  coordinates="-16.4 -77.3 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-497"  coordinates="5.4 8.7 25.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-498"  coordinates="2.9 46.7 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-499"  coordinates="13.0 58.7 53.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-500"  coordinates="26.9 -0.9 19.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-501"  coordinates="22.8 9.3 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-502"  coordinates="-11.4 4.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-503"  coordinates="-45.9 8.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-504"  coordinates="26.1 10.0 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-505"  coordinates="9.1 12.3 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-506"  coordinates="124.5 16.5 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-507"  coordinates="14.5 -1.3 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-508"  coordinates="10.3 -1.0 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-509"  coordinates="10.7 9.1 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-510"  coordinates="17.3 8.4 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-511"  coordinates="16.6 -1.2 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-512"  coordinates="22.2 21.5 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-513"  coordinates="-0.0 6.7 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-514"  coordinates="22.5 9.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-515"  coordinates="9.9 -53.5 364.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-516"  coordinates="3.6 7.5 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-517"  coordinates="15.0 2.0 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-518"  coordinates="-51.3 -2.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-519"  coordinates="105.9 15.3 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-520"  coordinates="2.0 19.8 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-521"  coordinates="10.9 10.0 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-522"  coordinates="7.5 14.9 17.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-523"  coordinates="-14.3 18.9 11.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-524"  coordinates="-25.1 -21.0 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-525"  coordinates="-4.9 21.2 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-526"  coordinates="19.4 15.8 23.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-527"  coordinates="26.3 14.2 14.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-528"  coordinates="12.5 16.2 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-529"  coordinates="-29.4 -4.1 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-530"  coordinates="-31.8 5.5 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-531"  coordinates="0.5 -1.6 17.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-532"  coordinates="-21.1 50.6 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-533"  coordinates="-5.1 9.9 18.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-534"  coordinates="26.2 16.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-535"  coordinates="79.7 103.3 126.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-536"  coordinates="-25.8 -3.9 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-537"  coordinates="-20.6 -20.5 48.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-538"  coordinates="37.8 5.7 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-539"  coordinates="-17.0 -7.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-540"  coordinates="-6.3 29.6 39.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-541"  coordinates="-43.3 -1.4 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-542"  coordinates="25.3 -13.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-543"  coordinates="-24.1 -27.4 22.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-544"  coordinates="11.3 17.1 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-545"  coordinates="-6.4 -38.5 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-546"  coordinates="11.9 17.7 23.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-547"  coordinates="18.3 -12.3 15.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-548"  coordinates="-33.2 -13.5 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-549"  coordinates="-6.5 -2.3 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-550"  coordinates="-0.3 -5.0 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-551"  coordinates="16.7 -1.0 30.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-552"  coordinates="21.8 5.9 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-553"  coordinates="-21.2 -21.6 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-554"  coordinates="34.7 15.8 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-555"  coordinates="18.4 23.7 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-556"  coordinates="29.1 8.7 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-557"  coordinates="28.5 19.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-558"  coordinates="24.5 8.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-559"  coordinates="48.5 16.1 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-560"  coordinates="31.8 2.8 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-561"  coordinates="-0.5 6.3 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-562"  coordinates="-9.4 -39.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-563"  coordinates="22.6 18.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-564"  coordinates="33.0 14.7 34.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-565"  coordinates="9.5 -47.8 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-566"  coordinates="-18.1 -6.4 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-567"  coordinates="4.6 0.0 30.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-568"  coordinates="44.7 14.2 81.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-569"  coordinates="12.4 34.4 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-570"  coordinates="4.3 4.1 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-571"  coordinates="222.6 -77.4 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-572"  coordinates="-19.2 -5.2 14.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-573"  coordinates="18.5 -1.9 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-574"  coordinates="11.1 -1.7 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-575"  coordinates="28.9 11.2 73.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-576"  coordinates="7.9 -3.5 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-577"  coordinates="2.4 32.5 33.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-578"  coordinates="-14.1 -2.8 34.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-579"  coordinates="15.5 12.5 22.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-580"  coordinates="-8.6 2.8 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-581"  coordinates="-27.7 -16.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-582"  coordinates="-36.1 -0.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-583"  coordinates="20.6 10.1 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-584"  coordinates="13.5 -19.9 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-585"  coordinates="-40.2 2.0 27.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-586"  coordinates="-33.5 14.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-587"  coordinates="0.6 27.4 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-588"  coordinates="24.4 41.5 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-589"  coordinates="20.3 9.8 12.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-590"  coordinates="-8.4 -0.8 12.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-591"  coordinates="36.4 4.4 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-592"  coordinates="6.6 12.4 14.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-593"  coordinates="20.0 7.9 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-594"  coordinates="-15.7 -9.5 206.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-595"  coordinates="70.4 84.5 31.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-596"  coordinates="-6.3 9.5 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-597"  coordinates="25.4 1.8 19.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-598"  coordinates="-5.6 9.0 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-599"  coordinates="-27.3 -13.6 38.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-600"  coordinates="11.1 15.3 19.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-601"  coordinates="24.3 4.7 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-602"  coordinates="11.9 -6.7 32.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-603"  coordinates="10.1 15.0 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-604"  coordinates="42.4 33.2 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-605"  coordinates="32.3 18.7 74.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-606"  coordinates="-8.7 0.3 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-607"  coordinates="-32.5 6.7 228.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-608"  coordinates="-101.6 -63.6 101.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-609"  coordinates="-11.8 3.1 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-610"  coordinates="15.4 -1.7 16.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-611"  coordinates="5.5 -5.2 20.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-612"  coordinates="-6.3 -16.2 22.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-613"  coordinates="-17.5 -0.9 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-614"  coordinates="39.1 10.7 55.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-615"  coordinates="24.6 8.9 92.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-616"  coordinates="23.2 -34.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-617"  coordinates="28.1 16.7 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-618"  coordinates="90.3 59.6 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-619"  coordinates="7.3 17.2 27.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-620"  coordinates="-163.6 -102.5 34.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-621"  coordinates="16.9 14.6 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-622"  coordinates="2.9 9.5 24.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-623"  coordinates="-6.6 0.8 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-624"  coordinates="7.0 -0.8 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-625"  coordinates="-41.9 -6.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-626"  coordinates="-1.9 36.6 25.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-627"  coordinates="18.4 14.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-628"  coordinates="-43.3 -68.2 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-629"  coordinates="121.1 78.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-630"  coordinates="-10.1 8.3 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-631"  coordinates="25.5 24.5 77.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-632"  coordinates="-35.8 -10.0 215.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-633"  coordinates="-33.7 5.5 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-634"  coordinates="32.8 14.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-635"  coordinates="-51.5 3.0 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-636"  coordinates="21.4 39.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-637"  coordinates="16.4 6.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-638"  coordinates="25.9 20.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-639"  coordinates="19.4 37.6 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-640"  coordinates="-34.6 -30.5 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-641"  coordinates="62.5 4.1 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-642"  coordinates="31.5 -9.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-643"  coordinates="21.3 10.3 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-644"  coordinates="36.1 3.9 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-645"  coordinates="-6.2 2.5 16.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-646"  coordinates="20.4 9.4 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-647"  coordinates="-28.5 -16.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-648"  coordinates="-8.0 8.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-649"  coordinates="-19.5 -4.3 47.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-650"  coordinates="-15.5 -33.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-651"  coordinates="12.1 4.6 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-652"  coordinates="11.8 7.5 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-653"  coordinates="6.2 2.6 13.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-654"  coordinates="6.1 22.5 14.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-655"  coordinates="-7.0 5.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-656"  coordinates="115.5 41.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-657"  coordinates="29.7 7.2 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-658"  coordinates="21.2 16.0 67.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-659"  coordinates="-43.2 -5.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-660"  coordinates="23.3 10.7 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-661"  coordinates="-29.5 -13.3 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-662"  coordinates="-13.4 5.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-663"  coordinates="-11.3 -6.6 31.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-664"  coordinates="-26.5 -5.1 13.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-665"  coordinates="-8.2 -3.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-666"  coordinates="2.3 13.4 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-667"  coordinates="17.6 15.3 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-668"  coordinates="87.4 59.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-669"  coordinates="20.1 -4.0 26.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-670"  coordinates="-38.5 -21.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-671"  coordinates="11.8 7.3 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-672"  coordinates="2.1 -2.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-673"  coordinates="-10.6 10.4 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-674"  coordinates="-8.4 -32.4 159.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-675"  coordinates="-27.9 -20.3 21.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-676"  coordinates="253.9 -129.4 295.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-677"  coordinates="-8.9 17.8 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-678"  coordinates="-187.7 -99.1 21.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-679"  coordinates="27.9 11.3 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-680"  coordinates="13.8 -10.1 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-681"  coordinates="-25.5 -7.1 20.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-682"  coordinates="21.9 28.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-683"  coordinates="-47.2 -7.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-684"  coordinates="22.4 26.7 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-685"  coordinates="95.4 -9.9 71.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-686"  coordinates="-0.2 6.4 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-687"  coordinates="-5.3 14.6 38.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-688"  coordinates="-25.7 6.6 177.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-689"  coordinates="-40.3 -2.1 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-690"  coordinates="0.4 -1.4 17.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-691"  coordinates="24.8 1.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-692"  coordinates="10.7 -7.0 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-693"  coordinates="24.3 7.5 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-694"  coordinates="33.3 18.7 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-695"  coordinates="-30.8 8.4 41.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-696"  coordinates="-39.4 -12.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-697"  coordinates="-26.3 -13.2 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-698"  coordinates="-1.1 1.2 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-699"  coordinates="-49.4 -9.4 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-700"  coordinates="-5.3 -0.1 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-701"  coordinates="17.8 6.8 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-702"  coordinates="20.2 22.8 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-703"  coordinates="107.7 7.4 65.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-704"  coordinates="-1.5 6.2 13.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-705"  coordinates="-28.9 -1.8 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-706"  coordinates="-15.8 8.4 61.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-707"  coordinates="-32.7 -49.6 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-708"  coordinates="59.1 20.5 70.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-709"  coordinates="23.9 22.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-710"  coordinates="-34.0 2.2 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-711"  coordinates="9.1 4.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-712"  coordinates="37.2 -3.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-713"  coordinates="-21.7 -11.4 20.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-714"  coordinates="18.1 7.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-715"  coordinates="28.4 18.9 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-716"  coordinates="-16.9 -2.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-717"  coordinates="-4.6 -5.3 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-718"  coordinates="24.8 15.5 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-719"  coordinates="-42.9 -16.5 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-720"  coordinates="29.0 12.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-721"  coordinates="-99.5 -134.2 42.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-722"  coordinates="26.6 35.8 11.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-723"  coordinates="19.1 9.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-724"  coordinates="-3.0 -1.4 36.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-725"  coordinates="-24.9 13.3 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-726"  coordinates="-49.3 -25.6 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-727"  coordinates="35.8 20.7 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-728"  coordinates="-46.9 -35.8 146.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-729"  coordinates="13.5 42.2 20.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-730"  coordinates="-12.7 -18.2 16.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-731"  coordinates="-4.4 -1.1 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-732"  coordinates="-20.1 29.7 11.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-733"  coordinates="-3.9 10.2 18.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-734"  coordinates="13.5 -9.3 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-735"  coordinates="2.4 1.7 46.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-736"  coordinates="30.9 19.6 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-737"  coordinates="-6.7 17.3 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-738"  coordinates="-3.7 4.6 27.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-739"  coordinates="8.7 -19.0 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-740"  coordinates="13.9 25.7 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-741"  coordinates="-24.6 -20.7 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-742"  coordinates="27.0 14.8 51.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-743"  coordinates="0.1 4.0 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-744"  coordinates="1.4 2.2 24.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-745"  coordinates="3.0 -22.1 25.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-746"  coordinates="-27.2 21.5 36.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-747"  coordinates="26.6 19.6 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-748"  coordinates="-30.9 -30.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-749"  coordinates="-82.8 -30.3 136.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-750"  coordinates="-6.5 3.5 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-751"  coordinates="4.5 7.3 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-752"  coordinates="12.7 -17.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-753"  coordinates="-1.2 9.6 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-754"  coordinates="90.2 51.5 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-755"  coordinates="14.4 -1.1 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-756"  coordinates="32.2 22.1 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-757"  coordinates="15.4 11.1 18.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-758"  coordinates="122.1 82.0 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-759"  coordinates="-27.9 -3.4 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-760"  coordinates="-40.2 -3.5 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-761"  coordinates="33.6 12.7 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-762"  coordinates="19.0 -0.4 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-763"  coordinates="-0.0 30.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-764"  coordinates="8.2 4.6 13.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-765"  coordinates="15.6 4.3 23.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-766"  coordinates="-4.6 8.1 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-767"  coordinates="23.2 14.8 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-768"  coordinates="34.1 10.5 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-769"  coordinates="11.4 9.2 26.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-770"  coordinates="13.4 30.3 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-771"  coordinates="-13.9 2.3 30.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-772"  coordinates="-39.5 -3.3 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-773"  coordinates="-129.4 103.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-774"  coordinates="9.3 12.0 20.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-775"  coordinates="29.4 21.5 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-776"  coordinates="23.9 12.9 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-777"  coordinates="-1.3 3.1 30.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-778"  coordinates="15.2 11.2 19.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-779"  coordinates="-15.8 -4.1 60.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-780"  coordinates="14.2 25.9 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-781"  coordinates="25.8 9.7 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-782"  coordinates="117.3 31.7 39.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-783"  coordinates="4.5 4.6 43.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-784"  coordinates="9.1 -5.4 21.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-785"  coordinates="-34.0 -26.9 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-786"  coordinates="-24.4 -2.7 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-787"  coordinates="23.6 14.0 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-788"  coordinates="15.7 3.1 23.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-789"  coordinates="-4.5 11.1 34.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-790"  coordinates="9.0 12.8 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-791"  coordinates="-1.2 -3.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-792"  coordinates="-175.6 52.3 12.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-793"  coordinates="-37.5 -15.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-794"  coordinates="2.9 10.6 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-795"  coordinates="29.3 7.4 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-796"  coordinates="12.0 1.7 70.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-797"  coordinates="23.8 18.7 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-798"  coordinates="-116.2 111.3 41.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-799"  coordinates="9.8 2.4 28.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-800"  coordinates="6.7 18.4 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-801"  coordinates="30.9 37.4 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-802"  coordinates="25.0 9.7 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-803"  coordinates="-26.0 -11.2 24.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-804"  coordinates="19.3 7.6 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-805"  coordinates="-18.4 -15.6 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-806"  coordinates="16.3 10.8 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-807"  coordinates="15.7 20.2 16.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-808"  coordinates="-1.9 0.6 20.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-809"  coordinates="-67.8 -7.5 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-810"  coordinates="10.9 7.9 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-811"  coordinates="-29.0 -40.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-812"  coordinates="24.7 22.3 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-813"  coordinates="-12.9 -13.1 11.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-814"  coordinates="41.8 4.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-815"  coordinates="2.5 12.5 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-816"  coordinates="-14.2 -10.5 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-817"  coordinates="-56.0 2.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-818"  coordinates="-3.5 11.9 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-819"  coordinates="8.8 30.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-820"  coordinates="26.5 18.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-821"  coordinates="-30.4 -11.8 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-822"  coordinates="-34.2 -7.7 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-823"  coordinates="22.8 19.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-824"  coordinates="-38.3 74.0 31.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-825"  coordinates="23.3 9.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-826"  coordinates="-8.4 11.1 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-827"  coordinates="-40.7 -11.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-828"  coordinates="-50.1 -18.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-829"  coordinates="35.2 46.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-830"  coordinates="23.5 -0.2 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-831"  coordinates="-8.4 4.2 15.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-832"  coordinates="20.4 18.6 13.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-833"  coordinates="15.4 3.1 13.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-834"  coordinates="-46.3 -5.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-835"  coordinates="-36.8 -26.1 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-836"  coordinates="13.3 12.1 34.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-837"  coordinates="-18.8 -23.9 19.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-838"  coordinates="14.2 4.6 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-839"  coordinates="27.9 11.8 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-840"  coordinates="23.7 7.1 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-841"  coordinates="1.9 -6.7 59.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-842"  coordinates="32.0 14.1 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-843"  coordinates="-52.1 -7.7 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-844"  coordinates="-9.3 -14.9 23.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-845"  coordinates="13.8 16.8 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-846"  coordinates="-22.4 0.2 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-847"  coordinates="-4.5 -18.9 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-848"  coordinates="32.6 26.0 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-849"  coordinates="-35.2 -16.4 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-850"  coordinates="18.7 11.9 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-851"  coordinates="-2.7 21.1 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-852"  coordinates="0.2 0.2 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-853"  coordinates="27.6 11.0 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-854"  coordinates="-32.1 -11.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-855"  coordinates="-5.8 1.1 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-856"  coordinates="-39.7 5.4 15.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-857"  coordinates="-15.9 -21.4 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-858"  coordinates="26.6 20.8 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-859"  coordinates="-7.6 6.2 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-860"  coordinates="-14.5 8.5 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-861"  coordinates="12.0 13.7 19.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-862"  coordinates="101.0 83.3 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-863"  coordinates="12.5 3.6 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-864"  coordinates="-41.0 -2.5 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-865"  coordinates="28.0 14.0 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-866"  coordinates="-11.3 -19.8 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-867"  coordinates="0.8 12.8 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-868"  coordinates="-18.8 -26.6 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-869"  coordinates="17.4 4.4 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-870"  coordinates="0.5 3.6 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-871"  coordinates="-26.2 -17.0 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-872"  coordinates="7.8 7.8 25.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-873"  coordinates="-40.8 -4.5 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-874"  coordinates="8.1 1.5 47.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-875"  coordinates="10.9 3.3 21.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-876"  coordinates="13.9 20.5 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-877"  coordinates="1.7 3.7 19.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-878"  coordinates="-40.7 4.3 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-879"  coordinates="-36.0 -13.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-880"  coordinates="-0.0 4.5 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-881"  coordinates="-5.5 14.2 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-882"  coordinates="-34.4 -24.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-883"  coordinates="5.9 -11.2 13.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-884"  coordinates="28.2 11.0 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-885"  coordinates="26.1 25.7 26.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-886"  coordinates="-16.8 2.9 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-887"  coordinates="-35.5 -23.1 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-888"  coordinates="25.9 18.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-889"  coordinates="2.2 27.2 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-890"  coordinates="24.7 5.6 11.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-891"  coordinates="38.9 18.2 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-892"  coordinates="-124.4 -126.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-893"  coordinates="26.4 2.8 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-894"  coordinates="33.5 6.6 105.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-895"  coordinates="25.0 21.5 24.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-896"  coordinates="-19.1 -6.8 36.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-897"  coordinates="43.5 18.8 67.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-898"  coordinates="-47.6 -2.4 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-899"  coordinates="61.1 -38.0 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-900"  coordinates="31.6 9.8 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-901"  coordinates="116.2 7.9 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-902"  coordinates="111.3 -29.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-903"  coordinates="-0.3 19.8 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-904"  coordinates="116.8 19.3 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-905"  coordinates="-6.4 5.1 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-906"  coordinates="10.4 8.3 29.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-907"  coordinates="26.0 9.4 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-908"  coordinates="29.2 22.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-909"  coordinates="-8.4 -40.4 26.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-910"  coordinates="-78.7 -27.2 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-911"  coordinates="19.8 10.7 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-912"  coordinates="10.3 7.4 8.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-913"  coordinates="-69.3 -31.8 15.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-914"  coordinates="10.9 48.7 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-915"  coordinates="6.0 7.3 12.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-916"  coordinates="-27.8 -5.5 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-917"  coordinates="-5.1 -4.5 12.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-918"  coordinates="16.8 -67.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-919"  coordinates="-29.2 -22.0 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-920"  coordinates="24.6 19.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-921"  coordinates="-36.8 -1.4 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-922"  coordinates="-48.9 -34.4 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-923"  coordinates="22.1 21.4 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-924"  coordinates="22.6 3.2 13.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-925"  coordinates="9.3 20.0 87.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-926"  coordinates="3.4 4.6 16.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-927"  coordinates="9.2 17.4 37.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-928"  coordinates="34.6 8.0 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-929"  coordinates="-26.0 -32.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-930"  coordinates="-3.3 5.3 11.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-931"  coordinates="20.0 15.4 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-932"  coordinates="26.2 6.8 13.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-933"  coordinates="-30.3 -27.6 10.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-934"  coordinates="107.3 101.2 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-935"  coordinates="13.2 21.1 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-936"  coordinates="32.8 5.7 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-937"  coordinates="13.3 41.7 63.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-938"  coordinates="24.0 11.2 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-939"  coordinates="2.1 -3.3 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-940"  coordinates="-143.7 -120.0 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-941"  coordinates="66.9 -180.8 100.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-942"  coordinates="28.0 9.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-943"  coordinates="-40.6 -16.4 48.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-944"  coordinates="102.0 37.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-945"  coordinates="20.2 23.2 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-946"  coordinates="-72.4 9.6 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-947"  coordinates="1.5 12.0 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-948"  coordinates="29.1 16.0 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-949"  coordinates="20.1 21.0 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-950"  coordinates="6.8 6.1 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-951"  coordinates="10.7 5.0 31.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-952"  coordinates="17.3 13.1 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-953"  coordinates="99.1 75.7 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-954"  coordinates="5.2 31.0 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-955"  coordinates="27.9 17.9 15.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-956"  coordinates="23.9 13.4 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-957"  coordinates="13.8 13.8 22.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-958"  coordinates="25.4 20.8 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-959"  coordinates="-38.1 -17.7 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-960"  coordinates="23.2 5.0 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-961"  coordinates="1.7 24.6 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-962"  coordinates="37.4 15.0 13.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-963"  coordinates="9.8 -3.4 22.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-964"  coordinates="13.0 5.2 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-965"  coordinates="-5.2 6.2 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-966"  coordinates="19.7 16.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-967"  coordinates="15.3 12.0 29.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-968"  coordinates="20.3 13.6 27.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-969"  coordinates="-31.0 -8.5 19.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-970"  coordinates="6.0 4.6 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-971"  coordinates="-1.0 2.1 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-972"  coordinates="-15.0 -1.9 18.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-973"  coordinates="-5.4 0.7 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-974"  coordinates="1.1 -5.6 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-975"  coordinates="9.7 -14.3 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-976"  coordinates="-27.5 6.2 68.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-977"  coordinates="29.6 25.4 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-978"  coordinates="-45.4 36.5 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-979"  coordinates="6.3 24.3 17.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-980"  coordinates="32.2 9.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-981"  coordinates="-42.5 -15.2 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-982"  coordinates="14.5 12.9 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-983"  coordinates="19.4 -24.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-984"  coordinates="-43.4 -17.5 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-985"  coordinates="31.3 5.0 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-986"  coordinates="17.9 20.3 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-987"  coordinates="6.9 6.3 8.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-988"  coordinates="129.1 -23.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-989"  coordinates="11.1 -9.0 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-990"  coordinates="-53.0 1.3 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-991"  coordinates="42.1 36.1 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-992"  coordinates="305.6 294.6 229.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-993"  coordinates="18.2 6.4 36.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-994"  coordinates="15.3 -3.6 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-995"  coordinates="-14.4 3.2 19.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-996"  coordinates="12.3 -3.9 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-997"  coordinates="40.3 -41.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-998"  coordinates="8.6 21.5 21.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-999"  coordinates="20.3 11.1 16.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1000" coordinates="17.7 25.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1001" coordinates="-35.3 -8.4 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1002" coordinates="-25.3 -20.8 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1003" coordinates="11.7 -3.5 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1004" coordinates="-29.6 -13.1 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1005" coordinates="22.3 7.7 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1006" coordinates="-14.3 33.6 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1007" coordinates="23.1 20.4 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1008" coordinates="31.1 -11.0 17.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1009" coordinates="15.2 8.5 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1010" coordinates="-13.4 4.3 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1011" coordinates="38.3 31.4 23.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1012" coordinates="128.8 -216.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1013" coordinates="9.6 5.4 23.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1014" coordinates="-9.6 -12.8 15.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1015" coordinates="18.1 16.7 24.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1016" coordinates="-8.5 16.2 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1017" coordinates="15.5 -12.3 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1018" coordinates="5.4 20.2 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1019" coordinates="7.8 18.6 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1020" coordinates="20.0 5.5 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1021" coordinates="16.6 21.6 14.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1022" coordinates="52.8 75.3 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1023" coordinates="-3.0 4.2 33.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1024" coordinates="16.0 16.6 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1025" coordinates="-0.6 16.4 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1026" coordinates="-3.7 -1.5 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1027" coordinates="66.1 112.9 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1028" coordinates="20.8 8.0 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1029" coordinates="-1.7 4.0 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1030" coordinates="-21.4 61.3 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1031" coordinates="24.5 18.2 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1032" coordinates="9.8 17.4 24.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1033" coordinates="-32.2 -18.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1034" coordinates="-4.9 4.5 23.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1035" coordinates="10.7 -4.8 15.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1036" coordinates="-61.4 -57.4 99.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1037" coordinates="17.5 12.8 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1038" coordinates="-36.0 2.7 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1039" coordinates="11.6 23.9 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1040" coordinates="2.6 11.8 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1041" coordinates="11.1 1.6 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1042" coordinates="4.5 12.1 32.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1043" coordinates="19.4 11.2 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1044" coordinates="1.2 17.4 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1045" coordinates="-5.0 14.6 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1046" coordinates="35.0 -2.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1047" coordinates="86.5 60.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1048" coordinates="20.5 37.4 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1049" coordinates="34.0 38.2 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1050" coordinates="-49.7 -8.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1051" coordinates="9.0 4.8 22.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1052" coordinates="34.4 10.8 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1053" coordinates="-32.8 -12.6 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1054" coordinates="-8.9 3.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1055" coordinates="21.4 12.3 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1056" coordinates="-17.0 -3.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1057" coordinates="-35.0 -15.8 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1058" coordinates="35.6 22.6 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1059" coordinates="-7.8 6.5 15.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1060" coordinates="6.5 10.4 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1061" coordinates="1.9 -10.8 18.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1062" coordinates="25.7 54.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1063" coordinates="14.2 6.6 15.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1064" coordinates="1.4 5.5 13.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1065" coordinates="-3.6 -57.0 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1066" coordinates="153.2 68.2 69.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1067" coordinates="0.7 -8.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1068" coordinates="-12.7 -6.1 24.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1069" coordinates="1.6 7.6 17.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1070" coordinates="-36.5 -22.2 31.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1071" coordinates="15.9 15.3 17.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1072" coordinates="-44.5 -12.7 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1073" coordinates="30.2 -8.7 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1074" coordinates="32.1 -13.0 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1075" coordinates="85.8 1.6 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1076" coordinates="-20.7 -19.2 14.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1077" coordinates="27.8 -8.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1078" coordinates="-26.1 -23.1 25.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1079" coordinates="-7.4 14.6 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1080" coordinates="22.6 5.9 27.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1081" coordinates="-20.2 -23.5 174.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1082" coordinates="5.5 3.0 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1083" coordinates="-25.7 -19.2 30.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1084" coordinates="-19.9 -24.8 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1085" coordinates="36.6 25.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1086" coordinates="28.5 13.3 12.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1087" coordinates="-27.2 -16.1 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1088" coordinates="35.8 3.4 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1089" coordinates="12.6 10.2 150.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1090" coordinates="16.1 15.4 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1091" coordinates="-10.5 4.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1092" coordinates="-28.1 -11.9 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1093" coordinates="-105.6 -89.8 98.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1094" coordinates="-0.2 10.1 14.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1095" coordinates="-2.1 6.4 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1096" coordinates="11.0 14.9 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1097" coordinates="46.6 125.1 69.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1098" coordinates="124.8 74.7 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1099" coordinates="11.3 -1.8 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1100" coordinates="17.6 6.6 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1101" coordinates="19.5 19.6 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1102" coordinates="12.2 37.4 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1103" coordinates="28.5 12.3 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1104" coordinates="35.7 9.2 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1105" coordinates="18.7 1.9 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1106" coordinates="23.0 5.5 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1107" coordinates="33.4 13.5 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1108" coordinates="-61.3 -55.6 103.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1109" coordinates="-57.4 16.3 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1110" coordinates="18.0 -2.5 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1111" coordinates="23.5 16.0 50.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1112" coordinates="6.0 4.0 19.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1113" coordinates="-21.0 -3.4 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1114" coordinates="-88.8 -60.6 29.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1115" coordinates="72.7 47.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1116" coordinates="1.9 19.7 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1117" coordinates="4.6 4.7 53.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1118" coordinates="36.3 17.9 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1119" coordinates="-19.3 -27.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1120" coordinates="20.7 14.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1121" coordinates="5.1 -1.2 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1122" coordinates="95.3 43.9 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1123" coordinates="22.6 13.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1124" coordinates="6.7 17.3 13.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1125" coordinates="37.2 12.5 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1126" coordinates="-31.0 -39.1 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1127" coordinates="120.5 12.6 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1128" coordinates="-35.5 8.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1129" coordinates="21.7 2.6 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1130" coordinates="9.9 5.1 34.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1131" coordinates="5.7 24.7 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1132" coordinates="24.6 26.8 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1133" coordinates="3.3 4.9 24.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1134" coordinates="43.2 15.0 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1135" coordinates="-17.1 -2.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1136" coordinates="33.2 14.8 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1137" coordinates="-0.2 9.9 16.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1138" coordinates="2.8 -19.1 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1139" coordinates="-37.2 -7.4 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1140" coordinates="8.7 63.2 27.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1141" coordinates="22.1 15.4 15.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1142" coordinates="4.9 3.1 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1143" coordinates="19.7 -13.4 38.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1144" coordinates="-19.7 -10.8 52.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1145" coordinates="-49.1 -13.3 63.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1146" coordinates="-6.5 -51.7 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1147" coordinates="128.6 60.5 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1148" coordinates="13.6 23.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1149" coordinates="-4.7 -2.9 19.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1150" coordinates="17.1 13.6 28.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1151" coordinates="33.6 3.3 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1152" coordinates="3.9 19.3 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1153" coordinates="-3.1 4.7 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1154" coordinates="-30.1 -25.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1155" coordinates="-22.6 14.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1156" coordinates="17.3 38.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1157" coordinates="4.8 -15.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1158" coordinates="-39.3 -26.2 12.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1159" coordinates="35.6 18.7 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1160" coordinates="-1.1 9.7 22.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1161" coordinates="-46.2 -15.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1162" coordinates="-1.5 6.3 11.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1163" coordinates="24.8 0.4 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1164" coordinates="7.8 12.7 14.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1165" coordinates="-4.0 9.6 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1166" coordinates="25.8 -4.4 22.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1167" coordinates="23.1 21.1 10.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1168" coordinates="-53.4 -16.2 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1169" coordinates="-40.5 -9.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1170" coordinates="24.3 10.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1171" coordinates="-40.8 -10.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1172" coordinates="14.3 21.8 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1173" coordinates="15.6 11.8 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1174" coordinates="20.1 35.0 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1175" coordinates="7.4 -12.5 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1176" coordinates="21.5 2.6 130.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1177" coordinates="-50.8 -104.8 94.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1178" coordinates="10.6 2.3 20.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1179" coordinates="-84.3 -31.2 97.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1180" coordinates="23.4 7.7 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1181" coordinates="-126.8 -134.0 26.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1182" coordinates="22.2 12.2 15.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1183" coordinates="27.0 21.5 17.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1184" coordinates="13.4 11.2 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1185" coordinates="2.7 -0.5 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1186" coordinates="12.2 2.3 19.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1187" coordinates="29.0 -1.4 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1188" coordinates="32.2 3.7 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1189" coordinates="25.8 11.6 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1190" coordinates="-43.2 -9.9 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1191" coordinates="14.8 6.5 24.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1192" coordinates="-18.5 -12.7 14.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1193" coordinates="23.2 18.2 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1194" coordinates="31.4 8.1 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1195" coordinates="3.4 9.5 20.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1196" coordinates="16.0 2.0 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1197" coordinates="5.1 4.9 27.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1198" coordinates="15.2 10.8 21.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1199" coordinates="26.6 16.3 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1200" coordinates="-5.3 2.0 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1201" coordinates="30.8 -11.0 130.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1202" coordinates="-13.4 17.7 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1203" coordinates="-9.4 0.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1204" coordinates="114.5 -2.2 40.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1205" coordinates="25.7 31.3 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1206" coordinates="12.7 8.3 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1207" coordinates="26.6 11.0 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1208" coordinates="-39.7 83.7 85.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1209" coordinates="23.9 12.9 25.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1210" coordinates="-9.1 17.3 15.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1211" coordinates="25.9 22.0 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1212" coordinates="17.7 12.2 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1213" coordinates="52.4 -53.2 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1214" coordinates="5.0 8.2 19.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1215" coordinates="8.7 -4.8 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1216" coordinates="-6.1 7.7 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1217" coordinates="-7.8 53.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1218" coordinates="109.1 -10.9 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1219" coordinates="-11.8 0.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1220" coordinates="22.1 14.8 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1221" coordinates="-25.5 -37.4 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1222" coordinates="20.0 19.0 93.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1223" coordinates="7.1 4.4 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1224" coordinates="-7.6 -3.4 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1225" coordinates="-10.0 14.3 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1226" coordinates="31.2 10.8 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1227" coordinates="-151.3 -75.0 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1228" coordinates="-26.6 -2.0 19.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1229" coordinates="-131.4 -72.1 70.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1230" coordinates="-24.1 -13.2 61.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1231" coordinates="27.6 5.0 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1232" coordinates="-16.2 11.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1233" coordinates="-28.5 -8.1 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1234" coordinates="-39.2 -1.4 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1235" coordinates="-20.9 -15.4 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1236" coordinates="-27.5 13.9 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1237" coordinates="8.7 21.3 19.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1238" coordinates="3.6 3.6 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1239" coordinates="-158.9 -37.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1240" coordinates="-47.4 -20.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1241" coordinates="4.0 19.2 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1242" coordinates="7.1 5.1 20.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1243" coordinates="3.1 -19.3 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1244" coordinates="-3.2 1.7 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1245" coordinates="17.9 33.7 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1246" coordinates="18.8 11.4 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1247" coordinates="22.2 12.3 11.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1248" coordinates="-74.4 -8.6 138.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1249" coordinates="10.0 38.8 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1250" coordinates="21.7 12.5 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1251" coordinates="-4.2 22.3 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1252" coordinates="-16.8 7.7 21.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1253" coordinates="-43.8 -9.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1254" coordinates="-68.9 -49.2 83.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1255" coordinates="-1.8 7.9 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1256" coordinates="31.0 -7.0 21.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1257" coordinates="29.9 12.8 19.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1258" coordinates="-8.0 14.3 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1259" coordinates="14.4 -2.9 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1260" coordinates="-39.1 2.4 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1261" coordinates="13.0 20.5 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1262" coordinates="94.4 24.5 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1263" coordinates="10.3 13.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1264" coordinates="7.9 6.1 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1265" coordinates="17.2 13.3 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1266" coordinates="18.6 -9.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1267" coordinates="22.8 -3.3 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1268" coordinates="11.4 0.2 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1269" coordinates="-15.1 10.2 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1270" coordinates="-107.5 164.1 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1271" coordinates="14.6 -9.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1272" coordinates="-4.0 -1.9 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1273" coordinates="12.9 7.1 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1274" coordinates="-0.8 -16.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1275" coordinates="-14.0 -0.6 23.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1276" coordinates="91.5 45.7 35.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1277" coordinates="24.9 -4.9 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1278" coordinates="-7.5 7.9 19.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1279" coordinates="23.3 22.3 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1280" coordinates="20.3 27.2 32.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1281" coordinates="22.8 7.1 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1282" coordinates="30.7 13.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1283" coordinates="-7.4 -11.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1284" coordinates="16.2 6.4 14.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1285" coordinates="-36.6 13.0 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1286" coordinates="24.2 15.5 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1287" coordinates="-6.1 -15.6 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1288" coordinates="-42.5 -51.2 216.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1289" coordinates="10.9 34.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1290" coordinates="21.5 17.9 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1291" coordinates="18.7 -0.4 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1292" coordinates="21.7 12.9 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1293" coordinates="-10.3 15.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1294" coordinates="13.9 8.5 18.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1295" coordinates="28.3 5.6 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1296" coordinates="-18.4 -18.2 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1297" coordinates="-28.5 8.2 99.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1298" coordinates="16.0 8.4 21.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1299" coordinates="14.6 13.0 25.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1300" coordinates="22.6 4.9 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1301" coordinates="13.8 2.5 22.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1302" coordinates="7.1 11.0 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1303" coordinates="72.3 -14.2 26.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1304" coordinates="14.7 7.5 19.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1305" coordinates="35.2 16.3 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1306" coordinates="-21.8 -6.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1307" coordinates="35.2 25.1 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1308" coordinates="-55.3 -27.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1309" coordinates="-16.1 11.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1310" coordinates="-33.5 -31.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1311" coordinates="-30.2 -11.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1312" coordinates="39.4 2.7 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1313" coordinates="21.3 -2.0 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1314" coordinates="9.7 -41.3 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1315" coordinates="24.0 6.8 15.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1316" coordinates="-34.8 -5.7 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1317" coordinates="-47.4 1.3 11.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1318" coordinates="36.5 12.0 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1319" coordinates="25.4 17.2 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1320" coordinates="27.8 20.3 36.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1321" coordinates="27.4 1.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1322" coordinates="45.3 17.2 198.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1323" coordinates="51.8 19.7 99.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1324" coordinates="-6.5 10.5 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1325" coordinates="18.0 -34.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1326" coordinates="-10.1 20.6 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1327" coordinates="-6.2 28.8 13.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1328" coordinates="11.5 5.2 48.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1329" coordinates="28.1 -6.0 26.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1330" coordinates="4.4 -9.2 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1331" coordinates="-35.1 -2.9 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1332" coordinates="-183.5 -17.6 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1333" coordinates="27.9 23.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1334" coordinates="-42.6 -2.0 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1335" coordinates="25.2 5.4 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1336" coordinates="27.1 10.2 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1337" coordinates="-19.7 -9.0 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1338" coordinates="20.3 14.7 48.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1339" coordinates="-20.6 -7.4 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1340" coordinates="23.2 21.9 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1341" coordinates="-4.8 7.0 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1342" coordinates="24.4 9.1 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1343" coordinates="30.5 19.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1344" coordinates="-14.1 12.3 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1345" coordinates="-36.3 -14.7 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1346" coordinates="71.0 42.7 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1347" coordinates="48.1 33.1 85.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1348" coordinates="-50.9 -0.9 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1349" coordinates="4.5 33.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1350" coordinates="-13.6 10.3 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1351" coordinates="18.0 8.0 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1352" coordinates="-5.5 5.0 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1353" coordinates="-6.2 -4.5 27.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1354" coordinates="15.1 9.7 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1355" coordinates="-29.9 -8.8 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1356" coordinates="-6.6 18.0 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1357" coordinates="7.0 58.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1358" coordinates="3.0 -6.0 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1359" coordinates="21.0 22.5 111.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1360" coordinates="5.4 17.6 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1361" coordinates="-41.9 -11.7 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1362" coordinates="5.4 15.0 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1363" coordinates="16.6 15.2 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1364" coordinates="-4.3 -10.9 25.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1365" coordinates="-15.8 10.2 27.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1366" coordinates="-29.5 -25.8 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1367" coordinates="-9.7 1.2 13.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1368" coordinates="11.6 10.9 26.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1369" coordinates="-1.5 24.2 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1370" coordinates="16.9 9.5 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1371" coordinates="1.8 3.7 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1372" coordinates="-33.4 -17.0 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1373" coordinates="11.4 5.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1374" coordinates="22.4 -25.2 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1375" coordinates="29.7 22.5 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1376" coordinates="21.2 54.8 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1377" coordinates="-39.6 -18.0 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1378" coordinates="92.2 -20.1 63.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1379" coordinates="29.0 -3.4 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1380" coordinates="-32.3 6.4 14.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1381" coordinates="18.3 47.0 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1382" coordinates="-42.5 -21.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1383" coordinates="-178.1 -77.0 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1384" coordinates="21.8 13.8 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1385" coordinates="20.7 17.5 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1386" coordinates="-39.5 -5.6 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1387" coordinates="22.7 19.3 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1388" coordinates="-35.5 4.5 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1389" coordinates="24.6 -4.0 19.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1390" coordinates="28.1 16.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1391" coordinates="3.2 -2.7 10.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1392" coordinates="9.1 6.1 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1393" coordinates="27.5 17.8 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1394" coordinates="23.1 15.7 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1395" coordinates="13.8 22.2 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1396" coordinates="9.4 22.3 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1397" coordinates="69.6 29.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1398" coordinates="37.6 -42.7 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1399" coordinates="24.2 15.8 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1400" coordinates="31.4 -6.5 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1401" coordinates="-58.6 -18.8 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1402" coordinates="15.8 44.9 22.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1403" coordinates="28.6 -80.0 85.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1404" coordinates="12.8 -1.8 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1405" coordinates="-51.6 10.1 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1406" coordinates="4.0 12.3 17.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1407" coordinates="-7.2 20.4 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1408" coordinates="12.4 13.5 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1409" coordinates="28.7 11.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1410" coordinates="25.3 21.5 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1411" coordinates="22.7 16.7 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1412" coordinates="-14.1 -7.9 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1413" coordinates="7.6 21.5 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1414" coordinates="-40.7 3.9 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1415" coordinates="22.7 5.3 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1416" coordinates="17.7 -0.9 25.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1417" coordinates="34.6 21.8 37.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1418" coordinates="4.8 -15.4 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1419" coordinates="24.7 9.0 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1420" coordinates="37.1 28.9 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1421" coordinates="-14.8 -36.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1422" coordinates="1.7 -16.3 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1423" coordinates="17.0 9.2 17.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1424" coordinates="-38.7 14.2 11.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1425" coordinates="-36.4 12.2 17.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1426" coordinates="-14.9 1.8 27.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1427" coordinates="-25.8 5.1 188.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1428" coordinates="13.4 8.9 20.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1429" coordinates="25.2 15.0 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1430" coordinates="-1.5 0.5 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1431" coordinates="-13.3 7.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1432" coordinates="15.8 16.1 17.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1433" coordinates="25.7 6.0 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1434" coordinates="-38.9 -2.8 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1435" coordinates="26.9 -1.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1436" coordinates="-19.7 -28.5 23.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1437" coordinates="2.1 5.6 23.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1438" coordinates="29.3 6.2 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1439" coordinates="23.9 19.4 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1440" coordinates="-12.3 8.1 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1441" coordinates="8.6 -2.8 16.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1442" coordinates="-46.4 -2.3 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1443" coordinates="13.6 -8.1 14.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1444" coordinates="3.6 8.6 26.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1445" coordinates="15.4 15.6 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1446" coordinates="13.8 45.9 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1447" coordinates="-34.1 -26.8 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1448" coordinates="-33.1 -16.1 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1449" coordinates="26.8 10.2 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1450" coordinates="56.9 40.4 25.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1451" coordinates="1.0 6.1 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1452" coordinates="-3.9 42.7 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1453" coordinates="9.1 3.1 25.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1454" coordinates="38.0 17.0 64.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1455" coordinates="13.9 -19.8 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1456" coordinates="-31.8 33.5 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1457" coordinates="68.0 31.2 40.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1458" coordinates="19.3 6.8 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1459" coordinates="25.3 5.7 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1460" coordinates="27.5 7.8 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1461" coordinates="21.5 20.5 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1462" coordinates="46.9 28.2 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1463" coordinates="35.2 11.3 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1464" coordinates="20.2 8.3 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1465" coordinates="-34.6 -23.3 156.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1466" coordinates="-28.7 -22.5 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1467" coordinates="-27.0 -5.6 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1468" coordinates="43.0 -11.2 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1469" coordinates="-39.0 -18.0 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1470" coordinates="19.0 -23.4 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1471" coordinates="-34.5 -25.7 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1472" coordinates="-23.8 2.9 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1473" coordinates="-50.5 -16.8 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1474" coordinates="-51.4 -25.0 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1475" coordinates="28.4 -14.9 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1476" coordinates="-21.9 -1.6 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1477" coordinates="28.3 35.6 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1478" coordinates="20.3 18.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1479" coordinates="18.4 20.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1480" coordinates="-3.8 -38.8 13.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1481" coordinates="-41.9 -13.5 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1482" coordinates="1.0 -9.2 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1483" coordinates="3.9 9.2 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1484" coordinates="-40.3 3.6 198.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1485" coordinates="-7.9 24.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1486" coordinates="99.5 65.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1487" coordinates="-171.9 -49.3 43.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1488" coordinates="-33.9 -37.9 21.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1489" coordinates="-40.2 -34.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1490" coordinates="25.0 7.3 36.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1491" coordinates="26.7 -5.3 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1492" coordinates="16.9 14.1 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1493" coordinates="14.5 21.6 19.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1494" coordinates="-40.6 -9.1 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1495" coordinates="31.0 4.9 17.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1496" coordinates="13.1 121.2 137.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1497" coordinates="-42.6 -23.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1498" coordinates="13.0 15.8 24.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1499" coordinates="-8.1 29.1 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1500" coordinates="-14.0 -29.4 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1501" coordinates="-22.8 -6.9 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1502" coordinates="19.2 11.5 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1503" coordinates="32.8 12.7 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1504" coordinates="-46.9 10.2 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1505" coordinates="-6.3 -4.8 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1506" coordinates="21.0 18.3 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1507" coordinates="20.2 26.4 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1508" coordinates="-149.5 -48.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1509" coordinates="-25.4 -3.7 15.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1510" coordinates="25.0 16.1 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1511" coordinates="-10.3 5.6 15.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1512" coordinates="-36.5 -16.2 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1513" coordinates="9.3 12.0 16.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1514" coordinates="8.4 -2.7 26.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1515" coordinates="26.7 47.7 80.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1516" coordinates="8.6 22.6 34.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1517" coordinates="9.6 -13.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1518" coordinates="29.7 26.5 27.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1519" coordinates="-10.3 -31.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1520" coordinates="-17.9 10.4 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1521" coordinates="11.5 13.2 67.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1522" coordinates="1.2 5.4 18.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1523" coordinates="4.8 2.4 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1524" coordinates="10.8 -10.9 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1525" coordinates="-53.1 6.2 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1526" coordinates="-8.2 15.0 22.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1527" coordinates="13.6 29.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1528" coordinates="2.9 -5.0 39.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1529" coordinates="43.9 16.2 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1530" coordinates="-36.3 -20.1 17.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1531" coordinates="19.1 5.1 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1532" coordinates="120.9 -143.0 106.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1533" coordinates="-22.4 12.7 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1534" coordinates="-57.4 -142.0 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1535" coordinates="-19.9 -24.6 20.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1536" coordinates="11.0 19.1 216.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1537" coordinates="-38.5 -20.4 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1538" coordinates="-28.6 -2.8 29.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1539" coordinates="153.8 14.4 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1540" coordinates="8.2 32.9 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1541" coordinates="55.9 -38.2 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1542" coordinates="27.9 11.7 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1543" coordinates="7.2 14.5 32.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1544" coordinates="9.4 23.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1545" coordinates="25.9 8.0 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1546" coordinates="27.5 21.9 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1547" coordinates="9.3 7.4 37.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1548" coordinates="512.9 90.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1549" coordinates="9.5 8.4 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1550" coordinates="4.0 0.1 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1551" coordinates="-45.2 -11.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1552" coordinates="40.0 -8.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1553" coordinates="93.0 67.6 72.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1554" coordinates="4.9 17.0 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1555" coordinates="-1.2 9.6 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1556" coordinates="-17.6 -18.2 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1557" coordinates="-24.3 -25.8 42.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1558" coordinates="-38.2 -7.0 18.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1559" coordinates="-2.1 5.7 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1560" coordinates="101.4 103.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1561" coordinates="27.8 12.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1562" coordinates="4.8 8.0 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1563" coordinates="-6.0 81.6 63.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1564" coordinates="33.1 -6.2 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1565" coordinates="-38.9 -7.2 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1566" coordinates="-29.0 -7.9 10.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1567" coordinates="13.1 20.3 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1568" coordinates="-17.9 -27.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1569" coordinates="19.1 26.5 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1570" coordinates="45.5 46.9 45.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1571" coordinates="-5.2 17.8 16.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1572" coordinates="0.8 13.4 67.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1573" coordinates="20.4 10.0 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1574" coordinates="26.8 15.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1575" coordinates="29.2 25.9 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1576" coordinates="-11.5 -10.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1577" coordinates="-23.2 -35.5 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1578" coordinates="-40.5 -15.3 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1579" coordinates="22.8 -12.7 21.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1580" coordinates="38.3 -5.3 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1581" coordinates="23.8 16.7 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1582" coordinates="-31.3 0.5 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1583" coordinates="32.3 10.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1584" coordinates="-22.2 3.8 67.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1585" coordinates="50.5 8.6 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1586" coordinates="-112.7 -32.1 103.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1587" coordinates="34.6 -4.0 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1588" coordinates="-79.2 -11.4 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1589" coordinates="6.6 -8.6 15.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1590" coordinates="21.6 1.8 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1591" coordinates="-36.1 -9.9 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1592" coordinates="11.2 2.6 24.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1593" coordinates="-51.7 -5.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1594" coordinates="15.5 21.4 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1595" coordinates="4.5 1.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1596" coordinates="18.9 34.6 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1597" coordinates="-14.2 -5.9 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1598" coordinates="16.0 10.8 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1599" coordinates="24.8 22.6 26.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1600" coordinates="6.7 -11.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1601" coordinates="5.5 3.5 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1602" coordinates="-16.0 9.8 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1603" coordinates="-4.3 12.8 54.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1604" coordinates="21.7 -7.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1605" coordinates="0.3 3.5 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1606" coordinates="30.4 9.9 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1607" coordinates="-1.7 15.9 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1608" coordinates="-51.7 17.7 14.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1609" coordinates="65.4 26.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1610" coordinates="20.1 10.8 13.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1611" coordinates="102.9 -7.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1612" coordinates="43.1 3.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1613" coordinates="-44.3 13.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1614" coordinates="-35.5 -22.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1615" coordinates="25.4 53.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1616" coordinates="32.5 -23.0 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1617" coordinates="22.7 24.8 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1618" coordinates="-41.9 -2.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1619" coordinates="-0.1 19.7 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1620" coordinates="-25.1 34.7 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1621" coordinates="16.8 10.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1622" coordinates="14.8 6.7 31.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1623" coordinates="-26.7 -1.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1624" coordinates="13.0 6.8 26.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1625" coordinates="18.9 3.8 17.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1626" coordinates="2.8 -19.5 5.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1627" coordinates="32.6 12.8 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1628" coordinates="-40.4 -4.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1629" coordinates="-15.0 0.5 25.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1630" coordinates="116.3 14.7 37.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1631" coordinates="50.1 -7.6 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1632" coordinates="-28.0 -29.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1633" coordinates="102.9 7.2 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1634" coordinates="-20.8 -15.3 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1635" coordinates="21.2 14.6 18.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1636" coordinates="33.1 4.5 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1637" coordinates="-110.2 -72.1 85.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1638" coordinates="94.0 33.6 41.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1639" coordinates="11.2 1.1 25.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1640" coordinates="-35.0 31.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1641" coordinates="4.2 -17.1 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1642" coordinates="-4.1 22.8 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1643" coordinates="17.5 36.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1644" coordinates="-45.6 -7.4 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1645" coordinates="25.7 8.7 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1646" coordinates="-8.0 -11.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1647" coordinates="14.3 14.8 15.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1648" coordinates="6.9 8.6 16.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1649" coordinates="-64.0 -53.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1650" coordinates="9.5 6.1 25.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1651" coordinates="-44.9 11.2 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1652" coordinates="-12.2 -15.5 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1653" coordinates="22.6 1.6 16.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1654" coordinates="-37.3 -21.2 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1655" coordinates="30.7 7.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1656" coordinates="-21.2 -8.2 22.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1657" coordinates="24.6 21.2 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1658" coordinates="-2.9 -37.3 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1659" coordinates="19.8 12.8 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1660" coordinates="18.7 -9.6 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1661" coordinates="15.9 8.5 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1662" coordinates="5.3 -4.3 13.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1663" coordinates="-45.6 19.7 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1664" coordinates="0.4 9.7 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1665" coordinates="50.2 38.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1666" coordinates="-3.0 0.7 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1667" coordinates="57.1 57.1 47.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1668" coordinates="-27.9 -64.0 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1669" coordinates="9.3 6.3 52.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1670" coordinates="22.2 -25.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1671" coordinates="4.2 10.1 47.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1672" coordinates="21.4 7.2 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1673" coordinates="14.8 15.8 37.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1674" coordinates="10.0 -0.2 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1675" coordinates="15.1 2.0 27.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1676" coordinates="-13.7 -34.2 159.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1677" coordinates="-13.2 -8.4 14.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1678" coordinates="-149.3 56.1 85.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1679" coordinates="12.9 30.6 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1680" coordinates="24.3 12.9 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1681" coordinates="-14.5 3.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1682" coordinates="-2.4 -30.4 15.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1683" coordinates="18.0 25.5 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1684" coordinates="-25.4 -21.1 14.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1685" coordinates="26.6 10.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1686" coordinates="-6.6 -15.7 26.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1687" coordinates="2.3 -18.5 51.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1688" coordinates="6.7 22.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1689" coordinates="-32.8 -12.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1690" coordinates="14.1 11.1 29.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1691" coordinates="21.9 16.1 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1692" coordinates="22.6 12.1 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1693" coordinates="28.2 -11.1 25.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1694" coordinates="-0.4 3.0 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1695" coordinates="-44.6 -7.1 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1696" coordinates="24.4 29.0 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1697" coordinates="28.4 -14.9 17.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1698" coordinates="22.5 22.2 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1699" coordinates="23.3 15.5 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1700" coordinates="4.8 10.6 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1701" coordinates="-10.8 -1.7 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1702" coordinates="35.7 5.6 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1703" coordinates="-25.0 -5.2 46.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1704" coordinates="-28.3 -28.5 11.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1705" coordinates="18.2 4.2 17.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1706" coordinates="-29.1 -14.4 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1707" coordinates="-24.2 1.5 12.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1708" coordinates="12.6 11.1 27.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1709" coordinates="24.2 -105.6 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1710" coordinates="31.1 29.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1711" coordinates="22.5 3.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1712" coordinates="15.2 10.2 25.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1713" coordinates="-187.8 -159.6 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1714" coordinates="31.1 10.2 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1715" coordinates="26.6 10.0 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1716" coordinates="89.5 27.4 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1717" coordinates="-3.6 25.6 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1718" coordinates="28.9 -5.8 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1719" coordinates="34.3 10.2 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1720" coordinates="13.2 -4.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1721" coordinates="-12.8 7.1 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1722" coordinates="52.6 68.6 103.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1723" coordinates="-39.8 -32.8 12.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1724" coordinates="26.3 11.2 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1725" coordinates="-62.2 -39.3 206.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1726" coordinates="5.0 12.4 25.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1727" coordinates="24.7 -73.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1728" coordinates="-5.6 -29.1 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1729" coordinates="-21.1 -20.3 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1730" coordinates="-6.5 -10.3 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1731" coordinates="-4.5 7.0 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1732" coordinates="-14.0 -21.3 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1733" coordinates="-12.4 23.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1734" coordinates="9.8 0.2 22.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1735" coordinates="16.0 13.0 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1736" coordinates="33.4 -5.5 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1737" coordinates="13.9 13.7 24.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1738" coordinates="-40.2 -9.2 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1739" coordinates="-39.8 8.0 33.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1740" coordinates="14.3 7.5 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1741" coordinates="19.0 5.3 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1742" coordinates="-4.6 0.2 14.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1743" coordinates="16.1 18.7 10.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1744" coordinates="25.5 11.0 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1745" coordinates="2.1 -3.9 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1746" coordinates="26.8 17.4 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1747" coordinates="18.6 28.7 25.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1748" coordinates="26.0 23.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1749" coordinates="2.1 37.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1750" coordinates="0.4 -3.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1751" coordinates="18.9 -1.8 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1752" coordinates="33.3 13.9 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1753" coordinates="12.9 7.1 49.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1754" coordinates="114.2 28.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1755" coordinates="65.0 52.7 89.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1756" coordinates="-28.7 -10.4 13.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1757" coordinates="31.7 18.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1758" coordinates="30.2 9.2 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1759" coordinates="17.7 21.0 10.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1760" coordinates="4.0 -7.3 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1761" coordinates="5.0 20.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1762" coordinates="-4.7 -71.8 92.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1763" coordinates="-34.9 -18.3 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1764" coordinates="9.9 14.5 20.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1765" coordinates="4.2 -1.7 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1766" coordinates="22.2 -1.3 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1767" coordinates="17.1 9.6 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1768" coordinates="35.8 -13.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1769" coordinates="24.0 2.8 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1770" coordinates="15.8 13.8 26.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1771" coordinates="20.0 8.0 19.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1772" coordinates="45.0 -0.3 113.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1773" coordinates="7.7 1.0 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1774" coordinates="21.9 13.4 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1775" coordinates="-36.0 -19.5 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1776" coordinates="26.6 12.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1777" coordinates="15.0 33.3 13.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1778" coordinates="15.5 -7.7 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1779" coordinates="2.9 7.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1780" coordinates="-10.9 3.0 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1781" coordinates="41.2 27.4 27.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1782" coordinates="-58.5 -2.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1783" coordinates="101.2 -12.8 113.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1784" coordinates="14.9 7.8 21.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1785" coordinates="11.6 12.2 16.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1786" coordinates="-12.7 -5.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1787" coordinates="15.0 9.7 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1788" coordinates="-2.2 19.5 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1789" coordinates="15.2 -3.8 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1790" coordinates="1.6 -3.1 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1791" coordinates="30.6 7.5 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1792" coordinates="16.1 18.4 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1793" coordinates="-22.7 4.1 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1794" coordinates="21.3 14.8 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1795" coordinates="13.4 8.4 12.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1796" coordinates="21.6 63.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1797" coordinates="-13.2 12.4 26.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1798" coordinates="-32.4 2.2 34.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1799" coordinates="2.5 1.6 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1800" coordinates="-9.5 19.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1801" coordinates="-3.0 30.9 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1802" coordinates="-20.7 -10.7 25.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1803" coordinates="9.6 4.9 20.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1804" coordinates="0.8 4.7 20.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1805" coordinates="-0.8 10.9 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1806" coordinates="24.9 32.6 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1807" coordinates="7.0 20.0 22.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1808" coordinates="1.5 18.4 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1809" coordinates="-40.6 -11.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1810" coordinates="-16.2 -20.2 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1811" coordinates="-48.5 12.9 16.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1812" coordinates="25.3 12.1 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1813" coordinates="-38.1 -16.7 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1814" coordinates="-12.7 -5.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1815" coordinates="16.2 12.6 21.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1816" coordinates="1.5 -2.1 17.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1817" coordinates="9.5 19.3 15.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1818" coordinates="-150.5 -287.8 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1819" coordinates="-21.3 -1.6 21.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1820" coordinates="4.9 -8.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1821" coordinates="-48.9 -19.6 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1822" coordinates="21.5 14.1 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1823" coordinates="16.6 9.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1824" coordinates="-9.5 16.5 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1825" coordinates="-16.6 -39.2 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1826" coordinates="-9.7 6.9 11.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1827" coordinates="19.4 12.5 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1828" coordinates="-45.0 4.0 14.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1829" coordinates="33.2 -22.3 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1830" coordinates="-0.4 1.3 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1831" coordinates="15.9 41.2 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1832" coordinates="12.1 7.8 26.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1833" coordinates="-3.3 11.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1834" coordinates="10.7 20.8 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1835" coordinates="45.6 17.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1836" coordinates="54.1 -4.6 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1837" coordinates="24.4 8.2 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1838" coordinates="-32.6 -12.7 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1839" coordinates="31.7 8.9 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1840" coordinates="-43.0 0.8 10.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1841" coordinates="38.0 -1.8 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1842" coordinates="-3.6 12.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1843" coordinates="140.1 154.0 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1844" coordinates="33.0 9.5 15.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1845" coordinates="14.5 11.8 18.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1846" coordinates="-0.7 2.1 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1847" coordinates="17.6 9.2 17.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1848" coordinates="-6.4 15.8 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1849" coordinates="8.3 13.0 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1850" coordinates="31.9 26.1 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1851" coordinates="8.8 15.4 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1852" coordinates="24.0 20.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1853" coordinates="-0.1 -0.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1854" coordinates="-8.5 -3.1 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1855" coordinates="14.9 9.2 15.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1856" coordinates="27.4 11.8 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1857" coordinates="27.0 3.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1858" coordinates="5.9 9.4 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1859" coordinates="4.5 5.4 19.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1860" coordinates="-1.9 4.4 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1861" coordinates="21.6 5.2 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1862" coordinates="6.6 21.3 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1863" coordinates="5.1 -7.8 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1864" coordinates="-5.5 9.9 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1865" coordinates="23.9 15.5 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1866" coordinates="-6.7 21.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1867" coordinates="18.2 7.5 19.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1868" coordinates="-35.6 -26.6 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1869" coordinates="16.6 -0.5 23.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1870" coordinates="27.9 1.4 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1871" coordinates="32.0 16.9 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1872" coordinates="-20.4 15.2 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1873" coordinates="-6.7 -16.6 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1874" coordinates="-34.5 -9.9 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1875" coordinates="-33.5 -17.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1876" coordinates="22.9 12.1 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1877" coordinates="9.7 12.2 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1878" coordinates="35.4 7.5 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1879" coordinates="22.6 9.5 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1880" coordinates="32.8 12.2 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1881" coordinates="43.5 11.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1882" coordinates="26.0 17.3 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1883" coordinates="34.5 8.3 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1884" coordinates="22.7 24.2 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1885" coordinates="24.5 17.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1886" coordinates="70.1 57.7 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1887" coordinates="6.9 10.9 22.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1888" coordinates="-13.3 -12.9 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1889" coordinates="0.1 12.2 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1890" coordinates="26.2 11.0 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1891" coordinates="16.2 -12.9 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1892" coordinates="26.1 13.3 21.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1893" coordinates="26.0 13.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1894" coordinates="30.3 11.1 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1895" coordinates="-16.9 1.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1896" coordinates="20.8 14.4 22.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1897" coordinates="24.4 17.5 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1898" coordinates="23.0 25.9 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1899" coordinates="-44.2 -16.2 13.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1900" coordinates="-47.2 -0.9 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1901" coordinates="-37.9 12.0 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1902" coordinates="-3.6 19.3 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1903" coordinates="23.3 4.9 16.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1904" coordinates="5.1 17.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1905" coordinates="4.3 5.3 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1906" coordinates="2.6 -13.3 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1907" coordinates="-5.3 13.0 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1908" coordinates="-41.4 -8.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1909" coordinates="2.8 42.0 14.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1910" coordinates="55.0 22.0 52.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1911" coordinates="-17.9 -5.9 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1912" coordinates="3.4 -16.3 16.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1913" coordinates="16.7 11.8 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1914" coordinates="10.6 25.9 37.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1915" coordinates="24.9 23.4 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1916" coordinates="10.5 14.0 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1917" coordinates="-36.7 -0.9 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1918" coordinates="11.4 -3.6 15.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1919" coordinates="-0.5 -3.7 13.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1920" coordinates="11.6 7.5 29.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1921" coordinates="-28.0 32.8 28.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1922" coordinates="-187.1 -61.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1923" coordinates="30.3 4.5 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1924" coordinates="-13.7 10.3 14.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1925" coordinates="-4.5 -7.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1926" coordinates="5.7 4.4 33.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1927" coordinates="27.3 11.3 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1928" coordinates="-1.8 6.3 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1929" coordinates="-43.8 19.1 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1930" coordinates="23.8 17.2 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1931" coordinates="10.6 1.5 28.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1932" coordinates="-8.2 1.8 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1933" coordinates="-42.2 8.0 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1934" coordinates="-14.5 -2.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1935" coordinates="-35.7 -22.5 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1936" coordinates="-8.9 50.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1937" coordinates="0.5 10.3 11.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1938" coordinates="7.2 12.2 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1939" coordinates="-38.2 -3.8 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1940" coordinates="-34.1 -21.9 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1941" coordinates="31.0 -9.5 16.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1942" coordinates="-46.3 120.8 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1943" coordinates="17.1 11.4 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1944" coordinates="22.1 26.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1945" coordinates="-22.4 -21.5 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1946" coordinates="129.3 -38.0 53.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1947" coordinates="-19.5 -12.7 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1948" coordinates="115.9 88.9 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1949" coordinates="22.9 12.4 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1950" coordinates="5.9 -41.7 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1951" coordinates="12.1 -5.0 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1952" coordinates="19.7 11.3 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1953" coordinates="-15.4 16.0 17.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1954" coordinates="14.3 2.9 15.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1955" coordinates="13.7 20.3 13.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1956" coordinates="-13.2 -7.8 27.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1957" coordinates="-24.3 -24.0 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1958" coordinates="26.9 -2.8 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1959" coordinates="6.7 21.3 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1960" coordinates="26.8 4.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1961" coordinates="-11.8 -6.7 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1962" coordinates="-37.0 6.3 19.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1963" coordinates="25.7 14.2 105.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1964" coordinates="33.6 10.2 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1965" coordinates="9.8 21.7 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1966" coordinates="27.9 6.0 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1967" coordinates="11.9 19.8 23.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1968" coordinates="17.1 -4.2 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1969" coordinates="26.2 22.9 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1970" coordinates="25.0 6.6 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1971" coordinates="9.4 -6.7 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1972" coordinates="-0.2 -3.5 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1973" coordinates="26.0 19.7 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1974" coordinates="5.9 -17.0 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1975" coordinates="39.9 8.2 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1976" coordinates="-35.4 24.9 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1977" coordinates="-32.6 -16.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1978" coordinates="9.3 63.8 44.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1979" coordinates="-41.1 -6.0 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1980" coordinates="-26.8 -10.7 17.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1981" coordinates="11.3 -13.2 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1982" coordinates="9.9 -1.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1983" coordinates="-35.3 -1.8 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1984" coordinates="-27.2 -22.5 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1985" coordinates="42.9 46.0 76.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1986" coordinates="27.8 12.4 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1987" coordinates="6.5 24.9 22.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1988" coordinates="-28.3 -26.1 12.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1989" coordinates="12.1 20.5 17.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1990" coordinates="-19.9 2.5 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1991" coordinates="-40.7 -8.8 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1992" coordinates="-28.6 -12.2 29.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1993" coordinates="3.2 -1.2 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1994" coordinates="-27.5 -13.6 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1995" coordinates="3.3 4.8 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1996" coordinates="20.7 13.4 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1997" coordinates="-68.1 65.5 109.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1998" coordinates="38.1 13.9 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-1999" coordinates="-36.0 -15.3 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2000" coordinates="-33.5 -10.8 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2001" coordinates="9.9 3.5 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2002" coordinates="-2.0 10.3 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2003" coordinates="25.3 10.5 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2004" coordinates="2.2 24.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2005" coordinates="48.9 40.2 55.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2006" coordinates="-39.4 -14.7 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2007" coordinates="14.1 4.1 15.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2008" coordinates="36.4 15.9 13.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2009" coordinates="-20.6 24.2 22.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2010" coordinates="86.6 61.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2011" coordinates="21.4 14.1 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2012" coordinates="-42.0 -11.2 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2013" coordinates="24.5 14.8 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2014" coordinates="-39.2 -22.5 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2015" coordinates="63.2 30.9 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2016" coordinates="4.3 -4.5 13.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2017" coordinates="-9.5 -14.0 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2018" coordinates="-49.6 -26.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2019" coordinates="26.2 3.8 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2020" coordinates="-9.6 -14.8 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2021" coordinates="14.1 64.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2022" coordinates="-10.4 15.0 19.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2023" coordinates="5.4 6.2 17.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2024" coordinates="12.0 15.1 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2025" coordinates="10.8 -1.3 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2026" coordinates="-32.1 -5.7 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2027" coordinates="30.2 12.0 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2028" coordinates="-24.9 80.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2029" coordinates="84.6 12.1 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2030" coordinates="11.4 32.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2031" coordinates="-0.1 -1.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2032" coordinates="-11.5 6.0 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2033" coordinates="12.4 10.6 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2034" coordinates="-39.9 7.0 13.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2035" coordinates="-12.7 -4.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2036" coordinates="-52.9 -25.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2037" coordinates="-41.4 -4.2 15.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2038" coordinates="34.2 7.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2039" coordinates="9.4 13.4 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2040" coordinates="26.4 9.7 11.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2041" coordinates="23.8 31.1 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2042" coordinates="26.2 6.9 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2043" coordinates="36.2 -18.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2044" coordinates="15.5 14.5 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2045" coordinates="13.4 -57.6 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2046" coordinates="23.1 -6.1 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2047" coordinates="-30.5 -0.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2048" coordinates="26.6 13.1 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2049" coordinates="30.2 9.6 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2050" coordinates="8.8 23.0 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2051" coordinates="13.4 23.5 31.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2052" coordinates="8.5 -16.8 19.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2053" coordinates="26.9 14.7 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2054" coordinates="9.3 -15.8 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2055" coordinates="9.8 4.4 22.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2056" coordinates="1.0 12.4 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2057" coordinates="4.6 13.6 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2058" coordinates="22.3 17.9 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2059" coordinates="15.1 16.7 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2060" coordinates="73.7 130.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2061" coordinates="-18.8 -0.6 37.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2062" coordinates="-211.8 -33.1 13.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2063" coordinates="15.0 22.1 14.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2064" coordinates="8.3 4.5 22.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2065" coordinates="-16.2 -19.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2066" coordinates="21.9 5.6 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2067" coordinates="-25.1 -53.8 23.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2068" coordinates="33.3 37.9 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2069" coordinates="22.2 8.9 18.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2070" coordinates="-4.7 11.3 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2071" coordinates="-3.3 2.9 15.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2072" coordinates="11.7 9.7 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2073" coordinates="34.0 13.1 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2074" coordinates="-28.8 -13.6 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2075" coordinates="24.0 18.3 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2076" coordinates="-16.1 -335.1 78.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2077" coordinates="-38.3 -18.6 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2078" coordinates="2.8 -14.8 17.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2079" coordinates="78.0 50.1 40.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2080" coordinates="-54.8 -45.1 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2081" coordinates="20.7 18.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2082" coordinates="11.9 41.3 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2083" coordinates="-46.6 -4.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2084" coordinates="-15.6 7.2 37.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2085" coordinates="21.2 -7.1 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2086" coordinates="18.7 -9.2 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2087" coordinates="25.5 11.4 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2088" coordinates="-2.5 12.8 38.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2089" coordinates="-42.0 -1.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2090" coordinates="25.3 45.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2091" coordinates="-42.7 1.8 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2092" coordinates="-70.9 -1.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2093" coordinates="36.0 7.4 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2094" coordinates="-4.7 2.0 28.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2095" coordinates="4.0 4.4 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2096" coordinates="24.7 30.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2097" coordinates="5.0 -3.8 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2098" coordinates="-34.8 -6.2 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2099" coordinates="-12.1 -2.9 19.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2100" coordinates="36.6 19.9 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2101" coordinates="-44.0 -17.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2102" coordinates="-18.0 1.0 14.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2103" coordinates="26.2 12.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2104" coordinates="-35.7 1.6 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2105" coordinates="-20.0 -3.2 10.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2106" coordinates="5.2 17.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2107" coordinates="-2.4 7.3 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2108" coordinates="-11.1 7.3 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2109" coordinates="-4.4 7.4 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2110" coordinates="28.8 -13.5 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2111" coordinates="25.4 -0.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2112" coordinates="29.1 37.1 10.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2113" coordinates="23.0 3.5 19.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2114" coordinates="-36.4 -29.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2115" coordinates="28.7 11.4 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2116" coordinates="17.0 18.0 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2117" coordinates="99.4 24.2 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2118" coordinates="12.5 25.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2119" coordinates="-28.3 -16.7 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2120" coordinates="5.5 6.7 17.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2121" coordinates="-1.4 2.0 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2122" coordinates="23.3 38.3 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2123" coordinates="21.9 -1.6 15.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2124" coordinates="83.3 63.4 43.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2125" coordinates="24.3 -31.0 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2126" coordinates="-2.6 -7.5 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2127" coordinates="23.5 11.0 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2128" coordinates="22.8 7.8 14.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2129" coordinates="-43.0 -6.0 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2130" coordinates="4.1 13.1 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2131" coordinates="18.1 12.8 24.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2132" coordinates="-13.4 -4.1 27.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2133" coordinates="12.8 7.4 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2134" coordinates="16.3 11.3 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2135" coordinates="24.2 15.3 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2136" coordinates="23.6 1.4 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2137" coordinates="17.6 49.7 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2138" coordinates="12.4 18.7 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2139" coordinates="13.4 7.9 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2140" coordinates="31.5 14.4 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2141" coordinates="17.5 -5.1 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2142" coordinates="3.6 -45.7 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2143" coordinates="22.0 23.4 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2144" coordinates="-91.6 -31.9 134.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2145" coordinates="2.6 2.9 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2146" coordinates="27.0 15.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2147" coordinates="14.5 20.3 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2148" coordinates="-30.0 17.8 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2149" coordinates="-4.7 -2.3 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2150" coordinates="-41.4 -10.4 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2151" coordinates="-43.2 -35.3 173.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2152" coordinates="22.9 9.8 16.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2153" coordinates="29.7 14.7 10.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2154" coordinates="-114.2 114.5 66.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2155" coordinates="50.6 -8.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2156" coordinates="-59.9 -26.2 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2157" coordinates="32.8 25.0 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2158" coordinates="16.0 23.4 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2159" coordinates="-39.1 -2.3 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2160" coordinates="-4.3 -13.1 36.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2161" coordinates="-48.7 -2.4 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2162" coordinates="31.1 5.8 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2163" coordinates="36.0 13.8 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2164" coordinates="-18.5 11.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2165" coordinates="-25.2 -19.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2166" coordinates="0.9 82.7 173.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2167" coordinates="14.4 18.2 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2168" coordinates="-5.5 13.0 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2169" coordinates="7.2 12.7 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2170" coordinates="-21.2 -18.0 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2171" coordinates="26.7 9.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2172" coordinates="14.4 -4.7 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2173" coordinates="-6.6 3.3 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2174" coordinates="15.0 11.3 17.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2175" coordinates="11.8 5.0 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2176" coordinates="-33.0 -5.2 40.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2177" coordinates="80.3 81.0 11.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2178" coordinates="2.9 -37.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2179" coordinates="-3.2 20.8 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2180" coordinates="-8.2 -4.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2181" coordinates="-29.7 -7.5 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2182" coordinates="-40.9 6.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2183" coordinates="136.0 -22.9 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2184" coordinates="83.1 48.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2185" coordinates="17.0 13.9 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2186" coordinates="-38.9 -32.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2187" coordinates="-4.7 4.9 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2188" coordinates="-21.9 22.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2189" coordinates="-12.9 -9.2 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2190" coordinates="16.6 1.9 23.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2191" coordinates="6.3 0.9 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2192" coordinates="-20.6 -7.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2193" coordinates="23.4 17.8 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2194" coordinates="-49.8 23.9 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2195" coordinates="15.6 10.4 19.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2196" coordinates="-42.3 6.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2197" coordinates="40.4 7.0 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2198" coordinates="-28.0 -22.8 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2199" coordinates="33.6 25.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2200" coordinates="32.1 14.6 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2201" coordinates="27.8 13.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2202" coordinates="18.0 15.2 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2203" coordinates="53.8 114.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2204" coordinates="21.1 11.7 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2205" coordinates="-13.2 13.5 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2206" coordinates="-11.2 12.9 10.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2207" coordinates="9.3 23.2 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2208" coordinates="10.7 -39.0 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2209" coordinates="-43.5 -1.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2210" coordinates="22.0 10.1 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2211" coordinates="19.4 18.0 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2212" coordinates="13.6 4.3 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2213" coordinates="13.1 16.1 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2214" coordinates="23.7 17.5 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2215" coordinates="2.8 -2.2 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2216" coordinates="9.9 7.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2217" coordinates="102.1 4.1 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2218" coordinates="-16.2 19.4 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2219" coordinates="2.5 15.6 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2220" coordinates="28.3 1.3 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2221" coordinates="-54.2 -5.7 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2222" coordinates="-2.3 2.5 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2223" coordinates="20.9 8.3 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2224" coordinates="4.9 2.0 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2225" coordinates="13.8 7.9 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2226" coordinates="-47.3 -13.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2227" coordinates="70.8 81.3 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2228" coordinates="17.2 12.5 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2229" coordinates="22.8 18.1 18.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2230" coordinates="-30.6 -13.4 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2231" coordinates="17.6 21.4 57.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2232" coordinates="-0.4 3.3 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2233" coordinates="35.1 -27.4 158.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2234" coordinates="8.5 10.1 24.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2235" coordinates="-7.1 9.2 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2236" coordinates="20.8 9.2 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2237" coordinates="11.6 3.8 31.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2238" coordinates="38.5 3.6 261.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2239" coordinates="20.0 15.3 10.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2240" coordinates="27.4 18.9 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2241" coordinates="11.1 13.3 16.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2242" coordinates="-33.8 -15.4 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2243" coordinates="-41.3 -14.4 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2244" coordinates="-38.4 -13.4 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2245" coordinates="14.6 -4.7 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2246" coordinates="17.5 33.6 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2247" coordinates="5.7 1.5 19.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2248" coordinates="-52.9 -2.8 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2249" coordinates="-8.9 38.2 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2250" coordinates="-36.2 2.4 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2251" coordinates="33.3 18.8 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2252" coordinates="25.2 20.1 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2253" coordinates="-31.7 -26.4 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2254" coordinates="11.5 10.0 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2255" coordinates="25.6 0.4 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2256" coordinates="-24.4 -13.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2257" coordinates="25.3 15.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2258" coordinates="23.6 6.7 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2259" coordinates="-6.2 19.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2260" coordinates="-11.0 6.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2261" coordinates="10.9 19.1 22.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2262" coordinates="-5.1 6.0 21.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2263" coordinates="13.9 22.3 23.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2264" coordinates="9.2 -7.8 18.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2265" coordinates="-37.5 -49.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2266" coordinates="15.6 3.5 24.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2267" coordinates="40.0 22.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2268" coordinates="-25.4 0.2 30.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2269" coordinates="29.8 22.9 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2270" coordinates="-44.8 -16.7 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2271" coordinates="31.9 16.1 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2272" coordinates="6.8 3.5 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2273" coordinates="29.6 17.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2274" coordinates="-2.8 20.0 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2275" coordinates="4.2 7.2 23.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2276" coordinates="-17.2 -6.4 17.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2277" coordinates="50.9 37.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2278" coordinates="32.4 -10.7 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2279" coordinates="47.8 16.3 73.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2280" coordinates="-50.3 -18.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2281" coordinates="-51.1 -8.7 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2282" coordinates="-2.0 -1.5 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2283" coordinates="4.6 -6.9 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2284" coordinates="5.0 22.9 10.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2285" coordinates="-17.3 -14.6 66.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2286" coordinates="23.7 9.8 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2287" coordinates="19.6 25.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2288" coordinates="26.6 -6.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2289" coordinates="5.8 -3.5 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2290" coordinates="36.9 5.5 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2291" coordinates="32.4 9.2 16.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2292" coordinates="27.3 4.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2293" coordinates="-36.1 -14.1 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2294" coordinates="6.9 -1.7 16.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2295" coordinates="16.3 6.2 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2296" coordinates="29.6 7.4 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2297" coordinates="19.7 17.4 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2298" coordinates="-49.7 -30.7 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2299" coordinates="34.8 20.4 20.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2300" coordinates="-50.4 20.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2301" coordinates="-51.2 -9.9 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2302" coordinates="7.0 4.7 17.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2303" coordinates="10.8 2.5 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2304" coordinates="25.1 13.7 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2305" coordinates="9.5 21.3 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2306" coordinates="7.9 11.0 24.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2307" coordinates="35.6 75.8 36.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2308" coordinates="25.9 0.5 28.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2309" coordinates="-29.5 -9.2 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2310" coordinates="205.7 90.4 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2311" coordinates="-39.3 -4.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2312" coordinates="23.4 13.6 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2313" coordinates="-48.6 -1.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2314" coordinates="-31.6 -8.2 86.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2315" coordinates="-49.0 5.3 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2316" coordinates="-14.2 -13.4 15.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2317" coordinates="26.3 8.7 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2318" coordinates="-25.1 -28.1 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2319" coordinates="-5.2 14.8 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2320" coordinates="41.8 73.2 107.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2321" coordinates="-9.9 -2.3 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2322" coordinates="24.3 13.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2323" coordinates="31.7 19.2 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2324" coordinates="-12.6 -1.6 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2325" coordinates="-31.7 -18.5 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2326" coordinates="-67.8 -35.9 149.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2327" coordinates="33.7 -19.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2328" coordinates="17.3 22.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2329" coordinates="6.3 10.2 18.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2330" coordinates="-37.7 -41.6 156.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2331" coordinates="-41.4 26.3 33.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2332" coordinates="-40.9 1.0 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2333" coordinates="32.0 -21.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2334" coordinates="44.8 30.7 103.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2335" coordinates="11.5 0.6 20.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2336" coordinates="23.5 -2.9 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2337" coordinates="18.3 17.5 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2338" coordinates="25.1 12.2 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2339" coordinates="-24.5 -13.4 39.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2340" coordinates="-34.7 -4.4 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2341" coordinates="-34.8 -36.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2342" coordinates="45.2 12.6 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2343" coordinates="-40.9 -13.2 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2344" coordinates="37.2 29.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2345" coordinates="-39.8 -5.8 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2346" coordinates="-79.7 196.5 105.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2347" coordinates="-2.2 10.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2348" coordinates="32.9 4.9 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2349" coordinates="34.1 14.3 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2350" coordinates="4.3 7.2 24.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2351" coordinates="-6.8 9.7 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2352" coordinates="-52.6 -15.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2353" coordinates="38.5 44.1 54.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2354" coordinates="-35.7 -11.6 55.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2355" coordinates="6.0 4.4 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2356" coordinates="24.4 19.0 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2357" coordinates="22.2 13.7 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2358" coordinates="-1.7 8.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2359" coordinates="-31.9 -10.9 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2360" coordinates="-22.7 10.3 23.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2361" coordinates="-28.2 -9.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2362" coordinates="21.5 21.9 8.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2363" coordinates="6.8 -8.6 18.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2364" coordinates="22.5 25.3 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2365" coordinates="16.3 2.2 17.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2366" coordinates="10.8 6.2 17.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2367" coordinates="0.0 -52.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2368" coordinates="-46.1 -19.3 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2369" coordinates="42.2 11.2 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2370" coordinates="17.3 -2.7 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2371" coordinates="-49.7 -9.9 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2372" coordinates="26.9 18.9 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2373" coordinates="11.6 13.7 65.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2374" coordinates="33.5 9.5 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2375" coordinates="0.3 12.9 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2376" coordinates="20.3 -3.1 36.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2377" coordinates="14.2 16.7 24.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2378" coordinates="-7.5 -18.4 38.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2379" coordinates="7.8 17.4 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2380" coordinates="76.6 -63.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2381" coordinates="-42.9 0.0 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2382" coordinates="17.0 -10.8 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2383" coordinates="-2.1 0.3 16.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2384" coordinates="-2.9 -7.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2385" coordinates="-26.8 -23.7 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2386" coordinates="19.1 0.6 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2387" coordinates="-13.3 3.3 17.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2388" coordinates="21.4 1.7 20.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2389" coordinates="-38.1 -21.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2390" coordinates="35.4 -30.1 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2391" coordinates="28.8 6.0 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2392" coordinates="-31.1 11.9 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2393" coordinates="-8.5 3.9 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2394" coordinates="10.7 -10.6 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2395" coordinates="-2.3 -106.9 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2396" coordinates="-33.8 -6.1 22.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2397" coordinates="9.2 -14.8 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2398" coordinates="17.7 18.2 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2399" coordinates="-12.7 -18.5 25.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2400" coordinates="39.1 11.5 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2401" coordinates="17.3 36.2 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2402" coordinates="15.4 18.1 20.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2403" coordinates="64.3 47.4 118.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2404" coordinates="-8.4 -8.5 20.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2405" coordinates="6.0 10.4 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2406" coordinates="14.5 2.6 18.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2407" coordinates="-16.1 3.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2408" coordinates="31.5 14.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2409" coordinates="-0.4 51.0 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2410" coordinates="13.8 -6.0 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2411" coordinates="-6.4 -1.2 48.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2412" coordinates="34.4 14.3 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2413" coordinates="17.9 2.2 34.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2414" coordinates="8.0 8.4 21.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2415" coordinates="-34.1 -31.1 23.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2416" coordinates="20.9 20.2 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2417" coordinates="-21.5 6.2 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2418" coordinates="-4.6 -9.3 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2419" coordinates="-24.9 2.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2420" coordinates="36.6 21.8 71.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2421" coordinates="-43.6 -10.6 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2422" coordinates="9.1 2.7 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2423" coordinates="-39.4 -1.8 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2424" coordinates="1.6 18.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2425" coordinates="-33.8 -37.9 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2426" coordinates="-42.1 21.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2427" coordinates="15.8 -0.1 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2428" coordinates="10.5 4.5 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2429" coordinates="28.1 12.2 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2430" coordinates="25.7 15.0 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2431" coordinates="-45.4 -34.0 11.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2432" coordinates="8.7 11.3 28.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2433" coordinates="2.6 5.0 31.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2434" coordinates="-41.0 -21.0 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2435" coordinates="11.7 8.8 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2436" coordinates="-9.3 16.7 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2437" coordinates="4.9 3.0 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2438" coordinates="-0.7 -13.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2439" coordinates="21.7 9.1 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2440" coordinates="14.0 20.8 13.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2441" coordinates="28.6 16.1 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2442" coordinates="27.5 21.9 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2443" coordinates="28.7 9.5 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2444" coordinates="-5.8 9.9 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2445" coordinates="-5.0 -1.7 47.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2446" coordinates="24.4 -1.0 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2447" coordinates="4.7 -22.8 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2448" coordinates="-13.9 -10.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2449" coordinates="10.6 17.0 20.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2450" coordinates="-3.3 -1.7 16.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2451" coordinates="5.1 18.7 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2452" coordinates="11.3 12.2 17.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2453" coordinates="-12.7 -13.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2454" coordinates="-21.9 3.0 13.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2455" coordinates="-43.4 -3.0 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2456" coordinates="18.0 22.4 14.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2457" coordinates="-2.3 23.9 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2458" coordinates="-52.3 12.5 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2459" coordinates="6.5 27.3 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2460" coordinates="2.0 19.6 26.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2461" coordinates="12.5 85.7 62.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2462" coordinates="-22.0 39.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2463" coordinates="-11.3 -6.2 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2464" coordinates="-11.5 2.5 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2465" coordinates="21.6 -3.1 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2466" coordinates="3.5 14.2 15.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2467" coordinates="188.4 210.2 442.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2468" coordinates="-41.9 0.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2469" coordinates="26.7 23.4 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2470" coordinates="21.4 18.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2471" coordinates="30.0 -3.9 23.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2472" coordinates="-5.5 -22.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2473" coordinates="22.7 -2.9 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2474" coordinates="28.2 19.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2475" coordinates="17.8 12.9 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2476" coordinates="-33.1 -22.9 47.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2477" coordinates="10.5 13.6 77.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2478" coordinates="27.8 -28.0 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2479" coordinates="11.7 -6.4 10.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2480" coordinates="9.5 18.6 21.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2481" coordinates="-26.5 1.2 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2482" coordinates="3.4 12.4 19.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2483" coordinates="-40.8 0.9 132.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2484" coordinates="-38.5 20.7 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2485" coordinates="71.7 86.2 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2486" coordinates="5.2 16.9 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2487" coordinates="35.7 9.6 18.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2488" coordinates="15.9 15.7 23.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2489" coordinates="28.8 29.2 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2490" coordinates="25.4 23.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2491" coordinates="7.7 3.1 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2492" coordinates="15.3 -7.2 16.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2493" coordinates="-3.1 6.7 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2494" coordinates="23.5 13.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2495" coordinates="24.0 13.3 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2496" coordinates="23.1 15.1 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2497" coordinates="22.6 13.7 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2498" coordinates="12.1 4.1 18.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-    <peer id="peer-2499" coordinates="-32.7 -13.3 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-  </AS>
-</platform> 
index 2d72aed..eaee214 100644 (file)
@@ -1,3 +1,8 @@
+# This data was retrieved from the OptorSim configuration files. 
+# Use the generate_peer_platform.pl script to turn it into a SimGrid platform file.
+#
+# See also https://pdos.csail.mit.edu/archive/p2psim/kingdata/
+#
 0 -30.8 -183.3 h 0.4 
 1 -1.3 3.4 h 5.4 
 2 6.6 6.7 h 7.7 
diff --git a/examples/platforms/syscoord/median_p2psim.xml b/examples/platforms/syscoord/median_p2psim.xml
deleted file mode 100644 (file)
index 7e2bd26..0000000
+++ /dev/null
@@ -1,1751 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-
-  <config id="General">
-    <prop id="network/coordinates" value="yes"></prop>
-  </config>
-
-  <AS  id="AS0"  routing="Vivaldi">
-    <peer id="peer-0" coordinates="-30.8 -183.3 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1" coordinates="-1.3 3.4 5.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-2" coordinates="6.6 6.7 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-3" coordinates="-16.7 19.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-4" coordinates="7.8 5.6 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-5" coordinates="-5.9 -4.4 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-6" coordinates="0.0 -5.0 11.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-7" coordinates="0.3 -4.1 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-8" coordinates="-1.3 -10.9 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-9" coordinates="2.3 -5.9 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-10" coordinates="2.9 -3.0 8.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-11" coordinates="4.3 4.7 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-12" coordinates="3.0 -1.0 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-13" coordinates="8.2 -4.9 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-14" coordinates="6.5 -0.9 16.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-15" coordinates="9.1 -3.9 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-16" coordinates="-6.0 18.8 10.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-17" coordinates="4.6 1.3 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-18" coordinates="6.0 -12.0 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-19" coordinates="3.3 10.1 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-20" coordinates="10.6 0.8 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-21" coordinates="-6.3 15.6 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-22" coordinates="-1.6 2.5 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-23" coordinates="-3.4 1.9 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-24" coordinates="-10.0 -1.7 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-25" coordinates="-8.7 -2.3 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-26" coordinates="-10.6 -9.4 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-27" coordinates="-0.6 -0.2 15.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-28" coordinates="8.4 -11.4 18.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-29" coordinates="0.3 8.6 12.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-30" coordinates="5.5 -10.3 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-31" coordinates="-0.2 -4.9 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-32" coordinates="5.2 5.2 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-33" coordinates="9.4 -9.5 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-34" coordinates="5.8 -4.9 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-35" coordinates="1.9 -7.6 22.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-36" coordinates="-1.1 0.7 15.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-37" coordinates="7.6 -0.2 44.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-38" coordinates="8.9 19.6 23.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-39" coordinates="0.3 0.3 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-40" coordinates="7.0 12.5 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-41" coordinates="4.2 6.9 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-42" coordinates="1.4 -9.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-43" coordinates="0.6 1.4 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-44" coordinates="0.4 -5.5 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-45" coordinates="6.9 2.6 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-46" coordinates="6.9 3.0 10.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-47" coordinates="1.4 -6.6 30.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-48" coordinates="3.4 17.4 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-49" coordinates="10.5 -6.6 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-50" coordinates="-17.2 19.6 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-51" coordinates="8.5 24.4 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-52" coordinates="-4.0 -1.1 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-53" coordinates="-4.3 -17.1 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-54" coordinates="-5.7 -1.2 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-55" coordinates="-6.4 35.2 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-56" coordinates="-0.3 1.1 31.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-57" coordinates="1.8 -8.2 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-58" coordinates="2.3 2.6 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-59" coordinates="3.6 0.3 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-60" coordinates="13.8 -10.9 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-61" coordinates="-1.0 -9.6 18.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-62" coordinates="14.1 20.7 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-63" coordinates="18.3 -11.0 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-64" coordinates="7.0 -1.6 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-65" coordinates="-6.8 -13.5 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-66" coordinates="10.6 -9.6 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-67" coordinates="-0.5 -3.8 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-68" coordinates="8.5 -8.8 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-69" coordinates="1.4 -6.1 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-70" coordinates="0.6 -2.5 10.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-71" coordinates="-11.5 -6.8 24.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-72" coordinates="1.0 20.4 14.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-73" coordinates="-2.2 19.5 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-74" coordinates="-9.6 -5.1 13.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-75" coordinates="-0.6 0.6 13.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-76" coordinates="8.6 24.5 13.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-77" coordinates="-0.4 8.6 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-78" coordinates="-11.7 34.5 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-79" coordinates="-10.6 22.8 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-80" coordinates="9.1 -15.4 45.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-81" coordinates="20.3 -5.0 35.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-82" coordinates="-3.0 -6.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-83" coordinates="0.4 30.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-84" coordinates="24.2 -9.9 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-85" coordinates="2.6 -8.5 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-86" coordinates="4.7 -8.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-87" coordinates="-2.9 23.9 29.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-88" coordinates="1.7 -5.0 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-89" coordinates="77.3 8.0 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-90" coordinates="11.6 -8.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-91" coordinates="10.1 -9.9 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-92" coordinates="2.0 -62.0 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-93" coordinates="12.5 6.8 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-94" coordinates="-8.1 -10.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-95" coordinates="16.4 -6.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-96" coordinates="-11.8 25.7 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-97" coordinates="-12.3 24.3 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-98" coordinates="-0.2 25.3 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-99" coordinates="7.2 -16.5 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-100" coordinates="11.7 -7.9 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-101" coordinates="0.1 -14.6 29.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-102" coordinates="7.1 -2.5 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-103" coordinates="0.4 -54.7 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-104" coordinates="-0.8 0.8 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-105" coordinates="-5.6 -4.8 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-106" coordinates="13.8 2.3 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-107" coordinates="-0.4 -12.9 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-108" coordinates="-3.0 17.7 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-109" coordinates="-13.3 8.2 14.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-110" coordinates="28.3 51.7 50.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-111" coordinates="-3.6 3.8 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-112" coordinates="8.6 20.3 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-113" coordinates="6.2 -8.3 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-114" coordinates="-3.6 12.6 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-115" coordinates="-1.6 21.5 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-116" coordinates="-4.7 -1.4 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-117" coordinates="21.7 -12.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-118" coordinates="9.4 -1.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-119" coordinates="24.1 -66.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-120" coordinates="0.9 -41.4 28.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-121" coordinates="3.6 -70.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-122" coordinates="26.4 -63.9 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-123" coordinates="-13.6 -63.4 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-124" coordinates="19.6 -55.9 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-125" coordinates="12.3 -62.6 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-126" coordinates="-7.7 -64.3 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-127" coordinates="10.6 -76.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-128" coordinates="-55.2 82.5 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-129" coordinates="-46.5 83.3 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-130" coordinates="-54.6 125.3 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-131" coordinates="3.0 -5.7 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-132" coordinates="7.6 0.9 17.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-133" coordinates="26.6 -4.8 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-134" coordinates="-5.6 -47.0 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-135" coordinates="13.4 -56.7 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-136" coordinates="7.3 -3.1 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-137" coordinates="5.7 -54.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-138" coordinates="18.6 1.7 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-139" coordinates="17.2 -6.8 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-140" coordinates="6.8 -6.8 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-141" coordinates="4.1 -2.7 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-142" coordinates="7.1 -8.1 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-143" coordinates="-0.4 2.7 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-144" coordinates="24.2 -4.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-145" coordinates="-0.4 -2.7 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-146" coordinates="32.9 -24.9 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-147" coordinates="22.5 -42.6 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-148" coordinates="10.6 -54.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-149" coordinates="-12.7 75.5 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-150" coordinates="-10.6 73.4 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-151" coordinates="70.5 94.3 11.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-152" coordinates="122.9 -24.7 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-153" coordinates="-47.3 61.8 15.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-154" coordinates="-31.3 81.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-155" coordinates="-15.0 23.7 57.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-156" coordinates="48.3 105.0 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-157" coordinates="10.0 -14.1 117.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-158" coordinates="2.8 -57.8 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-159" coordinates="-10.2 0.1 14.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-160" coordinates="4.8 -51.0 10.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-161" coordinates="1.9 -47.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-162" coordinates="3.6 -12.0 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-163" coordinates="31.3 -11.8 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-164" coordinates="2.2 18.2 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-165" coordinates="-9.7 25.4 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-166" coordinates="-11.1 -48.9 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-167" coordinates="8.7 -1.3 22.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-168" coordinates="59.8 101.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-169" coordinates="-0.3 -9.0 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-170" coordinates="18.2 -60.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-171" coordinates="6.4 -54.9 10.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-172" coordinates="12.8 -52.7 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-173" coordinates="-4.5 -47.8 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-174" coordinates="6.7 -7.9 8.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-175" coordinates="11.8 -52.7 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-176" coordinates="9.9 94.6 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-177" coordinates="9.7 126.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-178" coordinates="-17.5 52.9 53.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-179" coordinates="-30.1 63.8 51.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-180" coordinates="-24.4 52.4 48.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-181" coordinates="-8.8 27.4 73.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-182" coordinates="14.4 59.2 42.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-183" coordinates="-20.0 101.7 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-184" coordinates="6.4 -16.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-185" coordinates="1.7 -7.5 20.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-186" coordinates="-27.4 27.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-187" coordinates="-0.3 4.5 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-188" coordinates="1.6 29.0 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-189" coordinates="-4.4 -6.9 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-190" coordinates="8.2 -60.4 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-191" coordinates="-1.6 3.1 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-192" coordinates="0.5 1.5 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-193" coordinates="1.0 -58.1 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-194" coordinates="-17.8 -59.9 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-195" coordinates="8.7 -58.9 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-196" coordinates="22.8 -10.7 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-197" coordinates="2.7 -5.8 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-198" coordinates="7.2 -9.6 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-199" coordinates="5.8 26.9 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-200" coordinates="30.6 12.8 64.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-201" coordinates="-0.1 -3.3 85.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-202" coordinates="4.0 5.3 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-203" coordinates="-4.0 -49.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-204" coordinates="7.9 -51.6 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-205" coordinates="2.4 -53.0 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-206" coordinates="4.8 -1.5 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-207" coordinates="1.4 16.1 81.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-208" coordinates="52.3 79.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-209" coordinates="11.5 -18.0 65.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-210" coordinates="-6.0 -64.0 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-211" coordinates="-0.7 7.9 25.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-212" coordinates="25.3 -61.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-213" coordinates="5.6 -58.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-214" coordinates="-39.5 100.5 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-215" coordinates="5.8 21.1 13.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-216" coordinates="-12.0 -4.3 79.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-217" coordinates="5.2 -6.8 15.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-218" coordinates="2.6 6.5 13.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-219" coordinates="-0.0 4.6 12.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-220" coordinates="-6.8 -47.6 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-221" coordinates="23.7 -34.1 30.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-222" coordinates="-55.1 64.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-223" coordinates="-0.6 76.7 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-224" coordinates="-36.0 97.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-225" coordinates="-16.1 -58.9 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-226" coordinates="-0.2 -9.1 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-227" coordinates="7.3 -6.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-228" coordinates="37.7 46.5 54.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-229" coordinates="32.3 -63.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-230" coordinates="2.6 27.1 8.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-231" coordinates="-7.5 20.0 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-232" coordinates="3.0 -12.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-233" coordinates="16.4 -6.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-234" coordinates="-3.6 28.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-235" coordinates="1.5 -5.4 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-236" coordinates="5.7 -5.4 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-237" coordinates="6.1 0.0 13.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-238" coordinates="-4.2 23.4 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-239" coordinates="-0.1 -9.3 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-240" coordinates="-0.3 -1.5 18.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-241" coordinates="-5.6 21.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-242" coordinates="8.2 -18.2 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-243" coordinates="-4.6 20.7 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-244" coordinates="9.5 -57.3 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-245" coordinates="-30.4 -38.8 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-246" coordinates="-16.7 23.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-247" coordinates="-13.2 -82.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-248" coordinates="-7.4 -62.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-249" coordinates="11.0 -51.3 13.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-250" coordinates="14.5 -50.5 35.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-251" coordinates="35.2 7.8 89.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-252" coordinates="1.6 6.3 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-253" coordinates="-7.0 38.9 93.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-254" coordinates="12.8 -0.1 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-255" coordinates="3.3 -10.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-256" coordinates="2.0 -14.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-257" coordinates="9.6 18.7 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-258" coordinates="-9.5 3.3 19.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-259" coordinates="-2.9 -4.9 15.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-260" coordinates="-24.1 79.3 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-261" coordinates="3.9 -57.9 15.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-262" coordinates="3.1 -9.1 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-263" coordinates="-3.8 9.3 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-264" coordinates="-1.4 25.6 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-265" coordinates="-6.9 24.2 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-266" coordinates="10.1 2.0 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-267" coordinates="-9.6 3.1 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-268" coordinates="23.8 -0.5 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-269" coordinates="9.6 8.7 13.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-270" coordinates="-6.1 -10.8 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-271" coordinates="5.0 -9.6 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-272" coordinates="3.8 21.8 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-273" coordinates="10.7 -5.1 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-274" coordinates="-1.8 -8.2 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-275" coordinates="-2.2 4.6 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-276" coordinates="-0.3 -12.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-277" coordinates="11.7 -10.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-278" coordinates="7.2 -9.4 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-279" coordinates="3.9 -8.5 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-280" coordinates="7.4 26.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-281" coordinates="0.7 29.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-282" coordinates="-5.1 1.2 48.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-283" coordinates="2.8 -9.5 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-284" coordinates="-20.6 62.4 40.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-285" coordinates="-7.3 -5.4 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-286" coordinates="12.2 -2.3 19.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-287" coordinates="8.1 -2.9 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-288" coordinates="-10.9 -7.6 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-289" coordinates="8.2 2.2 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-290" coordinates="9.8 2.9 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-291" coordinates="13.3 -6.0 17.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-292" coordinates="10.1 -15.3 19.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-293" coordinates="7.2 -14.2 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-294" coordinates="8.3 28.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-295" coordinates="-2.9 24.7 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-296" coordinates="13.7 12.8 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-297" coordinates="-6.2 25.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-298" coordinates="5.9 -22.1 20.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-299" coordinates="10.7 15.5 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-300" coordinates="5.8 19.5 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-301" coordinates="4.9 13.8 19.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-302" coordinates="-15.9 -68.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-303" coordinates="6.8 -10.3 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-304" coordinates="1.6 -49.5 49.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-305" coordinates="18.7 -48.7 40.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-306" coordinates="28.2 -85.8 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-307" coordinates="-49.7 67.4 35.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-308" coordinates="-2.1 -52.3 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-309" coordinates="2.7 32.6 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-310" coordinates="3.8 5.7 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-311" coordinates="1.9 -10.0 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-312" coordinates="17.5 27.3 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-313" coordinates="5.7 -12.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-314" coordinates="1.3 21.8 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-315" coordinates="-34.6 6.1 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-316" coordinates="15.9 22.4 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-317" coordinates="9.5 -8.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-318" coordinates="12.6 -16.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-319" coordinates="12.6 10.5 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-320" coordinates="3.5 2.5 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-321" coordinates="-4.5 -37.7 54.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-322" coordinates="16.9 -6.7 11.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-323" coordinates="1.9 2.6 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-324" coordinates="1.2 12.4 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-325" coordinates="-85.9 72.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-326" coordinates="-0.9 -2.8 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-327" coordinates="2.1 -2.9 16.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-328" coordinates="1.1 -5.1 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-329" coordinates="6.1 -0.4 21.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-330" coordinates="3.2 28.5 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-331" coordinates="5.6 21.6 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-332" coordinates="6.8 -9.5 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-333" coordinates="-3.8 -4.7 11.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-334" coordinates="-3.2 9.3 27.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-335" coordinates="-3.0 -12.5 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-336" coordinates="6.5 -2.6 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-337" coordinates="5.2 -0.9 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-338" coordinates="6.0 -1.2 20.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-339" coordinates="-7.7 19.9 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-340" coordinates="41.5 8.0 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-341" coordinates="-8.7 2.6 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-342" coordinates="0.8 -60.0 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-343" coordinates="50.5 -23.4 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-344" coordinates="-1.1 -5.8 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-345" coordinates="-0.5 3.0 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-346" coordinates="3.0 9.9 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-347" coordinates="11.6 -57.6 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-348" coordinates="18.6 -49.2 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-349" coordinates="38.7 -59.5 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-350" coordinates="-3.7 -58.8 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-351" coordinates="5.6 -58.2 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-352" coordinates="233.1 75.6 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-353" coordinates="-0.9 -49.5 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-354" coordinates="5.2 -49.9 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-355" coordinates="7.7 -45.9 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-356" coordinates="22.1 -61.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-357" coordinates="10.4 -73.3 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-358" coordinates="-0.2 -56.2 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-359" coordinates="-5.0 -54.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-360" coordinates="-12.8 -81.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-361" coordinates="11.0 -57.1 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-362" coordinates="23.8 -65.7 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-363" coordinates="24.0 -81.9 73.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-364" coordinates="10.8 -46.7 18.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-365" coordinates="11.6 -47.7 14.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-366" coordinates="-6.1 -55.9 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-367" coordinates="-105.0 -55.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-368" coordinates="-18.0 -86.0 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-369" coordinates="0.8 -54.4 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-370" coordinates="-10.7 -48.7 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-371" coordinates="8.1 -31.8 73.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-372" coordinates="-15.7 -65.2 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-373" coordinates="7.6 -58.8 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-374" coordinates="5.2 -44.5 33.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-375" coordinates="7.9 -71.5 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-376" coordinates="-2.1 -54.5 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-377" coordinates="-2.5 -26.0 46.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-378" coordinates="39.2 -53.6 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-379" coordinates="-26.6 -66.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-380" coordinates="-22.1 -65.8 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-381" coordinates="21.1 -46.4 22.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-382" coordinates="-1.1 -60.0 25.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-383" coordinates="-49.1 -51.7 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-384" coordinates="21.2 -51.7 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-385" coordinates="-0.9 -50.1 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-386" coordinates="0.3 -65.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-387" coordinates="-3.4 -65.7 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-388" coordinates="0.4 -53.2 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-389" coordinates="20.8 -60.3 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-390" coordinates="5.7 -25.3 44.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-391" coordinates="18.9 -47.0 16.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-392" coordinates="-0.6 -56.7 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-393" coordinates="6.5 -42.5 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-394" coordinates="0.1 -51.0 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-395" coordinates="0.1 -47.6 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-396" coordinates="13.5 -65.6 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-397" coordinates="-7.7 -48.3 19.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-398" coordinates="-16.7 -70.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-399" coordinates="36.8 -65.7 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-400" coordinates="-15.3 -74.9 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-401" coordinates="-4.9 -61.8 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-402" coordinates="0.0 -59.5 16.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-403" coordinates="8.9 -60.4 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-404" coordinates="10.9 -29.9 46.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-405" coordinates="4.1 -70.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-406" coordinates="-9.1 -54.6 16.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-407" coordinates="27.4 -55.8 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-408" coordinates="2.4 -78.2 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-409" coordinates="8.8 -48.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-410" coordinates="11.1 -49.8 21.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-411" coordinates="0.2 -51.2 16.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-412" coordinates="-278.9 -96.9 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-413" coordinates="25.3 -51.5 16.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-414" coordinates="13.2 -62.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-415" coordinates="2.4 -59.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-416" coordinates="-14.3 -57.5 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-417" coordinates="-0.4 -66.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-418" coordinates="3.1 -9.3 57.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-419" coordinates="-2.9 -49.7 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-420" coordinates="10.8 -48.2 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-421" coordinates="34.2 -55.4 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-422" coordinates="6.1 -45.9 20.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-423" coordinates="22.5 -59.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-424" coordinates="-0.2 -50.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-425" coordinates="-15.7 -47.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-426" coordinates="3.6 -75.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-427" coordinates="9.2 -50.6 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-428" coordinates="6.6 -58.4 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-429" coordinates="-0.8 -50.1 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-430" coordinates="16.3 -64.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-431" coordinates="-102.2 -106.7 151.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-432" coordinates="-3.7 -53.5 18.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-433" coordinates="14.5 -55.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-434" coordinates="3.9 -46.0 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-435" coordinates="9.4 -51.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-436" coordinates="6.7 -49.2 16.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-437" coordinates="28.5 -49.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-438" coordinates="-5.7 -55.3 26.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-439" coordinates="-13.0 -52.3 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-440" coordinates="8.2 -50.5 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-441" coordinates="-3.0 -47.9 23.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-442" coordinates="9.0 -57.1 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-443" coordinates="3.6 -41.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-444" coordinates="-77.6 19.1 103.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-445" coordinates="7.8 -44.3 24.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-446" coordinates="-18.2 -42.2 18.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-447" coordinates="1.5 -46.9 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-448" coordinates="22.6 -48.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-449" coordinates="6.6 -49.8 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-450" coordinates="7.4 -41.3 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-451" coordinates="10.4 -54.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-452" coordinates="6.8 -53.2 14.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-453" coordinates="-10.2 -57.6 16.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-454" coordinates="6.1 -70.3 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-455" coordinates="-5.1 -53.7 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-456" coordinates="-9.7 -70.4 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-457" coordinates="30.6 -65.0 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-458" coordinates="-4.9 -63.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-459" coordinates="8.5 -71.1 16.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-460" coordinates="54.3 -0.6 87.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-461" coordinates="-19.4 -65.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-462" coordinates="15.2 -71.3 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-463" coordinates="8.9 -65.7 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-464" coordinates="-5.6 -61.5 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-465" coordinates="1.2 -55.4 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-466" coordinates="-7.4 -57.0 16.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-467" coordinates="2.0 -63.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-468" coordinates="21.0 -55.7 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-469" coordinates="12.5 -60.5 132.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-470" coordinates="-20.7 -59.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-471" coordinates="10.7 -43.7 20.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-472" coordinates="-1.3 -47.3 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-473" coordinates="-9.1 -59.9 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-474" coordinates="7.1 -48.3 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-475" coordinates="30.0 -67.8 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-476" coordinates="5.7 -54.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-477" coordinates="1.7 -50.2 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-478" coordinates="6.4 -62.3 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-479" coordinates="2.7 -52.5 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-480" coordinates="-0.4 -50.6 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-481" coordinates="-4.9 -61.6 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-482" coordinates="94.1 -11.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-483" coordinates="119.0 -138.5 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-484" coordinates="-32.9 -62.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-485" coordinates="-3.6 -60.2 20.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-486" coordinates="73.6 -65.8 103.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-487" coordinates="-2.2 -59.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-488" coordinates="7.5 -53.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-489" coordinates="0.1 -51.0 26.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-490" coordinates="1.4 -11.9 68.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-491" coordinates="-1.0 -71.2 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-492" coordinates="25.0 -66.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-493" coordinates="31.6 -43.4 30.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-494" coordinates="-104.4 13.8 30.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-495" coordinates="-1.4 -54.3 12.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-496" coordinates="-40.1 -68.3 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-497" coordinates="18.9 -57.4 10.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-498" coordinates="15.6 -49.6 17.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-499" coordinates="8.0 -38.8 54.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-500" coordinates="6.0 -54.4 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-501" coordinates="21.7 -59.7 25.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-502" coordinates="27.0 -40.4 32.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-503" coordinates="7.6 -63.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-504" coordinates="-29.1 -97.7 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-505" coordinates="10.9 -47.6 17.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-506" coordinates="19.8 -45.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-507" coordinates="21.6 -67.5 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-508" coordinates="-8.3 -63.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-509" coordinates="-2.9 -64.8 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-510" coordinates="-2.1 -47.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-511" coordinates="15.3 -53.2 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-512" coordinates="-9.1 -48.2 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-513" coordinates="7.8 -56.1 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-514" coordinates="-12.2 -52.9 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-515" coordinates="14.9 -41.7 34.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-516" coordinates="-1.0 -48.1 32.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-517" coordinates="22.1 -57.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-518" coordinates="-5.9 -53.7 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-519" coordinates="-0.8 -56.1 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-520" coordinates="35.6 0.1 266.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-521" coordinates="-13.2 28.5 127.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-522" coordinates="-2.0 -31.7 116.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-523" coordinates="10.6 -2.4 84.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-524" coordinates="42.9 -10.6 171.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-525" coordinates="39.2 1.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-526" coordinates="33.0 14.0 257.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-527" coordinates="-56.3 -64.4 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-528" coordinates="48.0 -43.3 93.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-529" coordinates="34.3 -25.0 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-530" coordinates="-17.3 -10.6 23.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-531" coordinates="-2.8 -2.4 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-532" coordinates="-3.1 -1.1 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-533" coordinates="3.4 -1.6 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-534" coordinates="1.9 4.2 32.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-535" coordinates="-15.0 -3.7 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-536" coordinates="6.2 21.4 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-537" coordinates="2.2 -3.6 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-538" coordinates="-4.2 34.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-539" coordinates="7.3 -7.1 11.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-540" coordinates="-6.1 15.5 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-541" coordinates="3.3 17.7 16.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-542" coordinates="-7.4 -4.0 21.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-543" coordinates="8.1 3.3 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-544" coordinates="2.2 25.0 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-545" coordinates="-3.2 29.6 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-546" coordinates="-13.9 26.1 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-547" coordinates="2.9 5.9 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-548" coordinates="-9.1 2.4 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-549" coordinates="4.6 -7.4 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-550" coordinates="2.9 5.0 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-551" coordinates="-12.0 2.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-552" coordinates="-0.3 3.7 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-553" coordinates="-2.1 3.5 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-554" coordinates="-6.5 25.4 10.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-555" coordinates="5.9 -9.4 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-556" coordinates="8.0 -20.6 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-557" coordinates="6.9 -10.4 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-558" coordinates="9.5 -3.5 11.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-559" coordinates="31.0 39.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-560" coordinates="15.9 21.0 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-561" coordinates="3.3 -0.1 18.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-562" coordinates="-1.1 -2.5 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-563" coordinates="-0.3 -11.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-564" coordinates="7.8 11.0 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-565" coordinates="2.2 2.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-566" coordinates="17.4 -6.7 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-567" coordinates="4.1 -2.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-568" coordinates="1.4 -9.0 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-569" coordinates="11.1 -13.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-570" coordinates="-2.4 -4.0 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-571" coordinates="16.3 32.7 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-572" coordinates="1.5 5.6 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-573" coordinates="-4.7 5.8 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-574" coordinates="1.4 -1.0 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-575" coordinates="4.2 -1.5 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-576" coordinates="4.9 9.8 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-577" coordinates="-1.0 -0.5 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-578" coordinates="8.1 2.2 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-579" coordinates="2.8 2.6 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-580" coordinates="-1.7 9.6 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-581" coordinates="6.8 22.5 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-582" coordinates="4.8 -10.1 13.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-583" coordinates="3.0 -17.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-584" coordinates="-6.0 5.2 24.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-585" coordinates="1.7 -0.3 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-586" coordinates="6.6 30.1 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-587" coordinates="-0.9 -7.7 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-588" coordinates="7.9 -2.5 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-589" coordinates="4.6 -0.7 5.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-590" coordinates="4.3 1.6 14.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-591" coordinates="-0.4 -10.4 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-592" coordinates="12.8 -13.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-593" coordinates="7.6 2.6 12.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-594" coordinates="10.7 -14.2 19.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-595" coordinates="8.1 0.9 25.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-596" coordinates="7.9 27.9 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-597" coordinates="-7.6 20.0 26.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-598" coordinates="9.2 -9.0 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-599" coordinates="-12.0 0.8 16.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-600" coordinates="14.3 30.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-601" coordinates="-10.1 22.1 14.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-602" coordinates="2.5 29.4 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-603" coordinates="-6.7 26.2 19.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-604" coordinates="-2.2 -4.7 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-605" coordinates="-8.3 19.7 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-606" coordinates="9.1 26.7 16.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-607" coordinates="5.0 -10.9 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-608" coordinates="5.4 -8.8 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-609" coordinates="6.8 -11.2 13.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-610" coordinates="4.9 1.6 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-611" coordinates="18.9 2.7 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-612" coordinates="-2.7 22.4 19.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-613" coordinates="17.3 -6.5 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-614" coordinates="3.0 -8.1 75.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-615" coordinates="0.5 -8.7 74.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-616" coordinates="0.9 -1.9 58.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-617" coordinates="-8.6 -2.3 22.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-618" coordinates="1.1 -15.4 33.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-619" coordinates="-2.2 -0.3 40.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-620" coordinates="16.7 -3.9 76.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-621" coordinates="3.1 -6.0 78.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-622" coordinates="74.8 14.8 28.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-623" coordinates="-26.4 -6.0 44.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-624" coordinates="-54.0 -6.8 24.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-625" coordinates="-0.3 0.1 82.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-626" coordinates="-58.7 12.6 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-627" coordinates="75.8 -3.9 20.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-628" coordinates="70.1 -30.1 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-629" coordinates="62.9 -28.5 21.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-630" coordinates="-0.3 -4.4 69.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-631" coordinates="-67.8 -16.0 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-632" coordinates="33.3 -19.0 45.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-633" coordinates="82.9 2.4 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-634" coordinates="81.9 -39.7 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-635" coordinates="60.9 -71.4 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-636" coordinates="4.8 -1.4 79.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-637" coordinates="0.3 -0.8 78.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-638" coordinates="0.7 -0.3 76.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-639" coordinates="12.5 -6.4 98.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-640" coordinates="13.8 3.1 75.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-641" coordinates="74.4 -37.1 24.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-642" coordinates="1.7 -2.3 64.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-643" coordinates="-69.6 -22.0 25.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-644" coordinates="-64.9 23.2 27.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-645" coordinates="4.8 -7.6 61.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-646" coordinates="31.6 2.4 45.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-647" coordinates="24.5 -1.5 57.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-648" coordinates="62.8 -12.8 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-649" coordinates="1.9 -3.0 68.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-650" coordinates="51.9 -37.5 18.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-651" coordinates="-8.1 -4.2 72.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-652" coordinates="2.4 -12.0 54.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-653" coordinates="-33.8 -10.8 29.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-654" coordinates="83.7 -26.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-655" coordinates="-46.7 -50.4 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-656" coordinates="7.0 3.5 69.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-657" coordinates="4.9 -7.8 58.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-658" coordinates="-18.2 -2.0 61.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-659" coordinates="-0.7 1.2 45.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-660" coordinates="2.9 -1.2 43.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-661" coordinates="-2.9 10.0 34.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-662" coordinates="14.2 20.5 25.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-663" coordinates="-21.9 -10.2 35.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-664" coordinates="5.6 -3.8 75.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-665" coordinates="9.7 -4.0 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-666" coordinates="15.6 -4.1 89.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-667" coordinates="11.9 -6.5 71.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-668" coordinates="-13.9 -4.7 79.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-669" coordinates="-0.6 -12.7 25.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-670" coordinates="21.2 3.9 65.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-671" coordinates="1.2 -7.4 42.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-672" coordinates="73.2 -68.7 17.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-673" coordinates="-66.2 -11.2 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-674" coordinates="-29.0 -7.9 30.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-675" coordinates="3.7 -1.6 76.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-676" coordinates="6.9 -2.1 74.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-677" coordinates="3.7 -1.7 104.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-678" coordinates="26.5 -12.0 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-679" coordinates="2.7 0.5 59.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-680" coordinates="9.5 -9.0 56.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-681" coordinates="15.9 2.4 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-682" coordinates="-1.7 2.0 85.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-683" coordinates="5.4 5.2 68.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-684" coordinates="-4.9 -8.6 72.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-685" coordinates="78.5 13.4 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-686" coordinates="-0.4 -6.0 75.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-687" coordinates="23.7 -9.2 43.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-688" coordinates="20.6 -2.0 74.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-689" coordinates="11.1 -2.6 69.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-690" coordinates="8.0 -5.4 70.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-691" coordinates="19.6 6.2 74.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-692" coordinates="5.9 -5.3 70.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-693" coordinates="-11.7 -7.8 34.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-694" coordinates="10.3 -9.6 57.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-695" coordinates="15.0 10.3 60.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-696" coordinates="-3.4 -1.0 67.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-697" coordinates="-39.6 -13.5 232.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-698" coordinates="-10.8 -7.1 23.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-699" coordinates="64.5 129.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-700" coordinates="57.6 59.7 48.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-701" coordinates="-53.7 86.6 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-702" coordinates="-26.9 128.6 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-703" coordinates="147.4 37.9 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-704" coordinates="-24.4 -91.9 63.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-705" coordinates="-268.9 -66.0 57.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-706" coordinates="-21.4 10.5 73.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-707" coordinates="204.7 266.5 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-708" coordinates="-22.7 101.1 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-709" coordinates="40.2 92.1 18.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-710" coordinates="42.8 0.7 130.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-711" coordinates="-51.3 82.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-712" coordinates="-123.4 5.2 198.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-713" coordinates="-8.5 114.5 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-714" coordinates="-11.6 95.5 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-715" coordinates="18.9 87.2 14.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-716" coordinates="49.8 102.7 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-717" coordinates="-21.6 34.0 116.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-718" coordinates="-132.9 80.5 191.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-719" coordinates="-20.4 84.8 30.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-720" coordinates="88.2 54.3 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-721" coordinates="-34.0 41.9 46.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-722" coordinates="5.6 88.5 34.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-723" coordinates="-20.7 67.8 53.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-724" coordinates="-33.9 100.5 29.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-725" coordinates="22.1 28.6 73.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-726" coordinates="4.7 27.4 88.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-727" coordinates="-5.2 57.5 39.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-728" coordinates="-109.2 59.1 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-729" coordinates="28.4 32.1 86.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-730" coordinates="-10.2 85.1 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-731" coordinates="9.1 91.0 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-732" coordinates="11.8 80.8 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-733" coordinates="-38.5 80.0 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-734" coordinates="77.3 94.7 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-735" coordinates="37.4 80.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-736" coordinates="-22.7 81.2 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-737" coordinates="-72.9 60.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-738" coordinates="32.4 79.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-739" coordinates="25.0 97.2 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-740" coordinates="-15.8 90.9 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-741" coordinates="-25.9 86.1 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-742" coordinates="-39.7 70.5 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-743" coordinates="14.4 80.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-744" coordinates="9.1 30.2 74.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-745" coordinates="11.1 -11.5 92.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-746" coordinates="-45.0 78.6 26.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-747" coordinates="-8.2 79.3 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-748" coordinates="42.8 -37.8 82.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-749" coordinates="-5.4 21.2 271.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-750" coordinates="-9.5 66.1 27.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-751" coordinates="49.0 82.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-752" coordinates="32.0 56.3 20.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-753" coordinates="9.3 103.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-754" coordinates="-133.9 -21.1 190.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-755" coordinates="11.1 28.0 116.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-756" coordinates="155.5 161.6 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-757" coordinates="20.9 70.9 53.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-758" coordinates="57.3 77.3 18.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-759" coordinates="53.5 90.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-760" coordinates="77.4 73.6 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-761" coordinates="89.7 125.6 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-762" coordinates="-20.4 104.4 18.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-763" coordinates="-24.7 90.7 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-764" coordinates="-27.9 92.8 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-765" coordinates="-24.7 100.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-766" coordinates="-92.9 47.3 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-767" coordinates="61.1 69.6 60.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-768" coordinates="-19.9 55.8 59.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-769" coordinates="90.0 87.4 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-770" coordinates="-31.3 93.7 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-771" coordinates="32.3 24.1 58.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-772" coordinates="7.3 42.3 86.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-773" coordinates="-15.3 3.2 113.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-774" coordinates="40.5 51.8 48.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-775" coordinates="14.7 105.3 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-776" coordinates="93.7 42.6 229.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-777" coordinates="89.1 76.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-778" coordinates="-184.0 66.0 140.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-779" coordinates="-11.1 91.2 12.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-780" coordinates="-6.1 120.6 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-781" coordinates="58.3 71.3 73.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-782" coordinates="55.9 79.2 37.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-783" coordinates="16.2 104.4 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-784" coordinates="-17.1 20.1 291.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-785" coordinates="-3.4 70.5 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-786" coordinates="2.4 117.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-787" coordinates="72.2 137.7 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-788" coordinates="-2.5 102.5 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-789" coordinates="-6.8 58.8 64.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-790" coordinates="43.1 97.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-791" coordinates="53.6 93.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-792" coordinates="-38.2 70.8 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-793" coordinates="-91.0 97.2 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-794" coordinates="-80.6 91.1 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-795" coordinates="8.0 117.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-796" coordinates="25.0 56.0 52.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-797" coordinates="71.3 78.9 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-798" coordinates="-10.7 65.1 86.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-799" coordinates="138.7 96.0 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-800" coordinates="-95.0 130.5 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-801" coordinates="-14.4 -10.9 107.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-802" coordinates="17.8 -23.0 110.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-803" coordinates="-31.8 40.3 86.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-804" coordinates="1.4 27.5 75.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-805" coordinates="-3.0 53.3 104.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-806" coordinates="62.5 47.6 74.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-807" coordinates="36.8 79.1 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-808" coordinates="-3.9 74.8 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-809" coordinates="-120.0 82.0 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-810" coordinates="33.0 24.6 93.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-811" coordinates="-4.8 61.6 50.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-812" coordinates="16.8 69.0 38.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-813" coordinates="16.4 76.8 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-814" coordinates="-88.7 38.2 15.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-815" coordinates="42.1 103.5 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-816" coordinates="85.3 81.3 17.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-817" coordinates="-10.2 29.6 71.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-818" coordinates="0.9 55.6 81.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-819" coordinates="-15.6 54.6 44.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-820" coordinates="0.1 30.0 98.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-821" coordinates="119.6 79.5 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-822" coordinates="23.3 116.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-823" coordinates="37.7 69.1 53.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-824" coordinates="72.8 117.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-825" coordinates="-10.5 87.7 44.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-826" coordinates="3.8 26.6 74.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-827" coordinates="-8.2 40.7 63.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-828" coordinates="108.4 99.7 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-829" coordinates="64.8 113.6 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-830" coordinates="-14.3 88.2 41.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-831" coordinates="9.6 111.0 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-832" coordinates="-11.3 102.8 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-833" coordinates="-25.1 88.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-834" coordinates="72.9 96.7 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-835" coordinates="-34.2 42.4 68.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-836" coordinates="13.4 78.1 24.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-837" coordinates="12.7 75.1 71.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-838" coordinates="34.0 39.2 81.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-839" coordinates="57.1 119.7 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-840" coordinates="34.6 54.7 61.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-841" coordinates="39.0 134.3 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-842" coordinates="67.4 116.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-843" coordinates="-3.1 54.5 54.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-844" coordinates="-26.3 60.3 66.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-845" coordinates="27.8 119.5 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-846" coordinates="52.4 134.8 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-847" coordinates="44.6 47.4 76.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-848" coordinates="46.2 76.0 79.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-849" coordinates="66.9 72.5 40.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-850" coordinates="46.8 118.3 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-851" coordinates="53.8 161.0 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-852" coordinates="95.8 116.1 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-853" coordinates="7.4 129.2 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-854" coordinates="31.9 133.6 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-855" coordinates="76.0 87.4 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-856" coordinates="-37.8 98.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-857" coordinates="-18.4 20.7 85.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-858" coordinates="58.0 101.4 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-859" coordinates="17.3 68.5 37.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-860" coordinates="55.6 79.0 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-861" coordinates="-20.0 44.5 54.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-862" coordinates="-51.0 105.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-863" coordinates="38.6 22.2 69.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-864" coordinates="-13.9 106.9 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-865" coordinates="-8.3 21.4 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-866" coordinates="1.7 -8.4 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-867" coordinates="2.3 -3.4 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-868" coordinates="-4.8 3.9 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-869" coordinates="8.9 -13.9 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-870" coordinates="-2.5 24.0 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-871" coordinates="1.8 0.0 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-872" coordinates="17.0 22.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-873" coordinates="11.7 7.6 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-874" coordinates="-0.2 1.9 24.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-875" coordinates="6.4 2.6 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-876" coordinates="6.9 17.6 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-877" coordinates="-0.5 26.0 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-878" coordinates="2.8 -2.8 14.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-879" coordinates="3.1 -3.1 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-880" coordinates="-1.0 -16.8 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-881" coordinates="-0.8 -4.7 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-882" coordinates="12.0 -10.2 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-883" coordinates="-47.7 24.5 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-884" coordinates="6.9 -9.4 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-885" coordinates="-4.3 -6.9 15.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-886" coordinates="-19.7 29.9 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-887" coordinates="21.3 4.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-888" coordinates="11.5 1.5 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-889" coordinates="4.9 22.3 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-890" coordinates="-0.7 3.2 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-891" coordinates="0.5 22.0 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-892" coordinates="24.0 18.5 12.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-893" coordinates="7.2 -8.9 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-894" coordinates="1.5 -12.0 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-895" coordinates="2.8 6.0 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-896" coordinates="17.2 4.2 32.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-897" coordinates="6.8 -6.1 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-898" coordinates="1.6 -3.8 21.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-899" coordinates="8.3 8.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-900" coordinates="3.2 -15.2 18.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-901" coordinates="-5.1 24.5 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-902" coordinates="5.3 6.7 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-903" coordinates="3.9 -0.6 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-904" coordinates="2.6 -13.4 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-905" coordinates="8.6 6.3 17.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-906" coordinates="2.6 -21.6 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-907" coordinates="10.2 -11.7 24.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-908" coordinates="2.6 -3.1 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-909" coordinates="5.7 3.8 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-910" coordinates="8.1 -4.0 17.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-911" coordinates="-0.8 -2.4 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-912" coordinates="7.1 -10.3 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-913" coordinates="1.8 -14.1 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-914" coordinates="-0.9 2.9 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-915" coordinates="6.9 -12.6 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-916" coordinates="-11.2 20.9 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-917" coordinates="12.7 -5.9 13.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-918" coordinates="-1.1 -13.7 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-919" coordinates="-25.6 4.5 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-920" coordinates="17.1 1.6 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-921" coordinates="6.6 8.1 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-922" coordinates="-6.1 26.0 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-923" coordinates="-4.7 20.9 12.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-924" coordinates="-0.5 -11.4 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-925" coordinates="-15.6 -5.9 39.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-926" coordinates="8.9 13.4 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-927" coordinates="11.1 12.9 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-928" coordinates="13.6 -7.1 15.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-929" coordinates="4.7 -10.6 18.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-930" coordinates="1.2 7.0 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-931" coordinates="6.0 5.9 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-932" coordinates="0.1 3.6 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-933" coordinates="-2.7 2.9 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-934" coordinates="0.6 -5.5 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-935" coordinates="-10.6 -9.9 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-936" coordinates="7.8 -7.8 30.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-937" coordinates="-7.4 -9.7 31.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-938" coordinates="11.2 -7.3 22.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-939" coordinates="-0.7 -8.0 10.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-940" coordinates="2.7 -2.1 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-941" coordinates="-15.1 4.3 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-942" coordinates="-0.4 1.0 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-943" coordinates="-6.9 0.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-944" coordinates="3.9 -12.0 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-945" coordinates="-17.2 3.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-946" coordinates="4.2 -1.4 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-947" coordinates="18.1 -4.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-948" coordinates="4.5 3.6 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-949" coordinates="2.8 -12.7 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-950" coordinates="14.6 6.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-951" coordinates="16.1 0.2 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-952" coordinates="-9.3 30.6 7.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-953" coordinates="4.3 32.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-954" coordinates="0.3 -9.3 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-955" coordinates="2.4 14.8 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-956" coordinates="-9.6 21.0 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-957" coordinates="10.3 -2.1 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-958" coordinates="-1.3 19.5 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-959" coordinates="-9.1 19.7 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-960" coordinates="20.2 -8.1 13.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-961" coordinates="1.9 29.6 24.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-962" coordinates="0.1 -1.1 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-963" coordinates="12.8 -0.1 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-964" coordinates="-7.0 65.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-965" coordinates="1.4 16.8 26.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-966" coordinates="-7.4 10.5 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-967" coordinates="7.4 -11.1 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-968" coordinates="8.4 22.6 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-969" coordinates="2.5 1.8 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-970" coordinates="-0.7 -1.0 12.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-971" coordinates="7.7 -9.6 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-972" coordinates="-18.2 10.8 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-973" coordinates="4.0 -4.8 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-974" coordinates="9.8 -4.2 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-975" coordinates="4.8 -13.1 12.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-976" coordinates="-3.0 13.8 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-977" coordinates="9.4 24.2 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-978" coordinates="1.6 25.6 13.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-979" coordinates="2.2 25.3 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-980" coordinates="-3.5 0.1 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-981" coordinates="-0.3 -5.1 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-982" coordinates="4.7 -10.1 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-983" coordinates="10.6 -1.4 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-984" coordinates="-4.3 27.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-985" coordinates="-1.4 -3.5 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-986" coordinates="-10.0 -11.8 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-987" coordinates="-1.7 -0.3 12.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-988" coordinates="10.9 26.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-989" coordinates="5.8 1.6 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-990" coordinates="-0.6 2.9 28.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-991" coordinates="8.3 22.7 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-992" coordinates="-8.1 -9.6 6.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-993" coordinates="5.4 -9.8 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-994" coordinates="-3.0 13.4 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-995" coordinates="-8.6 5.2 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-996" coordinates="3.1 -12.4 34.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-997" coordinates="0.1 -7.8 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-998" coordinates="-0.8 2.6 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-999" coordinates="-241.9 -50.8 74.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1000" coordinates="5.2 10.1 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1001" coordinates="36.0 -11.1 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1002" coordinates="7.6 32.0 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1003" coordinates="3.9 4.2 11.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1004" coordinates="1.5 5.5 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1005" coordinates="-18.2 27.8 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1006" coordinates="3.6 -10.8 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1007" coordinates="-6.4 -11.6 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1008" coordinates="5.8 8.4 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1009" coordinates="18.0 13.5 14.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1010" coordinates="10.3 -7.4 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1011" coordinates="-8.7 -9.2 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1012" coordinates="5.3 0.4 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1013" coordinates="-3.1 26.4 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1014" coordinates="7.8 6.2 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1015" coordinates="14.0 14.6 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1016" coordinates="12.5 -8.5 32.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1017" coordinates="-4.3 12.4 15.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1018" coordinates="-3.5 16.8 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1019" coordinates="17.8 23.8 12.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1020" coordinates="10.9 -5.3 18.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1021" coordinates="5.0 1.7 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1022" coordinates="-13.4 4.4 29.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1023" coordinates="27.2 27.9 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1024" coordinates="-0.1 -4.4 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1025" coordinates="2.3 27.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1026" coordinates="5.1 7.3 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1027" coordinates="7.3 3.2 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1028" coordinates="6.1 9.5 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1029" coordinates="-26.7 1.6 16.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1030" coordinates="2.4 -3.9 16.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1031" coordinates="-2.1 -1.0 13.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1032" coordinates="5.8 -9.6 7.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1033" coordinates="-1.5 -3.3 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1034" coordinates="9.3 26.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1035" coordinates="-1.1 0.4 15.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1036" coordinates="11.4 18.1 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1037" coordinates="18.4 5.0 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1038" coordinates="2.7 1.3 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1039" coordinates="-1.6 3.1 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1040" coordinates="-1.6 -3.0 14.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1041" coordinates="19.0 -6.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1042" coordinates="3.1 25.6 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1043" coordinates="-2.0 3.2 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1044" coordinates="6.0 -4.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1045" coordinates="1.8 24.6 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1046" coordinates="-2.3 26.2 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1047" coordinates="7.8 -0.2 17.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1048" coordinates="4.0 -0.2 8.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1049" coordinates="4.8 4.7 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1050" coordinates="9.2 -0.4 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1051" coordinates="-8.1 23.3 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1052" coordinates="-1.4 -1.7 16.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1053" coordinates="-10.3 -10.2 11.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1054" coordinates="6.7 -1.3 12.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1055" coordinates="-2.1 5.6 17.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1056" coordinates="-1.3 25.0 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1057" coordinates="4.0 -6.7 22.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1058" coordinates="4.8 -10.9 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1059" coordinates="5.7 12.9 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1060" coordinates="-9.2 -6.4 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1061" coordinates="5.5 3.5 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1062" coordinates="-7.9 -0.6 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1063" coordinates="8.2 -12.5 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1064" coordinates="9.9 -12.3 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1065" coordinates="-0.9 28.6 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1066" coordinates="-12.8 -3.2 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1067" coordinates="-0.6 -12.5 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1068" coordinates="37.0 -15.6 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1069" coordinates="-3.8 -10.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1070" coordinates="11.9 -10.1 29.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1071" coordinates="-12.1 -1.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1072" coordinates="4.7 -3.0 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1073" coordinates="6.8 -1.8 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1074" coordinates="-1.2 25.0 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1075" coordinates="-14.2 -2.6 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1076" coordinates="14.3 -5.6 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1077" coordinates="12.7 -12.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1078" coordinates="-6.0 4.8 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1079" coordinates="10.4 -2.4 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1080" coordinates="-5.5 21.8 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1081" coordinates="7.0 3.5 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1082" coordinates="5.5 -0.9 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1083" coordinates="6.6 -4.2 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1084" coordinates="13.7 7.6 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1085" coordinates="0.5 -5.9 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1086" coordinates="-34.9 -19.1 64.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1087" coordinates="6.6 10.8 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1088" coordinates="4.3 -14.2 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1089" coordinates="12.3 -1.1 16.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1090" coordinates="6.6 -18.7 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1091" coordinates="-1.8 33.5 222.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1092" coordinates="-2.0 -8.8 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1093" coordinates="-12.2 0.7 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1094" coordinates="-6.4 -4.8 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1095" coordinates="18.0 40.1 48.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1096" coordinates="19.8 0.3 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1097" coordinates="8.8 -6.8 7.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1098" coordinates="10.5 5.9 17.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1099" coordinates="4.8 20.2 11.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1100" coordinates="24.6 7.2 82.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1101" coordinates="-7.6 5.7 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1102" coordinates="2.1 -6.0 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1103" coordinates="-22.9 -9.1 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1104" coordinates="-6.8 -0.9 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1105" coordinates="-3.9 -6.9 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1106" coordinates="14.6 19.4 18.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1107" coordinates="11.6 22.8 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1108" coordinates="8.2 25.2 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1109" coordinates="3.1 16.9 15.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1110" coordinates="-27.0 -8.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1111" coordinates="-18.9 23.4 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1112" coordinates="4.5 2.3 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1113" coordinates="30.9 -19.9 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1114" coordinates="8.6 3.2 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1115" coordinates="11.2 -20.4 25.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1116" coordinates="-0.1 20.7 11.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1117" coordinates="16.6 4.6 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1118" coordinates="1.2 -0.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1119" coordinates="3.4 -8.0 5.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1120" coordinates="5.2 -10.9 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1121" coordinates="7.7 -15.0 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1122" coordinates="3.6 5.8 13.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1123" coordinates="2.3 -7.1 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1124" coordinates="0.2 -0.3 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1125" coordinates="3.3 3.1 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1126" coordinates="-11.2 10.3 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1127" coordinates="-9.4 0.5 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1128" coordinates="0.5 -11.9 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1129" coordinates="2.9 -9.1 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1130" coordinates="13.8 2.1 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1131" coordinates="0.4 4.2 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1132" coordinates="-4.0 -5.7 12.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1133" coordinates="-0.5 -14.4 32.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1134" coordinates="8.9 -2.6 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1135" coordinates="-7.8 -13.2 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1136" coordinates="-0.4 2.1 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1137" coordinates="-6.5 21.6 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1138" coordinates="3.0 27.6 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1139" coordinates="8.2 -9.1 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1140" coordinates="6.1 -14.4 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1141" coordinates="-1.1 -13.1 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1142" coordinates="8.4 -9.2 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1143" coordinates="15.8 5.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1144" coordinates="7.2 9.1 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1145" coordinates="13.1 2.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1146" coordinates="-3.7 7.7 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1147" coordinates="8.2 1.5 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1148" coordinates="4.7 -11.4 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1149" coordinates="1.1 0.1 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1150" coordinates="4.0 -11.8 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1151" coordinates="5.3 1.5 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1152" coordinates="18.4 -4.2 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1153" coordinates="1.2 32.2 20.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1154" coordinates="-2.1 6.8 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1155" coordinates="7.6 -1.3 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1156" coordinates="6.7 2.6 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1157" coordinates="1.7 21.2 35.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1158" coordinates="2.2 9.6 35.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1159" coordinates="7.2 -8.7 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1160" coordinates="5.0 3.9 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1161" coordinates="1.6 1.4 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1162" coordinates="9.2 -5.7 16.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1163" coordinates="16.0 14.8 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1164" coordinates="-16.4 40.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1165" coordinates="-2.3 1.6 36.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1166" coordinates="5.4 26.7 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1167" coordinates="-17.2 -10.6 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1168" coordinates="2.4 -1.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1169" coordinates="0.4 4.9 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1170" coordinates="-14.5 5.8 26.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1171" coordinates="13.6 12.8 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1172" coordinates="11.2 -9.0 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1173" coordinates="8.5 -10.4 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1174" coordinates="5.9 -11.5 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1175" coordinates="7.1 -4.2 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1176" coordinates="-3.4 1.0 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1177" coordinates="20.7 -13.6 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1178" coordinates="-4.0 17.8 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1179" coordinates="16.0 8.3 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1180" coordinates="7.3 36.0 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1181" coordinates="7.8 -10.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1182" coordinates="10.0 -8.4 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1183" coordinates="76.4 59.5 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1184" coordinates="17.1 26.9 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1185" coordinates="-4.8 0.2 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1186" coordinates="-2.3 -0.7 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1187" coordinates="-6.0 1.1 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1188" coordinates="-2.0 7.8 12.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1189" coordinates="4.3 1.3 11.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1190" coordinates="-1.9 5.3 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1191" coordinates="4.1 -13.7 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1192" coordinates="2.6 5.0 17.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1193" coordinates="2.6 17.6 17.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1194" coordinates="7.3 14.6 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1195" coordinates="5.9 4.1 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1196" coordinates="7.3 -1.7 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1197" coordinates="3.6 0.8 8.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1198" coordinates="-5.5 21.7 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1199" coordinates="-4.3 14.7 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1200" coordinates="0.1 -0.6 10.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1201" coordinates="-5.2 -6.4 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1202" coordinates="7.7 4.4 15.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1203" coordinates="-19.7 6.3 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1204" coordinates="3.3 -3.0 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1205" coordinates="6.7 18.7 8.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1206" coordinates="6.3 31.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1207" coordinates="-17.0 17.1 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1208" coordinates="-5.5 16.7 18.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1209" coordinates="-13.5 -5.3 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1210" coordinates="-3.0 -13.5 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1211" coordinates="0.3 -9.5 7.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1212" coordinates="5.7 -1.1 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1213" coordinates="-0.1 -12.5 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1214" coordinates="60.7 -9.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1215" coordinates="2.1 7.5 14.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1216" coordinates="4.9 22.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1217" coordinates="-0.4 26.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1218" coordinates="-10.0 0.6 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1219" coordinates="-7.0 28.1 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1220" coordinates="1.7 2.0 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1221" coordinates="19.5 -3.4 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1222" coordinates="6.5 -8.3 15.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1223" coordinates="-5.0 4.5 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1224" coordinates="1.1 1.0 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1225" coordinates="0.5 3.5 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1226" coordinates="4.5 -1.4 21.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1227" coordinates="16.0 -3.9 18.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1228" coordinates="11.7 8.2 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1229" coordinates="13.8 28.5 44.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1230" coordinates="10.0 -5.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1231" coordinates="1.2 27.3 5.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1232" coordinates="-4.0 -14.0 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1233" coordinates="13.6 -4.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1234" coordinates="4.8 -10.1 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1235" coordinates="19.4 -8.7 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1236" coordinates="13.3 10.9 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1237" coordinates="-8.0 23.8 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1238" coordinates="11.4 -5.4 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1239" coordinates="-273.2 -20.4 42.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1240" coordinates="5.1 20.9 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1241" coordinates="15.8 -2.5 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1242" coordinates="11.8 6.8 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1243" coordinates="5.7 32.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1244" coordinates="1.6 -0.2 14.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1245" coordinates="5.5 -12.7 20.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1246" coordinates="-6.1 21.1 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1247" coordinates="7.0 7.8 5.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1248" coordinates="13.2 -5.6 21.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1249" coordinates="-0.5 -11.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1250" coordinates="7.0 1.6 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1251" coordinates="6.1 -6.6 78.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1252" coordinates="0.8 3.1 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1253" coordinates="-15.2 99.7 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1254" coordinates="10.8 94.9 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1255" coordinates="-32.4 72.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1256" coordinates="39.2 59.4 18.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1257" coordinates="2.4 47.6 65.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1258" coordinates="-25.5 75.9 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1259" coordinates="-1.0 77.5 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1260" coordinates="19.1 91.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1261" coordinates="3.1 91.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1262" coordinates="-9.3 78.1 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1263" coordinates="-3.3 22.2 64.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1264" coordinates="-42.8 74.2 28.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1265" coordinates="-13.3 61.0 30.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1266" coordinates="-1.6 83.8 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1267" coordinates="-19.5 67.6 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1268" coordinates="-57.2 70.2 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1269" coordinates="-5.7 81.6 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1270" coordinates="12.3 74.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1271" coordinates="-10.1 87.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1272" coordinates="14.0 80.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1273" coordinates="-15.6 53.2 40.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1274" coordinates="44.2 109.5 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1275" coordinates="-8.2 89.6 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1276" coordinates="-78.7 68.7 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1277" coordinates="1.6 79.4 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1278" coordinates="11.1 85.7 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1279" coordinates="-8.1 99.7 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1280" coordinates="78.4 53.8 35.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1281" coordinates="-39.7 66.5 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1282" coordinates="-44.5 79.6 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1283" coordinates="-18.4 70.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1284" coordinates="9.9 21.8 76.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1285" coordinates="-51.0 70.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1286" coordinates="-44.0 84.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1287" coordinates="10.5 69.3 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1288" coordinates="-6.1 77.6 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1289" coordinates="22.8 94.4 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1290" coordinates="96.1 121.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1291" coordinates="-76.8 80.9 5.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1292" coordinates="18.2 82.0 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1293" coordinates="12.7 80.6 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1294" coordinates="-19.9 92.0 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1295" coordinates="-48.0 57.2 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1296" coordinates="68.7 85.0 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1297" coordinates="100.5 29.2 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1298" coordinates="1.6 84.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1299" coordinates="0.9 60.3 25.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1300" coordinates="-42.3 88.1 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1301" coordinates="6.0 19.4 67.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1302" coordinates="16.3 90.8 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1303" coordinates="-36.3 77.0 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1304" coordinates="-25.6 69.6 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1305" coordinates="-5.5 83.9 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1306" coordinates="-28.8 66.7 13.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1307" coordinates="-50.8 64.8 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1308" coordinates="-22.9 77.3 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1309" coordinates="-5.7 79.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1310" coordinates="-53.7 58.3 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1311" coordinates="-12.1 93.9 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1312" coordinates="18.0 98.6 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1313" coordinates="-20.4 92.9 10.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1314" coordinates="3.8 20.8 81.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1315" coordinates="-8.9 54.9 26.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1316" coordinates="-33.6 81.9 11.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1317" coordinates="-19.4 86.8 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1318" coordinates="14.8 76.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1319" coordinates="11.8 -50.8 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1320" coordinates="-0.8 -56.2 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1321" coordinates="39.6 -40.5 14.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1322" coordinates="-20.2 -69.5 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1323" coordinates="9.1 -48.8 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1324" coordinates="-0.9 -63.7 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1325" coordinates="195.2 -155.7 56.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1326" coordinates="18.6 -59.2 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1327" coordinates="34.9 -78.3 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1328" coordinates="11.2 -53.2 43.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1329" coordinates="8.8 -59.0 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1330" coordinates="0.9 -53.6 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1331" coordinates="1.7 -69.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1332" coordinates="29.1 -29.5 74.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1333" coordinates="4.3 -52.3 16.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1334" coordinates="-12.0 -62.7 157.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1335" coordinates="5.8 -50.9 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1336" coordinates="-1.8 -62.4 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1337" coordinates="7.7 -61.8 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1338" coordinates="-11.0 -66.6 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1339" coordinates="15.6 -62.9 30.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1340" coordinates="6.1 -45.5 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1341" coordinates="-11.1 -73.8 83.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1342" coordinates="48.0 -39.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1343" coordinates="-5.3 -74.9 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1344" coordinates="23.7 -47.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1345" coordinates="4.7 -57.4 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1346" coordinates="6.1 -62.1 48.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1347" coordinates="-6.1 -71.4 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1348" coordinates="-2.8 -56.4 25.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1349" coordinates="4.6 -57.1 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1350" coordinates="-19.7 -62.3 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1351" coordinates="12.4 -48.0 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1352" coordinates="-3.3 -46.9 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1353" coordinates="12.1 -61.0 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1354" coordinates="16.9 -66.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1355" coordinates="40.4 -56.5 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1356" coordinates="1.9 -57.7 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1357" coordinates="-59.0 -109.1 76.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1358" coordinates="0.4 -61.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1359" coordinates="30.1 -48.3 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1360" coordinates="-4.3 -59.5 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1361" coordinates="1.5 -48.0 25.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1362" coordinates="207.1 -30.8 109.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1363" coordinates="9.7 -61.2 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1364" coordinates="2.5 -51.2 7.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1365" coordinates="-25.2 -77.4 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1366" coordinates="17.3 -72.7 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1367" coordinates="-2.4 -52.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1368" coordinates="31.4 -57.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1369" coordinates="13.8 -62.8 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1370" coordinates="31.2 -59.4 26.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1371" coordinates="-20.5 -60.9 151.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1372" coordinates="-13.7 -54.9 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1373" coordinates="0.7 -47.7 78.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1374" coordinates="5.3 -52.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1375" coordinates="14.7 -87.3 11.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1376" coordinates="31.5 -85.4 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1377" coordinates="-4.3 -61.9 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1378" coordinates="10.0 -71.9 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1379" coordinates="54.7 -66.8 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1380" coordinates="-9.1 -48.8 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1381" coordinates="6.1 -48.7 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1382" coordinates="-4.8 -50.3 39.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1383" coordinates="-8.5 -67.4 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1384" coordinates="5.7 -55.1 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1385" coordinates="39.1 -89.2 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1386" coordinates="34.2 -60.2 29.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1387" coordinates="16.6 -64.3 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1388" coordinates="-2.1 -62.0 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1389" coordinates="-1.3 -52.6 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1390" coordinates="9.2 -61.1 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1391" coordinates="20.6 -60.5 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1392" coordinates="10.1 -66.8 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1393" coordinates="-9.9 -58.5 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1394" coordinates="9.2 -52.1 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1395" coordinates="38.0 -27.4 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1396" coordinates="-1.8 -63.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1397" coordinates="11.6 -55.9 19.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1398" coordinates="2.6 -36.5 64.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1399" coordinates="-12.9 -46.7 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1400" coordinates="7.2 -75.4 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1401" coordinates="0.5 -50.1 17.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1402" coordinates="15.4 -47.8 16.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1403" coordinates="8.5 -51.7 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1404" coordinates="-5.2 -51.6 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1405" coordinates="-77.0 -17.5 141.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1406" coordinates="33.7 -87.4 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1407" coordinates="54.3 -41.4 82.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1408" coordinates="2.0 -27.2 78.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1409" coordinates="0.8 -18.4 56.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1410" coordinates="-92.0 -40.5 2.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1411" coordinates="17.5 -60.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1412" coordinates="2.2 -41.8 27.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1413" coordinates="-5.0 -61.2 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1414" coordinates="33.8 -58.3 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1415" coordinates="33.7 -54.6 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1416" coordinates="-7.0 -52.7 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1417" coordinates="-2.6 -53.1 27.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1418" coordinates="19.6 -62.1 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1419" coordinates="7.9 -67.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1420" coordinates="5.3 -49.3 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1421" coordinates="10.8 -70.5 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1422" coordinates="-0.4 -60.3 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1423" coordinates="3.0 -62.5 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1424" coordinates="-11.5 -54.1 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1425" coordinates="22.4 -52.5 19.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1426" coordinates="10.4 -45.3 63.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1427" coordinates="8.1 -82.7 10.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1428" coordinates="-3.3 -55.2 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1429" coordinates="15.6 -69.8 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1430" coordinates="-4.8 -49.9 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1431" coordinates="-12.5 -29.8 61.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1432" coordinates="29.7 -36.9 40.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1433" coordinates="18.6 -43.6 26.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1434" coordinates="31.7 -58.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1435" coordinates="16.6 -61.8 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1436" coordinates="19.3 -61.9 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1437" coordinates="1.7 -60.8 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1438" coordinates="15.5 -51.8 14.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1439" coordinates="13.3 -70.5 15.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1440" coordinates="7.9 -64.6 10.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1441" coordinates="4.1 -51.9 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1442" coordinates="-11.4 -65.5 3.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1443" coordinates="2.9 -45.8 24.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1444" coordinates="-2.3 -57.8 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1445" coordinates="-9.2 -25.2 17.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1446" coordinates="5.8 -49.7 13.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1447" coordinates="4.2 -57.1 21.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1448" coordinates="-1.2 -37.4 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1449" coordinates="12.1 -52.9 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1450" coordinates="2.9 -49.4 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1451" coordinates="49.3 -56.5 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1452" coordinates="6.3 -58.3 20.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1453" coordinates="-1.9 -47.3 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1454" coordinates="12.8 -55.3 20.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1455" coordinates="-1.5 3.7 229.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1456" coordinates="-13.3 -13.6 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1457" coordinates="-2.7 -1.9 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1458" coordinates="-14.2 20.6 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1459" coordinates="10.3 -24.7 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1460" coordinates="4.3 -10.1 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1461" coordinates="22.8 18.2 20.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1462" coordinates="1.7 28.0 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1463" coordinates="15.9 -0.9 6.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1464" coordinates="-2.8 22.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1465" coordinates="2.6 -0.9 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1466" coordinates="-4.9 -8.2 18.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1467" coordinates="-3.6 22.9 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1468" coordinates="-5.1 15.9 4.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1469" coordinates="0.0 -0.2 13.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1470" coordinates="1.7 -5.7 4.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1471" coordinates="-1.5 2.1 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1472" coordinates="-0.3 -1.9 18.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1473" coordinates="2.9 1.4 9.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1474" coordinates="2.7 -6.6 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1475" coordinates="-5.5 19.1 6.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1476" coordinates="-0.0 -3.7 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1477" coordinates="2.9 -4.3 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1478" coordinates="10.0 -9.0 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1479" coordinates="10.9 -5.1 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1480" coordinates="-0.1 2.7 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1481" coordinates="-4.1 1.9 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1482" coordinates="9.1 1.9 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1483" coordinates="9.0 10.6 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1484" coordinates="-11.6 5.6 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1485" coordinates="-11.9 26.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1486" coordinates="1.5 2.1 12.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1487" coordinates="1.8 -5.6 13.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1488" coordinates="19.5 1.0 3.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1489" coordinates="5.5 -1.8 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1490" coordinates="0.5 -7.8 5.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1491" coordinates="9.7 -4.1 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1492" coordinates="2.5 8.9 14.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1493" coordinates="12.5 -2.2 61.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1494" coordinates="-3.2 -12.6 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1495" coordinates="2.6 -0.8 30.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1496" coordinates="7.2 1.3 12.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1497" coordinates="2.9 1.1 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1498" coordinates="24.0 -11.8 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1499" coordinates="-26.3 -10.6 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1500" coordinates="25.9 18.0 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1501" coordinates="-13.6 30.3 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1502" coordinates="3.4 -16.6 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1503" coordinates="0.3 -6.6 7.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1504" coordinates="2.4 -4.4 3.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1505" coordinates="3.6 -1.0 11.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1506" coordinates="0.8 8.2 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1507" coordinates="-1.8 5.1 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1508" coordinates="7.9 2.0 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1509" coordinates="-11.6 -40.5 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1510" coordinates="3.9 13.3 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1511" coordinates="2.0 3.2 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1512" coordinates="24.1 -4.3 21.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1513" coordinates="-14.9 14.3 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1514" coordinates="3.4 2.7 8.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1515" coordinates="7.4 8.0 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1516" coordinates="2.9 0.3 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1517" coordinates="8.6 -8.3 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1518" coordinates="0.8 7.9 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1519" coordinates="5.3 -9.7 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1520" coordinates="-13.2 27.1 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1521" coordinates="4.0 -0.6 9.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1522" coordinates="4.5 7.7 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1523" coordinates="11.5 7.2 8.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1524" coordinates="6.4 -6.4 12.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1525" coordinates="-3.3 21.9 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1526" coordinates="6.1 23.9 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1527" coordinates="-3.1 26.9 19.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1528" coordinates="-6.5 29.4 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1529" coordinates="-0.6 4.9 8.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1530" coordinates="-3.2 -2.6 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1531" coordinates="-35.4 19.3 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1532" coordinates="4.9 5.7 5.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1533" coordinates="-1.8 -5.1 9.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1534" coordinates="8.4 -2.2 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1535" coordinates="2.6 -11.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1536" coordinates="-1.8 -9.4 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1537" coordinates="2.0 0.2 16.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1538" coordinates="0.1 16.7 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1539" coordinates="-7.6 8.1 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1540" coordinates="-8.8 0.9 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1541" coordinates="13.4 -6.0 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1542" coordinates="0.4 3.5 2.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1543" coordinates="5.6 23.0 11.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1544" coordinates="3.7 -7.2 13.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1545" coordinates="-23.6 17.7 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1546" coordinates="-3.9 13.4 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1547" coordinates="-3.1 -10.1 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1548" coordinates="5.0 -0.2 29.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1549" coordinates="6.5 17.6 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1550" coordinates="10.3 3.2 4.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1551" coordinates="14.1 -11.2 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1552" coordinates="3.7 -1.5 6.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1553" coordinates="4.5 27.0 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1554" coordinates="-3.3 -4.3 64.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1555" coordinates="0.6 -4.9 7.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1556" coordinates="8.0 -6.0 74.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1557" coordinates="4.1 -1.0 4.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1558" coordinates="58.6 -3.1 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1559" coordinates="-12.0 -13.9 5.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1560" coordinates="-295.5 15.4 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1561" coordinates="-36.4 -12.1 246.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1562" coordinates="-18.7 11.6 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1563" coordinates="17.8 28.5 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1564" coordinates="8.0 5.4 8.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1565" coordinates="-13.7 28.9 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1566" coordinates="0.3 -3.9 6.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1567" coordinates="5.2 21.5 1.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1568" coordinates="7.3 -0.4 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1569" coordinates="22.5 24.4 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1570" coordinates="0.6 -8.0 13.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1571" coordinates="2.7 5.4 21.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1572" coordinates="-5.0 23.3 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1573" coordinates="5.7 -10.0 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1574" coordinates="-0.6 -4.0 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1575" coordinates="6.7 21.1 13.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1576" coordinates="12.8 4.9 2.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1577" coordinates="-2.5 -12.9 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1578" coordinates="-7.5 -0.9 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1579" coordinates="4.8 29.0 13.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1580" coordinates="19.2 -6.0 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1581" coordinates="-0.6 5.5 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1582" coordinates="-3.8 4.8 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1583" coordinates="-0.9 21.5 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1584" coordinates="-0.1 29.1 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1585" coordinates="-3.6 -5.7 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1586" coordinates="-2.2 -11.4 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1587" coordinates="8.1 17.4 4.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1588" coordinates="9.3 -4.6 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1589" coordinates="5.8 25.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1590" coordinates="18.9 0.2 8.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1591" coordinates="11.7 3.0 11.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1592" coordinates="3.6 -9.6 13.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1593" coordinates="-5.9 -9.4 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1594" coordinates="-3.3 -0.4 12.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1595" coordinates="10.8 -7.8 6.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1596" coordinates="9.4 -8.9 3.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1597" coordinates="11.6 -0.6 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1598" coordinates="-19.2 4.1 10.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1599" coordinates="18.3 13.5 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1600" coordinates="-9.2 -0.6 8.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1601" coordinates="6.0 -9.5 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1602" coordinates="5.9 -9.5 20.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1603" coordinates="9.0 -8.5 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1604" coordinates="4.1 27.3 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1605" coordinates="13.6 -5.0 6.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1606" coordinates="5.9 -7.1 9.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1607" coordinates="0.3 -5.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1608" coordinates="1.5 4.6 7.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1609" coordinates="20.0 12.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1610" coordinates="4.8 3.5 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1611" coordinates="10.8 20.6 6.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1612" coordinates="8.4 8.4 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1613" coordinates="4.5 -65.8 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1614" coordinates="12.9 -53.6 9.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1615" coordinates="4.2 -64.1 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1616" coordinates="2.4 -54.9 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1617" coordinates="-7.1 -68.5 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1618" coordinates="-6.3 -56.8 20.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1619" coordinates="3.3 -45.7 20.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1620" coordinates="8.3 -47.0 24.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1621" coordinates="-12.5 -37.6 10.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1622" coordinates="2.5 -59.5 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1623" coordinates="-44.4 -87.8 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1624" coordinates="-4.0 -54.8 18.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1625" coordinates="36.5 -76.2 3.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1626" coordinates="5.6 -40.8 11.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1627" coordinates="2.0 -43.2 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1628" coordinates="-3.0 -57.3 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1629" coordinates="6.7 -69.7 4.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1630" coordinates="7.2 -76.4 3.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1631" coordinates="-18.4 -90.2 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1632" coordinates="-16.0 -82.9 16.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1633" coordinates="-3.6 -61.0 0.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1634" coordinates="19.1 -82.9 2.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1635" coordinates="13.8 -48.5 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1636" coordinates="8.2 -101.8 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1637" coordinates="14.2 -56.8 10.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1638" coordinates="14.4 -48.4 24.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1639" coordinates="-1.0 -48.8 29.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1640" coordinates="-17.4 -59.4 8.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1641" coordinates="0.7 -48.6 41.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1642" coordinates="14.5 -47.9 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1643" coordinates="-21.6 -56.3 6.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1644" coordinates="-5.8 -63.2 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1645" coordinates="-8.2 -47.1 18.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1646" coordinates="10.5 -55.2 22.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1647" coordinates="-3.8 -55.9 35.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1648" coordinates="7.6 -82.2 1.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1649" coordinates="-8.7 85.0 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1650" coordinates="-1.5 91.4 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1651" coordinates="-25.1 81.8 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1652" coordinates="-24.3 84.1 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1653" coordinates="-11.9 70.3 21.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1654" coordinates="-65.6 49.8 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1655" coordinates="-27.0 88.4 0.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1656" coordinates="-9.6 75.5 8.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1657" coordinates="-12.8 94.8 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1658" coordinates="6.1 90.3 0.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1659" coordinates="-8.9 78.9 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1660" coordinates="-10.9 83.9 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1661" coordinates="-13.3 87.4 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1662" coordinates="-31.4 68.0 13.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1663" coordinates="16.4 -5.4 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1664" coordinates="0.4 -11.0 12.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1665" coordinates="12.4 -3.8 9.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1666" coordinates="5.5 -1.7 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1667" coordinates="-5.6 7.5 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1668" coordinates="7.4 -13.4 1.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1669" coordinates="-7.2 4.1 1.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1670" coordinates="5.1 0.1 9.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1671" coordinates="-15.9 -1.7 0.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1672" coordinates="4.6 -7.6 9.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1673" coordinates="10.9 -2.9 2.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1674" coordinates="10.0 -6.8 22.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1675" coordinates="-0.3 -6.5 15.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1676" coordinates="-1.4 5.3 0.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1677" coordinates="18.4 -4.3 3.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1678" coordinates="4.8 26.2 9.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1679" coordinates="2.5 -9.8 3.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1680" coordinates="4.8 16.8 9.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1681" coordinates="-1.7 -9.9 10.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1682" coordinates="1.9 -11.4 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1683" coordinates="2.4 -7.2 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1684" coordinates="3.8 0.9 5.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1685" coordinates="-10.0 -73.5 2.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1686" coordinates="-5.0 -51.0 19.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1687" coordinates="5.4 26.4 55.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1688" coordinates="2.3 78.2 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1689" coordinates="-15.2 92.2 1.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1690" coordinates="-19.2 81.0 5.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1691" coordinates="1.6 53.9 28.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1692" coordinates="-46.7 62.9 2.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1693" coordinates="12.1 88.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1694" coordinates="29.5 42.4 46.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1695" coordinates="-2.8 31.1 50.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1696" coordinates="-15.0 90.0 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1697" coordinates="-5.1 46.7 36.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1698" coordinates="-4.9 71.0 61.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1699" coordinates="-14.6 96.7 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1700" coordinates="-32.7 96.9 10.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1701" coordinates="10.0 -40.2 10.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1702" coordinates="6.0 -51.8 0.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1703" coordinates="9.1 -59.3 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1704" coordinates="4.5 -11.7 3.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1705" coordinates="-7.0 22.9 17.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1706" coordinates="4.7 -3.8 7.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1707" coordinates="9.5 -9.1 3.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1708" coordinates="35.8 25.5 1.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1709" coordinates="29.1 11.1 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1710" coordinates="-0.2 -2.0 40.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1711" coordinates="-1.2 -9.3 2.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1712" coordinates="-5.4 -7.7 13.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1713" coordinates="9.9 -10.7 7.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1714" coordinates="8.3 -9.9 13.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1715" coordinates="-1.2 -3.4 6.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1716" coordinates="3.1 0.9 5.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1717" coordinates="5.0 -10.2 4.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1718" coordinates="5.0 4.2 4.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1719" coordinates="-10.5 4.8 24.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1720" coordinates="1.6 -1.6 1.0 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1721" coordinates="13.4 -1.6 21.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1722" coordinates="3.7 -2.2 1.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1723" coordinates="1.5 -6.5 2.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1724" coordinates="-5.6 24.5 5.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1725" coordinates="-2.8 -12.8 4.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1726" coordinates="8.8 -0.8 14.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1727" coordinates="0.1 4.1 11.3 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1728" coordinates="6.8 -1.5 10.4 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1729" coordinates="11.5 17.8 1.9 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1730" coordinates="-26.3 -10.6 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1731" coordinates="-0.1 6.9 4.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1732" coordinates="5.7 23.3 0.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1733" coordinates="29.0 12.7 0.2 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1734" coordinates="37.4 -11.5 57.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1735" coordinates="-9.0 63.3 53.8 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1736" coordinates="1.6 11.6 1.6 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1737" coordinates="-14.8 -64.6 2.1 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1738" coordinates="21.3 -77.5 0.5 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us"/>
-    <peer id="peer-1739" coordinates="36.2 -52.2 0.7 " speed="730Mf" bw_in="13.38MBps" bw_out="1.024MBps" lat="500us" />
-  </AS>
-</platform> 
index 0b54715..48f7ff4 100644 (file)
@@ -2,6 +2,6 @@ S4U (Simgrid for you) is the next interface of SimGrid, expected to be
 released with SimGrid 4.0.
 
 Even if it's in a very preliminary state so far, you are welcome to
-try it an report any interface glitches that you see. Be however
+try it and report any interface glitches that you see. Be however
 warned that the interface will be modified until its final release.
 You will have to adapt your code on the way.
\ No newline at end of file
index 5d2c207..272b302 100644 (file)
@@ -1,5 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-add_executable(s4u_basic s4u_basic.cpp)
+add_executable       (s4u_basic s4u_basic.cpp)
 target_link_libraries(s4u_basic simgrid)
 
 set(tesh_files
index 7fdeb48..d61f16b 100644 (file)
@@ -1,5 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-add_executable(s4u_io_test ${CMAKE_CURRENT_SOURCE_DIR}/s4u_io_test.cpp)
+add_executable       (s4u_io_test s4u_io_test.cpp)
 target_link_libraries(s4u_io_test simgrid)
 
 set(tesh_files
index 789a8f4..20a3db2 100644 (file)
@@ -25,8 +25,8 @@ public:
       simgrid::s4u::Storage &storage = *kv.second;
 
       // Retrieve disk's information
-      sg_size_t free_size = storage.size_free();
-      sg_size_t used_size = storage.size_used();
+      sg_size_t free_size = storage.sizeFree();
+      sg_size_t used_size = storage.sizeUsed();
       sg_size_t size = storage.size();
 
       XBT_INFO("    %s (%s) Used: %llu; Free: %llu; Total: %llu.",
@@ -36,7 +36,7 @@ public:
 
   int main(int argc, char **argv) {
     boost::unordered_map <std::string, simgrid::s4u::Storage *> const& mounts =
-      simgrid::s4u::Host::current()->mounted_storages();
+      simgrid::s4u::Host::current()->mountedStorages();
 
     show_info(mounts);
 
@@ -69,7 +69,7 @@ public:
     file->move(newpath);
 
     // Test attaching some user data to the file
-    file->set_userdata(xbt_strdup("777"));
+    file->setUserdata(xbt_strdup("777"));
     XBT_INFO("User data attached to the file: %s", (char*)file->userdata());
 
     // Close the file
@@ -79,7 +79,7 @@ public:
     XBT_INFO("Get/set data for storage element: %s",storage.name());
     XBT_INFO("    Uninitialized storage data: '%s'", (char*)storage.userdata());
 
-    storage.set_userdata(xbt_strdup("Some user data"));
+    storage.setUserdata(xbt_strdup("Some user data"));
     XBT_INFO("    Set and get data: '%s'", (char*)storage.userdata());
 
     /*
index bd57c5b..126e7f5 100644 (file)
@@ -1,18 +1,15 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(sd_test sd_test.c)
-add_executable(sd_test2 sd_test2.c)
-add_executable(sd_fail sd_fail.c)
-add_executable(sd_avail sd_avail.c)
-add_executable(sd_typed_tasks_test sd_typed_tasks_test.c)
-add_executable(sd_comm_throttling sd_comm_throttling.c)
-
-target_link_libraries(sd_test simgrid)
-target_link_libraries(sd_test2 simgrid)
-target_link_libraries(sd_fail simgrid)
-target_link_libraries(sd_avail simgrid)
+add_executable       (sd_test             sd_test.c)
+target_link_libraries(sd_test             simgrid)
+add_executable       (sd_test2            sd_test2.c)
+target_link_libraries(sd_test2            simgrid)
+add_executable       (sd_fail             sd_fail.c)
+target_link_libraries(sd_fail             simgrid)
+add_executable       (sd_avail            sd_avail.c)
+target_link_libraries(sd_avail            simgrid)
+add_executable       (sd_typed_tasks_test sd_typed_tasks_test.c)
 target_link_libraries(sd_typed_tasks_test simgrid)
-target_link_libraries(sd_comm_throttling simgrid)
+add_executable       (sd_comm_throttling  sd_comm_throttling.c)
+target_link_libraries(sd_comm_throttling  simgrid)
 
 set(tesh_files
   ${tesh_files}
index 77dafa0..bac344e 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(dax_test dax_test.c)
+add_executable       (dax_test dax_test.c)
 target_link_libraries(dax_test simgrid)
 
 set(tesh_files
index c45b57c..9e81450 100644 (file)
@@ -1,15 +1,12 @@
 if(HAVE_GRAPHVIZ)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-  add_executable(dot_test dot_test.c)
-  add_executable(ptg_test ptg_test.c)
-  add_executable(simulate_dot simulate_dot.c)
-  add_executable(dot_test2 dot_test2.c)
-
-  target_link_libraries(dot_test simgrid)
-  target_link_libraries(ptg_test simgrid)
+  add_executable       (dot_test     dot_test.c)
+  target_link_libraries(dot_test     simgrid)
+  add_executable       (ptg_test     ptg_test.c)
+  target_link_libraries(ptg_test     simgrid)
+  add_executable       (simulate_dot simulate_dot.c)
   target_link_libraries(simulate_dot simgrid)
-  target_link_libraries(dot_test2 simgrid)
+  add_executable       (dot_test2    dot_test2.c)
+  target_link_libraries(dot_test2    simgrid)
 endif()
 
 set(tesh_files
index d0f13f5..2887013 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(goal_test goal_test.c)
+add_executable       (goal_test goal_test.c)
 target_link_libraries(goal_test simgrid)
 
 set(examples_src
index 3f4db61..f1e63b1 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(sd_io sd_io.c)
+add_executable       (sd_io sd_io.c)
 target_link_libraries(sd_io simgrid)
 
 set(tesh_files
index e0fc82d..892fff8 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(sd_prop sd_prop.c)
+add_executable       (sd_prop sd_prop.c)
 target_link_libraries(sd_prop simgrid)
 
 set(tesh_files
index 219282d..70d8da4 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(minmin_test minmin_test.c)
+add_executable       (minmin_test minmin_test.c)
 target_link_libraries(minmin_test simgrid)
 
 set(tesh_files
index 6476a6b..9f1788a 100644 (file)
@@ -5,53 +5,26 @@ if(enable_smpi)
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/mc/")
 
-  add_executable(bcbench bcbench.c)
-  add_executable(mvmul mvmul.c)
-  add_executable(smpi_traced tracing/smpi_traced.c)
-  add_executable(smpi_traced_simple tracing/smpi_traced_simple.c)
-  add_executable(smpi_replay replay/replay.c)
-
-  target_link_libraries(bcbench simgrid)
-  target_link_libraries(mvmul simgrid)
-  target_link_libraries(smpi_traced simgrid)
+  add_executable       (bcbench            bcbench.c)
+  target_link_libraries(bcbench            simgrid)
+  add_executable       (mvmul              mvmul.c)
+  target_link_libraries(mvmul              simgrid)
+  add_executable       (smpi_traced        tracing/smpi_traced.c)
+  target_link_libraries(smpi_traced        simgrid)
+  add_executable       (smpi_traced_simple tracing/smpi_traced_simple.c)
   target_link_libraries(smpi_traced_simple simgrid)
-  target_link_libraries(smpi_replay simgrid)
+  add_executable       (smpi_replay        replay/replay.c)
+  target_link_libraries(smpi_replay        simgrid)
 
   if(HAVE_MC)
-    add_executable(smpi_bugged1 mc/bugged1.c)
-    add_executable(smpi_bugged2 mc/bugged2.c)
-    add_executable(smpi_bugged1_liveness mc/bugged1_liveness.c)
-    add_executable(smpi_only_send_deterministic mc/only_send_deterministic.c)
-    add_executable(smpi_mutual_exclusion mc/mutual_exclusion.c)
-    add_executable(smpi_non_termination1 mc/non_termination1.c)
-    add_executable(smpi_non_termination2 mc/non_termination2.c)
-    add_executable(smpi_non_termination3 mc/non_termination3.c)
-    add_executable(smpi_non_termination4 mc/non_termination4.c)
-
-    target_link_libraries(smpi_bugged1 simgrid)
-    target_link_libraries(smpi_bugged2 simgrid)
-    target_link_libraries(smpi_bugged1_liveness simgrid)
-    target_link_libraries(smpi_only_send_deterministic simgrid)
-    target_link_libraries(smpi_mutual_exclusion simgrid)
-    target_link_libraries(smpi_non_termination1 simgrid)
-    target_link_libraries(smpi_non_termination2 simgrid)
-    target_link_libraries(smpi_non_termination3 simgrid)
-    target_link_libraries(smpi_non_termination4 simgrid)
-
-    set_target_properties(smpi_bugged1 PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
-    set_target_properties(smpi_bugged2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
-    set_target_properties(smpi_bugged1_liveness PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
-    set_target_properties(smpi_only_send_deterministic PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
-    set_target_properties(smpi_mutual_exclusion PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
-    set_target_properties(smpi_non_termination1 PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
-    set_target_properties(smpi_non_termination2 PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
-    set_target_properties(smpi_non_termination3 PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
-    set_target_properties(smpi_non_termination4 PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
+    foreach(x bugged1 bugged2 bugged1_liveness only_send_deterministic mutual_exclusion non_termination1 non_termination2 non_termination3 non_termination4)
+      add_executable       (smpi_${x} mc/${x}.c)
+      target_link_libraries(smpi_${x} simgrid)
+      set_target_properties(smpi_${x} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "./mc")
+    endforeach()    
   endif()
 endif()
 
index ec352cc..4438eec 100644 (file)
@@ -1,11 +1,10 @@
 if(enable_smpi)
   set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
   if(NOT WIN32)
-    add_executable(MM_mpi MM_mpi.c 2.5D_MM.c Summa.c Matrix_init.c)
-    target_link_libraries(MM_mpi simgrid pthread)
+    add_executable       (MM_mpi MM_mpi.c 2.5D_MM.c Summa.c Matrix_init.c)
+    target_link_libraries(MM_mpi simgrid)
   endif()
 endif()
 
index d59b122..ecaab74 100644 (file)
@@ -9,10 +9,10 @@
  *
  */
 
-
 #include "Matrix_init.h"
 #include "2.5D_MM.h"
 #include "xbt/log.h"
+#include <xbt/str.h>
 
 /*int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
   int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask);
index c77983e..5371423 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
-  add_executable(se se.c)
+  add_executable       (se se.c)
   target_link_libraries(se simgrid)
 endif()
 
index 976640d..3b503c4 100644 (file)
@@ -1,8 +1,7 @@
 if(enable_smpi AND SMPI_FORTRAN)
   set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
 
-  add_executable(sef sef.f)
+  add_executable       (sef sef.f)
   target_link_libraries(sef simgrid)
 endif()
 
index b96c097..d604ad6 100644 (file)
@@ -1,8 +1,7 @@
 if(enable_smpi AND SMPI_FORTRAN)
   set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90")
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
 
-  add_executable(sef90 sef90.f90)
+  add_executable       (sef90 sef90.f90)
   target_link_libraries(sef90 simgrid)
 endif()
 
index c7e8353..acc6af8 100644 (file)
@@ -9,6 +9,8 @@
 #include <ctype.h>
 #include <mpi.h>
 
+#include <xbt/str.h>
+
 #define ITERATIONS         10
 
 #define USAGE_ERROR        1
index 601ce27..cd9186c 100644 (file)
@@ -1,8 +1,7 @@
 if(enable_smpi)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
-  add_executable(replay_multiple replay_multiple.c)
+  add_executable       (replay_multiple replay_multiple.c)
   target_link_libraries(replay_multiple simgrid)
 endif()
 
index 787fd28..62fee2c 100644 (file)
@@ -1,8 +1,7 @@
 if(enable_smpi)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
-  add_executable(masterslave_mailbox_smpi masterslave_mailbox_smpi.c)
+  add_executable       (masterslave_mailbox_smpi masterslave_mailbox_smpi.c)
   target_link_libraries(masterslave_mailbox_smpi simgrid)
 endif()
 
index 316a59a..629feb6 100644 (file)
@@ -7,8 +7,6 @@
 #ifndef SG_PLATF_TYPES_H
 #define SG_PLATF_TYPES_H
 
-#include <xbt.h>
-
 #ifdef __cplusplus
 
 namespace simgrid {
@@ -51,7 +49,7 @@ typedef surf_NetCard *sg_netcard_t;
 typedef surf_Resource *sg_resource_t;
 
 // Types which are in fact dictelmt:
-typedef xbt_dictelm_t sg_storage_t;
+typedef struct s_xbt_dictelm *sg_storage_t;
 
 typedef struct tmgr_trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */
 
index f74ddf6..cb1552d 100644 (file)
@@ -10,7 +10,7 @@
 #include "simgrid_config.h"
 
 #include "xbt/dynar.h"
-#include "xbt/hash.h"
+#include "xbt/dict.h"
 
 #ifdef HAVE_JEDULE
 
index 4015e9a..b77f417 100644 (file)
@@ -18,8 +18,9 @@
 #include <stdbool.h>
 
 #include <simgrid_config.h> /* HAVE_MC ? */
-#include <xbt.h>
-#include "xbt/automaton.h"
+
+#include <xbt/base.h>
+#include <xbt/automaton.h>
 
 SG_BEGIN_DECL()
 
index bd7f982..98a7fc8 100644 (file)
@@ -490,21 +490,58 @@ XBT_PUBLIC(int) MSG_task_listen_from(const char *alias);
 XBT_PUBLIC(void) MSG_task_set_category (msg_task_t task, const char *category);
 XBT_PUBLIC(const char *) MSG_task_get_category (msg_task_t task);
 
-/************************** Task handling ************************************/
-XBT_PUBLIC(msg_error_t)
-    MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t * task,
-                         msg_host_t host, double timeout);
+/************************** Mailbox handling ************************************/
+/* @brief MSG_mailbox_new - create a new mailbox.
+ * Creates a new mailbox identified by the key specified by the parameter alias and add it in the global dictionary.
+ * @param  alias  The alias of the mailbox to create.
+ * @return        The newly created mailbox.
+ */
+XBT_PUBLIC(msg_mailbox_t) MSG_mailbox_new(const char *alias);
 
-XBT_PUBLIC(msg_error_t)
-    MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t *task,
-                                     msg_host_t host, double timeout, double rate);
+/* @brief MSG_mailbox_get_by_alias - get a mailbox from its alias.
+ * Returns the mailbox associated with the key specified by the parameter alias. If the mailbox does not exists,
+ * the function creates it.
+ * @param   alias    The alias of the mailbox to return.
+ * @return           The mailbox associated with the alias specified as parameter or a new one if the key doesn't match.
+ */
+XBT_PUBLIC(msg_mailbox_t) MSG_mailbox_get_by_alias(const char *alias);
 
-XBT_PUBLIC(msg_error_t)
-    MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task,
-                             double timeout);
+/* @brief MSG_mailbox_is_empty - test if a mailbox is empty.
+ * Tests if a mailbox is empty (contains no msg task).
+ * @param   mailbox  The mailbox to get test.
+ * @return           1 if the mailbox is empty, 0 otherwise.
+ */
+XBT_PUBLIC(int) MSG_mailbox_is_empty(msg_mailbox_t mailbox);
 
+/* @brief MSG_mailbox_set_async - set a mailbox as eager
+ * Sets the mailbox to a permanent receiver mode. Messages sent to this mailbox will then be sent just after the send
+ * is issued, without waiting for the corresponding receive.
+ * This call should be done before issuing any receive, and on the receiver's side only
+ * @param alias    The alias of the mailbox to modify.
+ */
 XBT_PUBLIC(void) MSG_mailbox_set_async(const char *alias);
 
+/* @brief MSG_mailbox_get_head - get the task at the head of a mailbox.
+ * Returns the task at the head of the mailbox. This function does not remove the task from the mailbox.
+ * @param   mailbox  The mailbox concerned by the operation.
+ * @return           The task at the head of the mailbox.
+ */
+XBT_PUBLIC(msg_task_t) MSG_mailbox_get_head(msg_mailbox_t mailbox);
+
+/* @brief MSG_mailbox_get_count_host_waiting_tasks
+ * Return the number of tasks waiting to be received in a mailbox and sent by a host.
+ * @param  mailbox  The mailbox concerned by the operation.
+ * @param  host     The host containing the processes that sended the tasks.
+ * @return          The number of tasks in the mailbox specified by the parameter mailbox and sended by all the
+ *                  processes located on the host specified by the parameter host.
+ */
+XBT_PUBLIC(int) MSG_mailbox_get_count_host_waiting_tasks(msg_mailbox_t mailbox, msg_host_t host);
+XBT_PUBLIC(msg_error_t) MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t * task, msg_host_t host,
+                                                 double timeout);
+XBT_PUBLIC(msg_error_t) MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host,
+                                                         double timeout, double rate);
+XBT_PUBLIC(msg_error_t) MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task, double timeout);
+
 
 /************************** Action handling **********************************/
 XBT_PUBLIC(msg_error_t) MSG_action_trace_run(char *path);
index ded1496..b56e272 100644 (file)
@@ -39,16 +39,16 @@ public:
   void wait(double timeout) override;
 
 private:
-  double p_rate=-1;
+  double rate_=-1;
 public:
   /** Sets the maximal communication rate (in byte/sec). Must be done before start */
   void setRate(double rate);
 
 private:
-  void *p_dstBuff = NULL;
-  size_t p_dstBuffSize = 0;
-  void *p_srcBuff = NULL;
-  size_t p_srcBuffSize = sizeof(void*);
+  void *dstBuff_ = NULL;
+  size_t dstBuffSize_ = 0;
+  void *srcBuff_ = NULL;
+  size_t srcBuffSize_ = sizeof(void*);
 public:
   /** Specify the data to send */
   void setSrcData(void * buff);
@@ -66,15 +66,15 @@ public:
 
 
 private: /* FIXME: expose these elements in the API */
-  int p_detached = 0;
-    int (*p_matchFunction)(void *, void *, smx_synchro_t) = NULL;
-    void (*p_cleanFunction)(void *) = NULL;
-    void (*p_copyDataFunction)(smx_synchro_t, void*, size_t) = NULL;
+  int detached_ = 0;
+  int (*matchFunction_)(void *, void *, smx_synchro_t) = NULL;
+  void (*cleanFunction_)(void *) = NULL;
+  void (*copyDataFunction_)(smx_synchro_t, void*, size_t) = NULL;
 
 private:
-  Actor *p_sender = NULL;
-  Actor *p_receiver = NULL;
-  Mailbox *p_mailbox = NULL;
+  Actor *sender_ = NULL;
+  Actor *receiver_ = NULL;
+  Mailbox *mailbox_ = NULL;
 };
 
 }} // namespace simgrid::s4u
index e5bc4d2..b81a57f 100644 (file)
@@ -29,14 +29,14 @@ public:
   void loadPlatform(const char *platf);
 
   /** Registers the main function of an actor that will be launched from the deployment file */
-  void register_function(const char*name, int (*code)(int,char**));
+  void registerFunction(const char*name, int (*code)(int,char**));
 
   /** Registers a function as the default main function of actors
    *
    * It will be used as fallback when the function requested from the deployment file was not registered.
    * It is used for trace-based simulations (see examples/msg/actions).
    */
-  void register_default(int (*code)(int,char**));
+  void registerDefault(int (*code)(int,char**));
 
   /** @brief Load a deployment file and launch the actors that it contains */
   void loadDeployment(const char *deploy);
index f2182a3..90d0915 100644 (file)
@@ -30,30 +30,32 @@ public:
   File(const char *fullpath, void* userdata);
   ~File();
 private:
-  smx_file_t p_inferior;
-  const char *p_path;
+  smx_file_t inferior_;
+  const char *path_;
 
 public:
   /** Retrieves the path to the file */
-  const char *path() { return p_path;}
+  const char *path() { return path_;}
 public:
   /** Simulates a read action. Returns the size of data actually read
    *
-   *  FIXME: reading from a remotely mounted disk is not implemented yet. Any storage is considered as local, and no network communication ever occur.
+   *  FIXME: reading from a remotely mounted disk is not implemented yet.
+   *  Any storage is considered as local, and no network communication ever occur.
    */
   sg_size_t read(sg_size_t size);
   /** Simulates a write action. Returns the size of data actually written.
    *
-   *  FIXME: reading from a remotely mounted disk is not implemented yet. Any storage is considered as local, and no network communication ever occur.
+   *  FIXME: reading from a remotely mounted disk is not implemented yet.
+   *  Any storage is considered as local, and no network communication ever occur.
    */
   sg_size_t write(sg_size_t size);
 
   /** Allows to store user data on that host */
-  void set_userdata(void *data) {p_userdata = data;}
+  void setUserdata(void *data) {userdata_ = data;}
   /** Retrieves the previously stored data */
-  void* userdata() {return p_userdata;}
+  void* userdata() {return userdata_;}
 private:
-  void *p_userdata=NULL;
+  void *userdata_=NULL;
 
 public:
   /** Retrieve the datasize */
index 20e5e7d..2e5144a 100644 (file)
@@ -60,32 +60,32 @@ public:
    * All actors on that host which were marked autorestart will be restarted automatically.
    * This call does nothing if the host is already on.
    */
-  void turn_on();
+  void turnOn();
   /** Turns that host off. All actors are forcefully stopped. */
-  void turn_off();
+  void turnOff();
   /** Returns if that host is currently up and running */
-  bool is_on();
-  bool is_off() { return !is_on(); }
+  bool isOn();
+  bool isOff() { return !isOn(); }
 
   double speed();
   int core_count();
   xbt_dict_t properties();
   xbt_swag_t processes();
-  double current_power_peak();
-  double power_peak_at(int pstate_index);
-  void set_pstate(int pstate_index);
-  int pstates_count() const;
+  double currentPowerPeak();
+  double powerPeakAt(int pstate_index);
+  int pstatesCount() const;
+  void setPstate(int pstate_index);
   int pstate();
-  void get_parameters(vm_params_t params);
-  void set_parameters(vm_params_t params);
-  xbt_dict_t mounted_storages_as_dict(); // HACK
-  xbt_dynar_t attached_storages();
+  void parameters(vm_params_t params);
+  void setParameters(vm_params_t params);
+  xbt_dict_t mountedStoragesAsDict(); // HACK
+  xbt_dynar_t attachedStorages();
 
   /** Get an associative list [mount point]->[Storage] off all local mount points.
    *
    *  This is defined in the platform file, and cannot be modified programatically (yet).
    */
-  boost::unordered_map<std::string, Storage*> const &mounted_storages();
+  boost::unordered_map<std::string, Storage*> const &mountedStorages();
 
 private:
   simgrid::xbt::string name_ = "noname";
@@ -110,9 +110,7 @@ public:
 }} // namespace simgrid::s4u
 
 extern int MSG_HOST_LEVEL;
-extern int SD_HOST_LEVEL;
 extern int SIMIX_HOST_LEVEL;
-extern int ROUTING_HOST_LEVEL;
 extern int USER_HOST_LEVEL;
 
 #endif /* SIMGRID_S4U_HOST_HPP */
index a2311c7..98e968f 100644 (file)
@@ -31,7 +31,7 @@ public:
   ~Mailbox();
   
 protected:
-  smx_rdv_t getInferior() { return p_inferior; }
+  smx_rdv_t getInferior() { return inferior_; }
 
 public:
   /** Get the name of that mailbox */
@@ -40,8 +40,8 @@ public:
   static Mailbox *byName(const char *name);
 
 private:
-  std::string p_name;
-  smx_rdv_t p_inferior;
+  std::string name_;
+  smx_rdv_t inferior_;
   static boost::unordered_map<std::string, Mailbox *> *mailboxes;
 };
 }} // namespace simgrid::s4u
index 193a6d2..4b4d98a 100644 (file)
@@ -23,8 +23,8 @@ public:
   /** Retrieve a Storage by its name. It must exist in the platform file */
   static Storage &byName(const char* name);
   const char *name();
-  sg_size_t size_free();
-  sg_size_t size_used();
+  sg_size_t sizeFree();
+  sg_size_t sizeUsed();
   /** Retrieve the total amount of space of this storage element */
   sg_size_t size();
 
@@ -40,16 +40,16 @@ XBT_PUBLIC(const char *) MSG_storage_get_host(msg_storage_t storage);
 protected:
   smx_storage_t inferior();
 private:
-  static boost::unordered_map<std::string, Storage *> *storages;
-  std::string p_name;
-  smx_storage_t p_inferior;
+  static boost::unordered_map<std::string, Storage *> *storages_;
+  std::string name_;
+  smx_storage_t inferior_;
 
 
 public:
-  void set_userdata(void *data) {p_userdata = data;}
-  void *userdata() {return p_userdata;}
+  void setUserdata(void *data) {userdata_ = data;}
+  void *userdata() {return userdata_;}
 private:
-  void *p_userdata = NULL;
+  void *userdata_ = NULL;
 
 };
 
index 279ba46..0f4db4c 100644 (file)
@@ -9,6 +9,8 @@
 #ifndef SIMGRID_PUBLIC_CONFIG_H
 #define SIMGRID_PUBLIC_CONFIG_H
 
+/* This file should only contain public declarations, mainly the definitions of SimGrid modules that were compiled in */
+
 /** Define the version numbers of the used header files. 
     sg_version() can be used to retrieve the version of the dynamic library.
     But actually, if these numbers don't match, SimGrid refuses to start (so you shouldn't have to care about sg_version() yourself) */
                                              SIMGRID_VERSION_MINOR, \
                                              SIMGRID_VERSION_PATCH)
 
-/* take care of DLL usage madness */
-
-#ifdef _XBT_DLL_EXPORT
-       #ifndef DLL_EXPORT
-               #define DLL_EXPORT
-       #endif
-#else
-       #ifdef _XBT_DLL_STATIC
-               #ifndef DLL_STATIC
-                       #define DLL_STATIC
-               #endif
-       #else
-               #ifndef DLL_EXPORT
-                       #define DLL_IMPORT
-               #endif
-       #endif
-#endif
-
 #cmakedefine _XBT_WIN32 @_XBT_WIN32@   /*this variable is set if it is a windows platform*/
 #cmakedefine _WIN32 @_WIN32@                   /*this variable is set if it is a 32 bits windows platform*/
 #cmakedefine _WIN64 @_WIN64@                   /*this variable is set if it is a 64 bits  windows platform*/
-#cmakedefine __VISUALC__ @__VISUALC__@
-#ifdef _XBT_WIN32
-       #ifndef __GNUC__
-               #cmakedefine __GNUC__ @__GNUC__@
-       #endif
-#endif
 
 /* Define to 1 if you have the <unistd.h> header file. */
 #cmakedefine HAVE_UNISTD_H @HAVE_UNISTD_H@
+
 /* Define to 1 if you have the <sys/time.h> header file. */
 #cmakedefine HAVE_SYS_TIME_H @HAVE_SYS_TIME_H@
 
-/* Define to 1 if mmalloc is compiled in. */
-#cmakedefine HAVE_MMALLOC @HAVE_MMALLOC@
-
-/* Get the config */
-#undef SIMGRID_NEED_ASPRINTF
-#undef SIMGRID_NEED_VASPRINTF
-@simgrid_need_asprintf@
-@simgrid_need_vasprintf@
-
 /* Whether mallocators were enabled in ccmake or not. */
 #define MALLOCATOR_COMPILED_IN @MALLOCATOR_IS_WANTED@
 
 /* Define if xbt contexts are based on our threads implementation or not */
 #cmakedefine HAVE_THREAD_CONTEXTS @HAVE_THREAD_CONTEXTS@
 
-/* Jedule output  */
-#cmakedefine HAVE_JEDULE @HAVE_JEDULE@
-
 /* Tracking of latency bound */
 #cmakedefine HAVE_LATENCY_BOUND_TRACKING @HAVE_LATENCY_BOUND_TRACKING@
 
 /* If __thread is available */
 #cmakedefine HAVE_THREAD_LOCAL_STORAGE @HAVE_THREAD_LOCAL_STORAGE@
 
-/* If Model-Checking support was requested */
-#cmakedefine HAVE_MC @HAVE_MC@
+/* Define to 1 if mmalloc is compiled in. */
+#cmakedefine HAVE_MMALLOC @HAVE_MMALLOC@
+
+#cmakedefine HAVE_JEDULE @HAVE_JEDULE@ /* Was Jedule compiled in?  */
+#cmakedefine HAVE_MC     @HAVE_MC@     /* Was the model-checking compiled in? */
+#cmakedefine HAVE_NS3    @HAVE_NS3@    /* Was the NS3 support compiled in? */
+#cmakedefine HAVE_LUA    @HAVE_LUA@    /* Was the Lua support compiled in? */
 
 #cmakedefine SIMGRID_HAVE_LIBSIG @SIMGRID_HAVE_LIBSIG@
 
index 1180007..466e7a5 100644 (file)
  *
  *   * If you build the DLL, define the DLL_EXPORT symbol so that all symbols
  *     actually get exported by this file.
-
- *   * If you do a static windows compilation, define DLL_STATIC, both when
- *     compiling the application files and when compiling the library.
  *
  *   * If you link your application against the DLL or if you do a UNIX build,
  *     don't do anything special. This file will do the right thing for you
 #  define XBT_PUBLIC_CLASS            class __declspec(dllexport)
 #  define XBT_PRIVATE
 
-/* Pack everything up statically */
-#elif defined(DLL_STATIC)
-#  define XBT_PUBLIC(type)            type
-#  define XBT_EXPORT_NO_IMPORT(type)  type
-#  define XBT_IMPORT_NO_EXPORT(type)  type
-#  define XBT_PUBLIC_DATA(type)       extern type
-#  define XBT_PUBLIC_CLASS            class
-#  define XBT_PRIVATE
-
 /* Link against the DLL */
-#elif (defined(_XBT_WIN32) && !defined(DLL_EXPORT) && !defined(DLL_STATIC))
+#elif (defined(_XBT_WIN32) && !defined(DLL_EXPORT))
 #  define XBT_PUBLIC(type)            __declspec(dllimport) type
 #  define XBT_EXPORT_NO_IMPORT(type)  type
 #  define XBT_IMPORT_NO_EXPORT(type)  __declspec(dllimport) type
index 6fb5718..fa192a0 100644 (file)
@@ -21,7 +21,7 @@ typedef struct xbt_edge *xbt_edge_t;
 typedef struct xbt_graph *xbt_graph_t;
 
 /* Node structure */
-/* Be carfull of what you do with this structure */
+/* Be careful of what you do with this structure */
 /* typedef struct xbt_node *xbt_node_t; */
 typedef struct xbt_node {
   xbt_dynar_t out;
@@ -34,7 +34,7 @@ typedef struct xbt_node {
 } s_xbt_node_t;
 
 /* edge structure */
-/* Be carfull of what you do with this structure */
+/* Be careful of what you do with this structure */
 /* typedef struct xbt_edge *xbt_edge_t; */
 typedef struct xbt_edge {
   xbt_node_t src;
@@ -46,7 +46,7 @@ typedef struct xbt_edge {
 } s_xbt_edge_t;
 
 /* Graph structure */
-/* Be carfull of what you do with this structure */  
+/* Be careful of what you do with this structure */
 /* typedef struct xbt_graph *xbt_graph_t; */
 typedef struct xbt_graph {
   xbt_dynar_t nodes;
@@ -58,100 +58,30 @@ typedef struct xbt_graph {
 } s_xbt_graph_t;
 
 /* API */
-XBT_PUBLIC(xbt_graph_t) xbt_graph_new_graph(unsigned short int directed,
-                                            void *data);
+XBT_PUBLIC(xbt_graph_t) xbt_graph_new_graph(unsigned short int directed, void *data);
 XBT_PUBLIC(xbt_node_t) xbt_graph_new_node(xbt_graph_t g, void *data);
-XBT_PUBLIC(xbt_edge_t) xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src,
-                                          xbt_node_t dst, void *data);
+XBT_PUBLIC(xbt_edge_t) xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst, void *data);
 XBT_PUBLIC(void *) xbt_graph_node_get_data(xbt_node_t node);
 XBT_PUBLIC(void) xbt_graph_node_set_data(xbt_node_t node, void *data);
 XBT_PUBLIC(void *) xbt_graph_edge_get_data(xbt_edge_t edge);
 XBT_PUBLIC(void) xbt_graph_edge_set_data(xbt_edge_t edge, void *data);
 
-XBT_PUBLIC(xbt_edge_t) xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src,
-                                          xbt_node_t dst);
+XBT_PUBLIC(xbt_edge_t) xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst);
 
 XBT_PUBLIC(void) xbt_graph_edge_set_length(xbt_edge_t e, double length);
 XBT_PUBLIC(double) xbt_graph_edge_get_length(xbt_edge_t e);
-XBT_PUBLIC(double *) xbt_graph_get_length_matrix(xbt_graph_t g);
 
-XBT_PUBLIC(void) xbt_graph_free_node(xbt_graph_t g, xbt_node_t n,
-                                     void_f_pvoid_t node_free_function,
-                                     void_f_pvoid_t edge_free_function);
-XBT_PUBLIC(void) xbt_graph_free_edge(xbt_graph_t g, xbt_edge_t e,
-                                     void_f_pvoid_t free_function);
 XBT_PUBLIC(void) xbt_graph_free_graph(xbt_graph_t g,
-                                      void_f_pvoid_t node_free_function,
-                                      void_f_pvoid_t edge_free_function,
-                                      void_f_pvoid_t graph_free_function);
-
-XBT_PUBLIC(int) __xbt_find_in_dynar(xbt_dynar_t dynar, void *p);
+    void_f_pvoid_t node_free_function, void_f_pvoid_t edge_free_function, void_f_pvoid_t graph_free_function);
 
 XBT_PUBLIC(xbt_dynar_t) xbt_graph_get_nodes(xbt_graph_t g);
 XBT_PUBLIC(xbt_dynar_t) xbt_graph_get_edges(xbt_graph_t g);
 XBT_PUBLIC(xbt_dynar_t) xbt_graph_node_get_outedges(xbt_node_t n);
 XBT_PUBLIC(xbt_node_t) xbt_graph_edge_get_source(xbt_edge_t e);
 XBT_PUBLIC(xbt_node_t) xbt_graph_edge_get_target(xbt_edge_t e);
-XBT_PUBLIC(xbt_graph_t) xbt_graph_read(const char *filename, void
-                                       *(node_label_and_data) (xbt_node_t,
-                                                               const char
-                                                               *,
-                                                               const char
-                                                               *), void
-                                       *(edge_label_and_data) (xbt_edge_t,
-                                                               const char
-                                                               *,
-                                                               const char
-                                                               *)
-    );
-
-XBT_PUBLIC(void) xbt_graph_export_graphviz(xbt_graph_t g,
-                                           const char *filename, const char
-                                           *(node_name) (xbt_node_t), const char
-                                           *(edge_name) (xbt_edge_t));
-XBT_PUBLIC(void) xbt_graph_export_graphxml(xbt_graph_t g,
-                                           const char *filename, const char
-                                           *(node_name) (xbt_node_t), const char
-                                           *(edge_name) (xbt_edge_t), const char
-                                           *(node_data_print) (void *), const char
-                                           *(edge_data_print) (void *));
-XBT_PUBLIC(xbt_graph_t) xbt_graph_load (const char *filename);
-XBT_PUBLIC(void) xbt_graph_save (xbt_graph_t span,
-                                 const char *filename,
-                                 const char *(nname) (xbt_node_t),
-                                 const char *(ename) (xbt_edge_t));
-
-/* Not implemented yet ! */
-/* void *xbt_graph_to_array(xbt_graph_t g);  */
-XBT_PUBLIC(xbt_node_t *) xbt_graph_shortest_paths(xbt_graph_t g);
-
-
-
-/** @brief transforms the network structure of a directed acyclic graph given into a linear structure
-    @return: an array containing the nodes of the graph sorted in order reverse to the path of exploration
-            if a cycle is detected an exception is raised
-  */
-
-XBT_PUBLIC(xbt_node_t *) xbt_graph_topo_sort(xbt_graph_t g);
-
-XBT_PUBLIC(xbt_edge_t *) xbt_graph_spanning_tree_prim(xbt_graph_t g);
-
-
-
-
-/** Convenient for loop : g is a graph, n a node, e an edge, b a bucket and i an item **/
-
-/* #define xbt_graph_foreachInNeighbor(v,n,i)            \ */
-/*    for(i=xbt_fifo_get_first_item((v)->in);              \ */
-/*      ((i)?(n=((xbt_edge_t)((xbt_fifo_get_item_content(i)) */
-/* )->src):(NULL));\ */
-/*        i=xbt_fifo_get_next_item(i)) */
-/* #define xbt_graph_foreachOutNeighbor(v,n,i)           \ */
-/*    for(i=xbt_fifo_get_first_item((v)->out);             \ */
-/*      ((i)?(n=((xbt_edge_t)(xbt_fifo_get_item_content(i)))->dst):(NULL));\ */
-/*        i=xbt_fifo_get_next_item(i)) */
-
 
+XBT_PUBLIC(void) xbt_graph_export_graphviz(xbt_graph_t g, const char *filename,
+    const char *(node_name) (xbt_node_t), const char *(edge_name) (xbt_edge_t));
 
 SG_END_DECL()
 #endif                          /* _XBT_GRAPH_H */
diff --git a/include/xbt/graphxml.h b/include/xbt/graphxml.h
deleted file mode 100644 (file)
index 7ca6d5a..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/* XML processor/application API for src/xbt/graphxml.dtd.
- *
- * This program was generated with the FleXML XML processor generator.
- * FleXML is Copyright (C) 1999-2005 Kristoffer Rose.  All rights reserved.
- * FleXML is Copyright (C) 2003-2013 Martin Quinson.  All rights reserved.
- * (1.9.6).
- * 
- * There are two, intertwined parts to this program, part A and part B.
- *
- * Part A
- * ------
- * 
- * Some parts, here collectively called "Part A", are found in the 
- * FleXML package.  They are Copyright (C) 1999-2005 Kristoffer Rose
- * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved.
- *
- * You can redistribute, use, perform, display and/or modify "Part A"
- * provided the following two conditions hold:
- *
- * 1. The program is distributed WITHOUT ANY WARRANTY from the author of
- *    FleXML; without even the implied warranty of MERCHANTABILITY or
- *    FITNESS FOR A PARTICULAR PURPOSE.
- *
- * 2. The program distribution conditions do not in any way affect the
- *    distribution conditions of the FleXML system used to generate this
- *    file or any version of FleXML derived from that system.
- *
- * Notice that these are explicit rights granted to you for files
- * generated by the FleXML system.  For your rights in connection with
- * the FleXML system itself please consult the GNU General Public License.
- * 
- * Part B
- * ------
- * 
- * The other parts, here collectively called "Part B", and which came 
- * from the DTD used by FleXML to generate this program, can be 
- * distributed (or not, as the case may be) under the terms of whoever
- * wrote them, provided these terms respect and obey the two conditions 
- * above under the heading "Part A".
- *
- * The author of and contributors to FleXML specifically disclaim
- * any copyright interest in "Part B", unless "Part B" was written 
- * by the author of or contributors to FleXML.
- * 
- */
-
-#ifndef _FLEXML_graphxml_H
-#define _FLEXML_graphxml_H
-
-/* XML application entry points. */
-XBT_PUBLIC(void) STag_graphxml_edge(void);
-XBT_PUBLIC(void) ETag_graphxml_edge(void);
-XBT_PUBLIC(void) STag_graphxml_graph(void);
-XBT_PUBLIC(void) ETag_graphxml_graph(void);
-XBT_PUBLIC(void) STag_graphxml_node(void);
-XBT_PUBLIC(void) ETag_graphxml_node(void);
-
-/* XML application data. */
-typedef int AT_graphxml_edge_data;
-#define AU_graphxml_edge_data NULL
-typedef int AT_graphxml_edge_label;
-#define AU_graphxml_edge_label NULL
-typedef int AT_graphxml_edge_length;
-#define AU_graphxml_edge_length NULL
-typedef int AT_graphxml_edge_name;
-#define AU_graphxml_edge_name NULL
-typedef int AT_graphxml_edge_source;
-#define AU_graphxml_edge_source NULL
-typedef int AT_graphxml_edge_target;
-#define AU_graphxml_edge_target NULL
-typedef enum { AU_graphxml_graph_isDirected, A_graphxml_graph_isDirected_true,A_graphxml_graph_isDirected_false } AT_graphxml_graph_isDirected;
-typedef int AT_graphxml_node_data;
-#define AU_graphxml_node_data NULL
-typedef int AT_graphxml_node_label;
-#define AU_graphxml_node_label NULL
-typedef int AT_graphxml_node_name;
-#define AU_graphxml_node_name NULL
-typedef int AT_graphxml_node_position___x;
-#define AU_graphxml_node_position___x NULL
-typedef int AT_graphxml_node_position___y;
-#define AU_graphxml_node_position___y NULL
-
-/* FleXML-provided data. */
-XBT_PUBLIC_DATA(int) graphxml_pcdata_ix;
-XBT_PUBLIC_DATA(char *) graphxml_bufferstack;
-#define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix)
-XBT_PUBLIC_DATA(AT_graphxml_edge_data) AX_graphxml_edge_data;
-#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
-XBT_PUBLIC_DATA(short int) graphxml_edge_data_isset;
-XBT_PUBLIC_DATA(AT_graphxml_edge_label) AX_graphxml_edge_label;
-#define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label)
-XBT_PUBLIC_DATA(short int) graphxml_edge_label_isset;
-XBT_PUBLIC_DATA(AT_graphxml_edge_length) AX_graphxml_edge_length;
-#define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length)
-XBT_PUBLIC_DATA(short int) graphxml_edge_length_isset;
-XBT_PUBLIC_DATA(AT_graphxml_edge_name) AX_graphxml_edge_name;
-#define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name)
-XBT_PUBLIC_DATA(short int) graphxml_edge_name_isset;
-XBT_PUBLIC_DATA(AT_graphxml_edge_source) AX_graphxml_edge_source;
-#define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source)
-XBT_PUBLIC_DATA(short int) graphxml_edge_source_isset;
-XBT_PUBLIC_DATA(AT_graphxml_edge_target) AX_graphxml_edge_target;
-#define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target)
-XBT_PUBLIC_DATA(short int) graphxml_edge_target_isset;
-XBT_PUBLIC_DATA(AT_graphxml_graph_isDirected) AX_graphxml_graph_isDirected;
-#define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
-XBT_PUBLIC_DATA(short int) graphxml_graph_isDirected_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_data) AX_graphxml_node_data;
-#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
-XBT_PUBLIC_DATA(short int) graphxml_node_data_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_label) AX_graphxml_node_label;
-#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
-XBT_PUBLIC_DATA(short int) graphxml_node_label_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_name) AX_graphxml_node_name;
-#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
-XBT_PUBLIC_DATA(short int) graphxml_node_name_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_position___x) AX_graphxml_node_position___x;
-#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
-XBT_PUBLIC_DATA(short int) graphxml_node_position___x_isset;
-XBT_PUBLIC_DATA(AT_graphxml_node_position___y) AX_graphxml_node_position___y;
-#define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y)
-XBT_PUBLIC_DATA(short int) graphxml_node_position___y_isset;
-
-/* XML application utilities. */
-XBT_PUBLIC(int) graphxml_element_context(int);
-
-/* XML processor entry point. */
-XBT_PUBLIC(int) yylex(void);
-
-/* Flexml error handling function (useful only when -q flag passed to flexml) */
-const char * graphxml_parse_err_msg(void);
-#endif
diff --git a/include/xbt/graphxml_parse.h b/include/xbt/graphxml_parse.h
deleted file mode 100644 (file)
index 3811bc3..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright (c) 2006-2007, 2009-2011, 2013-2014. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#ifndef _XBT_GRAPHXML_PARSE_H
-#define _XBT_GRAPHXML_PARSE_H
-
-#include <stdio.h>              /* to have FILE */
-#include "xbt/misc.h"
-#include "xbt/graphxml.h"
-#include "simgrid_config.h"
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-/* Entry-point of the graphxml parser. */
-extern int_f_void_t xbt_graph_parse;
-
-/* Hook for the different tags. They can be redefined at will whereas
-   the versions without the _fun can't. */
-extern void_f_void_t STag_graphxml_graph_fun;
-extern void_f_void_t ETag_graphxml_graph_fun;
-extern void_f_void_t STag_graphxml_node_fun;
-extern void_f_void_t ETag_graphxml_node_fun;
-extern void_f_void_t STag_graphxml_edge_fun;
-extern void_f_void_t ETag_graphxml_edge_fun;
-
-XBT_PUBLIC(void) xbt_graph_parse_open(const char *file);
-XBT_PUBLIC(void) xbt_graph_parse_close(void);
-XBT_PUBLIC(void) xbt_graph_parse_reset_parser(void);
-XBT_PUBLIC(double) xbt_graph_parse_get_double(const char *string);
-
-/* Prototypes of the functions offered by flex */
-XBT_PUBLIC(int) xbt_graph_parse_lex(void);
-XBT_PUBLIC(int) xbt_graph_parse_get_lineno(void);
-XBT_PUBLIC(FILE *) xbt_graph_parse_get_in(void);
-XBT_PUBLIC(FILE *) xbt_graph_parse_get_out(void);
-XBT_PUBLIC(yy_size_t) xbt_graph_parse_get_leng(void);
-XBT_PUBLIC(char *) xbt_graph_parse_get_text(void);
-XBT_PUBLIC(void) xbt_graph_parse_set_lineno(int line_number);
-XBT_PUBLIC(void) xbt_graph_parse_set_in(FILE * in_str);
-XBT_PUBLIC(void) xbt_graph_parse_set_out(FILE * out_str);
-XBT_PUBLIC(int) xbt_graph_parse_get_debug(void);
-XBT_PUBLIC(void) xbt_graph_parse_set_debug(int bdebug);
-XBT_PUBLIC(int) xbt_graph_parse_lex_destroy(void);
-
-#endif
index d66ec43..7bcea4f 100644 (file)
@@ -8,7 +8,8 @@
 
 #ifndef XBT_HASH_H
 #define XBT_HASH_H
-#include "xbt/str.h"
+
+#include "xbt/misc.h"
 
 SG_BEGIN_DECL()
 
index dfbc6bb..16530f7 100644 (file)
@@ -60,11 +60,7 @@ XBT_PUBLIC(void) xbt_matrix_dump_display_double(void *d);
 
 XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_zeros(int lines, int rows);
 XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_id(int lines, int rows);
-XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_rand(int lines, int rows);
 XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_seq(int lines, int rows);
-XBT_PUBLIC(int) xbt_matrix_double_is_seq(xbt_matrix_t mat);
-XBT_PUBLIC(xbt_matrix_t) xbt_matrix_double_new_mult(xbt_matrix_t A,
-                                                    xbt_matrix_t B);
 XBT_PUBLIC(void) xbt_matrix_double_addmult(xbt_matrix_t A, xbt_matrix_t B,
                                            /*OUT*/ xbt_matrix_t C);
 SG_END_DECL()
index e1e454b..6c7f6c9 100644 (file)
@@ -40,37 +40,15 @@ XBT_PUBLIC_DATA(xbt_dynar_t) sg_cmdline;
 /* snprintf related functions */
 /** @addtogroup XBT_str
   * @{ */
-/** @brief print to allocated string (reimplemented when not provided by the system)
- *
- * The functions asprintf() and vasprintf() are analogues of
- * sprintf() and vsprintf(), except that they allocate a string large
- * enough to hold the output including the terminating null byte, and
- * return a pointer to it via the first parameter.  This pointer
- * should be passed to free(3) to release the allocated storage when
- * it is no longer needed.
- */
-#if defined(SIMGRID_NEED_ASPRINTF)||defined(DOXYGEN)
-XBT_PUBLIC(int) asprintf(char **ptr, const char *fmt,   /*args */
-                         ...) XBT_ATTRIB_PRINTF(2, 3);
-#endif
-/** @brief print to allocated string (reimplemented when not provided by the system)
- *
- * See asprintf()
- */
-#if defined(SIMGRID_NEED_VASPRINTF)||defined(DOXYGEN)
-XBT_PUBLIC(int) vasprintf(char **ptr, const char *fmt, va_list ap);
-#endif
 
 /** @brief print to allocated string
  *
- * Works just like vasprintf(), but returns a pointer to the newly
- * created string, or aborts on error.
+ * Similar to vasprintf(), but returns a pointer to the newly created string (or aborts on error).
  */
 XBT_PUBLIC(char *) bvprintf(const char *fmt, va_list ap);
 /** @brief print to allocated string
  *
- * Works just like asprintf(), but returns a pointer to the newly
- * created string, or aborts on error.
+ * Similar to asprintf(), but returns a pointer to the newly created string (or aborts on error).
  */
 XBT_PUBLIC(char *) bprintf(const char *fmt, ...) XBT_ATTRIB_PRINTF(1, 2);
 /** @} */
index 603579d..ddacf95 100644 (file)
@@ -24,7 +24,6 @@ XBT_PUBLIC_DATA(FILE *) xbt_action_fp;
 XBT_PUBLIC(xbt_replay_reader_t) xbt_replay_reader_new(const char*filename);
 XBT_PUBLIC(const char **) xbt_replay_reader_get(xbt_replay_reader_t reader);
 XBT_PUBLIC(void) xbt_replay_reader_free(xbt_replay_reader_t *reader);
-XBT_PUBLIC(const char *) xbt_replay_reader_position(xbt_replay_reader_t reader);
 
 XBT_PUBLIC(int) xbt_replay_action_runner(int argc, char *argv[]);
 
@@ -33,9 +32,7 @@ XBT_PUBLIC(int) _xbt_replay_is_active(void);
 XBT_PUBLIC(int) _xbt_replay_action_init(void);
 XBT_PUBLIC(void) _xbt_replay_action_exit(void);
 
-XBT_PUBLIC(void) xbt_replay_action_register(const char *action_name,
-                                            action_fun function);
-XBT_PUBLIC(void) xbt_replay_action_unregister(const char *action_name);
+XBT_PUBLIC(void) xbt_replay_action_register(const char *action_name, action_fun function);
 
 SG_END_DECL()
 
index b90f86b..813e3eb 100644 (file)
@@ -50,13 +50,8 @@ XBT_PUBLIC(void) xbt_str_subst(char *str, char from, char to, int amount);
 XBT_PUBLIC(char *) xbt_str_varsubst(const char *str, xbt_dict_t patterns);
 
 /* */
-XBT_PUBLIC(void) xbt_str_strip_spaces(char *);
-XBT_PUBLIC(char *) xbt_str_diff(const char *a, const char *b);
-
 XBT_PUBLIC(char *) xbt_str_from_file(FILE * file);
 
-XBT_PUBLIC(int) xbt_str_start_with(const char* str, const char* start);
-
 XBT_PUBLIC(long int) xbt_str_parse_int(const char* str, const char* error_msg);
 XBT_PUBLIC(double) xbt_str_parse_double(const char* str, const char* error_msg);
 
index 0d09d8a..682e1e2 100644 (file)
@@ -56,15 +56,6 @@ XBT_LOG_NEW_CATEGORY(xbt, "All XBT categories (simgrid toolbox)");
 XBT_LOG_EXTERNAL_CATEGORY(xbt);
 #endif
 
-/* these ones live in str.h, but redeclare them here so that we do
-   not need to load the whole str.h and its heavy dependencies */
-#ifndef __USE_GNU               /* do not redeclare existing headers */
-XBT_PUBLIC(int) asprintf(char **ptr, const char *fmt,   /*args */
-                         ...) XBT_ATTRIB_PRINTF(2, 3);
-XBT_PUBLIC(int) vasprintf(char **ptr, const char *fmt, va_list ap);
-#endif
-XBT_PUBLIC(char *) bprintf(const char *fmt, ...) XBT_ATTRIB_PRINTF(1, 2);
-
 /** @addtogroup XBT_syscall
  *  @brief Malloc and associated functions, killing the program on error (with \ref XBT_ex)
  *
diff --git a/include/xbt/system_error.hpp b/include/xbt/system_error.hpp
new file mode 100644 (file)
index 0000000..f2aabe7
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (c) 2016. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#include <cerrno>
+
+#include <system_error>
+
+namespace simgrid {
+namespace xbt {
+
+inline
+const std::error_category& errno_category() noexcept
+{
+  return std::generic_category();
+}
+
+inline
+std::system_error errno_error(int errnum)
+{
+  return std::system_error(errnum, errno_category());
+}
+
+inline
+std::system_error errno_error(int errnum, const char* what)
+{
+  return std::system_error(errnum, errno_category(), what);
+}
+
+}
+}
index 3b0a63e..2f140fe 100644 (file)
@@ -25,13 +25,5 @@ XBT_PUBLIC_DATA(char*) xbt_binary_name;
 /** Contains all the parameters we got from the command line (including argv[0]) */
 XBT_PUBLIC_DATA(xbt_dynar_t) xbt_cmdline;
 
-/**
- *
- * Time management functions, returns the system time or sleeps a process.
- */
-XBT_PUBLIC(double) xbt_time(void);
-XBT_PUBLIC(void) xbt_sleep(double sec);
-
-
 SG_END_DECL()
 #endif                          /* __XBT_VIRTU_H__ */
index 0cf495a..8d07cfb 100644 (file)
@@ -7,7 +7,7 @@
 /* SimGrid Lua bindings                                                     */
 
 #include "lua_private.h"
-#include "src/surf/xml/platf.hpp"
+#include "src/surf/xml/platf_private.hpp"
 #include "surf/surf_routing.h"
 #include <string.h>
 #include <ctype.h>
@@ -95,8 +95,6 @@ int console_add_backbone(lua_State *L) {
   link.latency = surf_parse_get_time(lua_tostring(L, -1),"latency of backbone",link.id);
   lua_pop(L, 1);
 
-  link.initiallyOn = 1;
-
   lua_pushstring(L, "sharing_policy");
   type = lua_gettable(L, -2);
   const char* policy = lua_tostring(L, -1);
@@ -159,12 +157,11 @@ int console_add_host___link(lua_State *L) {
 int console_add_host(lua_State *L) {
   s_sg_platf_host_cbarg_t host;
   memset(&host,0,sizeof(host));
-  int state, type;
+  int type;
 
   // we get values from the table passed as argument
   if (!lua_istable(L, -1)) {
-    XBT_ERROR
-        ("Bad Arguments to create host. Should be a table with named arguments");
+    XBT_ERROR("Bad Arguments to create host. Should be a table with named arguments");
     return -1;
   }
 
@@ -201,31 +198,12 @@ int console_add_host(lua_State *L) {
     host.core_amount = 1;
   lua_pop(L, 1);
 
-  //get power_scale
-  lua_pushstring(L, "availability");
-  lua_gettable(L, -2);
-  if(!lua_isnumber(L,-1)) host.speed_scale = 1;// Default value
-  else host.speed_scale = lua_tonumber(L, -1);
-  lua_pop(L, 1);
-
   //get power_trace
   lua_pushstring(L, "availability_file");
   lua_gettable(L, -2);
   host.speed_trace = tmgr_trace_new_from_file(lua_tostring(L, -1));
   lua_pop(L, 1);
 
-  //get state initial
-  lua_pushstring(L, "state");
-  lua_gettable(L, -2);
-  if(!lua_isnumber(L,-1)) state = 1;// Default value
-  else state = lua_tonumber(L, -1);
-  lua_pop(L, 1);
-
-  if (state)
-    host.initiallyOn = 1;
-  else
-    host.initiallyOn = 0;
-
   //get trace state
   lua_pushstring(L, "state_file");
   lua_gettable(L, -2);
@@ -303,15 +281,6 @@ int  console_add_link(lua_State *L) {
   link.state_trace = tmgr_trace_new_from_file(lua_tostring(L, -1));
   lua_pop(L, 1);
 
-  //get state_initial value
-  lua_pushstring(L, "state");
-  lua_gettable(L, -2);
-  if (!lua_isnumber(L,-1) || lua_tonumber(L, -1))
-    link.initiallyOn = 1;
-  else
-    link.initiallyOn = 0;
-  lua_pop(L, 1);
-
   //get policy value
   lua_pushstring(L, "sharing_policy");
   lua_gettable(L, -2);
index 0b45c09..401969f 100644 (file)
@@ -7,25 +7,23 @@
 #ifndef MC_DATATYPE_H
 #define MC_DATATYPE_H
 
-#include <ucontext.h>
+#include <simgrid_config.h>
+#include <xbt/base.h>
 
-#include "xbt/misc.h"
-#include "xbt/swag.h"
-#include "xbt/fifo.h"
+#ifdef _XBT_WIN32
+#  include <xbt/win32_ucontext.h>     /* context relative declarations */
+#else
+#  include <ucontext.h>           /* context relative declarations */
+#endif
 
 #if HAVE_MC
-#include <libunwind.h>
 #include <dwarf.h>
 #endif 
 
 SG_BEGIN_DECL()
 
-/******************************* Transitions **********************************/
-
 typedef struct s_mc_transition *mc_transition_t;
 
-/*********** Structures for snapshot comparison **************************/
-
 typedef struct s_stack_region{
   void *address;
   ucontext_t* context;
@@ -34,7 +32,6 @@ typedef struct s_stack_region{
   int process_index;
 }s_stack_region_t, *stack_region_t;
 
-/************ DWARF structures *************/
-
 SG_END_DECL()
+
 #endif                          /* _MC_MC_H */
index d3eadea..00d6eb8 100644 (file)
@@ -7,17 +7,17 @@
 #ifndef _MC_MC_H
 #define _MC_MC_H
 
-#include <ucontext.h>
-
-#include "xbt/base.h"
-#include "xbt/misc.h"
-#include "xbt/fifo.h"
-#include "xbt/dict.h"
-#include "xbt/function_types.h"
-#include "simgrid/simix.h"
-#include "simgrid/modelchecker.h" /* our public interface (and definition of HAVE_MC) */
-#include "xbt/automaton.h"
-#include "xbt/dynar.h"
+#include <simgrid_config.h>
+#include <xbt/base.h>
+#include <xbt/misc.h>
+#include <simgrid/simix.h>
+#include <simgrid/modelchecker.h> /* our public interface (and definition of HAVE_MC) */
+
+#ifdef _XBT_WIN32
+#  include <xbt/win32_ucontext.h>     /* context relative declarations */
+#else
+#  include <ucontext.h>           /* context relative declarations */
+#endif
 
 /* Maximum size of the application heap.
  *
index 92434bc..4605e69 100644 (file)
@@ -52,7 +52,7 @@ class NetworkModel;
 class StorageModel;
 class Resource;
 class ResourceLmm;
-class Host;
+class HostImpl;
 class HostCLM03;
 class NetworkCm02Link;
 class Action;
@@ -72,7 +72,7 @@ typedef simgrid::surf::NetworkModel surf_NetworkModel;
 typedef simgrid::surf::StorageModel surf_StorageModel;
 typedef simgrid::surf::Resource surf_Resource;
 typedef simgrid::surf::ResourceLmm surf_ResourceLmm;
-typedef simgrid::surf::Host surf_Host;
+typedef simgrid::surf::HostImpl surf_Host;
 typedef simgrid::surf::HostCLM03 surf_HostCLM03;
 typedef simgrid::surf::NetworkCm02Link surf_NetworkCm02Link;
 typedef simgrid::surf::Action surf_Action;
diff --git a/src/include/surf/surfxml_parse_values.h b/src/include/surf/surfxml_parse_values.h
deleted file mode 100644 (file)
index 3d6db8b..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright (c) 2011-2014. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#ifndef SURFXML_PARSE_VALUES_H_
-#define SURFXML_PARSE_VALUES_H_
-
-
-typedef struct s_surf_parsing_link_up_down *surf_parsing_link_up_down_t;
-typedef struct s_surf_parsing_link_up_down {
-  void* link_up;
-  void* link_down;
-} s_surf_parsing_link_up_down_t;
-
-#endif /* SURFXML_PARSE_VALUES_H_ */
index 12665bf..76360db 100644 (file)
@@ -4,49 +4,57 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-/*\r
- *      win32-ucontext: Unix ucontext_t operations on Windows platforms\r
- *      Copyright(C) 2007 Panagiotis E. Hadjidoukas\r
- *\r
- *      Contact Email: phadjido@cs.uoi.gr, xdoukas@ceid.upatras.gr\r
- *\r
- *      win32-ucontext is free software; you can redistribute it and/or\r
- *      modify it under the terms of the GNU Lesser General Public\r
- *      License as published by the Free Software Foundation; either\r
- *      version 2 of the License, or (at your option) any later version.\r
- *\r
- *      win32-ucontext is distributed in the hope that it will be useful,\r
- *      but WITHOUT ANY WARRANTY; without even the implied warranty of\r
- *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
- *      Lesser General Public License for more details.\r
- *\r
- *      You should have received a copy of the GNU Lesser General Public\r
- *      License along with SimGrid in the file LICENSE-LGPL-2.1;\r
- *      if not, write to the Free Software Foundation, Inc.,\r
- *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA\r
- */  \r
-    \r
-#ifndef UCONTEXT_H\r
-#define UCONTEXT_H\r
-    \r
-#include <windows.h>\r
-    typedef struct __stack {\r
-  void *ss_sp;\r
-  size_t ss_size;\r
-  int ss_flags;\r
-} stack_t;\r
-typedef CONTEXT mcontext_t;\r
-typedef unsigned long __sigset_t;\r
-typedef struct __ucontext {\r
-  unsigned long int uc_flags;\r
-  struct __ucontext *uc_link;\r
-  stack_t uc_stack;\r
-  mcontext_t uc_mcontext;\r
-  __sigset_t uc_sigmask;\r
-} ucontext_t;\r
-int getcontext(ucontext_t * ucp);\r
-int setcontext(const ucontext_t * ucp);\r
-int makecontext(ucontext_t *, void (*)(), int, ...);\r
-int swapcontext(ucontext_t *, const ucontext_t *);\r
-\r
-#endif  /* UCONTEXT_H */\r
+/*
+ *      win32-ucontext: Unix ucontext_t operations on Windows platforms
+ *      Copyright(C) 2007 Panagiotis E. Hadjidoukas
+ *
+ *      Contact Email: phadjido@cs.uoi.gr, xdoukas@ceid.upatras.gr
+ *
+ *      win32-ucontext is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU Lesser General Public
+ *      License as published by the Free Software Foundation; either
+ *      version 2 of the License, or (at your option) any later version.
+ *
+ *      win32-ucontext is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *      Lesser General Public License for more details.
+ *
+ *      You should have received a copy of the GNU Lesser General Public
+ *      License along with SimGrid in the file LICENSE-LGPL-2.1;
+ *      if not, write to the Free Software Foundation, Inc.,
+ *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */  
+    
+#ifndef UCONTEXT_H
+#define UCONTEXT_H
+    
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <windows.h>
+    typedef struct __stack {
+  void *ss_sp;
+  size_t ss_size;
+  int ss_flags;
+} stack_t;
+typedef CONTEXT mcontext_t;
+typedef unsigned long __sigset_t;
+typedef struct __ucontext {
+  unsigned long int uc_flags;
+  struct __ucontext *uc_link;
+  stack_t uc_stack;
+  mcontext_t uc_mcontext;
+  __sigset_t uc_sigmask;
+} ucontext_t;
+int getcontext(ucontext_t * ucp);
+int setcontext(const ucontext_t * ucp);
+int makecontext(ucontext_t *, void (*)(), int, ...);
+int swapcontext(ucontext_t *, const ucontext_t *);
+
+#ifdef __cplusplus
+}
+#endif
+#endif  /* UCONTEXT_H */
index b585d51..73beb15 100644 (file)
@@ -4,12 +4,14 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <stdlib.h>
-#include <string.h>
+#include "simgrid/jedule/jedule_platform.h"
+
 #include "xbt/asserts.h"
 #include "xbt/dynar.h"
+#include "xbt/str.h"
 
-#include "simgrid/jedule/jedule_platform.h"
+#include <stdlib.h>
+#include <string.h>
 
 #ifdef HAVE_JEDULE
 
index 7c75d44..0ff146a 100644 (file)
 #include <cstdint>
 #include <type_traits>
 
-#include <xbt/misc.h>
-
 #include "src/mc/mc_forward.hpp"
+#include "src/mc/remote_ptr.hpp"
 
 namespace simgrid {
 namespace mc {
 
-/** Pointer to a remote address-space (process, snapshot)
- *
- *  With this we can clearly identify the expected type of an address in the
- *  remote process while avoiding to use native local pointers.
- *
- *  Some operators (+/-) assume use the size of the underlying element. This
- *  only works if the target applications is using the same target: it won't
- *  work for example, when inspecting a 32 bit application from a 64 bit
- *  model-checker.
- */
-template<class T> class remote_ptr {
-  std::uint64_t address_;
-public:
-  remote_ptr() : address_(0) {}
-  remote_ptr(std::uint64_t address) : address_(address) {}
-  remote_ptr(T* address) : address_((std::uintptr_t)address) {}
-  std::uint64_t address() const { return address_; }
-
-  operator bool() const
-  {
-    return address_;
-  }
-  bool operator!() const
-  {
-    return !address_;
-  }
-  operator remote_ptr<void>() const
-  {
-    return remote_ptr<void>(address_);
-  }
-  remote_ptr<T> operator+(std::uint64_t n) const
-  {
-    return remote_ptr<T>(address_ + n * sizeof(T));
-  }
-  remote_ptr<T> operator-(std::uint64_t n) const
-  {
-    return remote_ptr<T>(address_ - n * sizeof(T));
-  }
-  remote_ptr<T>& operator+=(std::uint64_t n)
-  {
-    address_ += n * sizeof(T);
-    return *this;
-  }
-  remote_ptr<T>& operator-=(std::uint64_t n)
-  {
-    address_ -= n * sizeof(T);
-    return *this;
-  }
-};
-
-template<class X, class Y>
-bool operator<(remote_ptr<X> const& x, remote_ptr<Y> const& y)
-{
-  return x.address() < y.address();
-}
-
-template<class X, class Y>
-bool operator>(remote_ptr<X> const& x, remote_ptr<Y> const& y)
-{
-  return x.address() > y.address();
-}
-
-template<class X, class Y>
-bool operator>=(remote_ptr<X> const& x, remote_ptr<Y> const& y)
-{
-  return x.address() >= y.address();
-}
-
-template<class X, class Y>
-bool operator<=(remote_ptr<X> const& x, remote_ptr<Y> const& y)
-{
-  return x.address() <= y.address();
-}
-
-template<class X, class Y>
-bool operator==(remote_ptr<X> const& x, remote_ptr<Y> const& y)
-{
-  return x.address() == y.address();
-}
-
-template<class X, class Y>
-bool operator!=(remote_ptr<X> const& x, remote_ptr<Y> const& y)
-{
-  return x.address() != y.address();
-}
-
-template<class T> inline
-remote_ptr<T> remote(T *p)
-{
-  return remote_ptr<T>(p);
-}
-
-template<class T=void> inline
-remote_ptr<T> remote(uint64_t p)
-{
-  return remote_ptr<T>(p);
-}
-
 /** Process index used when no process is available
  *
  *  The expected behaviour is that if a process index is needed it will fail.
index 00f6e31..cfacbfa 100644 (file)
@@ -4,7 +4,15 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <cstddef>
+#include <cstdint>
 
+#include <vector>
+
+#include <xbt/misc.h> // xbt_pagesize and friends
+#include <xbt/asserts.h>
+
+#include "src/mc/AddressSpace.hpp"
 #include "src/mc/ChunkedData.hpp"
 
 #define SOFT_DIRTY_BIT_NUMBER 55
index bd35e3b..20711df 100644 (file)
@@ -10,6 +10,7 @@
 #include <cstddef>
 #include <cstdint>
 
+#include <utility>
 #include <vector>
 
 #include "src/mc/mc_forward.hpp"
index 6c90f31..35017da 100644 (file)
@@ -4,13 +4,12 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <cstddef>
 #include <cstdint>
-#include <cstdarg>
 
 #include <dwarf.h>
 #include <elfutils/libdw.h>
 
-#include "src/mc/mc_object_info.h"
 #include "src/mc/mc_private.h"
 #include "src/mc/LocationList.hpp"
 #include "src/mc/AddressSpace.hpp"
index fda5c6a..6cb4fea 100644 (file)
@@ -9,9 +9,14 @@
 
 #include <cstdint>
 #include <cstdlib>
-#include <stdexcept>
 
-#include "src/mc/AddressSpace.hpp"
+#include <stdexcept> // runtime_error
+#include <utility>
+#include <vector>
+
+#include <elfutils/libdw.h>
+
+#include "src/mc/mc_forward.hpp"
 
 /** @file DwarfExession.hpp
  *
index 5a114d8..40f9ed3 100644 (file)
@@ -4,6 +4,10 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <libunwind.h>
+
+#include <xbt/sysdep.h>
+
 #include "src/mc/Frame.hpp"
 
 namespace simgrid {
@@ -13,7 +17,7 @@ void* Frame::frame_base(unw_cursor_t& unw_cursor) const
 {
   simgrid::dwarf::Location location = simgrid::dwarf::resolve(
                              frame_base_location, object_info,
-                             &unw_cursor, NULL, NULL, -1);
+                             &unw_cursor, nullptr, nullptr, -1);
   if (location.in_memory())
     return location.address();
   else if (location.in_register()) {
index 2d3e6d6..eb5ff10 100644 (file)
@@ -8,6 +8,7 @@
 #define SIMGRID_MC_FRAME_HPP
 
 #include <string>
+#include <cstdint>
 
 #include <xbt/base.h>
 #include <xbt/range.hpp>
@@ -25,16 +26,35 @@ class Frame {
 public:
   Frame();
 
-  int tag;
+  /** Kind of scope (DW_TAG_subprogram, DW_TAG_inlined_subroutine, etc.) */
+  int tag = DW_TAG_invalid;
+
+  /** Name of the function (if it is a function) */
   std::string name;
+
   /** Range of instruction addresses for which this scope is valid */
   simgrid::xbt::range<std::uint64_t> range;
+
   simgrid::dwarf::LocationList frame_base_location;
+
+  /** List of the variables (sorted by name) */
   std::vector<Variable> variables;
-  unsigned long int id; /* DWARF offset of the subprogram */
+
+  /* Unique identifier for this scope (in the object_info)
+   *
+   * This is the global DWARF offset of the DIE. */
+  unsigned long int id = 0;
+
   std::vector<Frame> scopes;
-  unsigned long int abstract_origin_id;
-  simgrid::mc::ObjectInformation* object_info;
+
+  /** Value of `DW_AT_abstract_origin`
+   *
+   *  For inlined subprograms, this is the ID of the
+   *  parent function.
+   */
+  unsigned long int abstract_origin_id = 0;
+
+  simgrid::mc::ObjectInformation* object_info = nullptr;
 
   void* frame_base(unw_cursor_t& unw_cursor) const;
   void remove_variable(char* name);
index 652d3f0..2797bc0 100644 (file)
@@ -4,6 +4,15 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <cstddef>
+#include <cstdint>
+#include <utility>
+
+#include <xbt/asserts.h>
+#include <xbt/sysdep.h>
+
+#include <libunwind.h>
+
 #include "src/mc/mc_dwarf.hpp"
 #include "src/mc/ObjectInformation.hpp"
 #include "src/mc/LocationList.hpp"
@@ -47,7 +56,7 @@ static simgrid::dwarf::DwarfExpression const* find_expression(
 {
   for (simgrid::dwarf::LocationListEntry const& entry : locations)
     if (entry.valid_for_ip(ip))
-      return &entry.expression;
+      return &entry.expression();
   return nullptr;
 }
 
@@ -71,11 +80,11 @@ Location resolve(
           frame_pointer_address, address_space, process_index);
 }
 
-simgrid::dwarf::LocationList location_list(
+LocationList location_list(
   simgrid::mc::ObjectInformation& info,
   Dwarf_Attribute& attr)
 {
-  simgrid::dwarf::LocationList locations;
+  LocationList locations;
   std::ptrdiff_t offset = 0;
   while (1) {
 
@@ -87,26 +96,23 @@ simgrid::dwarf::LocationList location_list(
       &attr, offset, &base, &start, &end, &ops, &len);
 
     if (offset == 0)
-      return std::move(locations);
+      break;
     else if (offset == -1)
       xbt_die("Error while loading location list");
 
-    simgrid::dwarf::LocationListEntry entry;
-    entry.expression = simgrid::dwarf::DwarfExpression(ops, ops + len);
+    std::uint64_t base_address = (std::uint64_t) info.base_address();
 
-    void *base_address = info.base_address();
+    LocationListEntry::range_type range;
+    if (start == 0)
+      // If start == 0, this is not a location list:
+      range = { 0, UINT64_MAX };
+    else
+      range =  { base_address + start, base_address + end };
 
-    // If start == 0, this is not a location list:
-    if (start == 0) {
-      entry.lowpc  = nullptr;
-      entry.highpc = nullptr;
-    } else {
-      entry.lowpc  = (char *) base_address + start;
-      entry.highpc = (char *) base_address + end;
-    }
-
-    locations.push_back(std::move(entry));
+    locations.push_back({ DwarfExpression(ops, ops+len), range });
   }
+
+  return std::move(locations);
 }
 
 
index c5c186f..2a8bdba 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef SIMGRID_MC_OBJECT_LOCATION_H
 #define SIMGRID_MC_OBJECT_LOCATION_H
 
-#include <stdint.h>
+#include <cstdint>
 
 #include <vector>
 
@@ -15,7 +15,9 @@
 #include <dwarf.h>
 #include <elfutils/libdw.h>
 
-#include "simgrid_config.h"
+#include <xbt/base.h>
+#include <xbt/range.hpp>
+
 #include "src/mc/mc_base.h"
 #include "src/mc/mc_forward.hpp"
 #include "src/mc/AddressSpace.hpp"
@@ -27,20 +29,30 @@ namespace dwarf {
 /** \brief A DWARF expression with optional validity contraints */
 class LocationListEntry {
 public:
-  simgrid::dwarf::DwarfExpression expression;
-  void* lowpc, *highpc;
-
-  LocationListEntry() : lowpc(nullptr), highpc(nullptr) {}
-
-  bool always_valid() const
+  typedef simgrid::xbt::range<std::uint64_t> range_type;
+private:
+  DwarfExpression expression_;
+  range_type range_ = {0, UINT64_MAX};
+public:
+  LocationListEntry() {}
+  LocationListEntry(DwarfExpression expression, range_type range)
+    : expression_(std::move(expression)), range_(range)
+  {}
+  LocationListEntry(DwarfExpression expression)
+    : expression_(std::move(expression)), range_({0, UINT64_MAX})
+  {}
+
+  DwarfExpression& expression()
+  {
+    return expression_;
+  }
+  DwarfExpression const& expression() const
   {
-    return this->lowpc == nullptr && this->highpc == nullptr;
+    return expression_;
   }
   bool valid_for_ip(unw_word_t ip) const
   {
-    return always_valid() || (
-      ip >= (unw_word_t) this->lowpc &&
-      ip <  (unw_word_t) this->highpc);
+    return range_.contain(ip);
   }
 };
 
index 4411458..9289500 100644 (file)
@@ -19,6 +19,7 @@
 #include <xbt/log.h>
 #include <xbt/automaton.h>
 #include <xbt/automaton.hpp>
+#include <xbt/system_error.hpp>
 
 #include "simgrid/sg_config.h"
 
@@ -48,10 +49,10 @@ using simgrid::mc::remote;
 namespace simgrid {
 namespace mc {
 
-ModelChecker::ModelChecker(pid_t pid, int socket) :
-  pid_(pid), socket_(socket),
+ModelChecker::ModelChecker(std::unique_ptr<Process> process) :
   hostnames_(xbt_dict_new()),
   page_store_(500),
+  process_(std::move(process)),
   parent_snapshot_(nullptr)
 {
 
@@ -74,22 +75,16 @@ const char* ModelChecker::get_host_name(const char* hostname)
   return elt->key;
 }
 
-// HACK, for the unit test only
-void ModelChecker::init_process()
-{
-  // TODO, avoid direct dependency on sg_cfg
-  process_ = std::unique_ptr<Process>(new Process(pid_, socket_));
-  process_->privatized(sg_cfg_get_boolean("smpi/privatize_global_variables"));
-}
-
 void ModelChecker::start()
 {
+  const pid_t pid = process_->pid();
+
   // Block SIGCHLD (this will be handled with accept/signalfd):
   sigset_t set;
   sigemptyset(&set);
   sigaddset(&set, SIGCHLD);
   if (sigprocmask(SIG_BLOCK, &set, nullptr) == -1)
-    throw std::system_error(errno, std::system_category());
+    throw simgrid::xbt::errno_error(errno);
 
   sigset_t full_set;
   sigfillset(&full_set);
@@ -97,13 +92,13 @@ void ModelChecker::start()
   // Prepare data for poll:
 
   struct pollfd* socket_pollfd = &fds_[SOCKET_FD_INDEX];
-  socket_pollfd->fd = socket_;
+  socket_pollfd->fd = process_->socket();;
   socket_pollfd->events = POLLIN;
   socket_pollfd->revents = 0;
 
   int signal_fd = signalfd(-1, &set, 0);
   if (signal_fd == -1)
-    throw std::system_error(errno, std::system_category());
+    throw simgrid::xbt::errno_error(errno);
 
   struct pollfd* signalfd_pollfd = &fds_[SIGNAL_FD_INDEX];
   signalfd_pollfd->fd = signal_fd;
@@ -114,11 +109,11 @@ void ModelChecker::start()
   int status;
 
   // The model-checked process SIGSTOP itself to signal it's ready:
-  pid_t res = waitpid(pid_, &status, __WALL);
+  pid_t res = waitpid(pid, &status, __WALL);
   if (res < 0 || !WIFSTOPPED(status) || WSTOPSIG(status) != SIGSTOP)
     xbt_die("Could not wait model-checked process");
 
-  this->init_process();
+  process_->init();
 
   /* Initialize statistics */
   mc_stats = xbt_new0(s_mc_stats_t, 1);
@@ -132,8 +127,8 @@ void ModelChecker::start()
 
   setup_ignore();
 
-  ptrace(PTRACE_SETOPTIONS, pid_, nullptr, PTRACE_O_TRACEEXIT);
-  ptrace(PTRACE_CONT, pid_, 0, 0);
+  ptrace(PTRACE_SETOPTIONS, pid, nullptr, PTRACE_O_TRACEEXIT);
+  ptrace(PTRACE_CONT, pid, 0, 0);
 }
 
 static const std::pair<const char*, const char*> ignored_local_variables[] = {
@@ -184,7 +179,7 @@ void ModelChecker::resume(simgrid::mc::Process& process)
 {
   int res = process.send_message(MC_MESSAGE_CONTINUE);
   if (res)
-    throw std::system_error(res, std::system_category());
+    throw simgrid::xbt::errno_error(res);
   process.cache_flags = (mc_process_cache_flags_t) 0;
 }
 
@@ -195,7 +190,7 @@ void throw_socket_error(int fd)
   socklen_t errlen = sizeof(error);
   if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void *)&error, &errlen) == -1)
     error = errno;
-  throw std::system_error(error, std::system_category());
+  throw simgrid::xbt::errno_error(errno);
 }
 
 bool ModelChecker::handle_message(char* buffer, ssize_t size)
@@ -283,7 +278,7 @@ bool ModelChecker::handle_message(char* buffer, ssize_t size)
 
   case MC_MESSAGE_ASSERTION_FAILED:
     MC_report_assertion_error();
-    ::exit(SIMGRID_MC_EXIT_SAFETY);
+    this->exit(SIMGRID_MC_EXIT_SAFETY);
     break;
 
   default:
@@ -293,6 +288,15 @@ bool ModelChecker::handle_message(char* buffer, ssize_t size)
   return true;
 }
 
+/** Terminate the model-checker aplication */
+void ModelChecker::exit(int status)
+{
+  // TODO, terminate the model checker politely instead of exiting rudel
+  if (process().running())
+    kill(process().pid(), SIGKILL);
+  ::exit(status);
+}
+
 bool ModelChecker::handle_events()
 {
   char buffer[MC_MESSAGE_LENGTH];
@@ -304,7 +308,7 @@ bool ModelChecker::handle_events()
     case EINTR:
       continue;
     default:
-      throw std::system_error(errno, std::system_category());
+      throw simgrid::xbt::errno_error(errno);
     }
   }
 
@@ -312,7 +316,7 @@ bool ModelChecker::handle_events()
     if (socket_pollfd->revents & POLLIN) {
       ssize_t size = MC_receive_message(socket_pollfd->fd, buffer, sizeof(buffer), MSG_DONTWAIT);
       if (size == -1 && errno != EAGAIN)
-        throw std::system_error(errno, std::system_category());
+        throw simgrid::xbt::errno_error(errno);
       return handle_message(buffer, size);
     }
     if (socket_pollfd->revents & POLLERR) {
@@ -353,7 +357,7 @@ void ModelChecker::handle_signals()
       if (errno == EINTR)
         continue;
       else
-        throw std::system_error(errno, std::system_category());
+        throw simgrid::xbt::errno_error(errno);
     } else if (size != sizeof(info))
         return throw std::runtime_error(
           "Bad communication with model-checked application");
@@ -378,7 +382,7 @@ void ModelChecker::handle_waitpid()
           break;
       } else {
         XBT_ERROR("Could not wait for pid");
-        throw std::system_error(errno, std::system_category());
+        throw simgrid::xbt::errno_error(errno);
       }
     }
 
@@ -386,18 +390,18 @@ void ModelChecker::handle_waitpid()
 
       // From PTRACE_O_TRACEEXIT:
       if (status>>8 == (SIGTRAP | (PTRACE_EVENT_EXIT<<8))) {
-        if (ptrace(PTRACE_GETEVENTMSG, pid_, 0, &status) == -1)
+        if (ptrace(PTRACE_GETEVENTMSG, this->process().pid(), 0, &status) == -1)
           xbt_die("Could not get exit status");
         if (WIFSIGNALED(status)) {
           MC_report_crash(status);
-          ::exit(SIMGRID_MC_EXIT_PROGRAM_CRASH);
+          mc_model_checker->exit(SIMGRID_MC_EXIT_PROGRAM_CRASH);
         }
       }
 
       // We don't care about signals, just reinject them:
       if (WIFSTOPPED(status)) {
         XBT_DEBUG("Stopped with signal %i", (int) WSTOPSIG(status));
-        if (ptrace(PTRACE_CONT, pid_, 0, WSTOPSIG(status)) == -1)
+        if (ptrace(PTRACE_CONT, this->process().pid(), 0, WSTOPSIG(status)) == -1)
           xbt_die("Could not PTRACE_CONT");
       }
 
index a90e1b4..47790fb 100644 (file)
@@ -28,12 +28,10 @@ namespace mc {
 /** State of the model-checker (global variables for the model checker)
  */
 class ModelChecker {
-  pid_t pid_;
-  int socket_;
   struct pollfd fds_[2];
   /** String pool for host names */
   // TODO, use std::unordered_set with heterogeneous comparison lookup (C++14)
-  xbt_dict_t /* <hostname, NULL> */ hostnames_;
+  xbt_dict_t /* <hostname, nullptr> */ hostnames_;
   // This is the parent snapshot of the current state:
   PageStore page_store_;
   std::unique_ptr<Process> process_;
@@ -43,7 +41,7 @@ public:
 public:
   ModelChecker(ModelChecker const&) = delete;
   ModelChecker& operator=(ModelChecker const&) = delete;
-  ModelChecker(pid_t pid, int socket);
+  ModelChecker(std::unique_ptr<Process> process);
   ~ModelChecker();
 
   Process& process()
@@ -62,7 +60,6 @@ public:
   }
 
   void start();
-  void init_process();
   void shutdown();
   void resume(simgrid::mc::Process& process);
   void loop();
@@ -73,6 +70,7 @@ public:
   {
     mc_model_checker->wait_client(mc_model_checker->process());
   }
+  void exit(int status);
 private:
   void setup_ignore();
   bool handle_message(char* buffer, ssize_t size);
index 6418c0a..b4c5851 100644 (file)
@@ -4,6 +4,10 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <cstdint>
+
+#include <vector>
+
 #include "src/mc/Frame.hpp"
 #include "src/mc/ObjectInformation.hpp"
 #include "src/mc/Variable.hpp"
@@ -44,9 +48,9 @@ void *ObjectInformation::base_address() const
     return nullptr;
 
   void *result = this->start_exec;
-  if (this->start_rw != NULL && result > (void *) this->start_rw)
+  if (this->start_rw != nullptr && result > (void *) this->start_rw)
     result = this->start_rw;
-  if (this->start_ro != NULL && result > (void *) this->start_ro)
+  if (this->start_ro != nullptr && result > (void *) this->start_ro)
     result = this->start_ro;
   return result;
 }
@@ -149,7 +153,7 @@ void ObjectInformation::remove_global_variable(const char* name)
  *  name.
  *
  *  \param var_name        Name of the local variable (or parameter to ignore)
- *  \param subprogram_name Name of the subprogram fo ignore (NULL for any)
+ *  \param subprogram_name Name of the subprogram fo ignore (nullptr for any)
  *  \param subprogram      (possibly inlined) Subprogram of the scope
  *  \param scope           Current scope
  */
index f5d7697..7f7e166 100644 (file)
@@ -48,12 +48,12 @@ PageStore::hash_type mc_hash_page(const void* data)
 // ***** snapshot_page_manager
 
 PageStore::PageStore(size_t size) :
-  memory_(NULL), capacity_(0), top_index_(0)
+  memory_(nullptr), capacity_(0), top_index_(0)
 {
   // Using mmap in order to be able to expand the region
   // by relocating it somewhere else in the virtual memory
   // space:
-  void* memory = ::mmap(NULL, size << xbt_pagebits, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_POPULATE, -1, 0);
+  void* memory = ::mmap(nullptr, size << xbt_pagebits, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_POPULATE, -1, 0);
   if (memory == MAP_FAILED) {
     xbt_die("Could not mmap initial snapshot pages.");
   }
@@ -182,7 +182,7 @@ static void new_content(void* data, std::size_t size)
 
 static void* getpage()
 {
-  return mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+  return mmap(nullptr, getpagesize(), PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
 }
 
 XBT_TEST_SUITE("mc_page_store", "Page store");
index 2e6d792..482c07d 100644 (file)
@@ -8,7 +8,6 @@
 
 #include <assert.h>
 #include <stddef.h>
-#include <stdbool.h>
 #include <stdint.h>
 #include <errno.h>
 
@@ -25,6 +24,9 @@
 #include <libunwind.h>
 #include <libunwind-ptrace.h>
 
+#include <xbt/dynar.h>
+#include <xbt/log.h>
+#include <xbt/base.h>
 #include <xbt/mmalloc.h>
 
 #include "src/mc/mc_object_info.h"
@@ -100,11 +102,11 @@ struct s_mc_memory_map_re {
 
 static char* MC_get_lib_name(const char* pathname, struct s_mc_memory_map_re* res)
 {
-  const char* map_basename = basename((char*) pathname);
+  const char* map_basename = xbt_basename((char*) pathname);
 
   regmatch_t match;
   if(regexec(&res->so_re, map_basename, 1, &match, 0))
-    return NULL;
+    return nullptr;
 
   char* libname = strndup(map_basename, match.rm_so);
 
@@ -166,7 +168,7 @@ static void MC_zero_buffer_init(void)
   int fd = open("/dev/zero", O_RDONLY);
   if (fd<0)
     xbt_die("Could not open /dev/zero");
-  zero_buffer = mmap(NULL, zero_buffer_size, PROT_READ, MAP_SHARED, fd, 0);
+  zero_buffer = mmap(nullptr, zero_buffer_size, PROT_READ, MAP_SHARED, fd, 0);
   if (zero_buffer == MAP_FAILED)
     xbt_die("Could not map the zero buffer");
   close(fd);
@@ -206,76 +208,68 @@ int open_vm(pid_t pid, int flags)
 namespace simgrid {
 namespace mc {
 
-Process::Process(pid_t pid, int sockfd) : AddressSpace(this)
+Process::Process(pid_t pid, int sockfd) :
+   AddressSpace(this),pid_(pid), socket_(sockfd), running_(true)
+{}
+
+void Process::init()
 {
-  Process* process = this;
-  process->socket_ = sockfd;
-  process->pid_ = pid;
-  process->running_ = true;
-  process->memory_map_ = simgrid::xbt::get_memory_map(pid);
-  process->cache_flags = MC_PROCESS_CACHE_FLAG_NONE;
-  process->init_memory_map_info();
-  process->clear_refs_fd_ = -1;
-  process->pagemap_fd_ = -1;
-  process->privatized_ = false;
-
-  int fd = open_vm(process->pid_, O_RDWR);
+  this->memory_map_ = simgrid::xbt::get_memory_map(this->pid_);
+  this->init_memory_map_info();
+
+  int fd = open_vm(this->pid_, O_RDWR);
   if (fd<0)
     xbt_die("Could not open file for process virtual address space");
-  process->memory_file = fd;
+  this->memory_file = fd;
 
   // Read std_heap (is a struct mdesc*):
-  simgrid::mc::Variable* std_heap_var = process->find_variable("__mmalloc_default_mdp");
+  simgrid::mc::Variable* std_heap_var = this->find_variable("__mmalloc_default_mdp");
   if (!std_heap_var)
     xbt_die("No heap information in the target process");
   if(!std_heap_var->address)
     xbt_die("No constant address for this variable");
-  process->read_bytes(&process->heap_address, sizeof(struct mdesc*),
+  this->read_bytes(&this->heap_address, sizeof(struct mdesc*),
     remote(std_heap_var->address),
     simgrid::mc::ProcessIndexDisabled);
 
-  process->smx_process_infos = MC_smx_process_info_list_new();
-  process->smx_old_process_infos = MC_smx_process_info_list_new();
-  process->unw_addr_space = unw_create_addr_space(&mc_unw_accessors  , __BYTE_ORDER);
-  process->unw_underlying_addr_space = unw_create_addr_space(&mc_unw_vmread_accessors, __BYTE_ORDER);
-  process->unw_underlying_context = _UPT_create(pid);
+  this->smx_process_infos = MC_smx_process_info_list_new();
+  this->smx_old_process_infos = MC_smx_process_info_list_new();
+  this->unw_addr_space = unw_create_addr_space(&mc_unw_accessors  , __BYTE_ORDER);
+  this->unw_underlying_addr_space = unw_create_addr_space(&mc_unw_vmread_accessors, __BYTE_ORDER);
+  this->unw_underlying_context = _UPT_create(this->pid_);
 }
 
 Process::~Process()
 {
-  Process* process = this;
-
   if (this->socket_ >= 0 && close(this->socket_) < 0)
     xbt_die("Could not close communication socket");
 
-  process->pid_ = 0;
-
-  process->maestro_stack_start_ = nullptr;
-  process->maestro_stack_end_ = nullptr;
+  this->maestro_stack_start_ = nullptr;
+  this->maestro_stack_end_ = nullptr;
 
-  xbt_dynar_free(&process->smx_process_infos);
-  xbt_dynar_free(&process->smx_old_process_infos);
+  xbt_dynar_free(&this->smx_process_infos);
+  xbt_dynar_free(&this->smx_old_process_infos);
 
-  if (process->memory_file >= 0) {
-    close(process->memory_file);
+  if (this->memory_file >= 0) {
+    close(this->memory_file);
   }
 
-  if (process->unw_underlying_addr_space != unw_local_addr_space) {
-    unw_destroy_addr_space(process->unw_underlying_addr_space);
-    _UPT_destroy(process->unw_underlying_context);
+  if (this->unw_underlying_addr_space != unw_local_addr_space) {
+    unw_destroy_addr_space(this->unw_underlying_addr_space);
+    _UPT_destroy(this->unw_underlying_context);
   }
-  process->unw_underlying_context = NULL;
-  process->unw_underlying_addr_space = NULL;
+  this->unw_underlying_context = nullptr;
+  this->unw_underlying_addr_space = nullptr;
 
-  unw_destroy_addr_space(process->unw_addr_space);
-  process->unw_addr_space = NULL;
+  unw_destroy_addr_space(this->unw_addr_space);
+  this->unw_addr_space = nullptr;
 
-  process->cache_flags = MC_PROCESS_CACHE_FLAG_NONE;
+  this->cache_flags = MC_PROCESS_CACHE_FLAG_NONE;
 
-  if (process->clear_refs_fd_ >= 0)
-    close(process->clear_refs_fd_);
-  if (process->pagemap_fd_ >= 0)
-    close(process->pagemap_fd_);
+  if (this->clear_refs_fd_ >= 0)
+    close(this->clear_refs_fd_);
+  if (this->pagemap_fd_ >= 0)
+    close(this->pagemap_fd_);
 }
 
 /** Refresh the information about the process
@@ -320,8 +314,8 @@ void Process::init_memory_map_info()
   this->maestro_stack_start_ = nullptr;
   this->maestro_stack_end_ = nullptr;
   this->object_infos.resize(0);
-  this->binary_info = NULL;
-  this->libsimgrid_info = NULL;
+  this->binary_info = nullptr;
+  this->libsimgrid_info = nullptr;
 
   struct s_mc_memory_map_re res;
 
@@ -330,7 +324,7 @@ void Process::init_memory_map_info()
 
   std::vector<simgrid::xbt::VmMap> const& maps = this->memory_map_;
 
-  const char* current_name = NULL;
+  const char* current_name = nullptr;
 
   this->object_infos.resize(0);
 
@@ -340,7 +334,7 @@ void Process::init_memory_map_info()
 
     // Nothing to do
     if (maps[i].pathname.empty()) {
-      current_name = NULL;
+      current_name = nullptr;
       continue;
     }
 
@@ -350,7 +344,7 @@ void Process::init_memory_map_info()
         this->maestro_stack_start_ = remote(reg.start_addr);
         this->maestro_stack_end_ = remote(reg.end_addr);
       }
-      current_name = NULL;
+      current_name = nullptr;
       continue;
     }
 
@@ -362,7 +356,7 @@ void Process::init_memory_map_info()
       continue;
 
     const bool is_executable = !i;
-    char* libname = NULL;
+    char* libname = nullptr;
     if (!is_executable) {
       libname = MC_get_lib_name(pathname, &res);
       if(!libname)
@@ -404,7 +398,7 @@ std::shared_ptr<simgrid::mc::ObjectInformation> Process::find_object_info(remote
       return object_info;
     }
   }
-  return NULL;
+  return nullptr;
 }
 
 std::shared_ptr<ObjectInformation> Process::find_object_info_exec(remote_ptr<void> addr) const
@@ -456,7 +450,7 @@ simgrid::mc::Variable* Process::find_variable(const char* name) const
       return var;
   }
 
-  return NULL;
+  return nullptr;
 }
 
 void Process::read_variable(const char* name, void* target, size_t size) const
@@ -475,7 +469,7 @@ void Process::read_variable(const char* name, void* target, size_t size) const
 char* Process::read_string(remote_ptr<void> address) const
 {
   if (!address)
-    return NULL;
+    return nullptr;
 
   off_t len = 128;
   char* res = (char*) malloc(len);
index 8780e3c..4ab4e06 100644 (file)
@@ -7,17 +7,19 @@
 #ifndef SIMGRID_MC_PROCESS_H
 #define SIMGRID_MC_PROCESS_H
 
-#include <type_traits>
-
-#include <sys/types.h>
+#include <cstdint>
+#include <cstddef>
 
+#include <type_traits>
 #include <vector>
 #include <memory>
 
-#include "simgrid_config.h"
 #include <sys/types.h>
 
+#include <simgrid_config.h>
+
 #include <xbt/base.h>
+#include <xbt/dynar.h>
 #include <xbt/mmalloc.h>
 
 #ifdef HAVE_MC
@@ -32,7 +34,6 @@
 
 #include "src/mc/mc_forward.hpp"
 #include "src/mc/mc_base.h"
-#include "src/mc/mc_mmalloc.h" // std_heap
 #include "src/mc/AddressSpace.hpp"
 #include "src/mc/mc_protocol.h"
 #include "src/mc/ObjectInformation.hpp"
@@ -50,14 +51,14 @@ namespace mc {
 
 struct IgnoredRegion {
   std::uint64_t addr;
-  size_t size;
+  std::size_t size;
 };
 
 struct IgnoredHeapRegion {
   int block;
   int fragment;
   void *address;
-  size_t size;
+  std::size_t size;
 };
 
 /** Representation of a process
@@ -66,6 +67,7 @@ class Process final : public AddressSpace {
 public:
   Process(pid_t pid, int sockfd);
   ~Process();
+  void init();
 
   Process(Process const&) = delete;
   Process(Process &&) = delete;
@@ -191,22 +193,24 @@ public:
   void unignore_heap(void *address, size_t size);
 
   void ignore_local_variable(const char *var_name, const char *frame_name);
+  int socket() { return socket_; }
 
 private:
   void init_memory_map_info();
   void refresh_heap();
   void refresh_malloc_info();
+
 private:
-  pid_t pid_;
-  int socket_;
-  bool running_;
+  pid_t pid_ = -1;
+  int socket_ = -1;
+  bool running_ = false;
   std::vector<simgrid::xbt::VmMap> memory_map_;
   remote_ptr<void> maestro_stack_start_, maestro_stack_end_;
-  int memory_file;
+  int memory_file = -1;
   std::vector<IgnoredRegion> ignored_regions_;
-  int clear_refs_fd_;
-  int pagemap_fd_;
-  bool privatized_;
+  int clear_refs_fd_ = -1;
+  int pagemap_fd_ = -1;
+  bool privatized_ = false;
   std::vector<s_stack_region_t> stack_areas_;
   std::vector<IgnoredHeapRegion> ignored_heap_;
 
@@ -221,16 +225,16 @@ public: // Copies of MCed SMX data structures
    *
    *  See mc_smx.c.
    */
-  xbt_dynar_t smx_process_infos;
+  xbt_dynar_t smx_process_infos = nullptr;
 
   /** Copy of `simix_global->process_to_destroy`
    *
    *  See mc_smx.c.
    */
-  xbt_dynar_t smx_old_process_infos;
+  xbt_dynar_t smx_old_process_infos = nullptr;
 
   /** State of the cache (which variables are up to date) */
-  mc_process_cache_flags_t cache_flags;
+  mc_process_cache_flags_t cache_flags = MC_PROCESS_CACHE_FLAG_NONE;
 
   /** Address of the heap structure in the MCed process. */
   void* heap_address;
index 53a34f4..7e96951 100644 (file)
@@ -4,6 +4,8 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <cstdlib>
+
 #include <sys/mman.h>
 
 #include "mc/mc.h"
@@ -41,7 +43,7 @@ void data_deleter::operator()(void* p) const
 {
   switch(type_) {
   case Free:
-    free(p);
+    std::free(p);
     break;
   case Munmap:
     munmap(p, size_);
@@ -55,7 +57,7 @@ RegionSnapshot dense_region(
 {
   simgrid::mc::RegionSnapshot::flat_data_ptr data;
   if (!_sg_mc_ksm)
-    data = simgrid::mc::RegionSnapshot::flat_data_ptr((char*) malloc(size));
+    data = simgrid::mc::RegionSnapshot::flat_data_ptr((char*) std::malloc(size));
   else {
     char* ptr = (char*) mmap(nullptr, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_POPULATE, -1, 0);
     if (ptr == MAP_FAILED)
@@ -104,7 +106,7 @@ RegionSnapshot sparse_region(RegionType region_type,
   RegionSnapshot const* ref_region)
 {
   simgrid::mc::Process* process = &mc_model_checker->process();
-  assert(process != NULL);
+  assert(process != nullptr);
 
   bool use_soft_dirty = _sg_mc_sparse_checkpoint && _sg_mc_soft_dirty
     && ref_region != nullptr
index 1ece645..a003191 100644 (file)
 #include <cstddef>
 #include <utility>
 
+#include <memory>
+#include <vector>
+
 #include <xbt/base.h>
 
+#include "src/mc/remote_ptr.hpp"
 #include "src/mc/PageStore.hpp"
 #include "src/mc/AddressSpace.hpp"
 #include "src/mc/ChunkedData.hpp"
index 819cf81..5839a3b 100644 (file)
@@ -7,10 +7,15 @@
 #ifndef SIMGRID_MC_TYPE_HPP
 #define SIMGRID_MC_TYPE_HPP
 
+#include <cstddef>
+
 #include <vector>
 #include <string>
 
 #include <xbt/base.h>
+#include <xbt/asserts.h>
+
+#include <dwarf.h>
 
 #include "src/mc/mc_forward.h"
 #include "src/mc/LocationList.hpp"
@@ -24,73 +29,75 @@ namespace mc {
  */
 class Member {
 public:
-  Member() : inheritance(false), byte_size(0), type_id(0) {}
+  Member() {}
+
+  /** Whether this member represent some inherited part of the object */
+  bool inheritance = false;
 
-  bool inheritance;
+  /** Name of the member (if any) */
   std::string name;
+
+  /** DWARF location expression for locating the location of the member */
   simgrid::dwarf::DwarfExpression location_expression;
-  std::size_t byte_size; // Do we really need this?
-  unsigned type_id;
-  simgrid::mc::Type* type;
 
+  std::size_t byte_size = 0; // Do we really need this?
+
+  unsigned type_id = 0;
+  simgrid::mc::Type* type = nullptr;
+
+  /** Whether the member is at a fixed offset from the base address */
   bool has_offset_location() const
   {
+    // Recognize the expression `DW_OP_plus_uconst(offset)`:
     return location_expression.size() == 1 &&
       location_expression[0].atom == DW_OP_plus_uconst;
   }
 
-  // TODO, check if this shortcut is really necessary
+  /** Get the offset of the member
+  *
+  *  This is only valid is the member is at a fixed offset from the base.
+  *  This is often the case (for C types, C++ type without virtual
+  *  inheritance).
+  *
+  *  If the location is more complex, the location expression has
+  *  to be evaluated (which might need accessing the memory).
+  */
   int offset() const
   {
     xbt_assert(this->has_offset_location());
     return this->location_expression[0].number;
   }
 
+  /** Set the location of the member as a fixed offset */
   void offset(int new_offset)
   {
+    // Set the expression to be `DW_OP_plus_uconst(offset)`:
     Dwarf_Op op;
     op.atom = DW_OP_plus_uconst;
     op.number = new_offset;
     this->location_expression = { op };
   }
+
 };
 
 /** A type in the model-checked program */
 class Type {
 public:
-  Type();
-  Type(Type const& type) = default;
-  Type& operator=(Type const&) = default;
-  Type(Type&& type) = default;
-  Type& operator=(Type&&) = default;
+  Type() {}
 
   /** The DWARF TAG of the type (e.g. DW_TAG_array_type) */
-  int type;
-  unsigned id; /* Offset in the section (in hexadecimal form) */
+  int type = 0;
+  unsigned id = 0; /* Offset in the section (in hexadecimal form) */
   std::string name; /* Name of the type */
-  int byte_size; /* Size in bytes */
-  int element_count; /* Number of elements for array type */
-  unsigned type_id; /* DW_AT_type id */
+  int byte_size = 0; /* Size in bytes */
+  int element_count = 0; /* Number of elements for array type */
+  unsigned type_id = 0; /* DW_AT_type id */
   std::vector<Member> members; /* if DW_TAG_structure_type, DW_TAG_class_type, DW_TAG_union_type*/
-  int is_pointer_type;
 
-  simgrid::mc::Type* subtype; // DW_AT_type
-  simgrid::mc::Type* full_type; // The same (but more complete) type
+  simgrid::mc::Type* subtype = nullptr; // DW_AT_type
+  simgrid::mc::Type* full_type = nullptr; // The same (but more complete) type
 };
 
-inline
-Type::Type()
-{
-  this->type = 0;
-  this->id = 0;
-  this->byte_size = 0;
-  this->element_count = 0;
-  this->is_pointer_type = 0;
-  this->type_id = 0;
-  this->subtype = nullptr;
-  this->full_type = nullptr;
-}
-
 }
 }
 
index 5ca55ab..7e04621 100644 (file)
@@ -7,9 +7,9 @@
 #ifndef SIMGRID_MC_VARIABLE_HPP
 #define SIMGRID_MC_VARIABLE_HPP
 
-#include <string>
+#include <cstddef>
 
-#include <xbt/base.h>
+#include <string>
 
 #include "src/mc/mc_forward.h"
 #include "src/mc/LocationList.hpp"
@@ -20,34 +20,19 @@ namespace mc {
 /** A variable (global or local) in the model-checked program */
 class Variable {
 public:
-  Variable();
-
-  unsigned dwarf_offset; /* Global offset of the field. */
-  int global;
+  Variable() {}
+  unsigned dwarf_offset = 0; /* Global offset of the field. */
+  int global = 0;
   std::string name;
-  unsigned type_id;
-  simgrid::mc::Type* type;
-
+  unsigned type_id = 0;
+  simgrid::mc::Type* type = nullptr;
   // Use either of:
   simgrid::dwarf::LocationList location_list;
-  void* address;
-
-  size_t start_scope;
-  simgrid::mc::ObjectInformation* object_info;
+  void* address = nullptr;
+  std::size_t start_scope = 0;
+  simgrid::mc::ObjectInformation* object_info = nullptr;
 };
 
-inline
-Variable::Variable()
-{
-  this->dwarf_offset = 0;
-  this->global = 0;
-  this->type = nullptr;
-  this->type_id = 0;
-  this->address = nullptr;
-  this->start_scope = 0;
-  this->object_info = nullptr;
-}
-
 }
 }
 
index d7cf4eb..5b61d7b 100644 (file)
@@ -4,13 +4,18 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <assert.h>
+#include <cassert>
+
+#include <simgrid_config.h>
+
+#include <xbt/log.h>
+#include <xbt/asserts.h>
+#include <xbt/dynar.h>
 
 #include <simgrid/simix.h>
 
 #include "src/mc/mc_base.h"
 #include "src/simix/smx_private.h"
-#include "src/mc/mc_record.h"
 #include "src/mc/mc_replay.h"
 #include "mc/mc.h"
 #include "src/mc/mc_protocol.h"
@@ -88,9 +93,9 @@ int MC_request_is_enabled(smx_simcall_t req)
         return TRUE;
     } else {
       /* On the other hand if it hasn't a timeout, check if the comm is ready.*/
-      if (act->comm.detached && act->comm.src_proc == NULL
+      if (act->comm.detached && act->comm.src_proc == nullptr
           && act->comm.type == SIMIX_COMM_READY)
-        return (act->comm.dst_proc != NULL);
+        return (act->comm.dst_proc != nullptr);
     }
     return (act->comm.src_proc && act->comm.dst_proc);
 
@@ -148,7 +153,7 @@ int MC_request_is_enabled(smx_simcall_t req)
       mutex = &temp_mutex;
     }
 #endif
-    if(mutex->owner == NULL)
+    if(mutex->owner == nullptr)
       return TRUE;
     else
 #ifdef HAVE_MC
@@ -223,7 +228,7 @@ void MC_simcall_handle(smx_simcall_t req, int value)
   }
 
   unsigned i;
-  mc_smx_process_info_t pi = NULL;
+  mc_smx_process_info_t pi = nullptr;
 
   xbt_dynar_foreach_ptr(mc_model_checker->process().smx_process_infos, i, pi) {
     if (req == &pi->copy.simcall) {
index fa1fca1..0cd5848 100644 (file)
@@ -7,12 +7,8 @@
 #ifndef SIMGRID_MC_BASE_H
 #define SIMGRID_MC_BASE_H
 
-#include <xbt/misc.h>
-#include <simgrid/simix.h>
-#include "simgrid_config.h"
-#include "src/internal_config.h"
-#include "src/simix/smx_private.h"
-#include "mc/mc.h"
+#include <xbt/base.h>
+#include "src/simix/popping_private.h" // smx_simcall_t
 
 SG_BEGIN_DECL()
 
index 0bfaf47..baf90a2 100644 (file)
@@ -15,7 +15,6 @@
 #include "xbt/module.h"
 #include <xbt/mmalloc.h>
 #include "src/smpi/private.h"
-#include <alloca.h>
 
 #include "src/xbt/mmalloc/mmprivate.h"
 
@@ -28,7 +27,6 @@
 #include <mc/mc.h>
 
 #include "src/mc/mc_snapshot.h"
-#include "src/mc/mc_object_info.h"
 #include "src/mc/mc_mmu.h"
 #include "src/mc/mc_unw.h"
 #include "src/mc/mc_protocol.h"
@@ -47,6 +45,11 @@ extern "C" {
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc,
                                 "Logging specific to mc_checkpoint");
 
+}
+
+namespace simgrid {
+namespace mc {
+
 /************************************  Free functions **************************************/
 /*****************************************************************************************/
 
@@ -54,7 +57,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc,
  *
  *  @param reg     Target region
  */
-static void MC_region_restore(mc_mem_region_t region)
+static void restore(mc_mem_region_t region)
 {
   switch(region->storage_type()) {
   case simgrid::mc::StorageType::NoData:
@@ -73,16 +76,11 @@ static void MC_region_restore(mc_mem_region_t region)
 
   case simgrid::mc::StorageType::Privatized:
     for (auto& p : region->privatized_data())
-      MC_region_restore(&p);
+      restore(&p);
     break;
   }
 }
 
-}
-
-namespace simgrid {
-namespace mc {
-
 #ifdef HAVE_SMPI
 RegionSnapshot privatized_region(
     RegionType region_type, void *start_addr, void* permanent_addr,
@@ -118,12 +116,8 @@ RegionSnapshot privatized_region(
 }
 #endif
 
-}
-}
-
-extern "C" {
-
-static void MC_snapshot_add_region(int index, mc_snapshot_t snapshot,
+static
+void add_region(int index, mc_snapshot_t snapshot,
                                   simgrid::mc::RegionType type,
                                   simgrid::mc::ObjectInformation* object_info,
                                   void *start_addr, void* permanent_addr,
@@ -156,13 +150,13 @@ static void MC_snapshot_add_region(int index, mc_snapshot_t snapshot,
   return;
 }
 
-static void MC_get_memory_regions(simgrid::mc::Process* process, mc_snapshot_t snapshot)
+static void get_memory_regions(simgrid::mc::Process* process, mc_snapshot_t snapshot)
 {
   const size_t n = process->object_infos.size();
   snapshot->snapshot_regions.resize(n + 1);
   int i = 0;
   for (auto const& object_info : process->object_infos) {
-    MC_snapshot_add_region(i, snapshot, simgrid::mc::RegionType::Data,
+    add_region(i, snapshot, simgrid::mc::RegionType::Data,
       object_info.get(),
       object_info->start_rw, object_info->start_rw,
       object_info->end_rw - object_info->start_rw);
@@ -173,7 +167,7 @@ static void MC_get_memory_regions(simgrid::mc::Process* process, mc_snapshot_t s
   void *start_heap = heap->base;
   void *end_heap = heap->breakval;
 
-  MC_snapshot_add_region(n, snapshot, simgrid::mc::RegionType::Heap, NULL,
+  add_region(n, snapshot, simgrid::mc::RegionType::Heap, nullptr,
                         start_heap, start_heap,
                         (char *) end_heap - (char *) start_heap);
   snapshot->heap_bytes_used = mmalloc_get_bytes_used_remote(
@@ -197,16 +191,16 @@ static void MC_get_memory_regions(simgrid::mc::Process* process, mc_snapshot_t s
  *
  *  `dl_iterate_phdr` would be more robust but would not work in cross-process.
  * */
-void MC_find_object_address(
+void find_object_address(
   std::vector<simgrid::xbt::VmMap> const& maps,
   simgrid::mc::ObjectInformation* result)
 {
   char* file_name = xbt_strdup(result->file_name.c_str());
-  const char *name = basename(file_name);
+  const char *name = xbt_basename(file_name);
   for (size_t i = 0; i < maps.size(); ++i) {
     simgrid::xbt::VmMap const& reg = maps[i];
     if (maps[i].pathname.empty()
-        || strcmp(basename(maps[i].pathname.c_str()), name)) {
+        || strcmp(xbt_basename(maps[i].pathname.c_str()), name)) {
       // Nothing to do
     } else if ((reg.prot & PROT_WRITE)) {
       xbt_assert(!result->start_rw,
@@ -264,7 +258,7 @@ void MC_find_object_address(
  *  \param ip    Instruction pointer
  *  \return      true if the variable is valid
  * */
-static bool mc_valid_variable(simgrid::mc::Variable* var,
+static bool valid_variable(simgrid::mc::Variable* var,
                               simgrid::mc::Frame* scope,
                               const void *ip)
 {
@@ -275,7 +269,7 @@ static bool mc_valid_variable(simgrid::mc::Variable* var,
     return true;
 }
 
-static void mc_fill_local_variables_values(mc_stack_frame_t stack_frame,
+static void fill_local_variables_values(mc_stack_frame_t stack_frame,
                                            simgrid::mc::Frame* scope,
                                            int process_index,
                                            std::vector<s_local_variable>& result)
@@ -288,7 +282,7 @@ static void mc_fill_local_variables_values(mc_stack_frame_t stack_frame,
   for(simgrid::mc::Variable& current_variable :
       scope->variables) {
 
-    if (!mc_valid_variable(&current_variable, scope, (void *) stack_frame->ip))
+    if (!valid_variable(&current_variable, scope, (void *) stack_frame->ip))
       continue;
 
     int region_type;
@@ -306,7 +300,7 @@ static void mc_fill_local_variables_values(mc_stack_frame_t stack_frame,
     new_var.region = region_type;
     new_var.address = nullptr;
 
-    if (current_variable.address != NULL) {
+    if (current_variable.address != nullptr) {
       new_var.address = current_variable.address;
     } else if (!current_variable.location_list.empty()) {
       simgrid::dwarf::Location location =
@@ -330,26 +324,20 @@ static void mc_fill_local_variables_values(mc_stack_frame_t stack_frame,
 
   // Recursive processing of nested scopes:
   for(simgrid::mc::Frame& nested_scope : scope->scopes)
-    mc_fill_local_variables_values(
+    fill_local_variables_values(
       stack_frame, &nested_scope, process_index, result);
 }
 
-static std::vector<s_local_variable> MC_get_local_variables_values(
+static std::vector<s_local_variable> get_local_variables_values(
   std::vector<s_mc_stack_frame_t>& stack_frames, int process_index)
 {
   std::vector<s_local_variable> variables;
   for (s_mc_stack_frame_t& stack_frame : stack_frames)
-    mc_fill_local_variables_values(&stack_frame, stack_frame.frame, process_index, variables);
+    fill_local_variables_values(&stack_frame, stack_frame.frame, process_index, variables);
   return std::move(variables);
 }
 
-static void MC_stack_frame_free_voipd(void *s)
-{
-  mc_stack_frame_t stack_frame = *(mc_stack_frame_t *) s;
-  delete(stack_frame);
-}
-
-static std::vector<s_mc_stack_frame_t> MC_unwind_stack_frames(mc_unw_context_t stack_context)
+static std::vector<s_mc_stack_frame_t> unwind_stack_frames(mc_unw_context_t stack_context)
 {
   simgrid::mc::Process* process = &mc_model_checker->process();
   std::vector<s_mc_stack_frame_t> result;
@@ -413,7 +401,7 @@ static std::vector<s_mc_stack_frame_t> MC_unwind_stack_frames(mc_unw_context_t s
   return std::move(result);
 };
 
-static std::vector<s_mc_snapshot_stack_t> MC_take_snapshot_stacks(mc_snapshot_t * snapshot)
+static std::vector<s_mc_snapshot_stack_t> take_snapshot_stacks(mc_snapshot_t * snapshot)
 {
   std::vector<s_mc_snapshot_stack_t> res;
 
@@ -429,8 +417,8 @@ static std::vector<s_mc_snapshot_stack_t> MC_take_snapshot_stacks(mc_snapshot_t
       &context) < 0) {
       xbt_die("Could not initialise the libunwind context.");
     }
-    st.stack_frames = MC_unwind_stack_frames(&st.context);
-    st.local_variables = MC_get_local_variables_values(st.stack_frames, stack.process_index);
+    st.stack_frames = unwind_stack_frames(&st.context);
+    st.local_variables = get_local_variables_values(st.stack_frames, stack.process_index);
     st.process_index = stack.process_index;
 
     unw_word_t sp = st.stack_frames[0].sp;
@@ -446,7 +434,7 @@ static std::vector<s_mc_snapshot_stack_t> MC_take_snapshot_stacks(mc_snapshot_t
 
 }
 
-static void MC_snapshot_handle_ignore(mc_snapshot_t snapshot)
+static void snapshot_handle_ignore(mc_snapshot_t snapshot)
 {
   xbt_assert(snapshot->process());
   
@@ -469,7 +457,7 @@ static void MC_snapshot_handle_ignore(mc_snapshot_t snapshot)
 
 }
 
-static void MC_snapshot_ignore_restore(mc_snapshot_t snapshot)
+static void snapshot_ignore_restore(mc_snapshot_t snapshot)
 {
   for (auto const& ignored_data : snapshot->ignored_data)
     snapshot->process()->write_bytes(
@@ -477,7 +465,7 @@ static void MC_snapshot_ignore_restore(mc_snapshot_t snapshot)
       remote(ignored_data.start));
 }
 
-static std::vector<s_fd_infos_t> MC_get_current_fds(pid_t pid)
+static std::vector<s_fd_infos_t> get_current_fds(pid_t pid)
 {
   const size_t fd_dir_path_size = 20;
   char fd_dir_path[fd_dir_path_size];
@@ -488,7 +476,7 @@ static std::vector<s_fd_infos_t> MC_get_current_fds(pid_t pid)
     xbt_die("Unexpected buffer is too small for fd_dir_path");
 
   DIR* fd_dir = opendir(fd_dir_path);
-  if (fd_dir == NULL)
+  if (fd_dir == nullptr)
     xbt_die("Cannot open directory '/proc/self/fd'\n");
 
   std::vector<s_fd_infos_t> fds;
@@ -536,7 +524,7 @@ static std::vector<s_fd_infos_t> MC_get_current_fds(pid_t pid)
       continue;
 
     // If dot_output enabled, do not handle the corresponding file
-    if (dot_output !=  NULL && strcmp(basename(link), _sg_mc_dot_output_file) == 0)
+    if (dot_output !=  nullptr && strcmp(xbt_basename(link), _sg_mc_dot_output_file) == 0)
       continue;
 
     // This is probably a shared memory used by lttng-ust:
@@ -556,7 +544,7 @@ static std::vector<s_fd_infos_t> MC_get_current_fds(pid_t pid)
   return std::move(fds);
 }
 
-mc_snapshot_t MC_take_snapshot(int num_state)
+mc_snapshot_t take_snapshot(int num_state)
 {
   XBT_DEBUG("Taking snapshot %i", num_state);
 
@@ -570,15 +558,15 @@ mc_snapshot_t MC_take_snapshot(int num_state)
   MC_EACH_SIMIX_PROCESS(process,
     snapshot->enabled_processes.insert(process->pid));
 
-  MC_snapshot_handle_ignore(snapshot);
+  snapshot_handle_ignore(snapshot);
 
   if (_sg_mc_snapshot_fds)
-    snapshot->current_fds = MC_get_current_fds(process->pid);
+    snapshot->current_fds = get_current_fds(process->pid);
 
   const bool use_soft_dirty = _sg_mc_sparse_checkpoint && _sg_mc_soft_dirty;
 
   /* Save the std heap and the writable mapped pages of libsimgrid and binary */
-  MC_get_memory_regions(mc_process, snapshot);
+  get_memory_regions(mc_process, snapshot);
   if (use_soft_dirty)
     mc_process->reset_soft_dirty();
 
@@ -586,7 +574,7 @@ mc_snapshot_t MC_take_snapshot(int num_state)
 
   if (_sg_mc_visited > 0 || strcmp(_sg_mc_property_file, "")) {
     snapshot->stacks =
-        MC_take_snapshot_stacks(&snapshot);
+        take_snapshot_stacks(&snapshot);
     if (_sg_mc_hash) {
       snapshot->hash = simgrid::mc::hash(*snapshot);
     } else {
@@ -596,19 +584,19 @@ mc_snapshot_t MC_take_snapshot(int num_state)
     snapshot->hash = 0;
   }
 
-  MC_snapshot_ignore_restore(snapshot);
+  snapshot_ignore_restore(snapshot);
   if (use_soft_dirty)
     mc_model_checker->parent_snapshot_ = snapshot;
   return snapshot;
 }
 
 static inline
-void MC_restore_snapshot_regions(mc_snapshot_t snapshot)
+void restore_snapshot_regions(mc_snapshot_t snapshot)
 {
   for(std::unique_ptr<s_mc_mem_region_t> const& region : snapshot->snapshot_regions) {
     // For privatized, variables we decided it was not necessary to take the snapshot:
     if (region)
-      MC_region_restore(region.get());
+      restore(region.get());
   }
 
 #ifdef HAVE_SMPI
@@ -624,7 +612,7 @@ void MC_restore_snapshot_regions(mc_snapshot_t snapshot)
 }
 
 static inline
-void MC_restore_snapshot_fds(mc_snapshot_t snapshot)
+void restore_snapshot_fds(mc_snapshot_t snapshot)
 {
   if (mc_mode == MC_MODE_SERVER)
     xbt_die("FD snapshot not implemented in client/server mode.");
@@ -644,24 +632,26 @@ void MC_restore_snapshot_fds(mc_snapshot_t snapshot)
   }
 }
 
-void MC_restore_snapshot(mc_snapshot_t snapshot)
+void restore_snapshot(mc_snapshot_t snapshot)
 {
   XBT_DEBUG("Restore snapshot %i", snapshot->num_state);
   const bool use_soft_dirty = _sg_mc_sparse_checkpoint && _sg_mc_soft_dirty;
-  MC_restore_snapshot_regions(snapshot);
+  restore_snapshot_regions(snapshot);
   if (_sg_mc_snapshot_fds)
-    MC_restore_snapshot_fds(snapshot);
+    restore_snapshot_fds(snapshot);
   if (use_soft_dirty)
     mc_model_checker->process().reset_soft_dirty();
-  MC_snapshot_ignore_restore(snapshot);
+  snapshot_ignore_restore(snapshot);
   mc_model_checker->process().cache_flags = 0;
   if (use_soft_dirty)
     mc_model_checker->parent_snapshot_ = snapshot;
 }
 
-mc_snapshot_t simcall_HANDLER_mc_snapshot(smx_simcall_t simcall)
-{
-  return MC_take_snapshot(1);
+}
 }
 
+extern "C"
+mc_snapshot_t simcall_HANDLER_mc_snapshot(smx_simcall_t simcall)
+{
+  return simgrid::mc::take_snapshot(1);
 }
index 07e65fb..cf57b91 100644 (file)
@@ -19,7 +19,6 @@
 #include "src/mc/mc_client.h"
 
 // We won't need those once the separation MCer/MCed is complete:
-#include "src/mc/mc_mmalloc.h"
 #include "src/mc/mc_ignore.h"
 #include "src/mc/mc_private.h" // MC_deadlock_check()
 #include "src/mc/mc_smx.h"
@@ -63,7 +62,7 @@ void MC_client_init(void)
   mc_client->active = 1;
 
   // Waiting for the model-checker:
-  if (ptrace(PTRACE_TRACEME, 0, NULL, NULL) == -1 || raise(SIGSTOP) != 0)
+  if (ptrace(PTRACE_TRACEME, 0, nullptr, NULL) == -1 || raise(SIGSTOP) != 0)
     xbt_die("Could not wait for the model-checker");
   MC_client_handle_messages();
 }
index 6b68dbe..fb12858 100644 (file)
@@ -7,7 +7,9 @@
 #ifndef SIMGRID_MC_CLIENT_H
 #define SIMGRID_MC_CLIENT_H
 
-#include <xbt/misc.h>
+#include <cstddef>
+
+#include <xbt/base.h>
 #include "src/mc/mc_protocol.h"
 
 SG_BEGIN_DECL()
@@ -21,11 +23,11 @@ extern XBT_PRIVATE mc_client_t mc_client;
 
 XBT_PRIVATE void MC_client_init(void);
 XBT_PRIVATE void MC_client_handle_messages(void);
-XBT_PRIVATE void MC_client_send_message(void* message, size_t size);
+XBT_PRIVATE void MC_client_send_message(void* message, std::size_t size);
 XBT_PRIVATE void MC_client_send_simple_message(e_mc_message_type type);
 
 #ifdef HAVE_MC
-void MC_ignore(void* addr, size_t size);
+void MC_ignore(void* addr, std::size_t size);
 #endif
 
 void MC_client_main_loop(void);
index 9bbceb0..21a1db9 100644 (file)
@@ -11,7 +11,6 @@
 
 #include "src/mc/mc_record.h"
 #include "src/mc/mc_private.h"
-#include "src/mc/mc_mmalloc.h"
 #include "src/mc/mc_ignore.h"
 #include "src/mc/mc_protocol.h"
 #include "src/mc/mc_client.h"
index 9525f92..1be100a 100644 (file)
@@ -4,6 +4,13 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <cstdint>
+
+#include <xbt/dynar.h>
+#include <xbt/fifo.h>
+#include <xbt/log.h>
+#include <xbt/sysdep.h>
+
 #include "src/mc/mc_state.h"
 #include "src/mc/mc_comm_pattern.h"
 #include "src/mc/mc_request.h"
@@ -41,9 +48,9 @@ static e_mc_comm_pattern_difference_t compare_comm_pattern(mc_comm_pattern_t com
     return TAG_DIFF;
   if (comm1->data_size != comm2->data_size)
     return DATA_SIZE_DIFF;
-  if(comm1->data == NULL && comm2->data == NULL)
+  if(comm1->data == nullptr && comm2->data == NULL)
     return NONE_DIFF;
-  if(comm1->data != NULL && comm2->data !=NULL) {
+  if(comm1->data != nullptr && comm2->data !=NULL) {
     if (!memcmp(comm1->data, comm2->data, comm1->data_size))
       return NONE_DIFF;
     return DATA_DIFF;
@@ -84,7 +91,7 @@ static char* print_determinism_result(e_mc_comm_pattern_difference_t diff, int p
     res = bprintf("%s\n Different data for communication #%d", type, cursor);
     break;
   default:
-    res = NULL;
+    res = nullptr;
     break;
   }
 
@@ -102,7 +109,7 @@ static void update_comm_pattern(mc_comm_pattern_t comm_pattern, smx_synchro_t co
   comm_pattern->dst_proc = dst_proc->pid;
   comm_pattern->src_host = MC_smx_process_get_host_name(src_proc);
   comm_pattern->dst_host = MC_smx_process_get_host_name(dst_proc);
-  if (comm_pattern->data_size == -1 && comm.comm.src_buff != NULL) {
+  if (comm_pattern->data_size == -1 && comm.comm.src_buff != nullptr) {
     size_t buff_size;
     mc_model_checker->process().read(
       &buff_size, remote(comm.comm.dst_buff_size));
@@ -128,12 +135,12 @@ static void deterministic_comm_pattern(int process, mc_comm_pattern_t comm, int
     if (diff != NONE_DIFF) {
       if (comm->type == SIMIX_COMM_SEND){
         initial_global_state->send_deterministic = 0;
-        if(initial_global_state->send_diff != NULL)
+        if(initial_global_state->send_diff != nullptr)
           xbt_free(initial_global_state->send_diff);
         initial_global_state->send_diff = print_determinism_result(diff, process, comm, list->index_comm + 1);
       }else{
         initial_global_state->recv_deterministic = 0;
-        if(initial_global_state->recv_diff != NULL)
+        if(initial_global_state->recv_diff != nullptr)
           xbt_free(initial_global_state->recv_diff);
         initial_global_state->recv_diff = print_determinism_result(diff, process, comm, list->index_comm + 1);
       }
@@ -143,9 +150,9 @@ static void deterministic_comm_pattern(int process, mc_comm_pattern_t comm, int
         XBT_INFO("*********************************************************");
         XBT_INFO("%s", initial_global_state->send_diff);
         xbt_free(initial_global_state->send_diff);
-        initial_global_state->send_diff = NULL;
+        initial_global_state->send_diff = nullptr;
         MC_print_statistics(mc_stats);
-        exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
+        mc_model_checker->exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
       }else if(_sg_mc_comms_determinism && (!initial_global_state->send_deterministic && !initial_global_state->recv_deterministic)) {
         XBT_INFO("****************************************************");
         XBT_INFO("***** Non-deterministic communications pattern *****");
@@ -153,11 +160,11 @@ static void deterministic_comm_pattern(int process, mc_comm_pattern_t comm, int
         XBT_INFO("%s", initial_global_state->send_diff);
         XBT_INFO("%s", initial_global_state->recv_diff);
         xbt_free(initial_global_state->send_diff);
-        initial_global_state->send_diff = NULL;
+        initial_global_state->send_diff = nullptr;
         xbt_free(initial_global_state->recv_diff);
-        initial_global_state->recv_diff = NULL;
+        initial_global_state->recv_diff = nullptr;
         MC_print_statistics(mc_stats);
-        exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
+        mc_model_checker->exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
       } 
     }
   }
@@ -178,7 +185,7 @@ void MC_get_comm_pattern(xbt_dynar_t list, smx_simcall_t request, e_mc_call_type
 
   mc_comm_pattern_t pattern = xbt_new0(s_mc_comm_pattern_t, 1);
   pattern->data_size = -1;
-  pattern->data = NULL;
+  pattern->data = nullptr;
   pattern->index =
     initial_pattern->index_comm + xbt_dynar_length(incomplete_pattern);
 
@@ -201,7 +208,7 @@ void MC_get_comm_pattern(xbt_dynar_t list, smx_simcall_t request, e_mc_call_type
         (std::uint64_t) simcall_comm_isend__get__data(request));
     pattern->tag = mpi_request.tag;
 
-    if(synchro.comm.src_buff != NULL){
+    if(synchro.comm.src_buff != nullptr){
       pattern->data_size = synchro.comm.src_buff_size;
       pattern->data = xbt_malloc0(pattern->data_size);
       mc_model_checker->process().read_bytes(
@@ -294,7 +301,7 @@ static int MC_modelcheck_comm_determinism_main(void);
 
 static void MC_pre_modelcheck_comm_determinism(void)
 {
-  mc_state_t initial_state = NULL;
+  mc_state_t initial_state = nullptr;
   smx_process_t process;
   int i;
   const int maxpid = MC_smx_get_maxpid();
@@ -314,7 +321,7 @@ static void MC_pre_modelcheck_comm_determinism(void)
   // Create incomplete_communications_pattern elements:
   incomplete_communications_pattern = xbt_dynar_new(sizeof(xbt_dynar_t), xbt_dynar_free_voidp);
   for (i=0; i < maxpid; i++){
-    xbt_dynar_t process_pattern = xbt_dynar_new(sizeof(mc_comm_pattern_t), NULL);
+    xbt_dynar_t process_pattern = xbt_dynar_new(sizeof(mc_comm_pattern_t), nullptr);
     xbt_dynar_insert_at(incomplete_communications_pattern, i, &process_pattern);
   }
 
@@ -338,12 +345,12 @@ static void MC_pre_modelcheck_comm_determinism(void)
 static int MC_modelcheck_comm_determinism_main(void)
 {
 
-  char *req_str = NULL;
+  char *req_str = nullptr;
   int value;
-  mc_visited_state_t visited_state = NULL;
-  smx_simcall_t req = NULL;
-  smx_process_t process = NULL;
-  mc_state_t state = NULL, next_state = NULL;
+  mc_visited_state_t visited_state = nullptr;
+  smx_simcall_t req = nullptr;
+  smx_process_t process = nullptr;
+  mc_state_t state = nullptr, next_state = NULL;
 
   while (xbt_fifo_size(mc_stack) > 0) {
 
@@ -360,13 +367,13 @@ static int MC_modelcheck_comm_determinism_main(void)
 
     if ((xbt_fifo_size(mc_stack) <= _sg_mc_max_depth)
         && (req = MC_state_get_request(state, &value))
-        && (visited_state == NULL)) {
+        && (visited_state == nullptr)) {
 
       req_str = MC_request_to_string(req, value, MC_REQUEST_SIMIX);
       XBT_DEBUG("Execute: %s", req_str);
       xbt_free(req_str);
       
-      if (dot_output != NULL) {
+      if (dot_output != nullptr) {
         req_str = MC_request_get_dot_output(req, value);
       }
 
@@ -385,7 +392,7 @@ static int MC_modelcheck_comm_determinism_main(void)
       if(!initial_global_state->initial_communications_pattern_done)
         MC_handle_comm_pattern(call, req, value, initial_communications_pattern, 0);
       else
-        MC_handle_comm_pattern(call, req, value, NULL, 0);
+        MC_handle_comm_pattern(call, req, value, nullptr, 0);
 
       /* Wait for requests (schedules processes) */
       mc_model_checker->wait_for_requests();
@@ -393,7 +400,7 @@ static int MC_modelcheck_comm_determinism_main(void)
       /* Create the new expanded state */
       next_state = MC_state_new();
 
-      if ((visited_state = is_visited_state(next_state)) == NULL) {
+      if ((visited_state = is_visited_state(next_state)) == nullptr) {
 
         /* Get enabled processes and insert them in the interleave set of the next state */
         MC_EACH_SIMIX_PROCESS(process,
@@ -402,26 +409,26 @@ static int MC_modelcheck_comm_determinism_main(void)
           }
         );
 
-        if (dot_output != NULL)
+        if (dot_output != nullptr)
           fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num,  next_state->num, req_str);
 
       } else {
 
-        if (dot_output != NULL)
+        if (dot_output != nullptr)
           fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, visited_state->other_num == -1 ? visited_state->num : visited_state->other_num, req_str);
 
       }
 
       xbt_fifo_unshift(mc_stack, next_state);
 
-      if (dot_output != NULL)
+      if (dot_output != nullptr)
         xbt_free(req_str);
 
     } else {
 
       if (xbt_fifo_size(mc_stack) > _sg_mc_max_depth) {
         XBT_WARN("/!\\ Max depth reached ! /!\\ ");
-      } else if (visited_state != NULL) {
+      } else if (visited_state != nullptr) {
         XBT_DEBUG("State already visited (equal to state %d), exploration stopped on this path.", visited_state->other_num == -1 ? visited_state->num : visited_state->other_num);
       } else {
         XBT_DEBUG("There are no more processes to interleave. (depth %d)", xbt_fifo_size(mc_stack));
@@ -435,15 +442,15 @@ static int MC_modelcheck_comm_determinism_main(void)
       MC_state_delete(state, !state->in_visited_states ? 1 : 0);
       XBT_DEBUG("Delete state %d at depth %d", state->num, xbt_fifo_size(mc_stack) + 1);
 
-      visited_state = NULL;
+      visited_state = nullptr;
 
       /* Check for deadlocks */
       if (MC_deadlock_check()) {
-        MC_show_deadlock(NULL);
+        MC_show_deadlock(nullptr);
         return SIMGRID_MC_EXIT_DEADLOCK;
       }
 
-      while ((state = (mc_state_t) xbt_fifo_shift(mc_stack)) != NULL) {
+      while ((state = (mc_state_t) xbt_fifo_shift(mc_stack)) != nullptr) {
         if (MC_state_interleave_size(state) && xbt_fifo_size(mc_stack) < _sg_mc_max_depth) {
           /* We found a back-tracking point, let's loop */
           XBT_DEBUG("Back-tracking to state %d at depth %d", state->num, xbt_fifo_size(mc_stack) + 1);
@@ -483,12 +490,12 @@ int MC_modelcheck_comm_determinism(void)
   MC_pre_modelcheck_comm_determinism();
 
   initial_global_state = xbt_new0(s_mc_global_t, 1);
-  initial_global_state->snapshot = MC_take_snapshot(0);
+  initial_global_state->snapshot = simgrid::mc::take_snapshot(0);
   initial_global_state->initial_communications_pattern_done = 0;
   initial_global_state->recv_deterministic = 1;
   initial_global_state->send_deterministic = 1;
-  initial_global_state->recv_diff = NULL;
-  initial_global_state->send_diff = NULL;
+  initial_global_state->recv_diff = nullptr;
+  initial_global_state->send_diff = nullptr;
 
   return MC_modelcheck_comm_determinism_main();
 }
index d29df34..857bee8 100644 (file)
@@ -28,11 +28,11 @@ mc_comm_pattern_t MC_comm_pattern_dup(mc_comm_pattern_t comm)
   res->comm_addr = comm->comm_addr;
   res->rdv = xbt_strdup(comm->rdv);
   res->data_size = -1;
-  res->data = NULL;
+  res->data = nullptr;
   if (comm->type == SIMIX_COMM_SEND) {
     res->src_proc = comm->src_proc;
     res->src_host = comm->src_host;
-    if (comm->data != NULL) {
+    if (comm->data != nullptr) {
       res->data_size = comm->data_size;
       res->data = xbt_malloc0(comm->data_size);
       memcpy(res->data, comm->data, comm->data_size);
@@ -100,7 +100,7 @@ void MC_state_copy_incomplete_communications_pattern(mc_state_t state)
 
 void MC_state_copy_index_communications_pattern(mc_state_t state)
 {
-  state->index_comm = xbt_dynar_new(sizeof(unsigned int), NULL);
+  state->index_comm = xbt_dynar_new(sizeof(unsigned int), nullptr);
   mc_list_comm_pattern_t list_process_comm;
   unsigned int cursor;
   xbt_dynar_foreach(initial_communications_pattern, cursor, list_process_comm){
@@ -123,7 +123,7 @@ void MC_handle_comm_pattern(
   case MC_CALL_TYPE_WAIT:
   case MC_CALL_TYPE_WAITANY:
     {
-      smx_synchro_t comm_addr = NULL;
+      smx_synchro_t comm_addr = nullptr;
       if (call_type == MC_CALL_TYPE_WAIT)
         comm_addr = simcall_comm_wait__get__comm(req);
       else
@@ -145,14 +145,14 @@ void MC_comm_pattern_free(mc_comm_pattern_t p)
   xbt_free(p->rdv);
   xbt_free(p->data);
   xbt_free(p);
-  p = NULL;
+  p = nullptr;
 }
 
 static void MC_list_comm_pattern_free(mc_list_comm_pattern_t l)
 {
   xbt_dynar_free(&(l->list));
   xbt_free(l);
-  l = NULL;
+  l = nullptr;
 }
 
 void MC_comm_pattern_free_voidp(void *p)
index dd6dd27..4c1e7df 100644 (file)
@@ -13,7 +13,6 @@
 #include <xbt/sysdep.h>
 
 #include "src/internal_config.h"
-#include "src/mc/mc_object_info.h"
 #include "src/mc/mc_safety.h"
 #include "src/mc/mc_liveness.h"
 #include "src/mc/mc_private.h"
@@ -157,9 +156,9 @@ static int compare_areas_with_type(ComparisonState& state,
       return (addr_pointed1 != addr_pointed2);
     } else {
 
-      if (addr_pointed1 == NULL && addr_pointed2 == NULL)
+      if (addr_pointed1 == nullptr && addr_pointed2 == NULL)
         return 0;
-      if (addr_pointed1 == NULL || addr_pointed2 == NULL)
+      if (addr_pointed1 == nullptr || addr_pointed2 == NULL)
         return 1;
       if (!state.compared_pointers.insert(
           std::make_pair(addr_pointed1, addr_pointed2)).second)
@@ -180,7 +179,7 @@ static int compare_areas_with_type(ComparisonState& state,
           return 1;
         // The pointers are both in the heap:
         return compare_heap_area(process_index, addr_pointed1, addr_pointed2, snapshot1,
-                                 snapshot2, NULL, type->subtype, pointer_level);
+                                 snapshot2, nullptr, type->subtype, pointer_level);
       }
 
       // The pointers are both in the current object R/W segment:
index 09a1214..cae5320 100644 (file)
@@ -52,11 +52,11 @@ int _sg_mc_checkpoint = 0;
 int _sg_mc_sparse_checkpoint = 0;
 int _sg_mc_soft_dirty = 0;
 int _sg_mc_ksm = 0;
-char *_sg_mc_property_file = NULL;
+char *_sg_mc_property_file = nullptr;
 int _sg_mc_hash = 0;
 int _sg_mc_max_depth = 1000;
 int _sg_mc_visited = 0;
-char *_sg_mc_dot_output_file = NULL;
+char *_sg_mc_dot_output_file = nullptr;
 int _sg_mc_comms_determinism = 0;
 int _sg_mc_send_determinism = 0;
 int _sg_mc_safety = 0;
index f8bbd84..1490675 100644 (file)
@@ -10,7 +10,6 @@
 #include "xbt/str.h"
 #include "mc/mc.h"
 #include "xbt/mmalloc.h"
-#include "src/mc/mc_object_info.h"
 #include "mc/datatypes.h"
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_snapshot.h"
@@ -54,7 +53,7 @@ static __thread struct s_mc_diff *mc_diff_info = nullptr;
 static void heap_area_pair_free(heap_area_pair_t pair)
 {
   xbt_free(pair);
-  pair = NULL;
+  pair = nullptr;
 }
 
 static void heap_area_pair_free_voidp(void *d)
@@ -65,7 +64,7 @@ static void heap_area_pair_free_voidp(void *d)
 static void heap_area_free(heap_area_t area)
 {
   xbt_free(area);
-  area = NULL;
+  area = nullptr;
 }
 
 /************************************************************************************/
@@ -102,7 +101,7 @@ static int add_heap_area_pair(xbt_dynar_t list, int block1, int fragment1,
 {
 
   if (is_new_heap_area_pair(list, block1, fragment1, block2, fragment2)) {
-    heap_area_pair_t pair = NULL;
+    heap_area_pair_t pair = nullptr;
     pair = xbt_new0(s_heap_area_pair_t, 1);
     pair->block1 = block1;
     pair->fragment1 = fragment1;
@@ -227,12 +226,12 @@ int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2,
                           std::vector<simgrid::mc::IgnoredHeapRegion>* i1,
                           std::vector<simgrid::mc::IgnoredHeapRegion>* i2)
 {
-  if (mc_diff_info == NULL) {
+  if (mc_diff_info == nullptr) {
     mc_diff_info = xbt_new0(struct s_mc_diff, 1);
-    mc_diff_info->equals_to1 = NULL;
-    mc_diff_info->equals_to2 = NULL;
-    mc_diff_info->types1 = NULL;
-    mc_diff_info->types2 = NULL;
+    mc_diff_info->equals_to1 = nullptr;
+    mc_diff_info->equals_to2 = nullptr;
+    mc_diff_info->types1 = nullptr;
+    mc_diff_info->types2 = nullptr;
   }
   struct s_mc_diff *state = mc_diff_info;
 
@@ -386,7 +385,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2)
 
           res_compare =
               compare_heap_area(simgrid::mc::ProcessIndexMissing, addr_block1, addr_block2, snapshot1, snapshot2,
-                                NULL, NULL, 0);
+                                nullptr, NULL, 0);
 
           if (res_compare != 1) {
             for (k = 1; k < heapinfo2->busy_block.size; k++)
@@ -425,7 +424,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2)
 
         res_compare =
             compare_heap_area(simgrid::mc::ProcessIndexMissing, addr_block1, addr_block2, snapshot1, snapshot2,
-                              NULL, NULL, 0);
+                              nullptr, NULL, 0);
 
         if (res_compare != 1) {
           for (k = 1; k < heapinfo2b->busy_block.size; k++)
@@ -477,7 +476,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2)
 
             res_compare =
                 compare_heap_area(simgrid::mc::ProcessIndexMissing, addr_frag1, addr_frag2, snapshot1, snapshot2,
-                                  NULL, NULL, 0);
+                                  nullptr, NULL, 0);
 
             if (res_compare != 1)
               equal = 1;
@@ -525,7 +524,7 @@ int mmalloc_compare_heap(mc_snapshot_t snapshot1, mc_snapshot_t snapshot2)
 
             res_compare =
                 compare_heap_area(simgrid::mc::ProcessIndexMissing, addr_frag1, addr_frag2, snapshot2, snapshot2,
-                                  NULL, NULL, 0);
+                                  nullptr, NULL, 0);
 
             if (res_compare != 1) {
               equal = 1;
@@ -715,7 +714,7 @@ static int compare_heap_area_without_type(struct s_mc_diff *state, int process_i
         // Both addreses are in the heap:
         res_compare =
             compare_heap_area(process_index, addr_pointed1, addr_pointed2, snapshot1,
-                              snapshot2, previous, NULL, 0);
+                              snapshot2, previous, nullptr, 0);
         if (res_compare == 1) {
           return res_compare;
         }
@@ -981,7 +980,7 @@ static simgrid::mc::Type* get_offset_type(void *real_base_address, simgrid::mc::
       if (area_size > type->byte_size && area_size % type->byte_size == 0)
         return type;
       else
-        return NULL;
+        return nullptr;
     } else {
       for(simgrid::mc::Member& member : type->members) {
 
@@ -997,12 +996,12 @@ static simgrid::mc::Type* get_offset_type(void *real_base_address, simgrid::mc::
         }
 
       }
-      return NULL;
+      return nullptr;
     }
     break;
   default:
     /* FIXME : other cases ? */
-    return NULL;
+    return nullptr;
     break;
   }
 }
@@ -1013,7 +1012,7 @@ static simgrid::mc::Type* get_offset_type(void *real_base_address, simgrid::mc::
  * @param area2          Process address for state 2
  * @param snapshot1      Snapshot of state 1
  * @param snapshot2      Snapshot of state 2
- * @param previous       Pairs of blocks already compared on the current path (or NULL)
+ * @param previous       Pairs of blocks already compared on the current path (or nullptr)
  * @param type_id        Type of variable
  * @param pointer_level
  * @return 0 (same), 1 (different), -1
@@ -1035,7 +1034,7 @@ int compare_heap_area(int process_index, const void *area1, const void *area2, m
   int type_size = -1;
   int offset1 = 0, offset2 = 0;
   int new_size1 = -1, new_size2 = -1;
-  simgrid::mc::Type *new_type1 = NULL, *new_type2 = NULL;
+  simgrid::mc::Type *new_type1 = nullptr, *new_type2 = NULL;
 
   int match_pairs = 0;
 
@@ -1049,7 +1048,7 @@ int compare_heap_area(int process_index, const void *area1, const void *area2, m
 
   malloc_info heapinfo_temp1, heapinfo_temp2;
 
-  if (previous == NULL) {
+  if (previous == nullptr) {
     previous =
         xbt_dynar_new(sizeof(heap_area_pair_t), heap_area_pair_free_voidp);
     match_pairs = 1;
@@ -1094,7 +1093,7 @@ int compare_heap_area(int process_index, const void *area1, const void *area2, m
       type = type->full_type;
 
     // This assume that for "boring" types (volatile ...) byte_size is absent:
-    while (type->byte_size == 0 && type->subtype != NULL)
+    while (type->byte_size == 0 && type->subtype != nullptr)
       type = type->subtype;
 
     // Find type_size:
@@ -1185,10 +1184,10 @@ int compare_heap_area(int process_index, const void *area1, const void *area2, m
 
     // Remember (basic) type inference.
     // The current data structure only allows us to do this for the whole block.
-    if (type != NULL && area1 == real_addr_block1) {
+    if (type != nullptr && area1 == real_addr_block1) {
       state->types1_(block1, 0) = type;
     }
-    if (type != NULL && area2 == real_addr_block2) {
+    if (type != nullptr && area2 == real_addr_block2) {
       state->types2_(block2, 0) = type;
     }
 
@@ -1278,10 +1277,10 @@ int compare_heap_area(int process_index, const void *area1, const void *area2, m
 
     // Remember (basic) type inference.
     // The current data structure only allows us to do this for the whole fragment.
-    if (type != NULL && area1 == real_addr_frag1) {
+    if (type != nullptr && area1 == real_addr_frag1) {
       state->types1_(block1, frag1) = type;
     }
-    if (type != NULL && area2 == real_addr_frag2) {
+    if (type != nullptr && area2 == real_addr_frag2) {
       state->types2_(block2, frag2) = type;
     }
     // The type of the variable is already known:
@@ -1290,28 +1289,28 @@ int compare_heap_area(int process_index, const void *area1, const void *area2, m
       new_type2 = type;
     }
     // Type inference from the block type.
-    else if (state->types1_(block1, frag1) != NULL
-             || state->types2_(block2, frag2) != NULL) {
+    else if (state->types1_(block1, frag1) != nullptr
+             || state->types2_(block2, frag2) != nullptr) {
 
       offset1 = (char *) area1 - (char *) real_addr_frag1;
       offset2 = (char *) area2 - (char *) real_addr_frag2;
 
-      if (state->types1_(block1, frag1) != NULL
-          && state->types2_(block2, frag2) != NULL) {
+      if (state->types1_(block1, frag1) != nullptr
+          && state->types2_(block2, frag2) != nullptr) {
         new_type1 =
             get_offset_type(real_addr_frag1, state->types1_(block1, frag1),
                             offset1, size, snapshot1, process_index);
         new_type2 =
             get_offset_type(real_addr_frag2, state->types2_(block2, frag2),
                             offset1, size, snapshot2, process_index);
-      } else if (state->types1_(block1, frag1) != NULL) {
+      } else if (state->types1_(block1, frag1) != nullptr) {
         new_type1 =
             get_offset_type(real_addr_frag1, state->types1_(block1, frag1),
                             offset1, size, snapshot1, process_index);
         new_type2 =
             get_offset_type(real_addr_frag2, state->types1_(block1, frag1),
                             offset2, size, snapshot2, process_index);
-      } else if (state->types2_(block2, frag2) != NULL) {
+      } else if (state->types2_(block2, frag2) != nullptr) {
         new_type1 =
             get_offset_type(real_addr_frag1, state->types2_(block2, frag2),
                             offset1, size, snapshot1, process_index);
@@ -1326,15 +1325,15 @@ int compare_heap_area(int process_index, const void *area1, const void *area2, m
         return -1;
       }
 
-      if (new_type1 != NULL && new_type2 != NULL && new_type1 != new_type2) {
+      if (new_type1 != nullptr && new_type2 != NULL && new_type1 != new_type2) {
 
         type = new_type1;
-        while (type->byte_size == 0 && type->subtype != NULL)
+        while (type->byte_size == 0 && type->subtype != nullptr)
           type = type->subtype;
         new_size1 = type->byte_size;
 
         type = new_type2;
-        while (type->byte_size == 0 && type->subtype != NULL)
+        while (type->byte_size == 0 && type->subtype != nullptr)
           type = type->subtype;
         new_size2 = type->byte_size;
 
@@ -1459,7 +1458,7 @@ int mmalloc_linear_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2)
 
   struct s_mc_diff *state = mc_diff_info;
 
-  if (heap1 == NULL && heap1 == NULL) {
+  if (heap1 == nullptr && heap1 == NULL) {
     XBT_DEBUG("Malloc descriptors null");
     return 0;
   }
index a6fb218..38c7d3a 100644 (file)
 #include <xbt/log.h>
 #include <xbt/sysdep.h>
 
-#include "src/mc/mc_object_info.h"
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_dwarf.hpp"
 
+#include "src/mc/mc_object_info.h"
 #include "src/mc/Process.hpp"
 #include "src/mc/ObjectInformation.hpp"
 #include "src/mc/Variable.hpp"
@@ -100,7 +100,7 @@ static void MC_dwarf_handle_variable_die(simgrid::mc::ObjectInformation* info, D
 /** \brief Get the DW_TAG_type of the DIE
  *
  *  \param die DIE
- *  \return DW_TAG_type attribute as a new string (NULL if none)
+ *  \return DW_TAG_type attribute as a new string (nullptr if none)
  */
 static std::uint64_t MC_dwarf_at_type(Dwarf_Die * die);
 
@@ -258,7 +258,7 @@ static const char *MC_dwarf_attr_integrate_string(Dwarf_Die * die,
 {
   Dwarf_Attribute attr;
   if (!dwarf_attr_integrate(die, attribute, &attr)) {
-    return NULL;
+    return nullptr;
   } else {
     return dwarf_formstring(&attr);
   }
@@ -272,7 +272,7 @@ static const char *MC_dwarf_attr_integrate_string(Dwarf_Die * die,
  *  DW_AT_MIPS_linkage_name is used (at least by GCC).
  *
  *  \param  the DIE
- *  \return linkage name of the given DIE (or NULL)
+ *  \return linkage name of the given DIE (or nullptr)
  * */
 static const char *MC_dwarf_at_linkage_name(Dwarf_Die * die)
 {
@@ -289,7 +289,7 @@ static Dwarf_Off MC_dwarf_attr_dieoffset(Dwarf_Die * die, int attribute)
     return 0;
   dwarf_attr_integrate(die, attribute, &attr);
   Dwarf_Die subtype_die;
-  if (dwarf_formref_die(&attr, &subtype_die) == NULL)
+  if (dwarf_formref_die(&attr, &subtype_die) == nullptr)
     xbt_die("Could not find DIE");
   return dwarf_dieoffset(&subtype_die);
 }
@@ -302,7 +302,7 @@ static Dwarf_Off MC_dwarf_attr_integrate_dieoffset(Dwarf_Die * die,
     return 0;
   dwarf_attr_integrate(die, DW_AT_type, &attr);
   Dwarf_Die subtype_die;
-  if (dwarf_formref_die(&attr, &subtype_die) == NULL)
+  if (dwarf_formref_die(&attr, &subtype_die) == nullptr)
     xbt_die("Could not find DIE");
   return dwarf_dieoffset(&subtype_die);
 }
@@ -310,7 +310,7 @@ static Dwarf_Off MC_dwarf_attr_integrate_dieoffset(Dwarf_Die * die,
 /** \brief Find the type/subtype (DW_AT_type) for a DIE
  *
  *  \param dit the DIE
- *  \return DW_AT_type reference as a global offset in hexadecimal (or NULL)
+ *  \return DW_AT_type reference as a global offset in hexadecimal (or nullptr)
  */
 static
 std::uint64_t MC_dwarf_at_type(Dwarf_Die * die)
@@ -321,7 +321,7 @@ std::uint64_t MC_dwarf_at_type(Dwarf_Die * die)
 static uint64_t MC_dwarf_attr_integrate_addr(Dwarf_Die * die, int attribute)
 {
   Dwarf_Attribute attr;
-  if (dwarf_attr_integrate(die, attribute, &attr) == NULL)
+  if (dwarf_attr_integrate(die, attribute, &attr) == nullptr)
     return 0;
   Dwarf_Addr value;
   if (dwarf_formaddr(&attr, &value) == 0)
@@ -334,7 +334,7 @@ static uint64_t MC_dwarf_attr_integrate_uint(Dwarf_Die * die, int attribute,
                                              uint64_t default_value)
 {
   Dwarf_Attribute attr;
-  if (dwarf_attr_integrate(die, attribute, &attr) == NULL)
+  if (dwarf_attr_integrate(die, attribute, &attr) == nullptr)
     return default_value;
   Dwarf_Word value;
   return dwarf_formudata(dwarf_attr_integrate(die, attribute, &attr),
@@ -631,7 +631,7 @@ static simgrid::mc::Type MC_dwarf_die_to_type(
   }
 
   const char *name = MC_dwarf_attr_integrate_string(die, DW_AT_name);
-  if (name != NULL) {
+  if (name != nullptr) {
     char* full_name = ns ? bprintf("%s%s::%s", prefix, ns, name) :
       bprintf("%s%s", prefix, name);
     type.name = std::string(full_name);
@@ -666,14 +666,13 @@ static simgrid::mc::Type MC_dwarf_die_to_type(
   case DW_TAG_pointer_type:
   case DW_TAG_reference_type:
   case DW_TAG_rvalue_reference_type:
-    type.is_pointer_type = 1;
     break;
 
   case DW_TAG_structure_type:
   case DW_TAG_union_type:
   case DW_TAG_class_type:
     MC_dwarf_add_members(info, die, unit, &type);
-    char *new_ns = ns == NULL ? xbt_strdup(type.name.c_str())
+    char *new_ns = ns == nullptr ? xbt_strdup(type.name.c_str())
         : bprintf("%s::%s", ns, name);
     MC_dwarf_handle_children(info, die, unit, frame, new_ns);
     free(new_ns);
@@ -709,14 +708,14 @@ static std::unique_ptr<simgrid::mc::Variable> MC_die_to_variable(
     return nullptr;
 
   Dwarf_Attribute attr_location;
-  if (dwarf_attr(die, DW_AT_location, &attr_location) == NULL)
+  if (dwarf_attr(die, DW_AT_location, &attr_location) == nullptr)
     // No location: do not add it ?
     return nullptr;
 
   std::unique_ptr<simgrid::mc::Variable> variable =
     std::unique_ptr<simgrid::mc::Variable>(new simgrid::mc::Variable());
   variable->dwarf_offset = dwarf_dieoffset(die);
-  variable->global = frame == NULL;     // Can be override base on DW_AT_location
+  variable->global = frame == nullptr;     // Can be override base on DW_AT_location
   variable->object_info = info;
 
   const char *name = MC_dwarf_attr_integrate_string(die, DW_AT_name);
@@ -750,11 +749,9 @@ static std::unique_ptr<simgrid::mc::Variable> MC_die_to_variable(
         uintptr_t offset = (uintptr_t) expr[0].number;
         uintptr_t base = (uintptr_t) info->base_address();
         variable->address = (void *) (base + offset);
-      } else {
-        simgrid::dwarf::LocationListEntry entry;
-        entry.expression = {expr, expr + len};
-        variable->location_list = { std::move(entry) };
-      }
+      } else
+        variable->location_list = {
+          simgrid::dwarf::DwarfExpression(expr, expr + len) };
 
       break;
     }
@@ -793,7 +790,7 @@ static std::unique_ptr<simgrid::mc::Variable> MC_die_to_variable(
     default:
       xbt_die
           ("Unhandled form 0x%x, class 0x%X for DW_AT_start_scope of variable %s",
-           form, (int) form_class, name == NULL ? "?" : name);
+           form, (int) form_class, name == nullptr ? "?" : name);
     }
   }
 
@@ -844,19 +841,16 @@ static void MC_dwarf_handle_scope_die(simgrid::mc::ObjectInformation* info, Dwar
     xbt_assert(parent_frame, "No parent scope for this scope");
 
   simgrid::mc::Frame frame;
-
   frame.tag = tag;
   frame.id = dwarf_dieoffset(die);
   frame.object_info = info;
 
   if (klass == simgrid::dwarf::TagClass::Subprogram) {
     const char *name = MC_dwarf_attr_integrate_string(die, DW_AT_name);
-    if(ns)
+    if (ns)
       frame.name  = std::string(ns) + "::" + name;
     else if (name)
       frame.name = name;
-    else
-      frame.name.clear();
   }
 
   frame.abstract_origin_id =
@@ -913,13 +907,14 @@ static void MC_dwarf_handle_scope_die(simgrid::mc::ObjectInformation* info, Dwar
   // Handle children:
   MC_dwarf_handle_children(info, die, unit, &frame, ns);
 
-  // Someone needs this to be sorted but who?
+  // We sort them in order to have an (somewhat) efficient by name
+  // lookup:
   std::sort(frame.variables.begin(), frame.variables.end(),
     MC_compare_variable);
 
   // Register it:
   if (klass == simgrid::dwarf::TagClass::Subprogram)
-    info->subprograms[frame.id] = frame;
+    info->subprograms[frame.id] = std::move(frame);
   else if (klass == simgrid::dwarf::TagClass::Scope)
     parent_frame->scopes.push_back(std::move(frame));
 }
@@ -932,7 +927,7 @@ static void mc_dwarf_handle_namespace_die(simgrid::mc::ObjectInformation* info,
   const char *name = MC_dwarf_attr_integrate_string(die, DW_AT_name);
   if (frame)
     xbt_die("Unexpected namespace in a subprogram");
-  char *new_ns = ns == NULL ? xbt_strdup(name)
+  char *new_ns = ns == nullptr ? xbt_strdup(name)
       : bprintf("%s::%s", ns, name);
   MC_dwarf_handle_children(info, die, unit, frame, new_ns);
   xbt_free(new_ns);
@@ -1010,7 +1005,7 @@ void MC_dwarf_get_variables(simgrid::mc::ObjectInformation* info)
   if (fd < 0)
     xbt_die("Could not open file %s", info->file_name.c_str());
   Dwarf *dwarf = dwarf_begin(fd, DWARF_C_READ);
-  if (dwarf == NULL)
+  if (dwarf == nullptr)
     xbt_die("Missing debugging information in %s\n"
       "Your program and its dependencies must have debugging information.\n"
       "You might want to recompile with -g or install the suitable debugging package.\n",
@@ -1025,11 +1020,11 @@ void MC_dwarf_get_variables(simgrid::mc::ObjectInformation* info)
   Dwarf_Off next_offset = 0;
   size_t length;
 
-  while (dwarf_nextcu(dwarf, offset, &next_offset, &length, NULL, NULL, NULL) ==
+  while (dwarf_nextcu(dwarf, offset, &next_offset, &length, nullptr, NULL, NULL) ==
          0) {
     Dwarf_Die unit_die;
-    if (dwarf_offdie(dwarf, offset + length, &unit_die) != NULL)
-      MC_dwarf_handle_children(info, &unit_die, &unit_die, NULL, NULL);
+    if (dwarf_offdie(dwarf, offset + length, &unit_die) != nullptr)
+      MC_dwarf_handle_children(info, &unit_die, &unit_die, nullptr, NULL);
     offset = next_offset;
   }
 
@@ -1154,7 +1149,7 @@ std::shared_ptr<simgrid::mc::ObjectInformation> MC_find_object_info(
   std::shared_ptr<simgrid::mc::ObjectInformation> result =
     std::make_shared<simgrid::mc::ObjectInformation>();
   result->file_name = name;
-  MC_find_object_address(maps, result.get());
+  simgrid::mc::find_object_address(maps, result.get());
   MC_dwarf_get_variables(result.get());
   MC_post_process_variables(result.get());
   MC_post_process_types(result.get());
index 85c7641..62fb9a1 100644 (file)
@@ -11,6 +11,7 @@
 
 #include <string.h>
 
+#include <xbt/base.h>
 #include <xbt/sysdep.h>
 
 #define DW_LANG_Objc DW_LANG_ObjC       /* fix spelling error in older dwarf.h */
index 76a2af2..da49931 100644 (file)
@@ -5,33 +5,27 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include <cinttypes>
-
 #include <cassert>
 #include <cstddef>
 #include <cstdint>
-#include <cstring>
 
 #include "mc_base.h"
 
+#include "mc/mc.h"
+
 #ifndef _XBT_WIN32
 #include <unistd.h>
 #include <sys/wait.h>
 #include <sys/time.h>
 #endif
 
-#include "simgrid/sg_config.h"
-#include "src/surf/surf_private.h"
-#include "src/simix/smx_private.h"
-#include "xbt/fifo.h"
-#include "xbt/automaton.h"
-#include "xbt/dict.h"
-#include "mc_record.h"
+#include <xbt/fifo.h>
+#include <xbt/automaton.h>
+
+#include "src/simix/smx_process_private.h"
 
 #ifdef HAVE_MC
 #include <libunwind.h>
-#include <xbt/mmalloc.h>
-#include "src/xbt/mmalloc/mmprivate.h"
-#include "src/mc/mc_object_info.h"
 #include "src/mc/mc_comm_pattern.h"
 #include "src/mc/mc_request.h"
 #include "src/mc/mc_safety.h"
@@ -41,6 +35,7 @@
 #include "src/mc/mc_unw.h"
 #include "src/mc/mc_smx.h"
 #endif
+
 #include "src/mc/mc_record.h"
 #include "src/mc/mc_protocol.h"
 #include "src/mc/mc_client.h"
@@ -52,24 +47,24 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_global, mc,
 
 e_mc_mode_t mc_mode;
 
-double *mc_time = NULL;
+double *mc_time = nullptr;
 
 #ifdef HAVE_MC
 int user_max_depth_reached = 0;
 
 /* MC global data structures */
-mc_state_t mc_current_state = NULL;
+mc_state_t mc_current_state = nullptr;
 char mc_replay_mode = FALSE;
 
-mc_stats_t mc_stats = NULL;
-mc_global_t initial_global_state = NULL;
-xbt_fifo_t mc_stack = NULL;
+mc_stats_t mc_stats = nullptr;
+mc_global_t initial_global_state = nullptr;
+xbt_fifo_t mc_stack = nullptr;
 
 /* Liveness */
-xbt_automaton_t _mc_property_automaton = NULL;
+xbt_automaton_t _mc_property_automaton = nullptr;
 
 /* Dot output */
-FILE *dot_output = NULL;
+FILE *dot_output = nullptr;
 const char *colors[13];
 
 
@@ -95,7 +90,7 @@ void MC_init_dot_output()
 
   dot_output = fopen(_sg_mc_dot_output_file, "w");
 
-  if (dot_output == NULL) {
+  if (dot_output == nullptr) {
     perror("Error open dot output file");
     xbt_abort();
   }
@@ -191,7 +186,7 @@ void MC_replay(xbt_fifo_t stack)
 {
   int value, count = 1;
   char *req_str;
-  smx_simcall_t req = NULL, saved_req = NULL;
+  smx_simcall_t req = nullptr, saved_req = NULL;
   xbt_fifo_item_t item, start_item;
   mc_state_t state;
   
@@ -202,7 +197,7 @@ void MC_replay(xbt_fifo_t stack)
     start_item = xbt_fifo_get_first_item(stack);
     state = (mc_state_t)xbt_fifo_get_item_content(start_item);
     if(state->system_state){
-      MC_restore_snapshot(state->system_state);
+      simgrid::mc::restore_snapshot(state->system_state);
       if(_sg_mc_comms_determinism || _sg_mc_send_determinism) 
         MC_restore_communications_pattern(state);
       return;
@@ -211,7 +206,7 @@ void MC_replay(xbt_fifo_t stack)
 
 
   /* Restore the initial state */
-  MC_restore_snapshot(initial_global_state->snapshot);
+  simgrid::mc::restore_snapshot(initial_global_state->snapshot);
   /* At the moment of taking the snapshot the raw heap was set, so restoring
    * it will set it back again, we have to unset it to continue  */
 
@@ -258,7 +253,7 @@ void MC_replay(xbt_fifo_t stack)
       MC_simcall_handle(req, value);
 
       if (_sg_mc_comms_determinism || _sg_mc_send_determinism)
-        MC_handle_comm_pattern(call, req, value, NULL, 1);
+        MC_handle_comm_pattern(call, req, value, nullptr, 1);
 
       mc_model_checker->wait_for_requests();
 
@@ -277,9 +272,9 @@ void MC_replay(xbt_fifo_t stack)
 void MC_replay_liveness(xbt_fifo_t stack)
 {
   xbt_fifo_item_t item;
-  mc_pair_t pair = NULL;
-  mc_state_t state = NULL;
-  smx_simcall_t req = NULL, saved_req = NULL;
+  mc_pair_t pair = nullptr;
+  mc_state_t state = nullptr;
+  smx_simcall_t req = nullptr, saved_req = NULL;
   int value, depth = 1;
   char *req_str;
 
@@ -290,13 +285,13 @@ void MC_replay_liveness(xbt_fifo_t stack)
     item = xbt_fifo_get_first_item(stack);
     pair = (mc_pair_t) xbt_fifo_get_item_content(item);
     if(pair->graph_state->system_state){
-      MC_restore_snapshot(pair->graph_state->system_state);
+      simgrid::mc::restore_snapshot(pair->graph_state->system_state);
       return;
     }
   }
 
   /* Restore the initial state */
-  MC_restore_snapshot(initial_global_state->snapshot);
+  simgrid::mc::restore_snapshot(initial_global_state->snapshot);
 
     /* Traverse the stack from the initial state and re-execute the transitions */
     for (item = xbt_fifo_get_last_item(stack);
@@ -311,7 +306,7 @@ void MC_replay_liveness(xbt_fifo_t stack)
 
         saved_req = MC_state_get_executed_request(state, &value);
 
-        if (saved_req != NULL) {
+        if (saved_req != nullptr) {
           /* because we got a copy of the executed request, we have to fetch the
              real one, pointed by the request field of the issuer process */
           const smx_process_t issuer = MC_smx_simcall_get_issuer(saved_req);
@@ -352,7 +347,7 @@ void MC_dump_stack_safety(xbt_fifo_t stack)
   
   mc_state_t state;
 
-  while ((state = (mc_state_t) xbt_fifo_pop(stack)) != NULL)
+  while ((state = (mc_state_t) xbt_fifo_pop(stack)) != nullptr)
     MC_state_delete(state, !state->in_visited_states ? 1 : 0);
 }
 
@@ -363,7 +358,7 @@ void MC_show_stack_safety(xbt_fifo_t stack)
   mc_state_t state;
   xbt_fifo_item_t item;
   smx_simcall_t req;
-  char *req_str = NULL;
+  char *req_str = nullptr;
 
   for (item = xbt_fifo_get_last_item(stack);
        item; item = xbt_fifo_get_prev_item(item)) {
@@ -379,7 +374,7 @@ void MC_show_stack_safety(xbt_fifo_t stack)
 
 void MC_show_deadlock(smx_simcall_t req)
 {
-  /*char *req_str = NULL; */
+  /*char *req_str = nullptr; */
   XBT_INFO("**************************");
   XBT_INFO("*** DEAD-LOCK DETECTED ***");
   XBT_INFO("**************************");
@@ -408,7 +403,7 @@ void MC_show_stack_liveness(xbt_fifo_t stack)
   mc_pair_t pair;
   xbt_fifo_item_t item;
   smx_simcall_t req;
-  char *req_str = NULL;
+  char *req_str = nullptr;
 
   for (item = xbt_fifo_get_last_item(stack);
        item; item = xbt_fifo_get_prev_item(item)) {
@@ -426,7 +421,7 @@ void MC_show_stack_liveness(xbt_fifo_t stack)
 void MC_dump_stack_liveness(xbt_fifo_t stack)
 {
   mc_pair_t pair;
-  while ((pair = (mc_pair_t) xbt_fifo_pop(stack)) != NULL)
+  while ((pair = (mc_pair_t) xbt_fifo_pop(stack)) != nullptr)
     MC_pair_delete(pair);
 }
 
@@ -454,11 +449,11 @@ void MC_print_statistics(mc_stats_t stats)
     XBT_INFO("Visited pairs = %lu", stats->visited_pairs);
   }
   XBT_INFO("Executed transitions = %lu", stats->executed_transitions);
-  if ((_sg_mc_dot_output_file != NULL) && (_sg_mc_dot_output_file[0] != '\0')) {
+  if ((_sg_mc_dot_output_file != nullptr) && (_sg_mc_dot_output_file[0] != '\0')) {
     fprintf(dot_output, "}\n");
     fclose(dot_output);
   }
-  if (initial_global_state != NULL && (_sg_mc_comms_determinism || _sg_mc_send_determinism)) {
+  if (initial_global_state != nullptr && (_sg_mc_comms_determinism || _sg_mc_send_determinism)) {
     XBT_INFO("Send-deterministic : %s", !initial_global_state->send_deterministic ? "No" : "Yes");
     if (_sg_mc_comms_determinism)
       XBT_INFO("Recv-deterministic : %s", !initial_global_state->recv_deterministic ? "No" : "Yes");
@@ -471,7 +466,7 @@ void MC_print_statistics(mc_stats_t stats)
 
 void MC_automaton_load(const char *file)
 {
-  if (_mc_property_automaton == NULL)
+  if (_mc_property_automaton == nullptr)
     _mc_property_automaton = xbt_automaton_new();
 
   xbt_automaton_load(_mc_property_automaton, file);
@@ -515,7 +510,7 @@ static void MC_dump_stacks(FILE* file)
 double MC_process_clock_get(smx_process_t process)
 {
   if (mc_time) {
-    if (process != NULL)
+    if (process != nullptr)
       return mc_time[process->pid];
     else
       return -1;
index b260507..72dd93c 100644 (file)
@@ -8,7 +8,10 @@
 
 #include <cstdint>
 
+#include <xbt/log.h>
+
 #include "src/mc/mc_private.h"
+#include "src/mc/mc_snapshot.h"
 #include "mc/datatypes.h"
 #include "src/mc/mc_hash.hpp"
 #include <mc/mc.h>
index 767fcc0..68a408a 100644 (file)
@@ -8,10 +8,10 @@
 #define SIMGRID_MC_HASH_HPP
 
 #include <cstdint>
-#include <vector>
 
-#include "xbt/misc.h"
-#include "src/mc/mc_snapshot.h"
+#include <xbt/base.h>
+
+#include "src/mc/mc_forward.hpp"
 
 namespace simgrid {
 namespace mc {
index 6017779..5a440b5 100644 (file)
@@ -5,7 +5,6 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "src/internal_config.h"
-#include "src/mc/mc_object_info.h"
 #include "src/mc/mc_private.h"
 #include "src/smpi/private.h"
 #include "src/mc/mc_snapshot.h"
index 4824094..ba91c35 100644 (file)
@@ -7,13 +7,9 @@
 #ifndef SIMGRID_MC_IGNORE_H
 #define SIMGRID_MC_IGNORE_H
 
+#include <xbt/base.h>           /* SG_BEGIN_DECL */
 #include <xbt/dynar.h>
 
-#include "mc/datatypes.h"
-#include "src/mc/Process.hpp"
-
-#include "xbt/misc.h"           /* SG_BEGIN_DECL */
-
 SG_BEGIN_DECL();
 
 XBT_PRIVATE xbt_dynar_t MC_checkpoint_ignore_new(void);
index 2bdc1a7..84e996d 100644 (file)
@@ -4,11 +4,17 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include <cstring>
+
 #include <unistd.h>
 #include <sys/wait.h>
 
-#include <xbt/dynar.h>
 #include <xbt/automaton.h>
+#include <xbt/dynar.h>
+#include <xbt/fifo.h>
+#include <xbt/log.h>
+#include <xbt/parmap.h>
+#include <xbt/sysdep.h>
 
 #include "src/mc/mc_request.h"
 #include "src/mc/mc_liveness.h"
@@ -35,8 +41,8 @@ xbt_parmap_t parmap;
 static xbt_dynar_t get_atomic_propositions_values()
 {
   unsigned int cursor = 0;
-  xbt_automaton_propositional_symbol_t ps = NULL;
-  xbt_dynar_t values = xbt_dynar_new(sizeof(int), NULL);
+  xbt_automaton_propositional_symbol_t ps = nullptr;
+  xbt_dynar_t values = xbt_dynar_new(sizeof(int), nullptr);
   xbt_dynar_foreach(_mc_property_automaton->propositional_symbols, cursor, ps) {
     int res = xbt_automaton_propositional_symbol_evaluate(ps);
     xbt_dynar_push_as(values, int, res);
@@ -47,7 +53,7 @@ static xbt_dynar_t get_atomic_propositions_values()
 
 static mc_visited_pair_t is_reached_acceptance_pair(mc_pair_t pair)
 {
-  mc_visited_pair_t new_pair = NULL;
+  mc_visited_pair_t new_pair = nullptr;
   new_pair = MC_visited_pair_new(pair->num, pair->automaton_state, pair->atomic_propositions, pair->graph_state);
   new_pair->acceptance_pair = 1;
 
@@ -81,9 +87,9 @@ static mc_visited_pair_t is_reached_acceptance_pair(mc_pair_t pair)
               if (snapshot_compare(pair_test, new_pair) == 0) {
                 XBT_INFO("Pair %d already reached (equal to pair %d) !", new_pair->num, pair_test->num);
                 xbt_fifo_shift(mc_stack);
-                if (dot_output != NULL)
+                if (dot_output != nullptr)
                   fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_global_state->prev_pair, pair_test->num, initial_global_state->prev_req);
-                return NULL;
+                return nullptr;
               }
             }
           }
@@ -109,7 +115,7 @@ static mc_visited_pair_t is_reached_acceptance_pair(mc_pair_t pair)
 static void remove_acceptance_pair(int pair_num)
 {
   unsigned int cursor = 0;
-  mc_visited_pair_t pair_test = NULL;
+  mc_visited_pair_t pair_test = nullptr;
   int pair_found = 0;
 
   xbt_dynar_foreach(acceptance_pairs, cursor, pair_test) {
@@ -152,9 +158,9 @@ static int MC_automaton_evaluate_label(xbt_automaton_exp_label_t l,
     }
   case 3:{
       unsigned int cursor = 0;
-      xbt_automaton_propositional_symbol_t p = NULL;
+      xbt_automaton_propositional_symbol_t p = nullptr;
       xbt_dynar_foreach(_mc_property_automaton->propositional_symbols, cursor, p) {
-        if (strcmp(xbt_automaton_propositional_symbol_get_name(p), l->u.predicat) == 0)
+        if (std::strcmp(xbt_automaton_propositional_symbol_get_name(p), l->u.predicat) == 0)
           return (int) xbt_dynar_get_as(atomic_propositions_values, cursor, int);
       }
       return -1;
@@ -171,16 +177,16 @@ static int MC_modelcheck_liveness_main(void);
 
 static void MC_pre_modelcheck_liveness(void)
 {
-  mc_pair_t initial_pair = NULL;
+  mc_pair_t initial_pair = nullptr;
   smx_process_t process;
 
   mc_model_checker->wait_for_requests();
 
-  acceptance_pairs = xbt_dynar_new(sizeof(mc_visited_pair_t), NULL);
+  acceptance_pairs = xbt_dynar_new(sizeof(mc_visited_pair_t), nullptr);
   if(_sg_mc_visited > 0)
-    visited_pairs = xbt_dynar_new(sizeof(mc_visited_pair_t), NULL);
+    visited_pairs = xbt_dynar_new(sizeof(mc_visited_pair_t), nullptr);
 
-  initial_global_state->snapshot = MC_take_snapshot(0);
+  initial_global_state->snapshot = simgrid::mc::take_snapshot(0);
   initial_global_state->prev_pair = 0;
 
   unsigned int cursor = 0;
@@ -212,15 +218,15 @@ static void MC_pre_modelcheck_liveness(void)
 
 static int MC_modelcheck_liveness_main(void)
 {
-  smx_process_t process = NULL;
-  mc_pair_t current_pair = NULL;
+  smx_process_t process = nullptr;
+  mc_pair_t current_pair = nullptr;
   int value, res, visited_num = -1;
-  smx_simcall_t req = NULL;
-  xbt_automaton_transition_t transition_succ = NULL;
+  smx_simcall_t req = nullptr;
+  xbt_automaton_transition_t transition_succ = nullptr;
   int cursor = 0;
-  mc_pair_t next_pair = NULL;
-  xbt_dynar_t prop_values = NULL;
-  mc_visited_pair_t reached_pair = NULL;
+  mc_pair_t next_pair = nullptr;
+  xbt_dynar_t prop_values = nullptr;
+  mc_visited_pair_t reached_pair = nullptr;
   
   while(xbt_fifo_size(mc_stack) > 0){
 
@@ -239,7 +245,7 @@ static int MC_modelcheck_liveness_main(void)
 
       if (current_pair->automaton_state->type == 1 && current_pair->exploration_started == 0) {
         /* If new acceptance pair, return new pair */
-        if ((reached_pair = is_reached_acceptance_pair(current_pair)) == NULL) {
+        if ((reached_pair = is_reached_acceptance_pair(current_pair)) == nullptr) {
           int counter_example_depth = current_pair->depth;
           XBT_INFO("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
           XBT_INFO("|             ACCEPTANCE CYCLE            |");
@@ -257,7 +263,7 @@ static int MC_modelcheck_liveness_main(void)
       /* Pair already visited ? stop the exploration on the current path */
       if ((current_pair->exploration_started == 0) && (visited_num = is_visited_pair(reached_pair, current_pair)) != -1) {
 
-        if (dot_output != NULL){
+        if (dot_output != nullptr){
           fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_global_state->prev_pair, visited_num, initial_global_state->prev_req);
           fflush(dot_output);
         }
@@ -270,7 +276,7 @@ static int MC_modelcheck_liveness_main(void)
 
         req = MC_state_get_request(current_pair->graph_state, &value);
 
-         if (dot_output != NULL) {
+         if (dot_output != nullptr) {
            if (initial_global_state->prev_pair != 0 && initial_global_state->prev_pair != current_pair->num) {
              fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", initial_global_state->prev_pair, current_pair->num, initial_global_state->prev_req);
              xbt_free(initial_global_state->prev_req);
@@ -349,7 +355,7 @@ static int MC_modelcheck_liveness_main(void)
     
       /* Traverse the stack backwards until a pair with a non empty interleave
          set is found, deleting all the pairs that have it empty in the way. */
-      while ((current_pair = (mc_pair_t) xbt_fifo_shift(mc_stack)) != NULL) {
+      while ((current_pair = (mc_pair_t) xbt_fifo_shift(mc_stack)) != nullptr) {
         if (current_pair->requests > 0) {
           /* We found a backtracking point */
           XBT_DEBUG("Backtracking to depth %d", current_pair->depth);
index f33cc54..72142a7 100644 (file)
@@ -10,6 +10,7 @@
 #include <stdint.h>
 
 #include <simgrid_config.h>
+#include <xbt/base.h>
 #include <xbt/fifo.h>
 #include <xbt/dynar.h>
 #include <xbt/automaton.h>
index 683f82f..8ce5366 100644 (file)
@@ -4,14 +4,10 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <xbt/misc.h>
-
-#include "src/mc/mc_object_info.h"
 #include "src/mc/mc_private.h"
 #include "src/mc/Type.hpp"
 #include "src/mc/mc_dwarf.hpp"
 
-
 namespace simgrid {
 namespace dwarf {
 
@@ -20,7 +16,7 @@ namespace dwarf {
  * @param object   Process address of the struct/class
  * @param type     Type of the struct/class
  * @param member   Member description
- * @param snapshot Snapshot (or NULL)
+ * @param snapshot Snapshot (or nullptr)
  * @return Process address of the given member of the 'object' struct/class
  */
 void *resolve_member(
@@ -32,8 +28,8 @@ void *resolve_member(
     return ((char *) base) + member->offset();
 
   ExpressionContext state;
-  state.frame_base = NULL;
-  state.cursor = NULL;
+  state.frame_base = nullptr;
+  state.cursor = nullptr;
   state.address_space = address_space;
   state.process_index = process_index;
 
index 5594edc..3df9bbe 100644 (file)
@@ -8,11 +8,8 @@
 #include <fcntl.h>
 
 #include "xbt/log.h"
-#include "xbt/dynar.h"
-#include "xbt/virtu.h"
 
 #include "mc/mc.h"
-#include "src/mc/mc_object_info.h"
 #include "src/mc/mc_private.h"
 
 extern "C" {
index 9fe0968..e69de29 100644 (file)
@@ -1,37 +0,0 @@
-/* Copyright (c) 2007-2015. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#ifndef SIMGRID_MC_MMALLOC_H
-#define SIMGRID_MC_MMALLOC_H
-
-#include <xbt/misc.h>
-#include <xbt/mmalloc.h>
-
-/** file
- *  Support for seperate heaps.
- *
- *  The possible memory modes for the modelchecker are standard and raw.
- *  Normally the system should operate in std, for switching to raw mode
- *  you must wrap the code between MC_SET_RAW_MODE and MC_UNSET_RAW_MODE.
- */
-
-SG_BEGIN_DECL()
-
-/* FIXME: Horrible hack! because the mmalloc library doesn't provide yet of */
-/* an API to query about the status of a heap, we simply call mmstats and */
-/* because I now how does structure looks like, then I redefine it here */
-
-/* struct mstats { */
-/*   size_t bytes_total;           /\* Total size of the heap. *\/ */
-/*   size_t chunks_used;           /\* Chunks allocated by the user. *\/ */
-/*   size_t bytes_used;            /\* Byte total of user-allocated chunks. *\/ */
-/*   size_t chunks_free;           /\* Chunks in the free list. *\/ */
-/*   size_t bytes_free;            /\* Byte total of chunks in the free list. *\/ */
-/* }; */
-
-SG_END_DECL()
-
-#endif
index 6968f7b..50b83dd 100644 (file)
@@ -7,10 +7,11 @@
 #ifndef SIMGRID_MC_MMU_H
 #define SIMGRID_MC_MMU_H
 
-#include <stdint.h>
-#include <stdbool.h>
+#include <cstdint>
+#include <cstddef>
 
 #include <xbt/asserts.h>
+#include <xbt/base.h> // xbt_pagesize...
 #include <xbt/misc.h>
 
 #include <simgrid_config.h>
@@ -41,7 +42,7 @@ static inline __attribute__ ((always_inline))
 size_t mc_page_number(const void* base, const void* address)
 {
   xbt_assert(address>=base, "The address is not in the range");
-  return ((uintptr_t) address - (uintptr_t) base) >> xbt_pagebits;
+  return ((std::uintptr_t) address - (std::uintptr_t) base) >> xbt_pagebits;
 }
 
 /** @brief Get the offset of an address within a memory page
@@ -52,7 +53,7 @@ size_t mc_page_number(const void* base, const void* address)
 static inline __attribute__ ((always_inline))
 size_t mc_page_offset(const void* address)
 {
-  return ((uintptr_t) address) & (xbt_pagesize-1);
+  return ((std::uintptr_t) address) & (xbt_pagesize-1);
 }
 
 /** @brief Get the virtual address of a virtual memory page
@@ -69,7 +70,8 @@ void* mc_page_from_number(const void* base, size_t page)
 static inline __attribute__ ((always_inline))
 bool mc_same_page(const void* a, const void* b)
 {
-  return ((uintptr_t) a >> xbt_pagebits) == ((uintptr_t) b >> xbt_pagebits);
+  return ((std::uintptr_t) a >> xbt_pagebits)
+    == ((std::uintptr_t) b >> xbt_pagebits);
 }
 
 SG_END_DECL()
index 129e69a..afed72a 100644 (file)
@@ -4,7 +4,9 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <xbt.h>
+#include <xbt/dynar.h>
+#include <xbt/sysdep.h>
+
 #include "src/mc/mc_liveness.h"
 #include "src/mc/mc_private.h"
 
@@ -12,7 +14,7 @@ extern "C" {
 
 mc_pair_t MC_pair_new()
 {
-  mc_pair_t p = NULL;
+  mc_pair_t p = nullptr;
   p = xbt_new0(s_mc_pair_t, 1);
   p->num = ++mc_stats->expanded_pairs;
   p->exploration_started = 0;
@@ -23,12 +25,12 @@ mc_pair_t MC_pair_new()
 
 void MC_pair_delete(mc_pair_t p)
 {
-  p->automaton_state = NULL;
+  p->automaton_state = nullptr;
   if(p->visited_pair_removed)
     MC_state_delete(p->graph_state, 1);
   xbt_dynar_free(&(p->atomic_propositions));
   xbt_free(p);
-  p = NULL;
+  p = nullptr;
 }
 
 }
index 17982ed..a5ded6a 100644 (file)
@@ -103,9 +103,15 @@ XBT_PRIVATE void MC_report_crash(int status);
 
 #ifdef __cplusplus
 
-XBT_PRIVATE void MC_find_object_address(
+namespace simgrid {
+namespace mc {
+
+XBT_PRIVATE void find_object_address(
   std::vector<simgrid::xbt::VmMap> const& maps, simgrid::mc::ObjectInformation* result);
 
+}
+}
+
 #endif
 
 SG_END_DECL()
index 64b0e70..bd6fd13 100644 (file)
@@ -7,7 +7,9 @@
 #ifndef SIMGRID_MC_PROTOCOL_H
 #define SIMGRID_MC_PROTOCOL_H
 
-#include <xbt/misc.h>
+#include <stdint.h>
+
+#include <xbt/base.h>
 
 #include "mc/datatypes.h"
 
index 824466a..f0ff676 100644 (file)
@@ -8,8 +8,14 @@
 #include <cstdio>
 #include <cstdlib>
 
-#include <xbt.h>
-#include <simgrid/simix.h>
+#include <xbt/fifo.h>
+#include <xbt/log.h>
+#include <xbt/sysdep.h>
+
+#include "simgrid/simix.h"
+
+#include "src/simix/smx_private.h"
+#include "src/simix/smx_process_private.h"
 
 #include "src/mc/mc_replay.h"
 #include "src/mc/mc_record.h"
index 2939b6a..17493f0 100644 (file)
@@ -17,9 +17,9 @@
 #ifndef SIMGRID_MC_RECORD_H
 #define SIMGRID_MC_RECORD_H
 
-#include <stdbool.h>
-
-#include "simgrid_config.h"
+#include <xbt/base.h>
+#include <xbt/dynar.h>
+#include <xbt/fifo.h>
 
 SG_BEGIN_DECL()
 
index 5dc957a..cfd41a6 100644 (file)
@@ -9,7 +9,7 @@
 #ifndef SIMGRID_MC_REPLAY_H
 #define SIMGRID_MC_REPLAY_H
 
-#include <xbt/misc.h>
+#include <xbt/base.h>
 
 SG_BEGIN_DECL()
 
index c77bc95..c52a33c 100644 (file)
@@ -4,7 +4,12 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <assert.h>
+#include <cassert>
+
+#include <xbt/log.h>
+#include <xbt/str.h>
+#include <xbt/sysdep.h>
+#include <xbt/dynar.h>
 
 #include "src/mc/mc_request.h"
 #include "src/mc/mc_safety.h"
@@ -100,13 +105,13 @@ int MC_request_depend_asymmetric(smx_simcall_t r1, smx_simcall_t r2)
 
   if (r1->call == SIMCALL_COMM_WAIT
       && (r2->call == SIMCALL_COMM_WAIT || r2->call == SIMCALL_COMM_TEST)
-      && (synchro1->comm.src_proc == NULL || synchro1->comm.dst_proc == NULL))
+      && (synchro1->comm.src_proc == nullptr || synchro1->comm.dst_proc == NULL))
     return FALSE;
 
   if (r1->call == SIMCALL_COMM_TEST &&
-      (simcall_comm_test__get__comm(r1) == NULL
-       || synchro1->comm.src_buff == NULL
-       || synchro1->comm.dst_buff == NULL))
+      (simcall_comm_test__get__comm(r1) == nullptr
+       || synchro1->comm.src_buff == nullptr
+       || synchro1->comm.dst_buff == nullptr))
     return FALSE;
 
   if (r1->call == SIMCALL_COMM_TEST && r2->call == SIMCALL_COMM_WAIT
@@ -115,10 +120,10 @@ int MC_request_depend_asymmetric(smx_simcall_t r1, smx_simcall_t r2)
     return FALSE;
 
   if (r1->call == SIMCALL_COMM_WAIT && r2->call == SIMCALL_COMM_TEST
-      && synchro1->comm.src_buff != NULL
-      && synchro1->comm.dst_buff != NULL
-      && synchro2->comm.src_buff != NULL
-      && synchro2->comm.dst_buff != NULL
+      && synchro1->comm.src_buff != nullptr
+      && synchro1->comm.dst_buff != nullptr
+      && synchro2->comm.src_buff != nullptr
+      && synchro2->comm.dst_buff != nullptr
       && synchro1->comm.dst_buff != synchro2->comm.src_buff
       && synchro1->comm.dst_buff != synchro2->comm.dst_buff
       && synchro2->comm.dst_buff != synchro1->comm.src_buff)
@@ -160,10 +165,10 @@ int MC_request_depend(smx_simcall_t r1, smx_simcall_t r2)
     if (synchro1->comm.src_buff == synchro2->comm.src_buff
         && synchro1->comm.dst_buff == synchro2->comm.dst_buff)
       return FALSE;
-    else if (synchro1->comm.src_buff != NULL
-        && synchro1->comm.dst_buff != NULL
-        && synchro2->comm.src_buff != NULL
-        && synchro2->comm.dst_buff != NULL
+    else if (synchro1->comm.src_buff != nullptr
+        && synchro1->comm.dst_buff != nullptr
+        && synchro2->comm.src_buff != nullptr
+        && synchro2->comm.dst_buff != nullptr
         && synchro1->comm.dst_buff != synchro2->comm.src_buff
         && synchro1->comm.dst_buff != synchro2->comm.dst_buff
         && synchro2->comm.dst_buff != synchro1->comm.src_buff)
@@ -207,8 +212,8 @@ char *MC_request_to_string(smx_simcall_t req, int value, e_mc_request_type_t req
     break;
   }
 
-  const char* type = NULL;
-  char *args = NULL;
+  const char* type = nullptr;
+  char *args = nullptr;
 
   smx_process_t issuer = MC_smx_simcall_get_issuer(req);
 
@@ -307,7 +312,7 @@ char *MC_request_to_string(smx_simcall_t req, int value, e_mc_request_type_t req
         act = remote_act;
 
     char* p;
-    if (act->comm.src_proc == NULL || act->comm.dst_proc == NULL) {
+    if (act->comm.src_proc == nullptr || act->comm.dst_proc == NULL) {
       type = "Test FALSE";
       p = pointer_to_string(remote_act);
       args = bprintf("comm=%s", p);
@@ -382,19 +387,19 @@ char *MC_request_to_string(smx_simcall_t req, int value, e_mc_request_type_t req
 
     args = bprintf("locked = %d, owner = %d, sleeping = %d",
       mutex.locked,
-      mutex.owner != NULL ? (int) MC_smx_resolve_process(mutex.owner)->pid : -1,
+      mutex.owner != nullptr ? (int) MC_smx_resolve_process(mutex.owner)->pid : -1,
       mutex_sleeping.count);
     break;
   }
 
   case SIMCALL_MC_SNAPSHOT:
     type = "MC_SNAPSHOT";
-    args = NULL;
+    args = nullptr;
     break;
 
   case SIMCALL_MC_COMPARE_SNAPSHOTS:
     type = "MC_COMPARE_SNAPSHOTS";
-    args = NULL;
+    args = nullptr;
     break;
 
   case SIMCALL_MC_RANDOM:
@@ -407,7 +412,7 @@ char *MC_request_to_string(smx_simcall_t req, int value, e_mc_request_type_t req
   }
 
   char* str;
-  if (args != NULL) {
+  if (args != nullptr) {
     str =
         bprintf("[(%lu)%s (%s)] %s(%s)", issuer->pid,
                 MC_smx_process_get_host_name(issuer),
@@ -445,7 +450,7 @@ unsigned int MC_request_testany_fail(smx_simcall_t req)
   for (cursor=0; cursor != comms.used; ++cursor) {
 
     // Get the element:
-    smx_synchro_t remote_action = NULL;
+    smx_synchro_t remote_action = nullptr;
     memcpy(&remote_action, buffer + comms.elmsize * cursor, sizeof(remote_action));
 
     // Dereference the pointer:
@@ -463,7 +468,7 @@ unsigned int MC_request_testany_fail(smx_simcall_t req)
 
 int MC_request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx)
 {
-  smx_synchro_t remote_act = NULL;
+  smx_synchro_t remote_act = nullptr;
   switch (req->call) {
 
   case SIMCALL_COMM_WAIT:
@@ -504,7 +509,7 @@ int MC_process_is_enabled(smx_process_t process)
 
 char *MC_request_get_dot_output(smx_simcall_t req, int value)
 {
-  char *label = NULL;
+  char *label = nullptr;
 
   const smx_process_t issuer = MC_smx_simcall_get_issuer(req);
 
@@ -563,7 +568,7 @@ char *MC_request_get_dot_output(smx_simcall_t req, int value)
     s_smx_synchro_t synchro;
     mc_model_checker->process().read_bytes(&synchro,
       sizeof(synchro), remote(remote_act));
-    if (synchro.comm.src_proc == NULL || synchro.comm.dst_proc == NULL) {
+    if (synchro.comm.src_proc == nullptr || synchro.comm.dst_proc == NULL) {
       if (issuer->host)
         label =
             bprintf("[(%lu)%s] Test FALSE", issuer->pid,
index 55fa040..1ca589c 100644 (file)
@@ -9,8 +9,6 @@
 
 #include <xbt/base.h>
 
-#include <simgrid_config.h>
-
 #include "src/simix/smx_private.h"
 
 SG_BEGIN_DECL()
index 1642b3a..594cb71 100644 (file)
@@ -4,7 +4,14 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <assert.h>
+#include <cassert>
+
+#include <cstdio>
+
+#include <xbt/log.h>
+#include <xbt/dynar.h>
+#include <xbt/fifo.h>
+#include <xbt/sysdep.h>
 
 #include "src/mc/mc_state.h"
 #include "src/mc/mc_request.h"
@@ -28,7 +35,7 @@ static int is_exploration_stack_state(mc_state_t current_state){
 
   xbt_fifo_item_t item;
   mc_state_t stack_state;
-  for(item = xbt_fifo_get_first_item(mc_stack); item != NULL; item = xbt_fifo_get_next_item(item)) {
+  for(item = xbt_fifo_get_first_item(mc_stack); item != nullptr; item = xbt_fifo_get_next_item(item)) {
     stack_state = (mc_state_t) xbt_fifo_get_item_content(item);
     if(snapshot_compare(stack_state, current_state) == 0){
       XBT_INFO("Non-progressive cycle : state %d -> state %d", stack_state->num, current_state->num);
@@ -77,12 +84,12 @@ int MC_modelcheck_safety(void)
 {
   MC_modelcheck_safety_init();
 
-  char *req_str = NULL;
+  char *req_str = nullptr;
   int value;
-  smx_simcall_t req = NULL;
-  mc_state_t state = NULL, prev_state = NULL, next_state = NULL;
-  xbt_fifo_item_t item = NULL;
-  mc_visited_state_t visited_state = NULL;
+  smx_simcall_t req = nullptr;
+  mc_state_t state = nullptr, prev_state = NULL, next_state = NULL;
+  xbt_fifo_item_t item = nullptr;
+  mc_visited_state_t visited_state = nullptr;
 
   while (xbt_fifo_size(mc_stack) > 0) {
 
@@ -101,13 +108,13 @@ int MC_modelcheck_safety(void)
     /* If there are processes to interleave and the maximum depth has not been reached
        then perform one step of the exploration algorithm */
     if (xbt_fifo_size(mc_stack) <= _sg_mc_max_depth && !user_max_depth_reached
-        && (req = MC_state_get_request(state, &value)) && visited_state == NULL) {
+        && (req = MC_state_get_request(state, &value)) && visited_state == nullptr) {
 
       req_str = MC_request_to_string(req, value, MC_REQUEST_SIMIX);
       XBT_DEBUG("Execute: %s", req_str);
       xbt_free(req_str);
 
-      if (dot_output != NULL) {
+      if (dot_output != nullptr) {
         req_str = MC_request_get_dot_output(req, value);
       }
 
@@ -129,10 +136,10 @@ int MC_modelcheck_safety(void)
           return SIMGRID_MC_EXIT_NON_TERMINATION;
       }
 
-      if ((visited_state = is_visited_state(next_state)) == NULL) {
+      if ((visited_state = is_visited_state(next_state)) == nullptr) {
 
         /* Get an enabled process and insert it in the interleave set of the next state */
-        smx_process_t process = NULL;
+        smx_process_t process = nullptr;
         MC_EACH_SIMIX_PROCESS(process,
           if (MC_process_is_enabled(process)) {
             MC_state_interleave_process(next_state, process);
@@ -141,19 +148,19 @@ int MC_modelcheck_safety(void)
           }
         );
 
-        if (dot_output != NULL)
-          fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, next_state->num, req_str);
+        if (dot_output != nullptr)
+          std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, next_state->num, req_str);
 
       } else {
 
-        if (dot_output != NULL)
-          fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, visited_state->other_num == -1 ? visited_state->num : visited_state->other_num, req_str);
+        if (dot_output != nullptr)
+          std::fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", state->num, visited_state->other_num == -1 ? visited_state->num : visited_state->other_num, req_str);
 
       }
 
       xbt_fifo_unshift(mc_stack, next_state);
 
-      if (dot_output != NULL)
+      if (dot_output != nullptr)
         xbt_free(req_str);
 
       /* Let's loop again */
@@ -161,11 +168,11 @@ int MC_modelcheck_safety(void)
       /* The interleave set is empty or the maximum depth is reached, let's back-track */
     } else {
 
-      if ((xbt_fifo_size(mc_stack) > _sg_mc_max_depth) || user_max_depth_reached || visited_state != NULL) {
+      if ((xbt_fifo_size(mc_stack) > _sg_mc_max_depth) || user_max_depth_reached || visited_state != nullptr) {
 
-        if (user_max_depth_reached && visited_state == NULL)
+        if (user_max_depth_reached && visited_state == nullptr)
           XBT_DEBUG("User max depth reached !");
-        else if (visited_state == NULL)
+        else if (visited_state == nullptr)
           XBT_WARN("/!\\ Max depth reached ! /!\\ ");
         else
           XBT_DEBUG("State already visited (equal to state %d), exploration stopped on this path.", visited_state->other_num == -1 ? visited_state->num : visited_state->other_num);
@@ -181,11 +188,11 @@ int MC_modelcheck_safety(void)
       XBT_DEBUG("Delete state %d at depth %d", state->num, xbt_fifo_size(mc_stack) + 1);
       MC_state_delete(state, !state->in_visited_states ? 1 : 0);
 
-      visited_state = NULL;
+      visited_state = nullptr;
 
       /* Check for deadlocks */
       if (MC_deadlock_check()) {
-        MC_show_deadlock(NULL);
+        MC_show_deadlock(nullptr);
         return SIMGRID_MC_EXIT_DEADLOCK;
       }
 
@@ -286,5 +293,5 @@ static void MC_modelcheck_safety_init(void)
 
   /* Save the initial state */
   initial_global_state = xbt_new0(s_mc_global_t, 1);
-  initial_global_state->snapshot = MC_take_snapshot(0);
+  initial_global_state->snapshot = simgrid::mc::take_snapshot(0);
 }
index d6c907d..46c5ec9 100644 (file)
 #include <stdint.h>
 
 #include <simgrid_config.h>
+
 #include <xbt/base.h>
-#include <xbt/dict.h>
+#include <xbt/dynar.h>
+
 #include "src/mc/mc_forward.hpp"
 #include "src/mc/mc_state.h"
 
index c24b2ac..205fcf7 100644 (file)
@@ -4,15 +4,18 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <assert.h>
+#include <cassert>
+#include <cstdlib>
 
 #include <xbt/log.h>
-#include <xbt/string.hpp>
+#include <xbt/dynar.h>
+#include <xbt/str.h>
+#include <xbt/swag.h>
 
 #include "src/simix/smx_private.h"
 
 #include "src/mc/mc_smx.h"
-#include "ModelChecker.hpp"
+#include "src/mc/ModelChecker.hpp"
 
 using simgrid::mc::remote;
 
@@ -21,9 +24,9 @@ extern "C" {
 static
 void MC_smx_process_info_clear(mc_smx_process_info_t p)
 {
-  p->hostname = NULL;
-  free(p->name);
-  p->name = NULL;
+  p->hostname = nullptr;
+  std::free(p->name);
+  p->name = nullptr;
 }
 
 xbt_dynar_t MC_smx_process_info_list_new(void)
@@ -74,8 +77,8 @@ static void MC_process_refresh_simix_process_list(
 
     s_mc_smx_process_info_t info;
     info.address = p;
-    info.name = NULL;
-    info.hostname = NULL;
+    info.name = nullptr;
+    info.hostname = nullptr;
     process->read_bytes(&info.copy, sizeof(info.copy), remote(p));
     xbt_dynar_push(target, &info);
 
@@ -146,7 +149,7 @@ smx_process_t MC_smx_simcall_get_issuer(smx_simcall_t req)
 smx_process_t MC_smx_resolve_process(smx_process_t process_remote_address)
 {
   if (!process_remote_address)
-    return NULL;
+    return nullptr;
   if (mc_mode == MC_MODE_CLIENT)
     return process_remote_address;
 
@@ -154,7 +157,7 @@ smx_process_t MC_smx_resolve_process(smx_process_t process_remote_address)
   if (process_info)
     return &process_info->copy;
   else
-    return NULL;
+    return nullptr;
 }
 
 mc_smx_process_info_t MC_smx_resolve_process_info(smx_process_t process_remote_address)
@@ -216,7 +219,7 @@ const char* MC_smx_process_get_name(smx_process_t p)
   if (mc_mode == MC_MODE_CLIENT)
     return p->name;
   if (!p->name)
-    return NULL;
+    return nullptr;
 
   mc_smx_process_info_t info = MC_smx_process_get_info(p);
   if (!info->name) {
index 7de26cf..3ca4e5d 100644 (file)
@@ -9,7 +9,10 @@
 
 #include <stddef.h>
 
+#include <xbt/base.h>
+#include <xbt/dynar.h>
 #include <xbt/log.h>
+
 #include <simgrid/simix.h>
 
 #include "src/smpi/private.h"
index ec1bd47..70f2080 100644 (file)
@@ -4,7 +4,13 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <stdbool.h>
+#include <cstddef>
+
+#include <memory>
+#include <utility>
+
+#include <xbt/asserts.h>
+#include <xbt/sysdep.h>
 
 #include "src/internal_config.h"
 #include "src/smpi/private.h"
@@ -21,7 +27,7 @@ extern "C" {
  *  @param addr     Pointer
  *  @param snapshot Snapshot
  *  @param Snapshot region in the snapshot this pointer belongs to
- *         (or NULL if it does not belong to any snapshot region)
+ *         (or nullptr if it does not belong to any snapshot region)
  * */
 mc_mem_region_t mc_get_snapshot_region(
   const void* addr, const simgrid::mc::Snapshot* snapshot, int process_index)
@@ -55,7 +61,7 @@ mc_mem_region_t mc_get_snapshot_region(
     return region;
   }
 
-  return NULL;
+  return nullptr;
 }
 
 /** @brief Read memory from a snapshot region broken across fragmented pages
@@ -72,18 +78,18 @@ const void* MC_region_read_fragmented(mc_mem_region_t region, void* target, cons
   void* end = (char*) addr + size - 1;
 
   // Page of the last byte of the memory area:
-  size_t page_end = mc_page_number(NULL, end);
+  size_t page_end = mc_page_number(nullptr, end);
 
   void* dest = target;
 
-  if (dest==NULL) {
+  if (dest==nullptr) {
     xbt_die("Missing destination buffer for fragmented memory access");
   }
 
   // Read each page:
-  while (mc_page_number(NULL, addr) != page_end) {
+  while (mc_page_number(nullptr, addr) != page_end) {
     void* snapshot_addr = mc_translate_address_region_chunked((uintptr_t) addr, region);
-    void* next_page = mc_page_from_number(NULL, mc_page_number(NULL, addr) + 1);
+    void* next_page = mc_page_from_number(nullptr, mc_page_number(NULL, addr) + 1);
     size_t readable = (char*) next_page - (char*) addr;
     memcpy(dest, snapshot_addr, readable);
     addr = (char*) addr + readable;
@@ -114,10 +120,10 @@ int MC_snapshot_region_memcmp(
   // Using alloca() for large allocations may trigger stack overflow:
   // use malloc if the buffer is too big.
   bool stack_alloc = size < 64;
-  const bool region1_need_buffer = region1==NULL || region1->storage_type()==simgrid::mc::StorageType::Flat;
-  const bool region2_need_buffer = region2==NULL || region2->storage_type()==simgrid::mc::StorageType::Flat;
-  void* buffer1a = region1_need_buffer ? NULL : stack_alloc ? alloca(size) : malloc(size);
-  void* buffer2a = region2_need_buffer ? NULL : stack_alloc ? alloca(size) : malloc(size);
+  const bool region1_need_buffer = region1==nullptr || region1->storage_type()==simgrid::mc::StorageType::Flat;
+  const bool region2_need_buffer = region2==nullptr || region2->storage_type()==simgrid::mc::StorageType::Flat;
+  void* buffer1a = region1_need_buffer ? nullptr : stack_alloc ? alloca(size) : malloc(size);
+  void* buffer2a = region2_need_buffer ? nullptr : stack_alloc ? alloca(size) : malloc(size);
   const void* buffer1 = MC_region_read(region1, buffer1a, addr1, size);
   const void* buffer2 = MC_region_read(region2, buffer2a, addr2, size);
   int res;
@@ -232,14 +238,16 @@ static void test_snapshot(bool sparse_checkpoint) {
   _sg_mc_sparse_checkpoint = sparse_checkpoint;
   xbt_assert(xbt_pagesize == getpagesize());
   xbt_assert(1 << xbt_pagebits == xbt_pagesize);
-  mc_model_checker = new ::simgrid::mc::ModelChecker(getpid(), -1);
-  mc_model_checker->init_process();
+
+  std::unique_ptr<simgrid::mc::Process> process(new simgrid::mc::Process(getpid(), -1));
+  process->init();
+  mc_model_checker = new ::simgrid::mc::ModelChecker(std::move(process));
 
   for(int n=1; n!=256; ++n) {
 
     // Store region page(s):
     size_t byte_size = n * xbt_pagesize;
-    void* source = mmap(NULL, byte_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+    void* source = mmap(nullptr, byte_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
     xbt_assert(source!=MAP_FAILED, "Could not allocate source memory");
 
     // Init memory and take snapshots:
@@ -252,7 +260,7 @@ static void test_snapshot(bool sparse_checkpoint) {
     simgrid::mc::RegionSnapshot region = simgrid::mc::sparse_region(
       simgrid::mc::RegionType::Unknown, source, source, byte_size, nullptr);
 
-    void* destination = mmap(NULL, byte_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+    void* destination = mmap(nullptr, byte_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
     xbt_assert(source!=MAP_FAILED, "Could not allocate destination memory");
 
     xbt_test_add("Reading whole region data for %i page(s)", n);
@@ -295,7 +303,7 @@ static void test_snapshot(bool sparse_checkpoint) {
   }
 
   delete mc_model_checker;
-  mc_model_checker = NULL;
+  mc_model_checker = nullptr;
 }
 
 #endif /* SIMGRID_TEST */
index 8960b45..45db54c 100644 (file)
@@ -7,23 +7,24 @@
 #ifndef SIMGRID_MC_SNAPSHOT_H
 #define SIMGRID_MC_SNAPSHOT_H
 
-#include <sys/types.h> // off_t
-#include <stdint.h> // size_t
+#include <cstdint>
+#include <cstddef>
 
 #include <vector>
 #include <set>
+#include <string>
 #include <memory>
 
+#include <sys/types.h> // off_t
+
 #include <simgrid_config.h>
 #include "src/xbt/mmalloc/mmprivate.h"
 #include <xbt/asserts.h>
-#include <xbt/dynar.h>
 #include <xbt/base.h>
 
 #include "src/mc/mc_forward.hpp"
 #include "src/mc/ModelChecker.hpp"
 #include "src/mc/PageStore.hpp"
-#include "src/mc/mc_mmalloc.h"
 #include "src/mc/AddressSpace.hpp"
 #include "src/mc/mc_unw.h"
 #include "src/mc/RegionSnapshot.hpp"
@@ -177,8 +178,22 @@ mc_mem_region_t mc_get_region_hinted(void* addr, mc_snapshot_t snapshot, int pro
 
 static const void* mc_snapshot_get_heap_end(mc_snapshot_t snapshot);
 
-XBT_PRIVATE mc_snapshot_t MC_take_snapshot(int num_state);
-XBT_PRIVATE void MC_restore_snapshot(mc_snapshot_t);
+}
+
+#ifdef __cplusplus
+
+namespace simgrid {
+namespace mc {
+
+XBT_PRIVATE mc_snapshot_t take_snapshot(int num_state);
+XBT_PRIVATE void restore_snapshot(mc_snapshot_t);
+
+}
+}
+
+#endif
+
+extern "C" {
 
 XBT_PRIVATE void mc_restore_page_snapshot_region(
   simgrid::mc::Process* process,
index e0e6121..7c81fd5 100644 (file)
@@ -6,8 +6,11 @@
 
 #include <assert.h>
 
+#include <xbt/log.h>
+#include <xbt/sysdep.h>
+#include <xbt/fifo.h>
+
 #include "src/simix/smx_private.h"
-#include "xbt/fifo.h"
 #include "src/mc/mc_state.h"
 #include "src/mc/mc_request.h"
 #include "src/mc/mc_private.h"
@@ -31,13 +34,13 @@ mc_state_t MC_state_new()
 
   state->max_pid = MC_smx_get_maxpid();
   state->proc_status = xbt_new0(s_mc_procstate_t, state->max_pid);
-  state->system_state = NULL;
+  state->system_state = nullptr;
   state->num = ++mc_stats->expanded_states;
   state->in_visited_states = 0;
-  state->incomplete_comm_pattern = NULL;
+  state->incomplete_comm_pattern = nullptr;
   /* Stateful model checking */
   if((_sg_mc_checkpoint > 0 && (mc_stats->expanded_states % _sg_mc_checkpoint == 0)) ||  _sg_mc_termination){
-    state->system_state = MC_take_snapshot(state->num);
+    state->system_state = simgrid::mc::take_snapshot(state->num);
     if(_sg_mc_comms_determinism || _sg_mc_send_determinism){
       MC_state_copy_incomplete_communications_pattern(state);
       MC_state_copy_index_communications_pattern(state);
@@ -99,7 +102,7 @@ void MC_state_set_executed_request(mc_state_t state, smx_simcall_t req,
   state->executed_req = *req;
   state->req_num = value;
 
-  smx_process_t process = NULL;
+  smx_process_t process = nullptr;
 
   /* The waitany and testany request are transformed into a wait or test request over the
    * corresponding communication action so it can be treated later by the dependence
@@ -190,9 +193,9 @@ static inline smx_simcall_t MC_state_get_request_for_process(
 
   if (procstate->state != MC_INTERLEAVE
       && procstate->state != MC_MORE_INTERLEAVE)
-      return NULL;
+      return nullptr;
   if (!MC_process_is_enabled(process))
-    return NULL;
+    return nullptr;
 
   switch (process->simcall.call) {
 
@@ -250,7 +253,7 @@ static inline smx_simcall_t MC_state_get_request_for_process(
         if (act.comm.src_proc && act.comm.dst_proc) {
           *value = 0;
         } else {
-          if (act.comm.src_proc == NULL && act.comm.type == SIMIX_COMM_READY
+          if (act.comm.src_proc == nullptr && act.comm.type == SIMIX_COMM_READY
               && act.comm.detached == 1)
             *value = 0;
           else
@@ -275,19 +278,19 @@ static inline smx_simcall_t MC_state_get_request_for_process(
         *value = 0;
         return &process->simcall;
   }
-  return NULL;
+  return nullptr;
 }
 
 smx_simcall_t MC_state_get_request(mc_state_t state, int *value)
 {
-  smx_process_t process = NULL;
+  smx_process_t process = nullptr;
   MC_EACH_SIMIX_PROCESS(process,
     smx_simcall_t res = MC_state_get_request_for_process(state, value, process);
     if (res)
       return res;
   );
 
-  return NULL;
+  return nullptr;
 }
 
 }
index 8ab1b11..40c9a6e 100644 (file)
@@ -8,6 +8,7 @@
 #define SIMGRID_MC_STATE_H
 
 #include <xbt/base.h>
+#include <xbt/dynar.h>
 
 #include <simgrid_config.h>
 #include "src/simix/smx_private.h"
index bb6053a..ab43771 100644 (file)
@@ -18,7 +18,6 @@
 
 #include <libunwind.h>
 
-#include "src/mc/mc_object_info.h"
 #include "src/mc/Process.hpp"
 #include "src/mc/mc_unw.h"
 #include "src/mc/Frame.hpp"
@@ -110,10 +109,10 @@ static void* get_reg(unw_context_t* context, unw_regnum_t regnum)
   case UNW_X86_64_R14: return &mcontext->gregs[REG_R14];
   case UNW_X86_64_R15: return &mcontext->gregs[REG_R15];
   case UNW_X86_64_RIP: return &mcontext->gregs[REG_RIP];
-  default: return NULL;
+  default: return nullptr;
   }
 #else
-  return NULL;
+  return nullptr;
 #endif
 }
 
index 53982a0..3470bd8 100644 (file)
@@ -28,6 +28,8 @@
 
 #include <xbt/base.h>
 
+#include <libunwind.h>
+
 #include "src/mc/Process.hpp"
 
 SG_BEGIN_DECL()
index 459db40..1d218be 100644 (file)
@@ -7,6 +7,12 @@
 #include <unistd.h>
 #include <sys/wait.h>
 
+#include <xbt/automaton.h>
+#include <xbt/log.h>
+#include <xbt/sysdep.h>
+#include <xbt/dynar.h>
+#include <xbt/fifo.h>
+
 #include "src/mc/mc_comm_pattern.h"
 #include "src/mc/mc_safety.h"
 #include "src/mc/mc_liveness.h"
@@ -64,7 +70,7 @@ static mc_visited_state_t visited_state_new()
   new_state->nb_processes = xbt_dynar_length(
     mc_model_checker->process().smx_process_infos);
 
-  new_state->system_state = MC_take_snapshot(mc_stats->expanded_states);
+  new_state->system_state = simgrid::mc::take_snapshot(mc_stats->expanded_states);
   new_state->num = mc_stats->expanded_states;
   new_state->other_num = -1;
   return new_state;
@@ -73,11 +79,11 @@ static mc_visited_state_t visited_state_new()
 mc_visited_pair_t MC_visited_pair_new(int pair_num, xbt_automaton_state_t automaton_state, xbt_dynar_t atomic_propositions, mc_state_t graph_state)
 {
   simgrid::mc::Process* process = &(mc_model_checker->process());
-  mc_visited_pair_t pair = NULL;
+  mc_visited_pair_t pair = nullptr;
   pair = xbt_new0(s_mc_visited_pair_t, 1);
   pair->graph_state = graph_state;
-  if(pair->graph_state->system_state == NULL)
-    pair->graph_state->system_state = MC_take_snapshot(pair_num);
+  if(pair->graph_state->system_state == nullptr)
+    pair->graph_state->system_state = simgrid::mc::take_snapshot(pair_num);
   pair->heap_bytes_used = mmalloc_get_bytes_used_remote(
     process->get_heap()->heaplimit,
     process->get_malloc_info());
@@ -92,7 +98,7 @@ mc_visited_pair_t MC_visited_pair_new(int pair_num, xbt_automaton_state_t automa
   pair->acceptance_removed = 0;
   pair->visited_removed = 0;
   pair->acceptance_pair = 0;
-  pair->atomic_propositions = xbt_dynar_new(sizeof(int), NULL);
+  pair->atomic_propositions = xbt_dynar_new(sizeof(int), nullptr);
   unsigned int cursor = 0;
   int value;
   xbt_dynar_foreach(atomic_propositions, cursor, value)
@@ -114,12 +120,12 @@ static int is_exploration_stack_pair(mc_visited_pair_t pair){
 
 void MC_visited_pair_delete(mc_visited_pair_t p)
 {
-  p->automaton_state = NULL;
+  p->automaton_state = nullptr;
   if( !is_exploration_stack_pair(p))
     MC_state_delete(p->graph_state, 1);
   xbt_dynar_free(&(p->atomic_propositions));
   xbt_free(p);
-  p = NULL;
+  p = nullptr;
 }
 
 /**
@@ -225,7 +231,7 @@ void replace_state(
   else
     new_state->other_num = state_test->other_num;
 
-  if (dot_output == NULL)
+  if (dot_output == nullptr)
     XBT_DEBUG("State %d already visited ! (equal to state %d)",
       new_state->num, state_test->num);
   else
@@ -236,7 +242,7 @@ void replace_state(
   /* Replace the old state with the new one (with a bigger num)
      (when the max number of visited states is reached,  the oldest
      one is removed according to its number (= with the min number) */
-  xbt_dynar_remove_at(visited_states, cursor, NULL);
+  xbt_dynar_remove_at(visited_states, cursor, nullptr);
   xbt_dynar_insert_at(visited_states, cursor, &new_state);
   XBT_DEBUG("Replace visited state %d with the new visited state %d",
     state_test->num, new_state->num);
@@ -264,7 +270,7 @@ mc_visited_state_t is_visited_state(mc_state_t graph_state)
 {
 
   if (_sg_mc_visited == 0)
-    return NULL;
+    return nullptr;
 
   /* If comm determinism verification, we cannot stop the exploration if some 
      communications are not finished (at least, data are transfered). These communications 
@@ -280,7 +286,7 @@ mc_visited_state_t is_visited_state(mc_state_t graph_state)
   if (xbt_dynar_is_empty(visited_states)) {
 
     xbt_dynar_push(visited_states, &new_state);
-    return NULL;
+    return nullptr;
 
   } else {
 
@@ -298,11 +304,11 @@ mc_visited_state_t is_visited_state(mc_state_t graph_state)
          new_state->other_num = state_test->num;
          else
          new_state->other_num = state_test->other_num;
-         if(dot_output == NULL)
+         if(dot_output == nullptr)
          XBT_DEBUG("State %d already visited ! (equal to state %d)", new_state->num, state_test->num);
          else
          XBT_DEBUG("State %d already visited ! (equal to state %d (state %d in dot_output))", new_state->num, state_test->num, new_state->other_num);
-         xbt_dynar_remove_at(visited_states, (min + res) - 1, NULL);
+         xbt_dynar_remove_at(visited_states, (min + res) - 1, nullptr);
          xbt_dynar_insert_at(visited_states, (min+res) - 1, &new_state);
          return new_state->other_num;
          } */
@@ -363,11 +369,11 @@ mc_visited_state_t is_visited_state(mc_state_t graph_state)
       }
 
       // and drop it:
-      xbt_dynar_remove_at(visited_states, index2, NULL);
+      xbt_dynar_remove_at(visited_states, index2, nullptr);
       XBT_DEBUG("Remove visited state (maximum number of stored states reached)");
     }
 
-    return NULL;
+    return nullptr;
   }
 }
 
@@ -379,9 +385,9 @@ int is_visited_pair(mc_visited_pair_t visited_pair, mc_pair_t pair) {
   if (_sg_mc_visited == 0)
     return -1;
 
-  mc_visited_pair_t new_visited_pair = NULL;
+  mc_visited_pair_t new_visited_pair = nullptr;
 
-  if (visited_pair == NULL) {
+  if (visited_pair == nullptr) {
     new_visited_pair = MC_visited_pair_new(pair->num, pair->automaton_state, pair->atomic_propositions, pair->graph_state);
   } else {
     new_visited_pair = visited_pair;
@@ -408,11 +414,11 @@ int is_visited_pair(mc_visited_pair_t visited_pair, mc_pair_t pair) {
          pair->other_num = pair_test->num;
          else
          pair->other_num = pair_test->other_num;
-         if(dot_output == NULL)
+         if(dot_output == nullptr)
          XBT_DEBUG("Pair %d already visited ! (equal to pair %d)", pair->num, pair_test->num);
          else
          XBT_DEBUG("Pair %d already visited ! (equal to pair %d (pair %d in dot_output))", pair->num, pair_test->num, pair->other_num);
-         xbt_dynar_remove_at(visited_pairs, (min + res) - 1, NULL);
+         xbt_dynar_remove_at(visited_pairs, (min + res) - 1, nullptr);
          xbt_dynar_insert_at(visited_pairs, (min+res) - 1, &pair);
          pair_test->visited_removed = 1;
          if(pair_test->stack_removed && pair_test->visited_removed){
@@ -436,7 +442,7 @@ int is_visited_pair(mc_visited_pair_t visited_pair, mc_pair_t pair) {
                 new_visited_pair->other_num = pair_test->num;
               else
                 new_visited_pair->other_num = pair_test->other_num;
-              if (dot_output == NULL)
+              if (dot_output == nullptr)
                 XBT_DEBUG("Pair %d already visited ! (equal to pair %d)", new_visited_pair->num, pair_test->num);
               else
                 XBT_DEBUG("Pair %d already visited ! (equal to pair %d (pair %d in dot_output))", new_visited_pair->num, pair_test->num, new_visited_pair->other_num);
index 6c832f8..bfdd156 100644 (file)
@@ -4,16 +4,20 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <xbt/sysdep.h>
+#include <cstddef>
 
+#include "src/mc/remote_ptr.hpp"
 #include "src/mc/AddressSpace.hpp"
 #include "src/mc/mc_xbt.hpp"
 
+#include <xbt/dynar.h>
+#include <xbt/sysdep.h>
+
 namespace simgrid {
 namespace mc {
 
 void read_element(AddressSpace const& as,
-  void* local, remote_ptr<s_xbt_dynar_t> addr, size_t i, size_t len)
+  void* local, remote_ptr<s_xbt_dynar_t> addr, std::size_t i, std::size_t len)
 {
   s_xbt_dynar_t d;
   as.read_bytes(&d, sizeof(d), addr);
index e6dbd53..cc23b1a 100644 (file)
@@ -7,15 +7,18 @@
 #ifndef SIMGRID_MC_XBT_HPP
 #define SIMGRID_MC_XBT_HPP
 
-#include <xbt/base.h>
+#include <cstddef>
 
+#include <xbt/dynar.h>
+
+#include "src/mc/remote_ptr.hpp"
 #include "src/mc/AddressSpace.hpp"
 
 namespace simgrid {
 namespace mc {
 
 XBT_PRIVATE void read_element(AddressSpace const& as,
-  void* local, remote_ptr<s_xbt_dynar_t> addr, size_t i, size_t len);
+  void* local, remote_ptr<s_xbt_dynar_t> addr, std::size_t i, std::size_t len);
 XBT_PRIVATE std::size_t read_length(
   AddressSpace const& as, remote_ptr<s_xbt_dynar_t> addr);
 
diff --git a/src/mc/remote_ptr.hpp b/src/mc/remote_ptr.hpp
new file mode 100644 (file)
index 0000000..9e0d85d
--- /dev/null
@@ -0,0 +1,120 @@
+/* Copyright (c) 2008-2015. The SimGrid Team.
+ * All rights reserved.                                                     */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
+#ifndef SIMGRID_MC_REMOTE_PTR_HPP
+#define SIMGRID_MC_REMOTE_PTR_HPP
+
+#include <cstdint>
+
+namespace simgrid {
+namespace mc {
+
+/** Pointer to a remote address-space (process, snapshot)
+ *
+ *  With this we can clearly identify the expected type of an address in the
+ *  remote process while avoiding to use native local pointers.
+ *
+ *  Some operators (+/-) assume use the size of the underlying element. This
+ *  only works if the target applications is using the same target: it won't
+ *  work for example, when inspecting a 32 bit application from a 64 bit
+ *  model-checker.
+ *
+ *  We do not actually store the target address space because we can
+ *  always detect it in context. This way `remote_ptr` is as efficient
+ *  as a `uint64_t`.
+ */
+template<class T> class remote_ptr {
+  std::uint64_t address_;
+public:
+  remote_ptr() : address_(0) {}
+  remote_ptr(std::uint64_t address) : address_(address) {}
+  remote_ptr(T* address) : address_((std::uintptr_t)address) {}
+  std::uint64_t address() const { return address_; }
+
+  operator bool() const
+  {
+    return address_;
+  }
+  bool operator!() const
+  {
+    return !address_;
+  }
+  operator remote_ptr<void>() const
+  {
+    return remote_ptr<void>(address_);
+  }
+  remote_ptr<T> operator+(std::uint64_t n) const
+  {
+    return remote_ptr<T>(address_ + n * sizeof(T));
+  }
+  remote_ptr<T> operator-(std::uint64_t n) const
+  {
+    return remote_ptr<T>(address_ - n * sizeof(T));
+  }
+  remote_ptr<T>& operator+=(std::uint64_t n)
+  {
+    address_ += n * sizeof(T);
+    return *this;
+  }
+  remote_ptr<T>& operator-=(std::uint64_t n)
+  {
+    address_ -= n * sizeof(T);
+    return *this;
+  }
+};
+
+template<class X, class Y>
+bool operator<(remote_ptr<X> const& x, remote_ptr<Y> const& y)
+{
+  return x.address() < y.address();
+}
+
+template<class X, class Y>
+bool operator>(remote_ptr<X> const& x, remote_ptr<Y> const& y)
+{
+  return x.address() > y.address();
+}
+
+template<class X, class Y>
+bool operator>=(remote_ptr<X> const& x, remote_ptr<Y> const& y)
+{
+  return x.address() >= y.address();
+}
+
+template<class X, class Y>
+bool operator<=(remote_ptr<X> const& x, remote_ptr<Y> const& y)
+{
+  return x.address() <= y.address();
+}
+
+template<class X, class Y>
+bool operator==(remote_ptr<X> const& x, remote_ptr<Y> const& y)
+{
+  return x.address() == y.address();
+}
+
+template<class X, class Y>
+bool operator!=(remote_ptr<X> const& x, remote_ptr<Y> const& y)
+{
+  return x.address() != y.address();
+}
+
+template<class T> inline
+remote_ptr<T> remote(T *p)
+{
+  return remote_ptr<T>(p);
+}
+
+template<class T=void> inline
+remote_ptr<T> remote(uint64_t p)
+{
+  return remote_ptr<T>(p);
+}
+
+}
+}
+
+#endif
index 4b307b3..8b7962b 100644 (file)
@@ -10,6 +10,8 @@
 #include <cstdio>
 #include <cstring>
 
+#include <utility>
+
 #include <signal.h>
 #include <poll.h>
 
@@ -25,6 +27,8 @@
 #endif
 
 #include <xbt/log.h>
+#include <xbt/sysdep.h>
+#include <xbt/system_error.hpp>
 
 #include "simgrid/sg_config.h"
 #include "src/xbt_modinter.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_main, mc, "Entry point for simgrid-mc");
 
-static int do_child(int socket, char** argv)
+/** Execute some code in a forked process */
+template<class F>
+static inline
+pid_t do_fork(F f)
+{
+  pid_t pid = fork();
+  if (pid < 0)
+    throw simgrid::xbt::errno_error(errno, "Could not fork model-checked process");
+  if (pid != 0)
+    return pid;
+
+  // Child-process:
+  try {
+    f();
+    std::exit(EXIT_SUCCESS);
+  }
+  catch(...) {
+    // The callback should catch exceptions:
+    abort();
+  }
+}
+
+static
+int exec_model_checked(int socket, char** argv)
 {
   XBT_DEBUG("Inside the child process PID=%i", (int) getpid());
 
@@ -47,36 +74,23 @@ static int do_child(int socket, char** argv)
   // Make sure we do not outlive our parent:
   sigset_t mask;
   sigemptyset (&mask);
-  if (sigprocmask(SIG_SETMASK, &mask, nullptr) < 0) {
-    std::perror ("sigprocmask");
-    return SIMGRID_MC_EXIT_ERROR;
-  }
-
-  if (prctl(PR_SET_PDEATHSIG, SIGHUP) != 0) {
-    std::perror("simgrid-mc");
-    return SIMGRID_MC_EXIT_ERROR;
-  }
+  if (sigprocmask(SIG_SETMASK, &mask, nullptr) < 0)
+    throw simgrid::xbt::errno_error(errno, "Could not unblock signals");
+  if (prctl(PR_SET_PDEATHSIG, SIGHUP) != 0)
+    throw simgrid::xbt::errno_error(errno, "Could not PR_SET_PDEATHSIG");
 #endif
 
   int res;
 
   // Remove CLOEXEC in order to pass the socket to the exec-ed program:
   int fdflags = fcntl(socket, F_GETFD, 0);
-  if (fdflags == -1) {
-    std::perror("simgrid-mc");
-    return SIMGRID_MC_EXIT_ERROR;
-  }
-  if (fcntl(socket, F_SETFD, fdflags & ~FD_CLOEXEC) == -1) {
-    std::perror("simgrid-mc");
-    return SIMGRID_MC_EXIT_ERROR;
-  }
-
-  XBT_DEBUG("CLOEXEC removed on socket %i", socket);
+  if (fdflags == -1 || fcntl(socket, F_SETFD, fdflags & ~FD_CLOEXEC) == -1)
+    throw simgrid::xbt::errno_error(errno, "Could not remove CLOEXEC for socket");
 
   // Set environment:
   setenv(MC_ENV_VARIABLE, "1", 1);
 
-  // Disable lazy relocation in the model-ched process.
+  // Disable lazy relocation in the model-checked process.
   // We don't want the model-checked process to modify its .got.plt during
   // snapshot.
   setenv("LC_BIND_NOW", "1", 1);
@@ -84,22 +98,76 @@ static int do_child(int socket, char** argv)
   char buffer[64];
   res = std::snprintf(buffer, sizeof(buffer), "%i", socket);
   if ((size_t) res >= sizeof(buffer) || res == -1)
-    return SIMGRID_MC_EXIT_ERROR;
+    std::abort();
   setenv(MC_ENV_SOCKET_FD, buffer, 1);
 
   execvp(argv[1], argv+1);
-  XBT_ERROR("Could not execute the child process");
-  return SIMGRID_MC_EXIT_ERROR;
+
+  XBT_ERROR("Could not run the model-checked program");
+  // This is the value used by system() and popen() in this case:
+  return 127;
+}
+
+static
+std::pair<pid_t, int> create_model_checked(char** argv)
+{
+  // Create a AF_LOCAL socketpair used for exchanging messages
+  // bewteen the model-checker process (ourselves) and the model-checked
+  // process:
+  int res;
+  int sockets[2];
+  res = socketpair(AF_LOCAL, SOCK_DGRAM | SOCK_CLOEXEC, 0, sockets);
+  if (res == -1)
+    throw simgrid::xbt::errno_error(errno, "Could not create socketpair");
+
+  pid_t pid = do_fork([&] {
+    close(sockets[1]);
+    int res = exec_model_checked(sockets[0], argv);
+    XBT_DEBUG("Error in the child process creation");
+    exit(res);
+  });
+
+  // Parent (model-checker):
+  close(sockets[0]);
+  return std::make_pair(pid, sockets[1]);
 }
 
-static int do_parent(int socket, pid_t child)
+static
+char** argvdup(int argc, char** argv)
+{
+  char** argv_copy = xbt_new(char*, argc+1);
+  std::memcpy(argv_copy, argv, sizeof(char*) * argc);
+  argv_copy[argc] = nullptr;
+  return argv_copy;
+}
+
+int main(int argc, char** argv)
 {
-  XBT_DEBUG("Inside the parent process");
-  if (mc_model_checker)
-    xbt_die("MC server already present");
   try {
+    if (argc < 2)
+      xbt_die("Missing arguments.\n");
+
+    _sg_do_model_check = 1;
+
+    // The initialisation function can touch argv.
+    // We need to keep the original parameters in order to pass them to the
+    // model-checked process so we make a copy of them:
+    int argc_copy = argc;
+    char** argv_copy = argvdup(argc, argv);
+    xbt_log_init(&argc_copy, argv_copy);
+    sg_config_init(&argc_copy, argv_copy);
+
+    int sock;
+    pid_t model_checked_pid;
+    std::tie(model_checked_pid, sock) = create_model_checked(argv);
+    XBT_DEBUG("Inside the parent process");
+    if (mc_model_checker)
+      xbt_die("MC server already present");
+
     mc_mode = MC_MODE_SERVER;
-    mc_model_checker = new simgrid::mc::ModelChecker(child, socket);
+    std::unique_ptr<simgrid::mc::Process> process(new simgrid::mc::Process(model_checked_pid, sock));
+    process->privatized(sg_cfg_get_boolean("smpi/privatize_global_variables"));
+    mc_model_checker = new simgrid::mc::ModelChecker(std::move(process));
     mc_model_checker->start();
     int res = 0;
     if (_sg_mc_comms_determinism || _sg_mc_send_determinism)
@@ -115,55 +183,8 @@ static int do_parent(int socket, pid_t child)
     XBT_ERROR("Exception: %s", e.what());
     return SIMGRID_MC_EXIT_ERROR;
   }
-}
-
-static char** argvdup(int argc, char** argv)
-{
-  char** argv_copy = xbt_new(char*, argc+1);
-  std::memcpy(argv_copy, argv, sizeof(char*) * argc);
-  argv_copy[argc] = NULL;
-  return argv_copy;
-}
-
-int main(int argc, char** argv)
-{
-  _sg_do_model_check = 1;
-
-  // We need to keep the original parameters in order to pass them to the
-  // model-checked process:
-  int argc_copy = argc;
-  char** argv_copy = argvdup(argc, argv);
-  xbt_log_init(&argc_copy, argv_copy);
-  sg_config_init(&argc_copy, argv_copy);
-
-  if (argc < 2)
-    xbt_die("Missing arguments.\n");
-
-  // Create a AF_LOCAL socketpair:
-  int res;
-
-  int sockets[2];
-  res = socketpair(AF_LOCAL, SOCK_DGRAM | SOCK_CLOEXEC, 0, sockets);
-  if (res == -1) {
-    perror("simgrid-mc");
-    return SIMGRID_MC_EXIT_ERROR;
-  }
-
-  XBT_DEBUG("Created socketpair");
-
-  pid_t pid = fork();
-  if (pid < 0) {
-    perror("simgrid-mc");
+  catch(...) {
+    XBT_ERROR("Unknown exception");
     return SIMGRID_MC_EXIT_ERROR;
-  } else if (pid == 0) {
-    close(sockets[1]);
-    int res = do_child(sockets[0], argv);
-    XBT_DEBUG("Error in the child process creation");
-    return res;
-  } else {
-    close(sockets[0]);
-    return do_parent(sockets[1], pid);
   }
-
-  return 0;
 }
index a1a43da..1fd0b41 100644 (file)
@@ -5,15 +5,12 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "msg_private.h"
-#include "xbt/str.h"
 #include "xbt/dynar.h"
 #include "xbt/replay.h"
 
 #include <errno.h>
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_action, msg,
-                                "MSG actions for trace driven simulation");
-
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_action, msg, "MSG actions for trace driven simulation");
 
 void MSG_action_init()
 {
@@ -26,8 +23,6 @@ void MSG_action_exit()
   _xbt_replay_action_exit();
 }
 
-
-
 /** \ingroup msg_trace_driven
  * \brief A trace loader
  *
@@ -44,15 +39,13 @@ msg_error_t MSG_action_trace_run(char *path)
   xbt_action_fp=NULL;
   if (path) {
     xbt_action_fp = fopen(path, "r");
-    xbt_assert(xbt_action_fp != NULL, "Cannot open %s: %s",
-               path, strerror(errno));
+    xbt_assert(xbt_action_fp != NULL, "Cannot open %s: %s", path, strerror(errno));
   }
   res = MSG_main();
 
   if (!xbt_dict_is_empty(xbt_action_queues)) {
-    XBT_WARN
-        ("Not all actions got consumed. If the simulation ended successfully (without deadlock), you may want to add new processes to your deployment file.");
-
+    XBT_WARN("Not all actions got consumed. If the simulation ended successfully (without deadlock),"
+             " you may want to add new processes to your deployment file.");
 
     xbt_dict_foreach(xbt_action_queues, cursor, name, todo) {
       XBT_WARN("Still %lu actions for %s", xbt_dynar_length(todo), name);
index 3735942..af82087 100644 (file)
@@ -12,8 +12,7 @@
  * \brief An application deployer.
  *
  * Creates the process described in \a file.
- * \param file a filename of a xml description of the application. This file 
- * follows this DTD :
+ * \param file a filename of a xml description of the application. This file follows this DTD :
  *
  *     \include simgrid.dtd
  *
  */
 void MSG_launch_application(const char *file)
 {
-
-  xbt_assert(msg_global,
-              "MSG_init has to be called before MSG_launch_application.");
-
+  xbt_assert(msg_global, "MSG_init has to be called before MSG_launch_application.");
   SIMIX_launch_application(file);
-
-  return;
 }
 
 /** \ingroup msg_simulation
@@ -45,7 +39,6 @@ void MSG_launch_application(const char *file)
 void MSG_function_register(const char *name, xbt_main_func_t code)
 {
   SIMIX_function_register(name, code);
-  return;
 }
 
 /** \ingroup msg_simulation
@@ -75,8 +68,7 @@ xbt_main_func_t MSG_get_registered_function(const char *name)
  * \brief register functions bypassing the parser
  */
 
-void MSG_set_function(const char *host_id, const char *function_name,
-                      xbt_dynar_t arguments)
+void MSG_set_function(const char *host_id, const char *function_name, xbt_dynar_t arguments)
 {
   SIMIX_process_set_function(host_id, function_name, arguments, -1, -1);
 }
index b9c604a..d070253 100644 (file)
 /** \ingroup msg_simulation
  * \brief A platform constructor.
  *
- * Creates a new platform, including hosts, links and the
- * routing_table. 
- * \param file a filename of a xml description of a platform. This file 
- * follows this DTD :
+ * Creates a new platform, including hosts, links and the routing_table.
+ * \param file a filename of a xml description of a platform. This file follows this DTD :
  *
  *     \include simgrid.dtd
  *
@@ -47,7 +45,6 @@ void MSG_post_create_environment(void) {
     if(data[SIMIX_STORAGE_LEVEL])
       __MSG_storage_create(xbt_dict_cursor_get_elm(cursor));
   }
-
 }
 
 msg_as_t MSG_environment_get_routing_root() {
index 4d5d20d..ba38cae 100644 (file)
@@ -7,20 +7,14 @@
 #include "simgrid/msg.h"
 #include "instr/instr_interface.h"
 #include "msg_private.h"
-#include "msg_mailbox.h"
 #include "mc/mc.h"
 #include "xbt/sysdep.h"
 #include "xbt/log.h"
-#include "xbt/virtu.h"
-#include "xbt/ex.h"             /* ex_backtrace_display */
-#include "xbt/replay.h"
 #include "simgrid/sg_config.h" /* Configuration mechanism of SimGrid */
-#include "src/surf/callbacks.h"
 #include "src/surf/xml/platf_private.hpp" // FIXME: KILLME by removing MSG_post_create_environment()
 
 XBT_LOG_NEW_CATEGORY(msg, "All MSG categories");
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_kernel, msg,
-                                "Logging specific to MSG (kernel)");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_kernel, msg, "Logging specific to MSG (kernel)");
 
 MSG_Global_t msg_global = NULL;
 static void MSG_exit(void);
@@ -112,7 +106,6 @@ void MSG_config(const char *key, const char *value){
   xbt_cfg_set_as_string(_sg_cfg_set, key, value);
 }
 
-
 /** \ingroup msg_simulation
  * \brief Kill all running process
 
@@ -141,7 +134,6 @@ static void MSG_exit(void) {
   msg_global = NULL;
 }
 
-
 /** \ingroup msg_simulation
  * \brief A clock (in second).
  */
index e89d7d1..426f25a 100644 (file)
@@ -5,7 +5,6 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "msg_private.h"
-#include "msg_mailbox.h"
 #include "mc/mc.h"
 #include "xbt/log.h"
 #include "xbt/sysdep.h"
@@ -16,11 +15,9 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_gos, msg,
 /** \ingroup msg_task_usage
  * \brief Executes a task and waits for its termination.
  *
- * This function is used for describing the behavior of a process. It
- * takes only one parameter.
+ * This function is used for describing the behavior of a process. It takes only one parameter.
  * \param task a #msg_task_t to execute on the location on which the process is running.
- * \return #MSG_OK if the task was successfully completed, #MSG_TASK_CANCELED
- * or #MSG_HOST_FAILURE otherwise
+ * \return #MSG_OK if the task was successfully completed, #MSG_TASK_CANCELED or #MSG_HOST_FAILURE otherwise
  */
 msg_error_t MSG_task_execute(msg_task_t task)
 {
@@ -55,8 +52,7 @@ msg_error_t MSG_parallel_task_execute(msg_task_t task)
   TRACE_msg_task_execute_start(task);
 
   xbt_assert((!simdata->compute) && (task->simdata->isused == 0),
-             "This task is executed somewhere else. Go fix your code! %d",
-             task->simdata->isused!=NULL);
+             "This task is executed somewhere else. Go fix your code! %d", task->simdata->isused!=NULL);
 
   XBT_DEBUG("Computing on %s", MSG_process_get_name(MSG_process_self()));
 
@@ -65,7 +61,6 @@ msg_error_t MSG_parallel_task_execute(msg_task_t task)
     return MSG_OK;
   }
 
-
   TRY {
     if (msg_global->debug_multiple_use)
       MSG_BT(simdata->isused, "Using Backtrace");
@@ -73,24 +68,19 @@ msg_error_t MSG_parallel_task_execute(msg_task_t task)
       simdata->isused = (void*)1;
 
     if (simdata->host_nb > 0) {
-      simdata->compute = simcall_execution_parallel_start(task->name,
-                                                       simdata->host_nb,
-                                                       simdata->host_list,
-                                                       simdata->flops_parallel_amount,
-                                                       simdata->bytes_parallel_amount,
+      simdata->compute = simcall_execution_parallel_start(task->name, simdata->host_nb,simdata->host_list,
+                                                       simdata->flops_parallel_amount, simdata->bytes_parallel_amount,
                                                        1.0, -1.0);
       XBT_DEBUG("Parallel execution action created: %p", simdata->compute);
     } else {
-      unsigned long affinity_mask = (unsigned long)(uintptr_t) xbt_dict_get_or_null_ext(simdata->affinity_mask_db, (char *) p_simdata->m_host, sizeof(msg_host_t));
-      XBT_DEBUG("execute %s@%s with affinity(0x%04lx)", MSG_task_get_name(task), MSG_host_get_name(p_simdata->m_host), affinity_mask);
-
-      simdata->compute = simcall_execution_start(task->name,
-                                              simdata->flops_amount,
-                                              simdata->priority,
-                                              simdata->bound,
-                                              affinity_mask
-                                              );
-
+      unsigned long affinity_mask =
+         (unsigned long)(uintptr_t) xbt_dict_get_or_null_ext(simdata->affinity_mask_db, (char *) p_simdata->m_host,
+                                                             sizeof(msg_host_t));
+      XBT_DEBUG("execute %s@%s with affinity(0x%04lx)",
+                MSG_task_get_name(task), MSG_host_get_name(p_simdata->m_host), affinity_mask);
+
+      simdata->compute = simcall_execution_start(task->name, simdata->flops_amount, simdata->priority,
+                                                 simdata->bound, affinity_mask);
     }
     simcall_set_category(simdata->compute, task->category);
     p_simdata->waiting_action = simdata->compute;
@@ -102,8 +92,7 @@ msg_error_t MSG_parallel_task_execute(msg_task_t task)
       xbt_ex_free(*(xbt_ex_t*)simdata->isused);
     simdata->isused = 0;
 
-    XBT_DEBUG("Execution task '%s' finished in state %d",
-              task->name, (int)comp_state);
+    XBT_DEBUG("Execution task '%s' finished in state %d", task->name, (int)comp_state);
   }
   CATCH(e) {
     switch (e.category) {
@@ -118,8 +107,7 @@ msg_error_t MSG_parallel_task_execute(msg_task_t task)
     }
     xbt_ex_free(e);
   }
-  /* action ended, set comm and compute = NULL, the actions is already destroyed
-   * in the main function */
+  /* action ended, set comm and compute = NULL, the actions is already destroyed in the main function */
   simdata->flops_amount = 0.0;
   simdata->comm = NULL;
   simdata->compute = NULL;
@@ -128,7 +116,6 @@ msg_error_t MSG_parallel_task_execute(msg_task_t task)
   MSG_RETURN(status);
 }
 
-
 /** \ingroup msg_task_usage
  * \brief Sleep for the specified number of seconds
  *
@@ -172,8 +159,7 @@ msg_error_t MSG_process_sleep(double nb_sec)
 /** \ingroup msg_task_usage
  * \brief Receives a task from a mailbox.
  *
- * This is a blocking function, the execution flow will be blocked
- * until the task is received. See #MSG_task_irecv
+ * This is a blocking function, the execution flow will be blocked until the task is received. See #MSG_task_irecv
  * for receiving tasks asynchronously.
  *
  * \param task a memory location for storing a #msg_task_t.
@@ -193,14 +179,13 @@ msg_error_t MSG_task_receive(msg_task_t * task, const char *alias)
  *
  * \param task a memory location for storing a #msg_task_t.
  * \param alias name of the mailbox to receive the task from
- *  \param rate limit the reception to rate bandwidth
+ * \param rate limit the reception to rate bandwidth
  *
  * \return Returns
  * #MSG_OK if the task was successfully received,
  * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE otherwise.
  */
-msg_error_t MSG_task_receive_bounded(msg_task_t * task, const char *alias,
-                                     double rate)
+msg_error_t MSG_task_receive_bounded(msg_task_t * task, const char *alias, double rate)
 {
   return MSG_task_receive_with_timeout_bounded(task, alias, -1, rate);
 }
@@ -208,9 +193,8 @@ msg_error_t MSG_task_receive_bounded(msg_task_t * task, const char *alias,
 /** \ingroup msg_task_usage
  * \brief Receives a task from a mailbox with a given timeout.
  *
- * This is a blocking function with a timeout, the execution flow will be blocked
- * until the task is received or the timeout is achieved. See #MSG_task_irecv
- * for receiving tasks asynchronously.  You can provide a -1 timeout
+ * This is a blocking function with a timeout, the execution flow will be blocked until the task is received or the
+ * timeout is achieved. See #MSG_task_irecv for receiving tasks asynchronously.  You can provide a -1 timeout
  * to obtain an infinite timeout.
  *
  * \param task a memory location for storing a #msg_task_t.
@@ -221,9 +205,7 @@ msg_error_t MSG_task_receive_bounded(msg_task_t * task, const char *alias,
  * #MSG_OK if the task was successfully received,
  * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE, or #MSG_TIMEOUT otherwise.
  */
-msg_error_t
-MSG_task_receive_with_timeout(msg_task_t * task, const char *alias,
-                              double timeout)
+msg_error_t MSG_task_receive_with_timeout(msg_task_t * task, const char *alias, double timeout)
 {
   return MSG_task_receive_ext(task, alias, timeout, NULL);
 }
@@ -240,9 +222,7 @@ MSG_task_receive_with_timeout(msg_task_t * task, const char *alias,
  * #MSG_OK if the task was successfully received,
  * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE, or #MSG_TIMEOUT otherwise.
  */
-msg_error_t
-MSG_task_receive_with_timeout_bounded(msg_task_t * task, const char *alias,
-                                      double timeout,double rate)
+msg_error_t MSG_task_receive_with_timeout_bounded(msg_task_t * task, const char *alias, double timeout,double rate)
 {
   return MSG_task_receive_ext_bounded(task, alias, timeout, NULL, rate);
 }
@@ -250,9 +230,8 @@ MSG_task_receive_with_timeout_bounded(msg_task_t * task, const char *alias,
 /** \ingroup msg_task_usage
  * \brief Receives a task from a mailbox from a specific host with a given timeout.
  *
- * This is a blocking function with a timeout, the execution flow will be blocked
- * until the task is received or the timeout is achieved. See #MSG_task_irecv
- * for receiving tasks asynchronously. You can provide a -1 timeout
+ * This is a blocking function with a timeout, the execution flow will be blocked until the task is received or the
+ * timeout is achieved. See #MSG_task_irecv for receiving tasks asynchronously. You can provide a -1 timeout
  * to obtain an infinite timeout.
  *
  * \param task a memory location for storing a #msg_task_t.
@@ -264,18 +243,13 @@ MSG_task_receive_with_timeout_bounded(msg_task_t * task, const char *alias,
  * #MSG_OK if the task was successfully received,
 * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE, or #MSG_TIMEOUT otherwise.
  */
-msg_error_t
-MSG_task_receive_ext(msg_task_t * task, const char *alias, double timeout,
-                     msg_host_t host)
+msg_error_t MSG_task_receive_ext(msg_task_t * task, const char *alias, double timeout, msg_host_t host)
 {
   xbt_ex_t e;
   msg_error_t ret = MSG_OK;
-  XBT_DEBUG
-      ("MSG_task_receive_ext: Trying to receive a message on mailbox '%s'",
-       alias);
+  XBT_DEBUG("MSG_task_receive_ext: Trying to receive a message on mailbox '%s'", alias);
   TRY {
-    ret = MSG_mailbox_get_task_ext(MSG_mailbox_get_by_alias(alias), task,
-                                   host, timeout);
+    ret = MSG_mailbox_get_task_ext(MSG_mailbox_get_by_alias(alias), task, host, timeout);
   }
   CATCH(e) {
     switch (e.category) {
@@ -291,8 +265,7 @@ MSG_task_receive_ext(msg_task_t * task, const char *alias, double timeout,
 }
 
 /** \ingroup msg_task_usage
- * \brief Receives a task from a mailbox from a specific host with a given timeout
- *  and at a given rate.
+ * \brief Receives a task from a mailbox from a specific host with a given timeout  and at a given rate.
  *
  * \param task a memory location for storing a #msg_task_t.
  * \param alias name of the mailbox to receive the task from
@@ -304,25 +277,17 @@ MSG_task_receive_ext(msg_task_t * task, const char *alias, double timeout,
  * #MSG_OK if the task was successfully received,
 * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE, or #MSG_TIMEOUT otherwise.
  */
-msg_error_t
-MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, double timeout,
-                             msg_host_t host, double rate)
+msg_error_t MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, double timeout, msg_host_t host,
+                                         double rate)
 {
-  XBT_DEBUG
-      ("MSG_task_receive_ext: Trying to receive a message on mailbox '%s'",
-       alias);
-  return MSG_mailbox_get_task_ext_bounded(MSG_mailbox_get_by_alias(alias), task,
-                                          host, timeout, rate);
+  XBT_DEBUG("MSG_task_receive_ext: Trying to receive a message on mailbox '%s'", alias);
+  return MSG_mailbox_get_task_ext_bounded(MSG_mailbox_get_by_alias(alias), task, host, timeout, rate);
 }
 
-/* Internal function used to factorize code between
- * MSG_task_isend_with_matching() and MSG_task_dsend().
- */
-static XBT_INLINE
-msg_comm_t MSG_task_isend_internal(msg_task_t task, const char *alias,
-                                   int (*match_fun)(void*,void*, smx_synchro_t),
-                                   void *match_data, void_f_pvoid_t cleanup,
-                                   int detached)
+/* Internal function used to factorize code between MSG_task_isend_with_matching() and MSG_task_dsend(). */
+static XBT_INLINE msg_comm_t MSG_task_isend_internal(msg_task_t task, const char *alias,
+                                                     int (*match_fun)(void*,void*, smx_synchro_t),
+                                                     void *match_data, void_f_pvoid_t cleanup, int detached)
 {
   simdata_task_t t_simdata = NULL;
   msg_process_t process = MSG_process_self();
@@ -342,7 +307,8 @@ msg_comm_t MSG_task_isend_internal(msg_task_t task, const char *alias,
       xbt_backtrace_display_current();
     } else {
       xbt_assert(t_simdata->isused == 0,
-                 "This task is still being used somewhere else. You cannot send it now. Go fix your code! (use --cfg=msg/debug_multiple_use:on to get the backtrace of the other process)");
+                 "This task is still being used somewhere else. You cannot send it now. Go fix your code!"
+                 "(use --cfg=msg/debug_multiple_use:on to get the backtrace of the other process)");
     }
   }
 
@@ -354,9 +320,8 @@ msg_comm_t MSG_task_isend_internal(msg_task_t task, const char *alias,
   msg_global->sent_msg++;
 
   /* Send it by calling SIMIX network layer */
-  smx_synchro_t act = simcall_comm_isend(SIMIX_process_self(), mailbox, t_simdata->bytes_amount,
-                                        t_simdata->rate, task, sizeof(void *),
-                                        match_fun, cleanup, NULL, match_data,detached);
+  smx_synchro_t act = simcall_comm_isend(SIMIX_process_self(), mailbox, t_simdata->bytes_amount, t_simdata->rate,
+                                         task, sizeof(void *), match_fun, cleanup, NULL, match_data,detached);
   t_simdata->comm = act; /* FIXME: is the field t_simdata->comm still useful? */
 
   msg_comm_t comm;
@@ -378,12 +343,10 @@ msg_comm_t MSG_task_isend_internal(msg_task_t task, const char *alias,
   return comm;
 }
 
-
 /** \ingroup msg_task_usage
  * \brief Sends a task on a mailbox.
  *
- * This is a non blocking function: use MSG_comm_wait() or MSG_comm_test()
- * to end the communication.
+ * This is a non blocking function: use MSG_comm_wait() or MSG_comm_test() to end the communication.
  *
  * \param task a #msg_task_t to send on another location.
  * \param alias name of the mailbox to sent the task to
@@ -397,28 +360,24 @@ msg_comm_t MSG_task_isend(msg_task_t task, const char *alias)
 /** \ingroup msg_task_usage
  * \brief Sends a task on a mailbox with a maximum rate
  *
- * This is a non blocking function: use MSG_comm_wait() or MSG_comm_test()
- * to end the communication. The maxrate parameter allows the application
- * to limit the bandwidth utilization of network links when sending the task.
+ * This is a non blocking function: use MSG_comm_wait() or MSG_comm_test() to end the communication. The maxrate
+ * parameter allows the application to limit the bandwidth utilization of network links when sending the task.
  *
  * \param task a #msg_task_t to send on another location.
  * \param alias name of the mailbox to sent the task to
  * \param maxrate the maximum communication rate for sending this task .
  * \return the msg_comm_t communication created
  */
-msg_comm_t MSG_task_isend_bounded(msg_task_t task, const char *alias,
-                                  double maxrate)
+msg_comm_t MSG_task_isend_bounded(msg_task_t task, const char *alias, double maxrate)
 {
   task->simdata->rate = maxrate;
   return MSG_task_isend_internal(task, alias, NULL, NULL, NULL, 0);
 }
 
-
 /** \ingroup msg_task_usage
  * \brief Sends a task on a mailbox, with support for matching requests
  *
- * This is a non blocking function: use MSG_comm_wait() or MSG_comm_test()
- * to end the communication.
+ * This is a non blocking function: use MSG_comm_wait() or MSG_comm_test() to end the communication.
  *
  * \param task a #msg_task_t to send on another location.
  * \param alias name of the mailbox to sent the task to
@@ -430,9 +389,7 @@ msg_comm_t MSG_task_isend_bounded(msg_task_t task, const char *alias,
  * \return the msg_comm_t communication created
  */
 msg_comm_t MSG_task_isend_with_matching(msg_task_t task, const char *alias,
-                                        int (*match_fun)(void*, void*,
-                                                         smx_synchro_t),
-                                        void *match_data)
+                                        int (*match_fun)(void*, void*, smx_synchro_t), void *match_data)
 {
   return MSG_task_isend_internal(task, alias, match_fun, match_data, NULL, 0);
 }
@@ -441,17 +398,15 @@ msg_comm_t MSG_task_isend_with_matching(msg_task_t task, const char *alias,
  * \brief Sends a task on a mailbox.
  *
  * This is a non blocking detached send function.
- * Think of it as a best effort send. Keep in mind that the third parameter
- * is only called if the communication fails. If the communication does work,
- * it is responsibility of the receiver code to free anything related to
- * the task, as usual. More details on this can be obtained on
+ * Think of it as a best effort send. Keep in mind that the third parameter is only called if the communication fails.
+ * If the communication does work, it is responsibility of the receiver code to free anything related to the task, as
+ * usual. More details on this can be obtained on
  * <a href="http://lists.gforge.inria.fr/pipermail/simgrid-user/2011-November/002649.html">this thread</a>
  * in the SimGrid-user mailing list archive.
  *
  * \param task a #msg_task_t to send on another location.
  * \param alias name of the mailbox to sent the task to
- * \param cleanup a function to destroy the task if the
- * communication fails, e.g. MSG_task_destroy
+ * \param cleanup a function to destroy the task if the communication fails, e.g. MSG_task_destroy
  * (if NULL, no function will be called)
  */
 void MSG_task_dsend(msg_task_t task, const char *alias, void_f_pvoid_t cleanup)
@@ -463,10 +418,9 @@ void MSG_task_dsend(msg_task_t task, const char *alias, void_f_pvoid_t cleanup)
  * \brief Sends a task on a mailbox with a maximal rate.
  *
  * This is a non blocking detached send function.
- * Think of it as a best effort send. Keep in mind that the third parameter
- * is only called if the communication fails. If the communication does work,
- * it is responsibility of the receiver code to free anything related to
- * the task, as usual. More details on this can be obtained on
+ * Think of it as a best effort send. Keep in mind that the third parameter is only called if the communication fails.
+ * If the communication does work, it is responsibility of the receiver code to free anything related to the task, as
+ * usual. More details on this can be obtained on
  * <a href="http://lists.gforge.inria.fr/pipermail/simgrid-user/2011-November/002649.html">this thread</a>
  * in the SimGrid-user mailing list archive.
  *
@@ -478,8 +432,7 @@ void MSG_task_dsend(msg_task_t task, const char *alias, void_f_pvoid_t cleanup)
  * \param maxrate the maximum communication rate for sending this task
  *
  */
-void MSG_task_dsend_bounded(msg_task_t task, const char *alias,
-                            void_f_pvoid_t cleanup, double maxrate)
+void MSG_task_dsend_bounded(msg_task_t task, const char *alias, void_f_pvoid_t cleanup, double maxrate)
 {
   task->simdata->rate = maxrate;
   MSG_task_dsend(task, alias, cleanup);
@@ -488,8 +441,7 @@ void MSG_task_dsend_bounded(msg_task_t task, const char *alias,
 /** \ingroup msg_task_usage
  * \brief Starts listening for receiving a task from an asynchronous communication.
  *
- * This is a non blocking function: use MSG_comm_wait() or MSG_comm_test()
- * to end the communication.
+ * This is a non blocking function: use MSG_comm_wait() or MSG_comm_test() to end the communication.
  *
  * \param task a memory location for storing a #msg_task_t. has to be valid until the end of the communication.
  * \param name of the mailbox to receive the task on
@@ -501,27 +453,23 @@ msg_comm_t MSG_task_irecv(msg_task_t *task, const char *name)
 }
 
 /** \ingroup msg_task_usage
- * \brief Starts listening for receiving a task from an asynchronous communication
- * at a given rate.
+ * \brief Starts listening for receiving a task from an asynchronous communication at a given rate.
  *
  * \param task a memory location for storing a #msg_task_t. has to be valid until the end of the communication.
  * \param name of the mailbox to receive the task on
  * \param rate limit the bandwidth to the given rate
  * \return the msg_comm_t communication created
  */
-msg_comm_t MSG_task_irecv_bounded(msg_task_t *task, const char *name,
-                                  double rate)
+msg_comm_t MSG_task_irecv_bounded(msg_task_t *task, const char *name, double rate)
 {
   smx_rdv_t rdv = MSG_mailbox_get_by_alias(name);
 
   /* FIXME: these functions are not traceable */
-
   /* Sanity check */
   xbt_assert(task, "Null pointer for the task storage");
 
   if (*task)
-    XBT_CRITICAL
-        ("MSG_task_irecv() was asked to write in a non empty task struct.");
+    XBT_CRITICAL("MSG_task_irecv() was asked to write in a non empty task struct.");
 
   /* Try to receive it by calling SIMIX network layer */
   msg_comm_t comm = xbt_new0(s_msg_comm_t, 1);
@@ -562,12 +510,10 @@ int MSG_comm_test(msg_comm_t comm)
         comm->status = MSG_TRANSFER_FAILURE;
         finished = 1;
         break;
-
       case timeout_error:
         comm->status = MSG_TIMEOUT;
         finished = 1;
         break;
-
       default:
         RETHROW;
     }
@@ -607,12 +553,10 @@ int MSG_comm_testany(xbt_dynar_t comms)
         finished_index = e.value;
         status = MSG_TRANSFER_FAILURE;
         break;
-
       case timeout_error:
         finished_index = e.value;
         status = MSG_TIMEOUT;
         break;
-
       default:
         RETHROW;
     }
@@ -650,8 +594,8 @@ void MSG_comm_destroy(msg_comm_t comm)
  *
  * It takes two parameters.
  * \param comm the communication to wait.
- * \param timeout Wait until the communication terminates or the timeout
- * occurs. You can provide a -1 timeout to obtain an infinite timeout.
+ * \param timeout Wait until the communication terminates or the timeout occurs.
+ *                You can provide a -1 timeout to obtain an infinite timeout.
  * \return msg_error_t
  */
 msg_error_t MSG_comm_wait(msg_comm_t comm, double timeout)
@@ -730,12 +674,10 @@ int MSG_comm_waitany(xbt_dynar_t comms)
         finished_index = e.value;
         status = MSG_TRANSFER_FAILURE;
         break;
-
       case timeout_error:
         finished_index = e.value;
         status = MSG_TIMEOUT;
         break;
-
       default:
         RETHROW;
     }
@@ -791,23 +733,21 @@ msg_task_t MSG_comm_get_task(msg_comm_t comm)
  * \param buff_size size of the buffer
  */
 void MSG_comm_copy_data_from_SIMIX(smx_synchro_t comm, void* buff, size_t buff_size) {
-
   // copy the task
   SIMIX_comm_copy_pointer_callback(comm, buff, buff_size);
 
   // notify the user callback if any
   if (msg_global->task_copy_callback) {
     msg_task_t task = (msg_task_t) buff;
-    msg_global->task_copy_callback(task,
-        simcall_comm_get_src_proc(comm), simcall_comm_get_dst_proc(comm));
+    msg_global->task_copy_callback(task, simcall_comm_get_src_proc(comm), simcall_comm_get_dst_proc(comm));
   }
 }
 
 /** \ingroup msg_task_usage
  * \brief Sends a task to a mailbox
  *
- * This is a blocking function, the execution flow will be blocked
- * until the task is sent (and received in the other side if #MSG_task_receive is used).
+ * This is a blocking function, the execution flow will be blocked until the task is sent (and received on the other
+ * side if #MSG_task_receive is used).
  * See #MSG_task_isend for sending tasks asynchronously.
  *
  * \param task the task to be sent
@@ -825,9 +765,8 @@ msg_error_t MSG_task_send(msg_task_t task, const char *alias)
 /** \ingroup msg_task_usage
  * \brief Sends a task to a mailbox with a maximum rate
  *
- * This is a blocking function, the execution flow will be blocked
- * until the task is sent. The maxrate parameter allows the application
- * to limit the bandwidth utilization of network links when sending the task.
+ * This is a blocking function, the execution flow will be blocked until the task is sent. The maxrate parameter allows
+ * the application to limit the bandwidth utilization of network links when sending the task.
  *
  * \param task the task to be sent
  * \param alias the mailbox name to where the task is sent
@@ -836,8 +775,7 @@ msg_error_t MSG_task_send(msg_task_t task, const char *alias)
  * \return Returns #MSG_OK if the task was successfully sent,
  * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE otherwise.
  */
-msg_error_t
-MSG_task_send_bounded(msg_task_t task, const char *alias, double maxrate)
+msg_error_t MSG_task_send_bounded(msg_task_t task, const char *alias, double maxrate)
 {
   task->simdata->rate = maxrate;
   return MSG_task_send(task, alias);
@@ -846,8 +784,7 @@ MSG_task_send_bounded(msg_task_t task, const char *alias, double maxrate)
 /** \ingroup msg_task_usage
  * \brief Sends a task to a mailbox with a timeout
  *
- * This is a blocking function, the execution flow will be blocked
- * until the task is sent or the timeout is achieved.
+ * This is a blocking function, the execution flow will be blocked until the task is sent or the timeout is achieved.
  *
  * \param task the task to be sent
  * \param alias the mailbox name to where the task is sent
@@ -856,19 +793,15 @@ MSG_task_send_bounded(msg_task_t task, const char *alias, double maxrate)
  * \return Returns #MSG_OK if the task was successfully sent,
  * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE, or #MSG_TIMEOUT otherwise.
  */
-msg_error_t
-MSG_task_send_with_timeout(msg_task_t task, const char *alias,
-                           double timeout)
+msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, double timeout)
 {
-  return MSG_mailbox_put_with_timeout(MSG_mailbox_get_by_alias(alias),
-                                      task, timeout);
+  return MSG_mailbox_put_with_timeout(MSG_mailbox_get_by_alias(alias), task, timeout);
 }
 
 /** \ingroup msg_task_usage
  * \brief Sends a task to a mailbox with a timeout and with a maximum rate
  *
- * This is a blocking function, the execution flow will be blocked
- * until the task is sent or the timeout is achieved.
+ * This is a blocking function, the execution flow will be blocked until the task is sent or the timeout is achieved.
  *
  * \param task the task to be sent
  * \param alias the mailbox name to where the task is sent
@@ -878,13 +811,10 @@ MSG_task_send_with_timeout(msg_task_t task, const char *alias,
  * \return Returns #MSG_OK if the task was successfully sent,
  * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE, or #MSG_TIMEOUT otherwise.
  */
-msg_error_t
-MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alias,
-                           double timeout, double maxrate)
+msg_error_t MSG_task_send_with_timeout_bounded(msg_task_t task, const char *alias, double timeout, double maxrate)
 {
   task->simdata->rate = maxrate;
-  return MSG_mailbox_put_with_timeout(MSG_mailbox_get_by_alias(alias),
-                                      task, timeout);
+  return MSG_mailbox_put_with_timeout(MSG_mailbox_get_by_alias(alias), task, timeout);
 }
 
 /** \ingroup msg_task_usage
@@ -905,20 +835,16 @@ int MSG_task_listen(const char *alias)
  * \param alias the name of the mailbox to be considered
  * \param host the host to check for communication
  *
- * \return Returns the number of pending communication actions of the host in the
- * given mailbox, 0 if there is no pending communication actions.
- *
+ * \return Returns the number of pending communication actions of the host in the given mailbox, 0 if there is no
+ *         pending communication actions.
  */
 int MSG_task_listen_from_host(const char *alias, msg_host_t host)
 {
-  return
-      MSG_mailbox_get_count_host_waiting_tasks(MSG_mailbox_get_by_alias
-                                               (alias), host);
+  return MSG_mailbox_get_count_host_waiting_tasks(MSG_mailbox_get_by_alias(alias), host);
 }
 
 /** \ingroup msg_task_usage
- * \brief Look if there is a communication on a mailbox and return the
- * PID of the sender process.
+ * \brief Look if there is a communication on a mailbox and return the PID of the sender process.
  *
  * \param alias the name of the mailbox to be considered
  *
@@ -929,8 +855,7 @@ int MSG_task_listen_from(const char *alias)
 {
   msg_task_t task;
 
-  if (NULL ==
-      (task = MSG_mailbox_get_head(MSG_mailbox_get_by_alias(alias))))
+  if (NULL == (task = MSG_mailbox_get_head(MSG_mailbox_get_by_alias(alias))))
     return -1;
 
   return MSG_process_get_PID(task->simdata->sender);
@@ -939,16 +864,12 @@ int MSG_task_listen_from(const char *alias)
 /** \ingroup msg_task_usage
  * \brief Sets the tracing category of a task.
  *
- * This function should be called after the creation of
- * a MSG task, to define the category of that task. The
- * first parameter task must contain a task that was
- * created with the function #MSG_task_create. The second
- * parameter category must contain a category that was
- * previously declared with the function #TRACE_category
+ * This function should be called after the creation of a MSG task, to define the category of that task. The
+ * first parameter task must contain a task that was  created with the function #MSG_task_create. The second
+ * parameter category must contain a category that was previously declared with the function #TRACE_category
  * (or with #TRACE_category_with_color).
  *
- * See \ref tracing for details on how to trace
- * the (categorized) resource utilization.
+ * See \ref tracing for details on how to trace the (categorized) resource utilization.
  *
  * \param task the task that is going to be categorized
  * \param category the name of the category to be associated to the task
@@ -984,8 +905,7 @@ const char *MSG_task_get_category (msg_task_t task)
  */
 const char *MSG_as_router_get_property_value(const char* asr, const char *name)
 {
-  return (char*) xbt_dict_get_or_null(
-    MSG_as_router_get_properties(asr), name);
+  return (char*) xbt_dict_get_or_null(MSG_as_router_get_properties(asr), name);
 }
 
 /**
index 15a78c1..feb4f97 100644 (file)
@@ -5,7 +5,6 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "src/msg/msg_private.h"
-#include "src/msg/msg_mailbox.h"
 #include "xbt/sysdep.h"
 #include "xbt/log.h"
 #include "simgrid/simix.h"
@@ -17,12 +16,9 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(msg);
  * \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Hosts" --> \endhtmlonly
  * (#msg_host_t) and the functions for managing it.
  *  
- *  A <em>location</em> (or <em>host</em>) is any possible place where
- *  a process may run. Thus it may be represented as a
- *  <em>physical resource with computing capabilities</em>, some
- *  <em>mailboxes</em> to enable running process to communicate with
- *  remote ones, and some <em>private data</em> that can be only
- *  accessed by local process.
+ *  A <em>location</em> (or <em>host</em>) is any possible place where  a process may run. Thus it may be represented
+ *  as a <em>physical resource with computing capabilities</em>, some <em>mailboxes</em> to enable running process to
+ *  communicate with remote ones, and some <em>private data</em> that can be only accessed by local process.
  *  \see msg_host_t
  */
 
@@ -43,7 +39,7 @@ msg_host_t __MSG_host_create(sg_host_t host) // FIXME: don't return our paramete
     xbt_dynar_push_as(priv->file_descriptor_table, int, i);
 
   sg_host_msg_set(host,priv);
-  
+
   return host;
 }
 
@@ -63,8 +59,7 @@ msg_host_t MSG_host_by_name(const char *name)
  *
  * \brief Set the user data of a #msg_host_t.
  *
- * This functions checks whether some data has already been associated to \a host
-   or not and attach \a data to \a host if it is possible.
+ * This functions attach \a data to \a host if it is possible.
  */
 msg_error_t MSG_host_set_data(msg_host_t host, void *data) {
   sg_host_user_set(host, data);
@@ -75,8 +70,7 @@ msg_error_t MSG_host_set_data(msg_host_t host, void *data) {
  *
  * \brief Return the user data of a #msg_host_t.
  *
- * This functions checks whether \a host is a valid pointer or not and return
-   the user data associated to \a host if it is possible.
+ * This functions returns the user data associated to \a host if it is possible.
  */
 void *MSG_host_get_data(msg_host_t host) {
   return sg_host_user(host);
@@ -91,27 +85,28 @@ msg_host_t MSG_host_self(void)
   return MSG_process_get_host(NULL);
 }
 
-
 /** \ingroup m_host_management
  *
  * \brief Start the host if it is off
  *
- * See also #MSG_host_is_on() and #MSG_host_is_off() to test the current state of the host and @ref SURF_plugin_energy for more info on DVFS.
+ * See also #MSG_host_is_on() and #MSG_host_is_off() to test the current state of the host and @ref SURF_plugin_energy
+ * for more info on DVFS.
  */
 void MSG_host_on(msg_host_t host)
 {
-  host->turn_on();
+  host->turnOn();
 }
 
 /** \ingroup m_host_management
  *
  * \brief Stop the host if it is on
  *
- * See also #MSG_host_is_on() and #MSG_host_is_off() to test the current state of the host and @ref SURF_plugin_energy for more info on DVFS.
+ * See also #MSG_host_is_on() and #MSG_host_is_off() to test the current state of the host and @ref SURF_plugin_energy
+ * for more info on DVFS.
  */
 void MSG_host_off(msg_host_t host)
 {
-  host->turn_off();
+  host->turnOff();
 }
 
 /*
@@ -119,7 +114,6 @@ void MSG_host_off(msg_host_t host)
  */
 void __MSG_host_priv_free(msg_host_priv_t priv)
 {
-
   if (priv == NULL)
     return;
   unsigned int size = xbt_dict_size(priv->dp_objs);
@@ -142,21 +136,20 @@ int MSG_get_host_number(void)
 
 /** \ingroup m_host_management
  * \brief Return a dynar containing all the hosts declared at a given point of time
- * \remark The host order in the returned array is generally different from the host creation/declaration order in the XML platform (we use a hash table internally)
+ * \remark The host order in the returned array is generally different from the host creation/declaration order in the
+ *         XML platform (we use a hash table internally)
  */
 xbt_dynar_t MSG_hosts_as_dynar(void) {
   return sg_hosts_as_dynar();
 }
 
 /** \ingroup m_host_management
- * \brief Return the speed of the processor (in flop/s), regardless of 
-    the current load on the machine.
+ * \brief Return the speed of the processor (in flop/s), regardless of the current load on the machine.
  */
 double MSG_get_host_speed(msg_host_t host) {
   return host->speed();
 }
 
-
 /** \ingroup m_host_management
  * \brief Return the number of cores.
  *
@@ -179,7 +172,6 @@ xbt_swag_t MSG_host_get_process_list(msg_host_t host)
   return host->processes();
 }
 
-
 /** \ingroup m_host_management
  * \brief Returns the value of a given host property
  *
@@ -213,13 +205,10 @@ xbt_dict_t MSG_host_get_properties(msg_host_t host)
  * \param free_ctn the freeing function to use to kill the value on need
  */
 void MSG_host_set_property_value(msg_host_t host, const char *name, char *value,void_f_pvoid_t free_ctn) {
-
   xbt_dict_set(MSG_host_get_properties(host), name, value,free_ctn);
 }
 
-
 /** @ingroup m_host_management
- *
  * @brief Determine if a host is up and running.
  *
  * See also #MSG_host_on() and #MSG_host_off() to switch the host ON and OFF and @ref SURF_plugin_energy for more info on DVFS.
@@ -232,8 +221,8 @@ int MSG_host_is_on(msg_host_t host)
   xbt_assert((host != NULL), "Invalid parameters (host is NULL)");
   return sg_host_is_on(host);
 }
+
 /** @ingroup m_host_management
- *
  * @brief Determine if a host is currently off.
  *
  * See also #MSG_host_on() and #MSG_host_off() to switch the host ON and OFF and @ref SURF_plugin_energy for more info on DVFS.
@@ -252,7 +241,7 @@ int MSG_host_is_off(msg_host_t host)
  */
 void MSG_host_set_params(msg_host_t host, vm_params_t params)
 {
-  host->set_parameters(params);
+  host->setParameters(params);
 }
 
 /** \ingroup m_host_management
@@ -263,7 +252,7 @@ void MSG_host_set_params(msg_host_t host, vm_params_t params)
  */
 void MSG_host_get_params(msg_host_t host, vm_params_t params)
 {
-  host->get_parameters(params);
+  host->parameters(params);
 }
 
 /** \ingroup m_host_management
@@ -274,8 +263,8 @@ void MSG_host_get_params(msg_host_t host, vm_params_t params)
  * \return Returns the processor speed associated with pstate_index
  */
 double MSG_host_get_power_peak_at(msg_host_t host, int pstate_index) {
-    xbt_assert((host != NULL), "Invalid parameters (host is NULL)");
-    return host->power_peak_at(pstate_index);
+  xbt_assert((host != NULL), "Invalid parameters (host is NULL)");
+  return host->powerPeakAt(pstate_index);
 }
 
 /** \ingroup m_host_management
@@ -285,8 +274,8 @@ double MSG_host_get_power_peak_at(msg_host_t host, int pstate_index) {
  * \return Returns the current processor speed
  */
 double MSG_host_get_current_power_peak(msg_host_t host) {
-    xbt_assert((host != NULL), "Invalid parameters (host is NULL)");
-    return host->current_power_peak();
+  xbt_assert((host != NULL), "Invalid parameters (host is NULL)");
+  return host->currentPowerPeak();
 }
 
 /** \ingroup m_host_management
@@ -295,7 +284,7 @@ double MSG_host_get_current_power_peak(msg_host_t host) {
  * \param  host host to test
  */
 int MSG_host_get_nb_pstates(msg_host_t host) {
-    return sg_host_get_nb_pstates(host);
+  return sg_host_get_nb_pstates(host);
 }
 
 /** \ingroup m_host_management
@@ -306,7 +295,7 @@ int MSG_host_get_nb_pstates(msg_host_t host) {
 xbt_dict_t MSG_host_get_mounted_storage_list(msg_host_t host)
 {
   xbt_assert((host != NULL), "Invalid parameters");
-  return host->mounted_storages_as_dict();
+  return host->mountedStoragesAsDict();
 }
 
 /** \ingroup m_host_management
@@ -317,7 +306,7 @@ xbt_dict_t MSG_host_get_mounted_storage_list(msg_host_t host)
 xbt_dynar_t MSG_host_get_attached_storage_list(msg_host_t host)
 {
   xbt_assert((host != NULL), "Invalid parameters");
-  return host->attached_storages();
+  return host->attachedStorages();
 }
 
 /** \ingroup m_host_management
@@ -334,7 +323,7 @@ xbt_dict_t MSG_host_get_storage_content(msg_host_t host)
   char* mount_name;
   xbt_dict_cursor_t cursor = NULL;
 
-  xbt_dict_t storage_list = host->mounted_storages_as_dict();
+  xbt_dict_t storage_list = host->mountedStoragesAsDict();
 
   xbt_dict_foreach(storage_list,cursor,mount_name,storage_name){
     storage = (msg_storage_t)xbt_lib_get_elm_or_null(storage_lib,storage_name);
@@ -347,8 +336,7 @@ xbt_dict_t MSG_host_get_storage_content(msg_host_t host)
 
 int __MSG_host_get_file_descriptor_id(msg_host_t host){
   msg_host_priv_t priv = sg_host_msg(host);
-  xbt_assert(!xbt_dynar_is_empty(priv->file_descriptor_table),
-    "Too much files are opened! Some have to be closed.");
+  xbt_assert(!xbt_dynar_is_empty(priv->file_descriptor_table), "Too much files are opened! Some have to be closed.");
   return xbt_dynar_pop_as(priv->file_descriptor_table, int);
 }
 
index 227031e..98c1348 100644 (file)
@@ -6,10 +6,8 @@
 
 #include "msg_private.h"
 #include "xbt/log.h"
-#include "msg_mailbox.h"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_io, msg,
-                                "Logging specific to MSG (io)");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_io, msg, "Logging specific to MSG (io)");
 
 /** @addtogroup msg_file_management
  * \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Files" --> \endhtmlonly
@@ -18,7 +16,6 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_io, msg,
  *  \see #msg_file_t
  */
 
-
 /********************************* File **************************************/
 void __MSG_file_get_info(msg_file_t fd){
 
@@ -40,8 +37,7 @@ void __MSG_file_get_info(msg_file_t fd){
  *
  * \brief Set the user data of a #msg_file_t.
  *
- * This functions checks whether some data has already been associated to \a file
-   or not and attach \a data to \a file if it is possible.
+ * This functions attach \a data to \a file.
  */
 msg_error_t MSG_file_set_data(msg_file_t fd, void *data)
 {
@@ -54,8 +50,7 @@ msg_error_t MSG_file_set_data(msg_file_t fd, void *data)
  *
  * \brief Return the user data of a #msg_file_t.
  *
- * This functions checks whether \a file is a valid pointer or not and return
-   the user data associated to \a file if it is possible.
+ * This functions checks whether \a file is a valid pointer and return the user data associated to \a file if possible.
  */
 void *MSG_file_get_data(msg_file_t fd)
 {
@@ -68,7 +63,6 @@ void *MSG_file_get_data(msg_file_t fd)
  *
  * \param fd is a the file descriptor
  */
-
 void MSG_file_dump (msg_file_t fd){
   /* Update the cached information first */
   __MSG_file_get_info(fd);
@@ -116,7 +110,8 @@ sg_size_t MSG_file_read(msg_file_t fd, sg_size_t size)
     double flops_amount[] = { 0, 0 };
     double bytes_amount[] = { 0, 0, (double)read_size, 0 };
 
-    msg_task_t task = MSG_parallel_task_create("file transfer for read", 2, m_host_list, flops_amount, bytes_amount, NULL);
+    msg_task_t task = MSG_parallel_task_create("file transfer for read", 2, m_host_list, flops_amount, bytes_amount,
+                      NULL);
     msg_error_t transfer = MSG_parallel_task_execute(task);
     MSG_task_destroy(task);
     free(m_host_list);
@@ -160,7 +155,8 @@ sg_size_t MSG_file_write(msg_file_t fd, sg_size_t size)
     double flops_amount[] = { 0, 0 };
     double bytes_amount[] = { 0, (double)size, 0, 0 };
 
-    msg_task_t task = MSG_parallel_task_create("file transfer for write", 2, m_host_list, flops_amount, bytes_amount, NULL);
+    msg_task_t task = MSG_parallel_task_create("file transfer for write", 2, m_host_list, flops_amount, bytes_amount,
+                                               NULL);
     msg_error_t transfer = MSG_parallel_task_execute(task);
     MSG_task_destroy(task);
     free(m_host_list);
@@ -199,8 +195,7 @@ msg_file_t MSG_file_open(const char* fullpath, void* data)
   priv->simdata->smx_file = simcall_file_open(fullpath, MSG_host_self());
   priv->desc_id = __MSG_host_get_file_descriptor_id(MSG_host_self());
 
-  name = bprintf("%s:%s:%d", priv->fullpath, MSG_host_get_name(MSG_host_self()),
-                             priv->desc_id);
+  name = bprintf("%s:%s:%d", priv->fullpath, MSG_host_get_name(MSG_host_self()), priv->desc_id);
 
   xbt_lib_set(file_lib, name, MSG_FILE_LEVEL, priv);
   msg_file_t fd = (msg_file_t) xbt_lib_get_elm_or_null(file_lib, name);
@@ -224,8 +219,7 @@ int MSG_file_close(msg_file_t fd)
     xbt_free(priv->data);
 
   int res = simcall_file_close(priv->simdata->smx_file, MSG_host_self());
-  name = bprintf("%s:%s:%d", priv->fullpath, MSG_host_get_name(MSG_host_self()),
-                             priv->desc_id);
+  name = bprintf("%s:%s:%d", priv->fullpath, MSG_host_get_name(MSG_host_self()), priv->desc_id);
   __MSG_host_release_file_descriptor_id(MSG_host_self(), priv->desc_id);
   xbt_lib_unset(file_lib, name, MSG_FILE_LEVEL, 1);
   xbt_free(name);
@@ -243,8 +237,7 @@ msg_error_t MSG_file_unlink(msg_file_t fd)
   msg_file_priv_t file_priv = MSG_file_priv(fd);
   /* Find the host where the file is physically located (remote or local)*/
   msg_storage_t storage_src =
-      (msg_storage_t) xbt_lib_get_elm_or_null(storage_lib,
-                                              file_priv->storageId);
+      (msg_storage_t) xbt_lib_get_elm_or_null(storage_lib, file_priv->storageId);
   msg_storage_priv_t storage_priv_src = MSG_storage_priv(storage_src);
   msg_host_t attached_host = MSG_host_by_name(storage_priv_src->hostname);
   int res = simcall_file_unlink(file_priv->simdata->smx_file, attached_host);
@@ -269,14 +262,10 @@ sg_size_t MSG_file_get_size(msg_file_t fd){
  *
  * \param fd : file object that identifies the stream
  * \param offset : number of bytes to offset from origin
- * \param origin : Position used as reference for the offset. It is specified by
- * one of the following constants defined in \<stdio.h\> exclusively to be used as
- * arguments for this function (SEEK_SET = beginning of file, SEEK_CUR = current
- * position of the file pointer, SEEK_END = end of file)
- *
- * \return If successful, the function returns MSG_OK (=0). Otherwise, it returns
- * MSG_TASK_CANCELED (=8).
- *
+ * \param origin : Position used as reference for the offset. It is specified by one of the following constants defined
+ *                 in \<stdio.h\> exclusively to be used as arguments for this function (SEEK_SET = beginning of file,
+ *                 SEEK_CUR = current position of the file pointer, SEEK_END = end of file)
+ * \return If successful, the function returns MSG_OK (=0). Otherwise, it returns MSG_TASK_CANCELED (=8).
  */
 msg_error_t MSG_file_seek(msg_file_t fd, sg_offset_t offset, int origin)
 {
@@ -321,8 +310,7 @@ msg_error_t MSG_file_move (msg_file_t fd, const char* fullpath)
  * \param file : the file to move
  * \param host : the remote host where the file has to be copied
  * \param fullpath : the complete path destination on the remote host
- * \return If successful, the function returns MSG_OK. Otherwise, it returns
- * MSG_TASK_CANCELED.
+ * \return If successful, the function returns MSG_OK. Otherwise, it returns MSG_TASK_CANCELED.
  */
 msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpath)
 {
@@ -343,7 +331,7 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
   msg_host_t host_dest;
   size_t longest_prefix_length = 0;
 
-  xbt_dict_t storage_list = host->mounted_storages_as_dict();
+  xbt_dict_t storage_list = host->mountedStoragesAsDict();
   xbt_dict_foreach(storage_list,cursor,mount_name,storage_name){
     file_mount_name = (char *) xbt_malloc ((strlen(mount_name)+1));
     strncpy(file_mount_name,fullpath,strlen(mount_name)+1);
@@ -369,7 +357,8 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
     return MSG_TASK_CANCELED;
   }
 
-  XBT_DEBUG("Initiate data transfer of %llu bytes between %s and %s.", read_size, storage_priv_src->hostname, host_name_dest);
+  XBT_DEBUG("Initiate data transfer of %llu bytes between %s and %s.", read_size, storage_priv_src->hostname,
+            host_name_dest);
   msg_host_t *m_host_list = NULL;
   m_host_list = (msg_host_t*) calloc(2, sizeof(msg_host_t));
 
@@ -378,7 +367,8 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
   double flops_amount[] = { 0, 0 };
   double bytes_amount[] = { 0, (double)read_size, 0, 0 };
 
-  msg_task_t task = MSG_parallel_task_create("file transfer for write", 2, m_host_list, flops_amount, bytes_amount, NULL);
+  msg_task_t task =
+      MSG_parallel_task_create("file transfer for write", 2, m_host_list, flops_amount, bytes_amount, NULL);
   msg_error_t transfer = MSG_parallel_task_execute(task);
   MSG_task_destroy(task);
   free(m_host_list);
@@ -396,7 +386,6 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
   simcall_file_write(smx_file, read_size, host_dest);
   simcall_file_close(smx_file, host_dest);
   return MSG_OK;
-
 }
 
 /**
@@ -405,8 +394,7 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
  * \param file : the file to move
  * \param host : the remote host where the file has to be moved
  * \param fullpath : the complete path destination on the remote host
- * \return If successful, the function returns MSG_OK. Otherwise, it returns
- * MSG_TASK_CANCELED.
+ * \return If successful, the function returns MSG_OK. Otherwise, it returns MSG_TASK_CANCELED.
  */
 msg_error_t MSG_file_rmove (msg_file_t file, msg_host_t host, const char* fullpath)
 {
@@ -423,12 +411,11 @@ void __MSG_file_destroy(msg_file_priv_t file) {
   xbt_free(file->simdata);
   xbt_free(file);
 }
-/********************************* Storage **************************************/
 
+/********************************* Storage **************************************/
 /** @addtogroup msg_storage_management
  * \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Storages" --> \endhtmlonly
  * (#msg_storage_t) and the functions for managing it.
- *
  */
 
 msg_storage_t __MSG_storage_create(smx_storage_t storage)
@@ -448,7 +435,6 @@ void __MSG_storage_destroy(msg_storage_priv_t storage) {
   free(storage);
 }
 
-
 /** \ingroup msg_storage_management
  *
  * \brief Returns the name of the #msg_storage_t.
@@ -513,7 +499,6 @@ const char *MSG_storage_get_property_value(msg_storage_t storage, const char *na
   return (char*) xbt_dict_get_or_null(MSG_storage_get_properties(storage), name);
 }
 
-
 /** \ingroup msg_storage_management
  * \brief Finds a msg_storage_t using its name.
  * \param name the name of a storage
@@ -526,10 +511,8 @@ msg_storage_t MSG_storage_get_by_name(const char *name)
 
 /** \ingroup msg_storage_management
  * \brief Returns a dynar containing all the storage elements declared at a given point of time
- *
  */
 xbt_dynar_t MSG_storages_as_dynar(void) {
-
   xbt_lib_cursor_t cursor;
   char *key;
   void **data;
@@ -547,8 +530,7 @@ xbt_dynar_t MSG_storages_as_dynar(void) {
 /** \ingroup msg_storage_management
  *
  * \brief Set the user data of a #msg_storage_t.
- * This functions checks whether some data has already been associated to \a storage
-   or not and attach \a data to \a storage if it is possible.
+ * This functions attach \a data to \a storage if possible.
  */
 msg_error_t MSG_storage_set_data(msg_storage_t storage, void *data)
 {
@@ -561,8 +543,7 @@ msg_error_t MSG_storage_set_data(msg_storage_t storage, void *data)
  *
  * \brief Returns the user data of a #msg_storage_t.
  *
- * This functions checks whether \a storage is a valid pointer or not and returns
-   the user data associated to \a storage if it is possible.
+ * This functions checks whether \a storage is a valid pointer and returns its associate user data if possible.
  */
 void *MSG_storage_get_data(msg_storage_t storage)
 {
index 9f9455c..74d330d 100644 (file)
@@ -6,11 +6,10 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "msg_mailbox.h"
+#include "simgrid/msg.h"
 #include "msg_private.h"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_mailbox, msg,
-                                "Logging specific to MSG (mailbox)");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_mailbox, msg, "Logging specific to MSG (mailbox)");
 
 msg_mailbox_t MSG_mailbox_new(const char *alias)
 {
@@ -37,16 +36,13 @@ msg_task_t MSG_mailbox_get_head(msg_mailbox_t mailbox)
   return (msg_task_t) simcall_comm_get_src_data(comm);
 }
 
-int
-MSG_mailbox_get_count_host_waiting_tasks(msg_mailbox_t mailbox,
-                                         msg_host_t host)
+int MSG_mailbox_get_count_host_waiting_tasks(msg_mailbox_t mailbox, msg_host_t host)
 {
   return simcall_rdv_comm_count_by_host(mailbox, host);
 }
 
 msg_mailbox_t MSG_mailbox_get_by_alias(const char *alias)
 {
-
   msg_mailbox_t mailbox = simcall_rdv_get_by_name(alias);
 
   if (!mailbox)
@@ -58,11 +54,9 @@ msg_mailbox_t MSG_mailbox_get_by_alias(const char *alias)
 /** \ingroup msg_mailbox_management
  * \brief Set the mailbox to receive in asynchronous mode
  *
- * All messages sent to this mailbox will be transferred to
- * the receiver without waiting for the receive call.
+ * All messages sent to this mailbox will be transferred to the receiver without waiting for the receive call.
  * The receive call will still be necessary to use the received data.
- * If there is a need to receive some messages asynchronously, and some not,
- * two different mailboxes should be used.
+ * If there is a need to receive some messages asynchronously, and some not, two different mailboxes should be used.
  *
  * \param alias The name of the mailbox
  */
@@ -71,7 +65,6 @@ void MSG_mailbox_set_async(const char *alias){
 
   simcall_rdv_set_receiver(mailbox, SIMIX_process_self());
   XBT_VERB("%s mailbox set to receive eagerly for process %p\n",alias, SIMIX_process_self());
-
 }
 
 /** \ingroup msg_mailbox_management
@@ -86,9 +79,7 @@ void MSG_mailbox_set_async(const char *alias){
  * #MSG_OK if the task was successfully received,
  * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE otherwise.
  */
-msg_error_t
-MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t *task,
-                         msg_host_t host, double timeout)
+msg_error_t MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t *task, msg_host_t host, double timeout)
 {
   return MSG_mailbox_get_task_ext_bounded(mailbox, task, host, timeout, -1.0);
 }
@@ -106,9 +97,8 @@ MSG_mailbox_get_task_ext(msg_mailbox_t mailbox, msg_task_t *task,
  * #MSG_OK if the task was successfully received,
  * #MSG_HOST_FAILURE, or #MSG_TRANSFER_FAILURE otherwise.
  */
-msg_error_t
-MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t * task,
-                                 msg_host_t host, double timeout, double rate)
+msg_error_t MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t * task, msg_host_t host, double timeout,
+                                             double rate)
 {
   xbt_ex_t e;
   msg_error_t ret = MSG_OK;
@@ -123,8 +113,7 @@ MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t * task,
   xbt_assert(task, "Null pointer for the task storage");
 
   if (*task)
-    XBT_WARN
-        ("Asked to write the received task in a non empty struct -- proceeding.");
+    XBT_WARN("Asked to write the received task in a non empty struct -- proceeding.");
 
   /* Try to receive it by calling SIMIX network layer */
   TRY {
@@ -154,17 +143,13 @@ MSG_mailbox_get_task_ext_bounded(msg_mailbox_t mailbox, msg_task_t * task,
     xbt_ex_free(e);
   }
 
-  if (ret != MSG_HOST_FAILURE &&
-      ret != MSG_TRANSFER_FAILURE &&
-      ret != MSG_TIMEOUT) {
+  if (ret != MSG_HOST_FAILURE && ret != MSG_TRANSFER_FAILURE && ret != MSG_TIMEOUT) {
     TRACE_msg_task_get_end(start_time, *task);
   }
   MSG_RETURN(ret);
 }
 
-msg_error_t
-MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task,
-                             double timeout)
+msg_error_t MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task, double timeout)
 {
   msg_error_t ret = MSG_OK;
   simdata_task_t t_simdata = NULL;
@@ -186,7 +171,8 @@ MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task,
       xbt_backtrace_display_current();
     } else {
       xbt_assert(t_simdata->isused == 0,
-                 "This task is still being used somewhere else. You cannot send it now. Go fix your code! (use --cfg=msg/debug_multiple_use:on to get the backtrace of the other process)");
+                 "This task is still being used somewhere else. You cannot send it now. Go fix your code!"
+                 " (use --cfg=msg/debug_multiple_use:on to get the backtrace of the other process)");
     }
   }
 
@@ -197,7 +183,6 @@ MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task,
   t_simdata->comm = NULL;
   msg_global->sent_msg++;
 
-
   p_simdata->waiting_task = task;
 
   xbt_ex_t e;
@@ -205,8 +190,7 @@ MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task,
   TRY {
     smx_synchro_t comm = NULL; /* MC needs the comm to be set to NULL during the simix call  */
     comm = simcall_comm_isend(SIMIX_process_self(), mailbox,t_simdata->bytes_amount,
-                                  t_simdata->rate, task, sizeof(void *),
-                                  NULL, NULL, NULL, task, 0);
+                              t_simdata->rate, task, sizeof(void *), NULL, NULL, NULL, task, 0);
     if (TRACE_is_enabled())
       simcall_set_category(comm, task->category);
      t_simdata->comm = comm;
@@ -235,10 +219,8 @@ MSG_mailbox_put_with_timeout(msg_mailbox_t mailbox, msg_task_t task,
     t_simdata->isused = 0;
   }
 
-
   p_simdata->waiting_task = NULL;
   if (call_end)
     TRACE_msg_task_put_end();
   MSG_RETURN(ret);
 }
-
diff --git a/src/msg/msg_mailbox.h b/src/msg/msg_mailbox.h
deleted file mode 100644 (file)
index 8a7953c..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-/* Copyright (c) 2008-2015. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#ifndef MSG_MAILBOX_H
-#define MSG_MAILBOX_H
-
-#include <xbt/base.h>
-#include "xbt/fifo.h"
-#include "simgrid/simix.h"
-#include "simgrid/msg.h"
-
-
-SG_BEGIN_DECL()
-#define MAX_ALIAS_NAME  ((size_t)260)
-
-/*! \brief MSG_mailbox_new - create a new mailbox.
- *
- * The function MSG_mailbox_new creates a new mailbox identified by the key specified
- * by the parameter alias and add it in the global dictionary.
- *
- * \param alias    The alias of the mailbox to create.
- *
- * \return    The newly created mailbox.
- */
-XBT_PUBLIC(msg_mailbox_t)
-    MSG_mailbox_new(const char *alias);
-
-XBT_PRIVATE void MSG_mailbox_free(void *mailbox);
-
-/* \brief MSG_mailbox_free - release a mailbox from the memory.
- *
- * The function MSG_mailbox_free release a mailbox from the memory but does
- * not remove it from the dictionary.
- *
- * \param mailbox  The mailbox to release.
- *
- * \see      MSG_mailbox_destroy.
- */
-XBT_PRIVATE void MSG_mailbox_free(void *mailbox);
-
-/* \brief MSG_mailbox_get_by_alias - get a mailbox from its alias.
- *
- * The function MSG_mailbox_get_by_alias returns the mailbox associated with
- * the key specified by the parameter alias. If the mailbox does not exists,
- * the function create it.
- *
- * \param alias    The alias of the mailbox to return.
- *
- * \return  The mailbox associated with the alias specified as parameter
- *    or a new mailbox if the key does not match.
- */
-XBT_PUBLIC(msg_mailbox_t)
-    MSG_mailbox_get_by_alias(const char *alias);
-
-/*! \brief MSG_mailbox_is_empty - test if a mailbox is empty.
- *
- * The function MSG_mailbox_is_empty tests if a mailbox is empty
- * (contains no msg task).
- *
- * \param mailbox  The mailbox to get test.
- *
- * \return  The function returns 1 if the mailbox is empty. Otherwise the function
- *    returns 0.
- */
-XBT_PUBLIC(int) MSG_mailbox_is_empty(msg_mailbox_t mailbox);
-
-/* \brief MSG_mailbox_set_async - set a mailbox as eager
- *
- * The function MSG_mailbox_set_async sets the mailbox to a permanent receiver mode
- * Messages sent to this mailbox will then be sent just after the send is issued,
- * without waiting for the corresponding receive.
- *
- * This call should be done before issuing any receive, and on the receiver's side only
- *
- * \param alias    The alias of the mailbox to modify.
- *
- */
-XBT_PUBLIC(void) MSG_mailbox_set_async(const char *alias);
-
-/*! \brief MSG_mailbox_get_head - get the task at the head of a mailbox.
- *
- * The MSG_mailbox_get_head returns the task at the head of the mailbox.
- * This function does not remove the task from the mailbox (contrary to
- * the function MSG_mailbox_pop_head).
- *
- * \param mailbox  The mailbox concerned by the operation.
- *
- * \return    The task at the head of the mailbox.
- */
-XBT_PUBLIC(msg_task_t)
-    MSG_mailbox_get_head(msg_mailbox_t mailbox);
-
-/*! \brief MSG_mailbox_get_count_host_waiting_tasks - Return the number of tasks
-   waiting to be received in a mailbox and sent by a host.
- *
- * \param mailbox  The mailbox concerned by the operation.
- * \param host    The msg host containing the processes that have sended the
- *      tasks.
- *
- * \return    The number of tasks in the mailbox specified by the
- *      parameter mailbox and sended by all the processes located
- *      on the host specified by the parameter host.
- */
-XBT_PUBLIC(int)
-MSG_mailbox_get_count_host_waiting_tasks(msg_mailbox_t mailbox,
-                                         msg_host_t host);
-
-SG_END_DECL()
-#endif                          /* !MSG_MAILBOX_H */
index fdca8f1..b2f710d 100644 (file)
@@ -22,8 +22,6 @@ SG_BEGIN_DECL()
 /**************** datatypes **********************************/
 
 /********************************* Task **************************************/
-
-
 #define MSG_BT(ptr, m)                              \
   do {xbt_ex_t *_xbt_ex_t = xbt_new0(xbt_ex_t, 1); \
   /* build the exception */                                             \
@@ -110,7 +108,6 @@ typedef struct msg_comm {
   msg_error_t status;           /* status of the communication once finished */
 } s_msg_comm_t;
 
-
 /******************************* VM *************************************/
 typedef struct dirty_page {
   double prev_clock;
@@ -137,9 +134,7 @@ typedef struct MSG_Global {
 /*extern MSG_Global_t msg_global;*/
 XBT_PUBLIC_DATA(MSG_Global_t) msg_global;
 
-
 /*************************************************************/
-
 // FIXME: KILLME
 #  define MSG_RETURN(val) return(val)
 
@@ -162,6 +157,11 @@ XBT_PRIVATE void MSG_post_create_environment(void);
 
 XBT_PRIVATE void MSG_host_add_task(msg_host_t host, msg_task_t task);
 XBT_PRIVATE void MSG_host_del_task(msg_host_t host, msg_task_t task);
+/* @brief MSG_mailbox_free - release a mailbox from the memory.
+ * Releases a mailbox from the memory but does not remove it from the dictionary.
+ * @param   mailbox  The mailbox to release.
+ */
+XBT_PRIVATE void MSG_mailbox_free(void *mailbox);
 
 /********** Tracing **********/
 /* declaration of instrumentation functions from msg_task_instr.c */
@@ -178,8 +178,7 @@ XBT_PRIVATE void TRACE_msg_task_put_end(void);
 /* declaration of instrumentation functions from msg_process_instr.c */
 XBT_PRIVATE char *instr_process_id (msg_process_t proc, char *str, int len);
 XBT_PRIVATE char *instr_process_id_2 (const char *process_name, int process_pid, char *str, int len);
-XBT_PRIVATE void TRACE_msg_process_change_host(msg_process_t process, msg_host_t old_host,
-                                   msg_host_t new_host);
+XBT_PRIVATE void TRACE_msg_process_change_host(msg_process_t process, msg_host_t old_host, msg_host_t new_host);
 XBT_PRIVATE void TRACE_msg_process_create (const char *process_name, int process_pid, msg_host_t host);
 XBT_PRIVATE void TRACE_msg_process_destroy (const char *process_name, int process_pid);
 XBT_PRIVATE void TRACE_msg_process_kill(smx_process_exit_status_t status, msg_process_t process);
@@ -191,8 +190,7 @@ XBT_PRIVATE void TRACE_msg_process_sleep_out(msg_process_t process);
 /* declaration of instrumentation functions from instr_msg_vm.c */
 XBT_PRIVATE char *instr_vm_id(msg_vm_t vm, char *str, int len);
 XBT_PRIVATE char *instr_vm_id_2(const char *vm_name, char *str, int len);
-XBT_PRIVATE void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host,
-                                   msg_host_t new_host);
+XBT_PRIVATE void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host, msg_host_t new_host);
 XBT_PRIVATE void TRACE_msg_vm_start(msg_vm_t vm);
 XBT_PRIVATE void TRACE_msg_vm_create(const char *vm_name, msg_host_t host);
 XBT_PRIVATE void TRACE_msg_vm_kill(msg_vm_t process);
index ab3bc9b..5ce8704 100644 (file)
 #include "src/simix/smx_process_private.h"
 #include "src/simix/smx_private.h"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_process, msg,
-                                "Logging specific to MSG (process)");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_process, msg, "Logging specific to MSG (process)");
 
 /** @addtogroup m_process_management
  * \htmlonly <!-- DOXYGEN_NAVBAR_LABEL="Processes" --> \endhtmlonly
  *
- *  Processes (#msg_process_t) are independent agents that can do stuff on their own. They are in charge of executing your code interacting with the simulated world.
+ *  Processes (#msg_process_t) are independent agents that can do stuff on their own. They are in charge of executing
+ *  your code interacting with the simulated world.
  *  A process may be defined as a <em>code</em> with some <em>private data</em>.
- *  Processes must be located on <em>hosts</em> (#msg_host_t), and they exchange data by sending tasks (#msg_task_t) that are similar to envelops containing data.
+ *  Processes must be located on <em>hosts</em> (#msg_host_t), and they exchange data by sending tasks (#msg_task_t)
+ *  that are similar to envelops containing data.
  */
 
 /******************************** Process ************************************/
-
 /**
  * \brief Cleans the MSG data of a process.
  * \param smx_proc a SIMIX process
@@ -36,8 +36,7 @@ void MSG_process_cleanup_from_SIMIX(smx_process_t smx_proc)
     /* avoid a SIMIX request if this function is called by the process itself */
     msg_proc = (simdata_process_t) SIMIX_process_self_get_data(smx_proc);
     SIMIX_process_self_set_data(smx_proc, NULL);
-  }
-  else {
+  } else {
     msg_proc = (simdata_process_t) simcall_process_get_data(smx_proc);
     simcall_process_set_data(smx_proc, NULL);
   }
@@ -54,17 +53,12 @@ void MSG_process_cleanup_from_SIMIX(smx_process_t smx_proc)
 }
 
 /* This function creates a MSG process. It has the prototype enforced by SIMIX_function_register_process_create */
-smx_process_t MSG_process_create_from_SIMIX(const char *name,
-                                   xbt_main_func_t code, void *data,
-                                   const char *hostname, double kill_time,
-                                   int argc, char **argv,
-                                   xbt_dict_t properties, int auto_restart,
-                                   smx_process_t parent_process)
+smx_process_t MSG_process_create_from_SIMIX(const char *name, xbt_main_func_t code, void *data, const char *hostname,
+                                            double kill_time, int argc, char **argv, xbt_dict_t properties,
+                                            int auto_restart, smx_process_t parent_process)
 {
   msg_host_t host = MSG_host_by_name(hostname);
-  msg_process_t p = MSG_process_create_with_environment(name, code, data,
-                                                      host, argc, argv,
-                                                      properties);
+  msg_process_t p = MSG_process_create_with_environment(name, code, data, host, argc, argv, properties);
   if (p) {
     MSG_process_set_kill_time(p,kill_time);
     MSG_process_auto_restart_set(p,auto_restart);
@@ -75,36 +69,28 @@ smx_process_t MSG_process_create_from_SIMIX(const char *name,
 /** \ingroup m_process_management
  * \brief Creates and runs a new #msg_process_t.
  *
- * Does exactly the same as #MSG_process_create_with_arguments but without
  providing standard arguments (\a argc, \a argv, \a start_time, \a kill_time).
+ * Does exactly the same as #MSG_process_create_with_arguments but without providing standard arguments
* (\a argc, \a argv, \a start_time, \a kill_time).
  * \sa MSG_process_create_with_arguments
  */
-msg_process_t MSG_process_create(const char *name,
-                               xbt_main_func_t code, void *data,
-                               msg_host_t host)
+msg_process_t MSG_process_create(const char *name, xbt_main_func_t code, void *data, msg_host_t host)
 {
-  return MSG_process_create_with_environment(name, code, data, host, 0,
-                                             NULL, NULL);
+  return MSG_process_create_with_environment(name, code, data, host, 0, NULL, NULL);
 }
 
 /** \ingroup m_process_management
  * \brief Creates and runs a new #msg_process_t.
 
- * A constructor for #msg_process_t taking four arguments and returning the
- * corresponding object. The structure (and the corresponding thread) is
- * created, and put in the list of ready process.
- * \param name a name for the object. It is for user-level information
-   and can be NULL.
- * \param code is a function describing the behavior of the process. It
-   should then only use functions described in \ref
-   m_process_management (to create a new #msg_process_t for example),
-   in \ref m_host_management (only the read-only functions i.e. whose
-   name contains the word get), in \ref m_task_management (to create
-   or destroy some #msg_task_t for example) and in \ref
-   msg_task_usage (to handle file transfers and task processing).
- * \param data a pointer to any data one may want to attach to the new
-   object.  It is for user-level information and can be NULL. It can
-   be retrieved with the function \ref MSG_process_get_data.
+ * A constructor for #msg_process_t taking four arguments and returning the corresponding object. The structure (and
+ * the corresponding thread) is created, and put in the list of ready process.
+ * \param name a name for the object. It is for user-level information and can be NULL.
+ * \param code is a function describing the behavior of the process. It should then only use functions described
+ * in \ref m_process_management (to create a new #msg_process_t for example),
+   in \ref m_host_management (only the read-only functions i.e. whose name contains the word get),
+   in \ref m_task_management (to create or destroy some #msg_task_t for example) and
+   in \ref msg_task_usage (to handle file transfers and task processing).
+ * \param data a pointer to any data one may want to attach to the new object.  It is for user-level information and
+ *        can be NULL. It can be retrieved with the function \ref MSG_process_get_data.
  * \param host the location where the new process is executed.
  * \param argc first argument passed to \a code
  * \param argv second argument passed to \a code
@@ -112,45 +98,35 @@ msg_process_t MSG_process_create(const char *name,
  * \return The new corresponding object.
  */
 
-msg_process_t MSG_process_create_with_arguments(const char *name,
-                                              xbt_main_func_t code,
-                                              void *data, msg_host_t host,
+msg_process_t MSG_process_create_with_arguments(const char *name, xbt_main_func_t code, void *data, msg_host_t host,
                                               int argc, char **argv)
 {
-  return MSG_process_create_with_environment(name, code, data, host,
-                                             argc, argv, NULL);
+  return MSG_process_create_with_environment(name, code, data, host, argc, argv, NULL);
 }
 
 /** \ingroup m_process_management
  * \brief Creates and runs a new #msg_process_t.
 
- * A constructor for #msg_process_t taking four arguments and returning the
- * corresponding object. The structure (and the corresponding thread) is
- * created, and put in the list of ready process.
- * \param name a name for the object. It is for user-level information
-   and can be NULL.
- * \param code is a function describing the behavior of the process. It
-   should then only use functions described in \ref
-   m_process_management (to create a new #msg_process_t for example),
-   in \ref m_host_management (only the read-only functions i.e. whose
-   name contains the word get), in \ref m_task_management (to create
-   or destroy some #msg_task_t for example) and in \ref
-   msg_task_usage (to handle file transfers and task processing).
- * \param data a pointer to any data one may want to attach to the new
-   object.  It is for user-level information and can be NULL. It can
-   be retrieved with the function \ref MSG_process_get_data.
+ * A constructor for #msg_process_t taking four arguments and returning the corresponding object. The structure (and
+ * the corresponding thread) is created, and put in the list of ready process.
+ * \param name a name for the object. It is for user-level information and can be NULL.
+ * \param code is a function describing the behavior of the process. It should then only use functions described
+ * in \ref m_process_management (to create a new #msg_process_t for example),
+   in \ref m_host_management (only the read-only functions i.e. whose name contains the word get),
+   in \ref m_task_management (to create or destroy some #msg_task_t for example) and
+   in \ref msg_task_usage (to handle file transfers and task processing).
+ * \param data a pointer to any data one may want to attach to the new object.  It is for user-level information and
+ *        can be NULL. It can be retrieved with the function \ref MSG_process_get_data.
  * \param host the location where the new process is executed.
  * \param argc first argument passed to \a code
- * \param argv second argument passed to \a code. WARNING, these strings are freed by the SimGrid kernel when the process exits, so they cannot be static nor shared between several processes.
+ * \param argv second argument passed to \a code. WARNING, these strings are freed by the SimGrid kernel when the
+ *             process exits, so they cannot be static nor shared between several processes.
  * \param properties list a properties defined for this process
  * \see msg_process_t
  * \return The new corresponding object.
  */
-msg_process_t MSG_process_create_with_environment(const char *name,
-                                                xbt_main_func_t code,
-                                                void *data, msg_host_t host,
-                                                int argc, char **argv,
-                                                xbt_dict_t properties)
+msg_process_t MSG_process_create_with_environment(const char *name, xbt_main_func_t code, void *data, msg_host_t host,
+                                                int argc, char **argv, xbt_dict_t properties)
 {
   xbt_assert(code != NULL && host != NULL, "Invalid parameters: host and code params must not be NULL");
   simdata_process_t simdata = xbt_new0(s_simdata_process_t, 1);
@@ -167,8 +143,7 @@ msg_process_t MSG_process_create_with_environment(const char *name,
 
   /* Let's create the process: SIMIX may decide to start it right now,
    * even before returning the flow control to us */
-  process = simcall_process_create(name, code, simdata, sg_host_get_name(host), -1,
-                           argc, argv, properties,0);
+  process = simcall_process_create(name, code, simdata, sg_host_get_name(host), -1, argc, argv, properties,0);
 
   if (!process) {
     /* Undo everything we have just changed */
@@ -181,8 +156,7 @@ msg_process_t MSG_process_create_with_environment(const char *name,
   return process;
 }
 
-static
-int MSG_maestro(int argc, char** argv)
+static int MSG_maestro(int argc, char** argv)
 {
   int res = MSG_main();
   return res;
@@ -190,15 +164,12 @@ int MSG_maestro(int argc, char** argv)
 
 /* Become a process in the simulation
  *
- * Currently this can only be called by the main thread (once) and only work
- * with some thread factories (currently ThreadContextFactory).
+ * Currently this can only be called by the main thread (once) and only work with some thread factories
+ * (currently ThreadContextFactory).
  *
- * In the future, it might be extended in order to attach other threads created
- * by a third party library.
+ * In the future, it might be extended in order to attach other threads created by a third party library.
  */
-msg_process_t MSG_process_attach(
-  const char *name, void *data,
-  msg_host_t host, xbt_dict_t properties)
+msg_process_t MSG_process_attach(const char *name, void *data, msg_host_t host, xbt_dict_t properties)
 {
   xbt_assert(host != NULL, "Invalid parameters: host and code params must not be NULL");
   simdata_process_t simdata = xbt_new0(s_simdata_process_t, 1);
@@ -213,8 +184,7 @@ msg_process_t MSG_process_attach(
   simdata->data = data;
   simdata->last_errno = MSG_OK;
 
-  /* Let's create the process: SIMIX may decide to start it right now,
-   * even before returning the flow control to us */
+  /* Let's create the process: SIMIX may decide to start it right now, even before returning the flow control to us */
   process = SIMIX_process_attach(name, simdata, sg_host_get_name(host), properties, NULL);
   if (!process)
     xbt_die("Could not attach");
@@ -225,9 +195,8 @@ msg_process_t MSG_process_attach(
 /** Detach a process attached with `MSG_process_attach()`
  *
  *  This is called when the current process has finished its job.
- *  Used in the main thread, it waits for the simulation to finish before
- *  returning. When it returns, the other simulated processes and the maestro
- *  are destroyed.
+ *  Used in the main thread, it waits for the simulation to finish before  returning. When it returns, the other
+ *  simulated processes and the maestro are destroyed.
  */
 void MSG_process_detach(void)
 {
@@ -246,10 +215,7 @@ void MSG_process_kill(msg_process_t process)
 //  if (p_simdata->waiting_task && p_simdata->waiting_task->simdata->comm) {
 //    simcall_comm_cancel(p_simdata->waiting_task->simdata->comm);
 //  }
-
   simcall_process_kill(process);
-
-  return;
 }
 
 /**
@@ -266,8 +232,8 @@ msg_error_t MSG_process_join(msg_process_t process, double timeout){
 /** \ingroup m_process_management
  * \brief Migrates a process to another location.
  *
- * This function checks whether \a process and \a host are valid pointers
  and change the value of the #msg_host_t on which \a process is running.
+ * This function checks whether \a process and \a host are valid pointers and change the value of the #msg_host_t on
* which \a process is running.
  */
 msg_error_t MSG_process_migrate(msg_process_t process, msg_host_t host)
 {
@@ -282,8 +248,7 @@ msg_error_t MSG_process_migrate(msg_process_t process, msg_host_t host)
 /** \ingroup m_process_management
  * \brief Returns the user data of a process.
  *
- * This function checks whether \a process is a valid pointer or not
-   and returns the user data associated to this process.
+ * This function checks whether \a process is a valid pointer and returns the user data associated to this process.
  */
 void* MSG_process_get_data(msg_process_t process)
 {
@@ -300,36 +265,30 @@ void* MSG_process_get_data(msg_process_t process)
 /** \ingroup m_process_management
  * \brief Sets the user data of a process.
  *
- * This function checks whether \a process is a valid pointer or not
-   and sets the user data associated to this process.
+ * This function checks whether \a process is a valid pointer and sets the user data associated to this process.
  */
 msg_error_t MSG_process_set_data(msg_process_t process, void *data)
 {
   xbt_assert(process != NULL, "Invalid parameter: first parameter must not be NULL!");
 
-  simdata_process_t simdata =
-    (simdata_process_t) simcall_process_get_data(process);
+  simdata_process_t simdata = (simdata_process_t) simcall_process_get_data(process);
   simdata->data = data;
 
   return MSG_OK;
 }
 
 /** \ingroup m_process_management
- * \brief Sets a cleanup function to be called to free the userdata of a
- * process when a process is destroyed.
- * \param data_cleanup a cleanup function for the userdata of a process,
- * or NULL to call no function
+ * \brief Sets a cleanup function to be called to free the userdata of a process when a process is destroyed.
+ * \param data_cleanup a cleanup function for the userdata of a process, or NULL to call no function
  */
 XBT_PUBLIC(void) MSG_process_set_data_cleanup(void_f_pvoid_t data_cleanup) {
-
   msg_global->process_data_cleanup = data_cleanup;
 }
 
 /** \ingroup m_process_management
  * \brief Return the location on which a process is running.
  * \param process a process (NULL means the current one)
- * \return the msg_host_t corresponding to the location on which \a
- * process is running.
+ * \return the msg_host_t corresponding to the location on which \a process is running.
  */
 msg_host_t MSG_process_get_host(msg_process_t process)
 {
@@ -347,8 +306,8 @@ msg_host_t MSG_process_get_host(msg_process_t process)
  *
  * \brief Return a #msg_process_t given its PID.
  *
- * This function search in the list of all the created msg_process_t for a msg_process_t
  whose PID is equal to \a PID. If no host is found, \c NULL is returned.
+ * This function search in the list of all the created msg_process_t for a msg_process_t  whose PID is equal to \a PID.
* If no host is found, \c NULL is returned.
    Note that the PID are uniq in the whole simulation, not only on a given host.
  */
 msg_process_t MSG_process_from_PID(int PID)
@@ -360,8 +319,8 @@ msg_process_t MSG_process_from_PID(int PID)
 xbt_dynar_t MSG_processes_as_dynar(void) {
   return SIMIX_processes_as_dynar();
 }
-/** @brief Return the current number MSG processes.
- */
+
+/** @brief Return the current number MSG processes. */
 int MSG_process_get_number(void)
 {
   return SIMIX_process_count();
@@ -382,8 +341,7 @@ msg_error_t MSG_process_set_kill_time(msg_process_t process, double kill_time)
 /** \ingroup m_process_management
  * \brief Returns the process ID of \a process.
  *
- * This function checks whether \a process is a valid pointer or not
-   and return its PID (or 0 in case of problem).
+ * This function checks whether \a process is a valid pointer and return its PID (or 0 in case of problem).
  */
 int MSG_process_get_PID(msg_process_t process)
 {
@@ -398,27 +356,23 @@ int MSG_process_get_PID(msg_process_t process)
 /** \ingroup m_process_management
  * \brief Returns the process ID of the parent of \a process.
  *
- * This function checks whether \a process is a valid pointer or not
-   and return its PID. Returns -1 if the process has not been created by
-   any other process.
+ * This function checks whether \a process is a valid pointer and return its PID.
+ * Returns -1 if the process has not been created by any other process.
  */
 int MSG_process_get_PPID(msg_process_t process)
 {
   xbt_assert(process != NULL, "Invalid parameter: First argument must not be NULL");
-
   return simcall_process_get_PPID(process);
 }
 
 /** \ingroup m_process_management
  * \brief Return the name of a process.
  *
- * This function checks whether \a process is a valid pointer or not
-   and return its name.
+ * This function checks whether \a process is a valid pointer and return its name.
  */
 const char *MSG_process_get_name(msg_process_t process)
 {
   xbt_assert(process != NULL, "Invalid parameter: First argument must not be NULL");
-
   return simcall_process_get_name(process);
 }
 
@@ -429,8 +383,7 @@ const char *MSG_process_get_name(msg_process_t process)
  * \param name a property name
  * \return value of a property (or NULL if the property is not set)
  */
-const char *MSG_process_get_property_value(msg_process_t process,
-                                           const char *name)
+const char *MSG_process_get_property_value(msg_process_t process, const char *name)
 {
   return (char*) xbt_dict_get_or_null(MSG_process_get_properties(process), name);
 }
@@ -443,9 +396,7 @@ const char *MSG_process_get_property_value(msg_process_t process,
 xbt_dict_t MSG_process_get_properties(msg_process_t process)
 {
   xbt_assert(process != NULL, "Invalid parameter: First argument must not be NULL");
-
   return simcall_process_get_properties(process);
-
 }
 
 /** \ingroup m_process_management
@@ -461,8 +412,7 @@ int MSG_process_self_PID(void)
 /** \ingroup m_process_management
  * \brief Return the PPID of the current process.
  *
- * This function returns the PID of the parent of the currently
- * running #msg_process_t.
+ * This function returns the PID of the parent of the currently running #msg_process_t.
  */
 int MSG_process_self_PPID(void)
 {
@@ -482,8 +432,7 @@ msg_process_t MSG_process_self(void)
 /** \ingroup m_process_management
  * \brief Suspend the process.
  *
- * This function suspends the process by suspending the task on which
- * it was waiting for the completion.
+ * This function suspends the process by suspending the task on which it was waiting for the completion.
  */
 msg_error_t MSG_process_suspend(msg_process_t process)
 {
@@ -497,8 +446,7 @@ msg_error_t MSG_process_suspend(msg_process_t process)
 /** \ingroup m_process_management
  * \brief Resume a suspended process.
  *
- * This function resumes a suspended process by resuming the task on
- * which it was waiting for the completion.
+ * This function resumes a suspended process by resuming the task on which it was waiting for the completion.
  */
 msg_error_t MSG_process_resume(msg_process_t process)
 {
@@ -512,8 +460,7 @@ msg_error_t MSG_process_resume(msg_process_t process)
 /** \ingroup m_process_management
  * \brief Returns true if the process is suspended .
  *
- * This checks whether a process is suspended or not by inspecting the
- * task on which it was waiting for the completion.
+ * This checks whether a process is suspended or not by inspecting the task on which it was waiting for the completion.
  */
 int MSG_process_is_suspended(msg_process_t process)
 {
@@ -536,8 +483,7 @@ void MSG_process_on_exit(int_f_pvoid_pvoid_t fun, void *data) {
 /**
  * \ingroup m_process_management
  * \brief Sets the "auto-restart" flag of the process.
- * If the flag is set to 1, the process will be automatically restarted when
- * its host comes back up.
+ * If the flag is set to 1, the process will be automatically restarted when its host comes back up.
  */
 XBT_PUBLIC(void) MSG_process_auto_restart_set(msg_process_t process, int auto_restart) {
   simcall_process_auto_restart_set(process,auto_restart);
index 6547de0..d88e01f 100644 (file)
@@ -9,17 +9,13 @@
 #include "xbt/synchro_core.h"
 #include "xbt/log.h"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_synchro, msg,
-                                "Logging specific to MSG (synchro)");
-
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_synchro, msg, "Logging specific to MSG (synchro)");
 
 /** @addtogroup msg_synchro
  *
  *  @{
  */
 
-/********************************* Host **************************************/
-
 /** @brief creates a semaphore object of the given initial capacity */
 msg_sem_t MSG_sem_init(int initial_value) {
   return simcall_sem_init(initial_value);
@@ -29,6 +25,7 @@ msg_sem_t MSG_sem_init(int initial_value) {
 void MSG_sem_acquire(msg_sem_t sem) {
   simcall_sem_acquire(sem);
 }
+
 /** @brief locks on a semaphore object up until the provided timeout expires */
 msg_error_t MSG_sem_acquire_timeout(msg_sem_t sem, double timeout) {
   xbt_ex_t e;
@@ -45,10 +42,12 @@ msg_error_t MSG_sem_acquire_timeout(msg_sem_t sem, double timeout) {
   }
   return res;
 }
+
 /** @brief releases the semaphore object */
 void MSG_sem_release(msg_sem_t sem) {
   simcall_sem_release(sem);
 }
+
 void MSG_sem_get_capacity(msg_sem_t sem) {
   simcall_sem_get_capacity(sem);
 }
@@ -56,6 +55,7 @@ void MSG_sem_get_capacity(msg_sem_t sem) {
 void MSG_sem_destroy(msg_sem_t sem) {
   SIMIX_sem_destroy(sem);
 }
+
 /** @brief returns a boolean indicating if this semaphore would block at this very specific time
  *
  * Note that the returned value may be wrong right after the function call, when you try to use it...
@@ -82,5 +82,4 @@ int MSG_barrier_wait(msg_bar_t bar) {
   else
     return 0;
 }
-
 /**@}*/
index 2455645..8c3a95f 100644 (file)
 
 /** @addtogroup m_task_management
  *
- *
- *  Since most scheduling algorithms rely on a concept of task
- *  that can be either <em>computed</em> locally or
- *  <em>transferred</em> on another processor, it seems to be the
- *  right level of abstraction for our purposes. A <em>task</em>
- *  may then be defined by a <em>computing amount</em>, a
- *  <em>message size</em> and some <em>private data</em>.
+ *  Since most scheduling algorithms rely on a concept of task  that can be either <em>computed</em> locally or
+ *  <em>transferred</em> on another processor, it seems to be the right level of abstraction for our purposes.
+ *  A <em>task</em> may then be defined by a <em>computing amount</em>, a <em>message size</em> and
+ *  some <em>private data</em>.
  */
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_task, msg,
-                                "Logging specific to MSG (task)");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_task, msg, "Logging specific to MSG (task)");
 
 /********************************* Task **************************************/
 /** \ingroup m_task_management
  * \brief Creates a new #msg_task_t.
  *
- * A constructor for #msg_task_t taking four arguments and returning the
-   corresponding object.
- * \param name a name for the object. It is for user-level information
-   and can be NULL.
- * \param flop_amount a value of the processing amount (in flop)
-   needed to process this new task. If 0, then it cannot be executed with
-   MSG_task_execute(). This value has to be >=0.
- * \param message_size a value of the amount of data (in bytes) needed to
-   transfer this new task. If 0, then it cannot be transfered with
-   MSG_task_send() and MSG_task_recv(). This value has to be >=0.
- * \param data a pointer to any data may want to attach to the new
-   object.  It is for user-level information and can be NULL. It can
-   be retrieved with the function \ref MSG_task_get_data.
+ * A constructor for #msg_task_t taking four arguments and returning the corresponding object.
+ * \param name a name for the object. It is for user-level information and can be NULL.
+ * \param flop_amount a value of the processing amount (in flop) needed to process this new task.
+ * If 0, then it cannot be executed with MSG_task_execute(). This value has to be >=0.
+ * \param message_size a value of the amount of data (in bytes) needed to transfer this new task. If 0, then it cannot
+ * be transfered with MSG_task_send() and MSG_task_recv(). This value has to be >=0.
+ * \param data a pointer to any data may want to attach to the new object.  It is for user-level information and can
+ * be NULL. It can be retrieved with the function \ref MSG_task_get_data.
  * \see msg_task_t
  * \return The new corresponding object.
  */
-msg_task_t MSG_task_create(const char *name, double flop_amount,
-                         double message_size, void *data)
+msg_task_t MSG_task_create(const char *name, double flop_amount, double message_size, void *data)
 {
   msg_task_t task = xbt_new(s_msg_task_t, 1);
   simdata_task_t simdata = xbt_new(s_simdata_task_t, 1);
@@ -80,14 +70,12 @@ msg_task_t MSG_task_create(const char *name, double flop_amount,
 /** \ingroup m_task_management
  * \brief Creates a new #msg_task_t (a parallel one....).
  *
- * A constructor for #msg_task_t taking six arguments and returning the
- corresponding object.
- * \param name a name for the object. It is for user-level information
- and can be NULL.
+ * A constructor for #msg_task_t taking six arguments and returning the corresponding object.
+ * \param name a name for the object. It is for user-level information and can be NULL.
  * \param host_nb the number of hosts implied in the parallel task.
  * \param host_list an array of \p host_nb msg_host_t.
  * \param flops_amount an array of \p host_nb doubles.
- *                     flops_amount[i] is the total number of operations that have to be performed on host_list[i].
+ *        flops_amount[i] is the total number of operations that have to be performed on host_list[i].
  * \param bytes_amount an array of \p host_nb* \p host_nb doubles.
  * \param data a pointer to any data may want to attach to the new object.
  *             It is for user-level information and can be NULL.
@@ -95,11 +83,8 @@ msg_task_t MSG_task_create(const char *name, double flop_amount,
  * \see msg_task_t
  * \return The new corresponding object.
  */
-msg_task_t
-MSG_parallel_task_create(const char *name, int host_nb,
-                         const msg_host_t * host_list,
-                         double *flops_amount,
-                         double *bytes_amount, void *data)
+msg_task_t MSG_parallel_task_create(const char *name, int host_nb, const msg_host_t * host_list,
+                                    double *flops_amount, double *bytes_amount, void *data)
 {
   msg_task_t task = MSG_task_create(name, 0, 0, data);
   simdata_task_t simdata = task->simdata;
@@ -121,26 +106,19 @@ MSG_parallel_task_create(const char *name, int host_nb,
 /** \ingroup m_task_management
  * \brief Creates a new #msg_gpu_task_t.
 
- * A constructor for #msg_gpu_task_t taking four arguments and returning
-   a pointer to the new created GPU task.
-
- * \param name a name for the object. It is for user-level information
-   and can be NULL.
-
- * \param flops_amount a value of the processing amount (in flop)
-   needed to process this new task. If 0, then it cannot be executed with
-   MSG_gpu_task_execute(). This value has to be >=0.
+ * A constructor for #msg_gpu_task_t taking four arguments and returning a pointer to the new created GPU task.
 
+ * \param name a name for the object. It is for user-level information and can be NULL.
+ * \param flops_amount a value of the processing amount (in flop)needed to process this new task. If 0, then it cannot
+ * be executed with MSG_gpu_task_execute(). This value has to be >=0.
  * \param dispatch_latency time in seconds to load this task on the GPU
-
- * \param collect_latency time in seconds to transfer result from the GPU
-   back to the CPU (host) when done
+ * \param collect_latency time in seconds to transfer result from the GPU back to the CPU (host) when done
 
  * \see msg_gpu_task_t
  * \return The new corresponding object.
  */
-msg_gpu_task_t MSG_gpu_task_create(const char *name, double flops_amount,
-                         double dispatch_latency, double collect_latency)
+msg_gpu_task_t MSG_gpu_task_create(const char *name, double flops_amount, double dispatch_latency,
+                                   double collect_latency)
 {
   msg_gpu_task_t task = xbt_new(s_msg_gpu_task_t, 1);
   simdata_gpu_task_t simdata = xbt_new(s_simdata_gpu_task_t, 1);
@@ -154,7 +132,6 @@ msg_gpu_task_t MSG_gpu_task_create(const char *name, double flops_amount,
   simdata->collect_latency    = collect_latency;
 
   /* TRACE_msg_gpu_task_create(task); FIXME*/
-
   return task;
 }
 /*************** End GPU ***************/
@@ -162,26 +139,22 @@ msg_gpu_task_t MSG_gpu_task_create(const char *name, double flops_amount,
 /** \ingroup m_task_management
  * \brief Return the user data of a #msg_task_t.
  *
- * This function checks whether \a task is a valid pointer or not and return
-   the user data associated to \a task if it is possible.
+ * This function checks whether \a task is a valid pointer and return the user data associated to \a task if possible.
  */
 void *MSG_task_get_data(msg_task_t task)
 {
   xbt_assert((task != NULL), "Invalid parameter");
-
   return (task->data);
 }
 
 /** \ingroup m_task_management
  * \brief Sets the user data of a #msg_task_t.
  *
- * This function allows to associate a new pointer to
-   the user data associated of \a task.
+ * This function allows to associate a new pointer to the user data associated of \a task.
  */
 void MSG_task_set_data(msg_task_t task, void *data)
 {
   xbt_assert((task != NULL), "Invalid parameter");
-
   task->data = data;
 }
 
@@ -189,15 +162,13 @@ void MSG_task_set_data(msg_task_t task, void *data)
  * \brief Sets a function to be called when a task has just been copied.
  * \param callback a callback function
  */
-void MSG_task_set_copy_callback(void (*callback)
-    (msg_task_t task, msg_process_t sender, msg_process_t receiver)) {
+void MSG_task_set_copy_callback(void (*callback) (msg_task_t task, msg_process_t sender, msg_process_t receiver)) {
 
   msg_global->task_copy_callback = callback;
 
   if (callback) {
     SIMIX_comm_set_copy_data_callback(MSG_comm_copy_data_from_SIMIX);
-  }
-  else {
+  } else {
     SIMIX_comm_set_copy_data_callback(SIMIX_comm_copy_pointer_callback);
   }
 }
@@ -249,13 +220,12 @@ void MSG_task_set_name(msg_task_t task, const char *name)
 /** \ingroup m_task_management
  * \brief Destroy a #msg_task_t.
  *
- * Destructor for #msg_task_t. Note that you should free user data, if any, \b
- * before calling this function.
+ * Destructor for #msg_task_t. Note that you should free user data, if any, \b before calling this function.
  *
  * Only the process that owns the task can destroy it.
  * The owner changes after a successful send.
- * If a task is successfully sent, the receiver becomes the owner and is
- * supposed to destroy it. The sender should not use it anymore.
+ * If a task is successfully sent, the receiver becomes the owner and is supposed to destroy it. The sender should not
+ * use it anymore.
  * If the task failed to be sent, the sender remains the owner of the task.
  */
 msg_error_t MSG_task_destroy(msg_task_t task)
@@ -287,11 +257,9 @@ msg_error_t MSG_task_destroy(msg_task_t task)
   return MSG_OK;
 }
 
-
 /** \ingroup m_task_usage
  * \brief Cancel a #msg_task_t.
- * \param task the task to cancel. If it was executed or transfered, it
-          stops the process that were working on it.
+ * \param task the task to cancel. If it was executed or transfered, it stops the process that were working on it.
  */
 msg_error_t MSG_task_cancel(msg_task_t task)
 {
@@ -313,11 +281,10 @@ msg_error_t MSG_task_cancel(msg_task_t task)
 /** \ingroup m_task_management
  * \brief Returns the remaining amount of flops needed to execute a task #msg_task_t.
  *
- * Once a task has been processed, this amount is set to 0. If you want, you
- * can reset this value with #MSG_task_set_flops_amount before restarting the task.
+ * Once a task has been processed, this amount is set to 0. If you want, you can reset this value with
+ * #MSG_task_set_flops_amount before restarting the task.
  */
 double MSG_task_get_flops_amount(msg_task_t task) {
-
   if (task->simdata->compute) {
     return simcall_execution_get_remains(task->simdata->compute);
   } else {
@@ -325,16 +292,13 @@ double MSG_task_get_flops_amount(msg_task_t task) {
   }
 }
 
-
 /** \ingroup m_task_management
  * \brief set the computation amount needed to process a task #msg_task_t.
  *
  * \warning If the computation is ongoing (already started and not finished),
- * it is not modified by this call. Moreover, after its completion, the ongoing
- * execution with set the flops_amount to zero, overriding any value set during
- * the execution.
+ * it is not modified by this call. Moreover, after its completion, the ongoing execution with set the flops_amount to
+ * zero, overriding any value set during the execution.
  */
-
 void MSG_task_set_flops_amount(msg_task_t task, double flops_amount)
 {
   task->simdata->flops_amount = flops_amount;
@@ -343,78 +307,59 @@ void MSG_task_set_flops_amount(msg_task_t task, double flops_amount)
 /** \ingroup m_task_management
  * \brief set the amount data attached with a task #msg_task_t.
  *
- * \warning If the transfer is ongoing (already started and not finished),
- * it is not modified by this call.
+ * \warning If the transfer is ongoing (already started and not finished), it is not modified by this call.
  */
-
 void MSG_task_set_bytes_amount(msg_task_t task, double data_size)
 {
   task->simdata->bytes_amount = data_size;
 }
 
-
 /** \ingroup m_task_management
  * \brief Returns the total amount received by a task #msg_task_t.
  *        If the communication does not exist it will return 0.
- *        So, if the communication has FINISHED or FAILED it returns
- *        zero.
+ *        So, if the communication has FINISHED or FAILED it returns zero.
  */
 double MSG_task_get_remaining_communication(msg_task_t task)
 {
-  xbt_assert((task != NULL)
-              && (task->simdata != NULL), "Invalid parameter");
-  XBT_DEBUG("calling simcall_communication_get_remains(%p)",
-         task->simdata->comm);
+  xbt_assert((task != NULL) && (task->simdata != NULL), "Invalid parameter");
+  XBT_DEBUG("calling simcall_communication_get_remains(%p)", task->simdata->comm);
   return simcall_comm_get_remains(task->simdata->comm);
 }
 
 #ifdef HAVE_LATENCY_BOUND_TRACKING
 /** \ingroup m_task_management
  * \brief Return 1 if communication task is limited by latency, 0 otherwise
- *
  */
 int MSG_task_is_latency_bounded(msg_task_t task)
 {
-  xbt_assert((task != NULL)
-              && (task->simdata != NULL), "Invalid parameter");
-  XBT_DEBUG("calling simcall_communication_is_latency_bounded(%p)",
-         task->simdata->comm);
+  xbt_assert((task != NULL) && (task->simdata != NULL), "Invalid parameter");
+  XBT_DEBUG("calling simcall_communication_is_latency_bounded(%p)", task->simdata->comm);
   return simcall_comm_is_latency_bounded(task->simdata->comm);
 }
 #endif
 
 /** \ingroup m_task_management
  * \brief Returns the size of the data attached to a task #msg_task_t.
- *
  */
 double MSG_task_get_bytes_amount(msg_task_t task)
 {
-  xbt_assert((task != NULL)
-              && (task->simdata != NULL), "Invalid parameter");
-
+  xbt_assert((task != NULL) && (task->simdata != NULL), "Invalid parameter");
   return task->simdata->bytes_amount;
 }
 
-
-
 /** \ingroup m_task_management
- * \brief Changes the priority of a computation task. This priority doesn't affect
- *        the transfer rate. A priority of 2 will make a task receive two times more
- *        cpu power than the other ones.
- *
+ * \brief Changes the priority of a computation task. This priority doesn't affect the transfer rate. A priority of 2
+ *        will make a task receive two times more cpu power than the other ones.
  */
 void MSG_task_set_priority(msg_task_t task, double priority)
 {
-  xbt_assert((task != NULL)
-              && (task->simdata != NULL), "Invalid parameter");
-
+  xbt_assert((task != NULL) && (task->simdata != NULL), "Invalid parameter");
   task->simdata->priority = 1 / priority;
   if (task->simdata->compute)
     simcall_execution_set_priority(task->simdata->compute,
         task->simdata->priority);
 }
 
-
 /** \ingroup m_task_management
  * \brief Changes the maximum CPU utilization of a computation task.
  *        Unit is flops/s.
@@ -431,23 +376,19 @@ void MSG_task_set_bound(msg_task_t task, double bound)
 
   task->simdata->bound = bound;
   if (task->simdata->compute)
-    simcall_execution_set_bound(task->simdata->compute,
-                                      task->simdata->bound);
+    simcall_execution_set_bound(task->simdata->compute, task->simdata->bound);
 }
 
-
 /** \ingroup m_task_management
  * \brief Changes the CPU affinity of a computation task.
  *
- * When pinning the given task to the first CPU core of the given host, use
- * 0x01 for the mask value. Each bit of the mask value corresponds to each CPU
- * core. See taskset(1) on Linux.
+ * When pinning the given task to the first CPU core of the given host, use 0x01 for the mask value. Each bit of the
+ * mask value corresponds to each CPU core. See taskset(1) on Linux.
  *
  * \param task a target task
  * \param host the host having a multi-core CPU
  * \param mask the bit mask of a new CPU affinity setting for the task
  *
- *
  * Usage:
  * 0. Define a host with multiple cores.
  *    \<host id="PM0" power="1E8" core="2"/\>
@@ -463,17 +404,13 @@ void MSG_task_set_bound(msg_task_t task, double bound)
  *
  * See examples/msg/cloud/multicore.c for more information.
  *
- *
  * Note:
  * 1. The current code does not allow an affinity of a task to multiple cores.
- * The mask value 0x03 (i.e., a given task will be executed on the first core
- * or the second core) is not allowed. The mask value 0x01 or 0x02 works. See
- * cpu_cas01.c for details.
- *
- * 2. It is recommended to first compare simulation results in both the Lazy
- * and Full calculation modes (using --cfg=cpu/optim:Full or not). Fix
- * cpu_cas01.c if you find wrong results in the Lazy mode.
+ *    The mask value 0x03 (i.e., a given task will be executed on the first core or the second core) is not allowed.
+ *    The mask value 0x01 or 0x02 works. See cpu_cas01.c for details.
  *
+ * 2. It is recommended to first compare simulation results in both the Lazy and Full calculation modes
+ *    (using --cfg=cpu/optim:Full or not). Fix cpu_cas01.c if you find wrong results in the Lazy mode.
  */
 void MSG_task_set_affinity(msg_task_t task, msg_host_t host, unsigned long mask)
 {
@@ -482,22 +419,19 @@ void MSG_task_set_affinity(msg_task_t task, msg_host_t host, unsigned long mask)
 
   if (mask == 0) {
     /* 0 means clear */
-    {
       /* We need remove_ext() not throwing exception. */
       void *ret = xbt_dict_get_or_null_ext(task->simdata->affinity_mask_db, (char *) host, sizeof(msg_host_t));
       if (ret != NULL)
         xbt_dict_remove_ext(task->simdata->affinity_mask_db, (char *) host, sizeof(host));
-    }
   } else
     xbt_dict_set_ext(task->simdata->affinity_mask_db, (char *) host, sizeof(host), (void *)(uintptr_t) mask, NULL);
 
-  /* We set affinity data of this task. If the task is being executed, we
-   * actually change the affinity setting of the task. Otherwise, this change
-   * will be applied when the task is executed. */
-
+  /* We set affinity data of this task. If the task is being executed, we actually change the affinity setting of the
+   * task. Otherwise, this change will be applied when the task is executed. */
   if (!task->simdata->compute) {
     /* task is not yet executed */
-    XBT_INFO("set affinity(0x%04lx@%s) for %s (not active now)", mask, MSG_host_get_name(host), MSG_task_get_name(task));
+    XBT_INFO("set affinity(0x%04lx@%s) for %s (not active now)", mask, MSG_host_get_name(host),
+             MSG_task_get_name(task));
     return;
   }
 
@@ -506,14 +440,16 @@ void MSG_task_set_affinity(msg_task_t task, msg_host_t host, unsigned long mask)
     msg_host_t host_now = compute->execution.host;  // simix_private.h is necessary
     if (host_now != host) {
       /* task is not yet executed on this host */
-      XBT_INFO("set affinity(0x%04lx@%s) for %s (not active now)", mask, MSG_host_get_name(host), MSG_task_get_name(task));
+      XBT_INFO("set affinity(0x%04lx@%s) for %s (not active now)", mask, MSG_host_get_name(host),
+               MSG_task_get_name(task));
       return;
     }
 
     /* task is being executed on this host. so change the affinity now */
     {
       /* check it works. remove me if it works. */
-      xbt_assert((unsigned long)(uintptr_t) xbt_dict_get_or_null_ext(task->simdata->affinity_mask_db, (char *) host, sizeof(msg_host_t)) == mask);
+      xbt_assert((unsigned long)(uintptr_t) xbt_dict_get_or_null_ext(task->simdata->affinity_mask_db,
+                 (char *) host, sizeof(msg_host_t)) == mask);
     }
 
     XBT_INFO("set affinity(0x%04lx@%s) for %s", mask, MSG_host_get_name(host), MSG_task_get_name(task));
index 4b360b7..1d0c78e 100644 (file)
@@ -196,7 +196,7 @@ msg_vm_t MSG_vm_create(msg_host_t pm, const char *name,
   params.mig_speed = (double)mig_netspeed * 1024 * 1024; // mig_speed
 
   //XBT_INFO("dp rate %f migspeed : %f intensity mem : %d, updatespeed %f, hostspeed %f",params.dp_rate, params.mig_speed, dp_intensity, update_speed, host_speed);
-  vm->set_parameters(&params);
+  vm->setParameters(&params);
 
   return vm;
 }
@@ -359,7 +359,7 @@ static int migration_rx_fun(int argc, char *argv[])
   struct migration_session *ms = (migration_session *) MSG_process_get_data(MSG_process_self());
 
   s_vm_params_t params;
-  ms->vm->get_parameters(&params);
+  ms->vm->parameters(&params);
 
   int need_exit = 0;
 
@@ -688,7 +688,7 @@ static int migration_tx_fun(int argc, char *argv[])
     (migration_session *) MSG_process_get_data(MSG_process_self());
 
   s_vm_params_t params;
-  ms->vm->get_parameters(&params);
+  ms->vm->parameters(&params);
   const sg_size_t ramsize   = params.ramsize;
   const sg_size_t devsize   = params.devsize;
   const int skip_stage1     = params.skip_stage1;
index 7ccd0a7..487a6f1 100644 (file)
@@ -10,7 +10,9 @@
 #ifndef SIMGRID_PORTABLE_H
 #define SIMGRID_PORTABLE_H
 
-#include "src/internal_config.h"
+#include "simgrid_config.h"       /* what was compiled in? */
+#include "src/internal_config.h"  /* some information about the environment */
+
 #include "xbt/base.h"
 #include "xbt/misc.h"
 #ifdef _XBT_WIN32
 # include <signal.h>
 #endif
 
-/****
- **** string handling (parts from http://www.ijs.si/software/snprintf/)
- ****/
-
-/* prototype of C99 functions */
-#if defined(HAVE_SNPRINTF)
-#include <stdio.h>
-#else
-XBT_PUBLIC(int) snprintf(char *, size_t, const char *, /*args */ ...);
-XBT_PUBLIC(int) vsnprintf(char *, size_t, const char *, va_list);
-#endif
-
-
-/* use internal functions when OS provided ones are borken */
-#if defined(HAVE_SNPRINTF) && defined(PREFER_PORTABLE_SNPRINTF)
-XBT_PRIVATE int portable_snprintf(char *str, size_t str_m, const char *fmt,
-                             /*args */ ...);
-XBT_PRIVATE int portable_vsnprintf(char *str, size_t str_m, const char *fmt,
-                              va_list ap);
-#define snprintf  portable_snprintf
-#define vsnprintf portable_vsnprintf
-#endif
-
-/* prototype of GNU functions  */
-#if (defined(__GNUC__) && !defined(__cplusplus))
-XBT_PUBLIC(int) asprintf(char **ptr, const char *fmt, /*args */ ...);
-XBT_PUBLIC(int) vasprintf(char **ptr, const char *fmt, va_list ap);
-#endif
-
-extern int asnprintf(char **ptr, size_t str_m, const char *fmt, /*args */
-                     ...);
-extern int vasnprintf(char **ptr, size_t str_m, const char *fmt,
-                      va_list ap);
-
-/*
- * What we need to extract the backtrace in exception handling code
- */
+/* What we need to extract the backtrace in exception handling code */
 #ifdef HAVE_EXECINFO_H
 #  include <execinfo.h>
 #endif
index 8344b43..daf355b 100644 (file)
@@ -6,7 +6,6 @@
 
 #include "xbt/log.h"
 #include "src/msg/msg_private.h"
-#include "src/msg/msg_mailbox.h"
 
 #include "simgrid/s4u/actor.hpp"
 #include "simgrid/s4u/comm.hpp"
index 331ef22..183803d 100644 (file)
@@ -6,7 +6,6 @@
 
 #include "xbt/log.h"
 #include "src/msg/msg_private.h"
-#include "src/msg/msg_mailbox.h"
 
 #include "simgrid/s4u/async.hpp"
 
index 564ae9c..9dbd00d 100644 (file)
@@ -6,7 +6,6 @@
 
 #include "xbt/log.h"
 #include "src/msg/msg_private.h"
-#include "src/msg/msg_mailbox.h"
 
 #include "simgrid/s4u/comm.hpp"
 
@@ -19,69 +18,69 @@ s4u::Comm::~Comm() {
 
 s4u::Comm &s4u::Comm::send_init(s4u::Actor *sender, s4u::Mailbox &chan) {
   s4u::Comm *res = new s4u::Comm();
-  res->p_sender = sender;
-  res->p_mailbox = &chan;
+  res->sender_ = sender;
+  res->mailbox_ = &chan;
 
   return *res;
 }
 s4u::Comm &s4u::Comm::recv_init(s4u::Actor *receiver, s4u::Mailbox &chan) {
   s4u::Comm *res = new s4u::Comm();
-  res->p_receiver = receiver;
-  res->p_mailbox = &chan;
+  res->receiver_ = receiver;
+  res->mailbox_ = &chan;
 
   return *res;
 }
 
 void s4u::Comm::setRate(double rate) {
   xbt_assert(p_state==inited);
-  p_rate = rate;
+  rate_ = rate;
 }
 
 void s4u::Comm::setSrcData(void * buff) {
   xbt_assert(p_state==inited);
-  xbt_assert(p_dstBuff == NULL, "Cannot set the src and dst buffers at the same time");
-  p_srcBuff = buff;
+  xbt_assert(dstBuff_ == NULL, "Cannot set the src and dst buffers at the same time");
+  srcBuff_ = buff;
 }
 void s4u::Comm::setSrcDataSize(size_t size){
   xbt_assert(p_state==inited);
-  p_srcBuffSize = size;
+  srcBuffSize_ = size;
 }
 void s4u::Comm::setSrcData(void * buff, size_t size) {
   xbt_assert(p_state==inited);
 
-  xbt_assert(p_dstBuff == NULL, "Cannot set the src and dst buffers at the same time");
-  p_srcBuff = buff;
-  p_srcBuffSize = size;
+  xbt_assert(dstBuff_ == NULL, "Cannot set the src and dst buffers at the same time");
+  srcBuff_ = buff;
+  srcBuffSize_ = size;
 }
 void s4u::Comm::setDstData(void ** buff) {
   xbt_assert(p_state==inited);
-  xbt_assert(p_srcBuff == NULL, "Cannot set the src and dst buffers at the same time");
-  p_dstBuff = buff;
+  xbt_assert(srcBuff_ == NULL, "Cannot set the src and dst buffers at the same time");
+  dstBuff_ = buff;
 }
 size_t s4u::Comm::getDstDataSize(){
   xbt_assert(p_state==finished);
-  return p_dstBuffSize;
+  return dstBuffSize_;
 }
 void s4u::Comm::setDstData(void ** buff, size_t size) {
   xbt_assert(p_state==inited);
 
-  xbt_assert(p_srcBuff == NULL, "Cannot set the src and dst buffers at the same time");
-  p_dstBuff = buff;
-  p_dstBuffSize = size;
+  xbt_assert(srcBuff_ == NULL, "Cannot set the src and dst buffers at the same time");
+  dstBuff_ = buff;
+  dstBuffSize_ = size;
 }
 
 void s4u::Comm::start() {
   xbt_assert(p_state == inited);
 
-  if (p_srcBuff != NULL) { // Sender side
-    p_inferior = simcall_comm_isend(p_sender->getInferior(), p_mailbox->getInferior(), p_remains, p_rate,
-        p_srcBuff, p_srcBuffSize,
-        p_matchFunction, p_cleanFunction, p_copyDataFunction,
-        p_userData, p_detached);
-  } else if (p_dstBuff != NULL) { // Receiver side
-    p_inferior = simcall_comm_irecv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
-        p_matchFunction, p_copyDataFunction,
-        p_userData, p_rate);
+  if (srcBuff_ != NULL) { // Sender side
+    p_inferior = simcall_comm_isend(sender_->getInferior(), mailbox_->getInferior(), p_remains, rate_,
+        srcBuff_, srcBuffSize_,
+        matchFunction_, cleanFunction_, copyDataFunction_,
+        p_userData, detached_);
+  } else if (dstBuff_ != NULL) { // Receiver side
+    p_inferior = simcall_comm_irecv(receiver_->getInferior(), mailbox_->getInferior(), dstBuff_, &dstBuffSize_,
+        matchFunction_, copyDataFunction_,
+        p_userData, rate_);
 
   } else {
     xbt_die("Cannot start a communication before specifying whether we are the sender or the receiver");
@@ -94,15 +93,15 @@ void s4u::Comm::wait() {
   if (p_state == started)
     simcall_comm_wait(p_inferior, -1/*timeout*/);
   else {// p_state == inited. Save a simcall and do directly a blocking send/recv
-    if (p_srcBuff != NULL) {
-      simcall_comm_send(p_sender->getInferior(), p_mailbox->getInferior(), p_remains, p_rate,
-          p_srcBuff, p_srcBuffSize,
-          p_matchFunction, p_copyDataFunction,
+    if (srcBuff_ != NULL) {
+      simcall_comm_send(sender_->getInferior(), mailbox_->getInferior(), p_remains, rate_,
+          srcBuff_, srcBuffSize_,
+          matchFunction_, copyDataFunction_,
           p_userData, -1 /*timeout*/);
     } else {
-      simcall_comm_recv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
-          p_matchFunction, p_copyDataFunction,
-          p_userData, -1/*timeout*/, p_rate);
+      simcall_comm_recv(receiver_->getInferior(), mailbox_->getInferior(), dstBuff_, &dstBuffSize_,
+          matchFunction_, copyDataFunction_,
+          p_userData, -1/*timeout*/, rate_);
     }
   }
   p_state = finished;
@@ -117,15 +116,15 @@ void s4u::Comm::wait(double timeout) {
   }
 
   // It's not started yet. Do it in one simcall
-  if (p_srcBuff != NULL) {
-    simcall_comm_send(p_sender->getInferior(), p_mailbox->getInferior(), p_remains, p_rate,
-        p_srcBuff, p_srcBuffSize,
-        p_matchFunction, p_copyDataFunction,
+  if (srcBuff_ != NULL) {
+    simcall_comm_send(sender_->getInferior(), mailbox_->getInferior(), p_remains, rate_,
+        srcBuff_, srcBuffSize_,
+        matchFunction_, copyDataFunction_,
         p_userData, timeout);
   } else { // Receiver
-    simcall_comm_recv(p_receiver->getInferior(), p_mailbox->getInferior(), p_dstBuff, &p_dstBuffSize,
-        p_matchFunction, p_copyDataFunction,
-        p_userData, timeout, p_rate);
+    simcall_comm_recv(receiver_->getInferior(), mailbox_->getInferior(), dstBuff_, &dstBuffSize_,
+        matchFunction_, copyDataFunction_,
+        p_userData, timeout, rate_);
   }
   p_state = finished;
 }
@@ -134,8 +133,8 @@ s4u::Comm &s4u::Comm::send_async(s4u::Actor *sender, Mailbox &dest, void *data,
   s4u::Comm &res = s4u::Comm::send_init(sender, dest);
 
   res.setRemains(simulatedSize);
-  res.p_srcBuff = data;
-  res.p_srcBuffSize = sizeof(void*);
+  res.srcBuff_ = data;
+  res.srcBuffSize_ = sizeof(void*);
 
   res.start();
   return res;
index 3e2e284..ca3415a 100644 (file)
@@ -24,10 +24,10 @@ void s4u::Engine::loadPlatform(const char *platf) {
   SIMIX_create_environment(platf);
 }
 
-void s4u::Engine::register_function(const char*name, int (*code)(int,char**)) {
+void s4u::Engine::registerFunction(const char*name, int (*code)(int,char**)) {
   SIMIX_function_register(name,code);
 }
-void s4u::Engine::register_default(int (*code)(int,char**)) {
+void s4u::Engine::registerDefault(int (*code)(int,char**)) {
   SIMIX_function_register_default(code);
 }
 void s4u::Engine::loadDeployment(const char *deploy) {
index 23a6360..65c4557 100644 (file)
@@ -5,7 +5,6 @@
 
 #include "xbt/log.h"
 #include "src/msg/msg_private.h"
-#include "src/msg/msg_mailbox.h"
 
 #include "simgrid/s4u/actor.hpp"
 #include "simgrid/s4u/comm.hpp"
@@ -23,36 +22,36 @@ namespace s4u {
 
 File::File(const char*fullpath, void *userdata) {
   // this cannot fail because we get a xbt_die if the mountpoint does not exist
-  p_inferior = simcall_file_open(fullpath, Host::current());
-  p_path = fullpath;
+  inferior_ = simcall_file_open(fullpath, Host::current());
+  path_ = fullpath;
 }
 
 File::~File() {
-  simcall_file_close(p_inferior, Host::current());
+  simcall_file_close(inferior_, Host::current());
 }
 
 sg_size_t File::read(sg_size_t size) {
-  return simcall_file_read(p_inferior, size, Host::current());
+  return simcall_file_read(inferior_, size, Host::current());
 }
 sg_size_t File::write(sg_size_t size) {
-  return simcall_file_write(p_inferior,size, Host::current());
+  return simcall_file_write(inferior_,size, Host::current());
 }
 sg_size_t File::size() {
-  return simcall_file_get_size(p_inferior);
+  return simcall_file_get_size(inferior_);
 }
 
 void File::seek(sg_size_t pos) {
-  simcall_file_seek(p_inferior,pos,SEEK_SET);
+  simcall_file_seek(inferior_,pos,SEEK_SET);
 }
 sg_size_t File::tell() {
-  return simcall_file_tell(p_inferior);
+  return simcall_file_tell(inferior_);
 }
 void File::move(const char*fullpath) {
-  simcall_file_move(p_inferior,fullpath);
+  simcall_file_move(inferior_,fullpath);
 }
 void File::unlink() {
   sg_host_t attached = Host::current(); // FIXME: we should check where this file is attached
-  simcall_file_unlink(p_inferior,attached);
+  simcall_file_unlink(inferior_,attached);
 }
 
 }} // namespace simgrid::s4u
index 7aaf021..892337c 100644 (file)
 
 #include <unordered_map>
 
-#include <simgrid/simix.hpp>
-
+#include "simgrid/simix.hpp"
+#include "src/surf/HostImpl.hpp"
 #include "xbt/log.h"
 #include "src/msg/msg_private.h"
 #include "src/simix/smx_process_private.h"
 #include "src/simix/smx_private.hpp"
 #include "src/surf/cpu_interface.hpp"
-#include "src/surf/host_interface.hpp"
-
 #include "simgrid/s4u/host.hpp"
 #include "simgrid/s4u/storage.hpp"
 
 int MSG_HOST_LEVEL;
-int SD_HOST_LEVEL;
 int SIMIX_HOST_LEVEL;
-int ROUTING_HOST_LEVEL;
 int USER_HOST_LEVEL;
 
 namespace simgrid {
@@ -78,27 +74,27 @@ Host *Host::current(){
   return SIMIX_process_get_host(smx_proc);
 }
 
-void Host::turn_on() {
+void Host::turnOn() {
   simgrid::simix::kernel(std::bind(SIMIX_host_on, this));
 }
 
-void Host::turn_off() {
+void Host::turnOff() {
   simgrid::simix::kernel(std::bind(SIMIX_host_off, this, SIMIX_process_self()));
 }
 
-bool Host::is_on() {
+bool Host::isOn() {
   return this->pimpl_cpu->isOn();
 }
 
-int Host::pstates_count() const {
+int Host::pstatesCount() const {
   return this->pimpl_cpu->getNbPStates();
 }
 
-boost::unordered_map<std::string, Storage*> const& Host::mounted_storages() {
+boost::unordered_map<std::string, Storage*> const& Host::mountedStorages() {
   if (mounts == NULL) {
     mounts = new boost::unordered_map<std::string, Storage*> ();
 
-    xbt_dict_t dict = this->mounted_storages_as_dict();
+    xbt_dict_t dict = this->mountedStoragesAsDict();
 
     xbt_dict_cursor_t cursor;
     char *mountname;
@@ -115,7 +111,7 @@ boost::unordered_map<std::string, Storage*> const& Host::mounted_storages() {
 /** Get the properties assigned to a host */
 xbt_dict_t Host::properties() {
   return simgrid::simix::kernel([&] {
-    simgrid::surf::Host* surf_host = this->extension<simgrid::surf::Host>();
+    simgrid::surf::HostImpl* surf_host = this->extension<simgrid::surf::HostImpl>();
     return surf_host->getProperties();
   });
 }
@@ -129,7 +125,7 @@ xbt_swag_t Host::processes()
 }
 
 /** Get the peak power of a host */
-double Host::current_power_peak()
+double Host::currentPowerPeak()
 {
   return simgrid::simix::kernel([&] {
     return this->pimpl_cpu->getCurrentPowerPeak();
@@ -137,7 +133,7 @@ double Host::current_power_peak()
 }
 
 /** Get one power peak (in flops/s) of a host at a given pstate */
-double Host::power_peak_at(int pstate_index)
+double Host::powerPeakAt(int pstate_index)
 {
   return simgrid::simix::kernel([&] {
     return this->pimpl_cpu->getPowerPeakAt(pstate_index);
@@ -154,7 +150,7 @@ int Host::core_count() {
 }
 
 /** @brief Set the pstate at which the host should run */
-void Host::set_pstate(int pstate_index)
+void Host::setPstate(int pstate_index)
 {
   simgrid::simix::kernel(std::bind(
       &simgrid::surf::Cpu::setPState, pimpl_cpu, pstate_index
@@ -166,17 +162,17 @@ int Host::pstate()
   return pimpl_cpu->getPState();
 }
 
-void Host::get_parameters(vm_params_t params)
+void Host::parameters(vm_params_t params)
 {
   simgrid::simix::kernel([&]() {
-    this->extension<simgrid::surf::Host>()->getParams(params);
+    this->extension<simgrid::surf::HostImpl>()->getParams(params);
   });
 }
 
-void Host::set_parameters(vm_params_t params)
+void Host::setParameters(vm_params_t params)
 {
   simgrid::simix::kernel([&]() {
-    this->extension<simgrid::surf::Host>()->setParams(params);
+    this->extension<simgrid::surf::HostImpl>()->setParams(params);
   });
 }
 
@@ -185,10 +181,10 @@ void Host::set_parameters(vm_params_t params)
  * \brief Returns the list of storages mounted on an host.
  * \return a dict containing all storages mounted on the host
  */
-xbt_dict_t Host::mounted_storages_as_dict()
+xbt_dict_t Host::mountedStoragesAsDict()
 {
   return simgrid::simix::kernel([&] {
-    return this->extension<simgrid::surf::Host>()->getMountedStorageList();
+    return this->extension<simgrid::surf::HostImpl>()->getMountedStorageList();
   });
 }
 
@@ -197,10 +193,10 @@ xbt_dict_t Host::mounted_storages_as_dict()
  * \brief Returns the list of storages attached to an host.
  * \return a dict containing all storages attached to the host
  */
-xbt_dynar_t Host::attached_storages()
+xbt_dynar_t Host::attachedStorages()
 {
   return simgrid::simix::kernel([&] {
-    return this->extension<simgrid::surf::Host>()->getAttachedStorageList();
+    return this->extension<simgrid::surf::HostImpl>()->getAttachedStorageList();
   });
 }
 
index 587a72a..14f59b4 100644 (file)
@@ -6,7 +6,6 @@
 
 #include "xbt/log.h"
 #include "src/msg/msg_private.h"
-#include "src/msg/msg_mailbox.h"
 
 #include "simgrid/s4u/mailbox.hpp"
 
@@ -20,12 +19,12 @@ boost::unordered_map <std::string, s4u::Mailbox *> *s4u::Mailbox::mailboxes = ne
 
 
 s4u::Mailbox::Mailbox(const char*name, smx_rdv_t inferior) {
-  p_inferior = inferior;
-  p_name = name;
+  inferior_ = inferior;
+  name_ = name;
   mailboxes->insert({name, this});
 }
 const char *s4u::Mailbox::getName() {
-  return p_name.c_str();
+  return name_.c_str();
 }
 s4u::Mailbox *s4u::Mailbox::byName(const char*name) {
   s4u::Mailbox *res;
index 3b0841b..6b99ef8 100644 (file)
@@ -12,12 +12,12 @@ extern xbt_lib_t storage_lib;
 namespace simgrid {
 namespace s4u {
 
-boost::unordered_map <std::string, Storage *> *Storage::storages = new boost::unordered_map<std::string, Storage*> ();
+boost::unordered_map <std::string, Storage *> *Storage::storages_ = new boost::unordered_map<std::string, Storage*> ();
 Storage::Storage(std::string name, smx_storage_t inferior) {
-  p_name = name;
-  p_inferior = inferior;
+  name_ = name;
+  inferior_ = inferior;
 
-  storages->insert({name, this});
+  storages_->insert({name, this});
 }
 
 Storage::~Storage() {
@@ -25,12 +25,12 @@ Storage::~Storage() {
 }
 
 smx_storage_t Storage::inferior() {
-  return p_inferior;
+  return inferior_;
 }
 Storage &Storage::byName(const char*name) {
   s4u::Storage *res = NULL;
   try {
-    res = storages->at(name);
+    res = storages_->at(name);
   } catch (std::out_of_range& e) {
     smx_storage_t inferior = xbt_lib_get_elm_or_null(storage_lib,name);
     if (inferior == NULL)
@@ -42,17 +42,17 @@ Storage &Storage::byName(const char*name) {
 }
 
 const char*Storage::name() {
-  return p_name.c_str();
+  return name_.c_str();
 }
 
-sg_size_t Storage::size_free() {
-  return simcall_storage_get_free_size(p_inferior);
+sg_size_t Storage::sizeFree() {
+  return simcall_storage_get_free_size(inferior_);
 }
-sg_size_t Storage::size_used() {
-  return simcall_storage_get_used_size(p_inferior);
+sg_size_t Storage::sizeUsed() {
+  return simcall_storage_get_used_size(inferior_);
 }
 sg_size_t Storage::size() {
-  return SIMIX_storage_get_size(p_inferior);
+  return SIMIX_storage_get_size(inferior_);
 }
 
 } /* namespace s4u */
index 25fdbae..5419345 100644 (file)
@@ -248,7 +248,7 @@ xbt_dynar_t SD_dotload_generic(const char * filename, seq_par_t seq_or_par, bool
   }
 
   if (result && !acyclic_graph_detail(result)) {
-    XBT_ERROR("The DOT described in %s is not a DAG. It contains a cycle.", basename((char*)filename));
+    XBT_ERROR("The DOT described in %s is not a DAG. It contains a cycle.", xbt_basename((char*)filename));
     xbt_dynar_free(&result);
     result = NULL;
   }
index c9243b0..93c5ba2 100644 (file)
@@ -4,12 +4,10 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include "src/surf/HostImpl.hpp"
 #include "src/surf/surf_interface.hpp"
-#include "src/surf/host_interface.hpp"
 #include "src/simdag/simdag_private.h"
 #include "simgrid/simdag.h"
-#include "xbt/sysdep.h"
-#include "xbt/dynar.h"
 #include "src/instr/instr_private.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_task, sd, "Logging specific to SimDag (task)");
index a0fe6ec..e77d274 100644 (file)
@@ -4,14 +4,9 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "src/surf/host_interface.hpp"
 #include "src/simdag/simdag_private.h"
-#include "simgrid/simdag.h"
-#include "simgrid/host.h"
-#include <simgrid/s4u/host.hpp>
-#include "xbt/dict.h"
-#include "xbt/lib.h"
-#include "xbt/sysdep.h"
+#include "simgrid/s4u/host.hpp"
+#include "src/surf/HostImpl.hpp"
 #include "surf/surf.h"
 
 /** @brief Returns the route between two workstations
index cbe140a..99aa45e 100644 (file)
@@ -8,10 +8,11 @@
 #include "simgrid/host.h"
 #include <xbt/Extendable.hpp>
 #include <simgrid/s4u/host.hpp>
+
+#include "src/surf/HostImpl.hpp"
 #include "surf/surf.h" // routing_get_network_element_type FIXME:killme
 
 #include "src/simix/smx_private.hpp"
-#include "src/surf/host_interface.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sg_host, sd, "Logging specific to sg_hosts");
 
@@ -85,11 +86,6 @@ void sg_host_init()
     __MSG_host_priv_free((msg_host_priv_t) p);
   });
 
-  ROUTING_HOST_LEVEL = simgrid::s4u::Host::extension_create([](void *p) {
-    delete static_cast<simgrid::surf::NetCard*>(p);
-  });
-
-  SD_HOST_LEVEL = simgrid::s4u::Host::extension_create(NULL);
   SIMIX_HOST_LEVEL = simgrid::s4u::Host::extension_create(SIMIX_host_destroy);
   USER_HOST_LEVEL = simgrid::s4u::Host::extension_create(NULL);
 }
@@ -126,11 +122,11 @@ void sg_host_simix_destroy(sg_host_t host) {
 
 // ========= storage related functions ============
 xbt_dict_t sg_host_get_mounted_storage_list(sg_host_t host){
-  return host->extension<simgrid::surf::Host>()->getMountedStorageList();
+  return host->extension<simgrid::surf::HostImpl>()->getMountedStorageList();
 }
 
 xbt_dynar_t sg_host_get_attached_storage_list(sg_host_t host){
-  return host->extension<simgrid::surf::Host>()->getAttachedStorageList();
+  return host->extension<simgrid::surf::HostImpl>()->getAttachedStorageList();
 }
 
 
@@ -157,7 +153,7 @@ int sg_host_core_count(sg_host_t host) {
  *  @return 1 if the host is active or 0 if it has crashed.
  */
 int sg_host_is_on(sg_host_t host) {
-  return host->is_on();
+  return host->isOn();
 }
 
 /** @brief Returns the number of power states for a host.
@@ -165,7 +161,7 @@ int sg_host_is_on(sg_host_t host) {
  *  See also @ref SURF_plugin_energy.
  */
 int sg_host_get_nb_pstates(sg_host_t host) {
-  return host->pstates_count();
+  return host->pstatesCount();
 }
 
 /** @brief Gets the pstate at which that host currently runs.
@@ -180,7 +176,7 @@ int sg_host_get_pstate(sg_host_t host) {
  *  See also @ref SURF_plugin_energy.
  */
 void sg_host_set_pstate(sg_host_t host,int pstate) {
-  host->set_pstate(pstate);
+  host->setPstate(pstate);
 }
 
 /** @brief Get the properties of an host */
index f3939f5..187e8ae 100644 (file)
@@ -18,6 +18,7 @@
 #include "instr/instr_interface.h"
 #include "simgrid/simix.h"
 #include "simgrid/sg_config.h"
+#include "simgrid_config.h" /* what was compiled in? */
 #ifdef HAVE_SMPI
 #include "smpi/smpi_interface.h"
 #endif
index e65659a..c8bb311 100644 (file)
@@ -54,40 +54,40 @@ xbt_swag_t simcall_host_get_process_list(sg_host_t host)
  * \deprecated */
 double simcall_host_get_current_power_peak(sg_host_t host)
 {
-  return host->current_power_peak();
+  return host->currentPowerPeak();
 }
 
 /** \ingroup simix_host_management
  * \deprecated */
 double simcall_host_get_power_peak_at(sg_host_t host, int pstate_index)
 {
-  return host->power_peak_at(pstate_index);
+  return host->powerPeakAt(pstate_index);
 }
 
 /** \deprecated */
 void simcall_host_get_params(sg_host_t vm, vm_params_t params)
 {
-  vm->get_parameters(params);
+  vm->parameters(params);
 }
 
 /** \deprecated */
 void simcall_host_set_params(sg_host_t vm, vm_params_t params)
 {
-  vm->set_parameters(params);
+  vm->setParameters(params);
 }
 
 /** \ingroup simix_storage_management
  *  \deprecated */
 xbt_dict_t simcall_host_get_mounted_storage_list(sg_host_t host)
 {
-  return host->mounted_storages_as_dict();
+  return host->mountedStoragesAsDict();
 }
 
 /** \ingroup simix_storage_management
  *  \deprecated */
 xbt_dynar_t simcall_host_get_attached_storage_list(sg_host_t host)
 {
-  return host->attached_storages();
+  return host->attachedStorages();
 }
 
 // ***** Other simcalls
index c563ac8..0d5427b 100644 (file)
@@ -8,6 +8,7 @@
 #define _POPPING_PRIVATE_H
 
 #include <xbt/base.h>
+#include <simgrid/simix.h>
 
 SG_BEGIN_DECL()
 
index 54cf74d..218a8c8 100644 (file)
 #endif
 
 #include "src/surf/surf_interface.hpp"
+#include "src/surf/storage_interface.hpp"
+#include "src/surf/xml/platf.hpp"
 #include "smx_private.h"
 #include "smx_private.hpp"
-#include "xbt/heap.h"
-#include "xbt/sysdep.h"
-#include "xbt/log.h"
 #include "xbt/str.h"
 #include "xbt/ex.h"             /* ex_backtrace_display */
 #include "mc/mc.h"
 #include "src/mc/mc_replay.h"
 #include "simgrid/sg_config.h"
 
-#include "src/surf/callbacks.h"
-
 #ifdef HAVE_MC
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_protocol.h"
@@ -258,7 +255,14 @@ void SIMIX_global_init(int *argc, char **argv)
     simgrid::s4u::Host::onCreation.connect([](simgrid::s4u::Host& host) {
       SIMIX_host_create(&host);
     });
-    surf_on_storage_created(SIMIX_storage_create_);
+    simgrid::surf::storageCreatedCallbacks.connect([](simgrid::surf::Storage* storage) {
+      const char* id = storage->getName();
+        // TODO, create sg_storage_by_name
+        sg_storage_t s = xbt_lib_get_elm_or_null(storage_lib, id);
+        xbt_assert(s != NULL, "Storage not found for name %s", id);
+        SIMIX_storage_create_(s);
+      });
+
 
   }
   if (!simix_timers) {
index 9b81242..91cb6c8 100644 (file)
@@ -6,12 +6,10 @@
 
 #include "smx_private.h"
 #include "xbt/sysdep.h"
-#include "xbt/log.h"
-#include "xbt/dict.h"
 #include "mc/mc.h"
 #include "src/mc/mc_replay.h"
 #include "src/surf/virtual_machine.hpp"
-#include "src/surf/host_interface.hpp"
+#include "src/surf/HostImpl.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_host, simix,
                                 "SIMIX hosts");
@@ -28,8 +26,7 @@ void SIMIX_host_create(sg_host_t host) // FIXME: braindead prototype. Take sg_ho
   s_smx_process_t proc;
 
   /* Host structure */
-  smx_host->process_list =
-      xbt_swag_new(xbt_swag_offset(proc, host_proc_hookup));
+  smx_host->process_list = xbt_swag_new(xbt_swag_offset(proc, host_proc_hookup));
 
   /* Update global variables */
   sg_host_simix_set(host, smx_host);
@@ -45,8 +42,8 @@ void SIMIX_host_on(sg_host_t h)
 
   xbt_assert((host != NULL), "Invalid parameters");
 
-  if (h->is_off()) {
-    simgrid::surf::Host* surf_host = h->extension<simgrid::surf::Host>();
+  if (h->isOff()) {
+    simgrid::surf::HostImpl* surf_host = h->extension<simgrid::surf::HostImpl>();
     surf_host->turnOn();
 
     unsigned int cpt;
@@ -94,8 +91,8 @@ void SIMIX_host_off(sg_host_t h, smx_process_t issuer)
 
   xbt_assert((host != NULL), "Invalid parameters");
 
-  if (h->is_on()) {
-    simgrid::surf::Host* surf_host = h->extension<simgrid::surf::Host>();
+  if (h->isOn()) {
+    simgrid::surf::HostImpl* surf_host = h->extension<simgrid::surf::HostImpl>();
     surf_host->turnOff();
 
     /* Clean Simulator data */
@@ -325,10 +322,10 @@ smx_synchro_t SIMIX_execution_parallel_start(const char *name,
     host_list_cpy[i] = host_list[i];
 
   /* Check that we are not mixing VMs and PMs in the parallel task */
-  simgrid::surf::Host *host = host_list[0]->extension<simgrid::surf::Host>();
+  simgrid::surf::HostImpl *host = host_list[0]->extension<simgrid::surf::HostImpl>();
   bool is_a_vm = (nullptr != dynamic_cast<simgrid::surf::VirtualMachine*>(host));
   for (i = 1; i < host_nb; i++) {
-    bool tmp_is_a_vm = (nullptr != dynamic_cast<simgrid::surf::VirtualMachine*>(host_list[i]->extension<simgrid::surf::Host>()));
+    bool tmp_is_a_vm = (nullptr != dynamic_cast<simgrid::surf::VirtualMachine*>(host_list[i]->extension<simgrid::surf::HostImpl>()));
     xbt_assert(is_a_vm == tmp_is_a_vm, "parallel_execute: mixing VMs and PMs is not supported (yet).");
   }
 
@@ -467,7 +464,7 @@ void SIMIX_execution_finish(smx_synchro_t synchro)
             (int)synchro->state);
     }
     /* check if the host is down */
-    if (simcall->issuer->host->is_off()) {
+    if (simcall->issuer->host->isOff()) {
       simcall->issuer->context->iwannadie = 1;
     }
 
@@ -485,7 +482,7 @@ void SIMIX_post_host_execute(smx_synchro_t synchro)
 {
   if (synchro->type == SIMIX_SYNC_EXECUTE && /* FIMXE: handle resource failure
                                                * for parallel tasks too */
-      synchro->execution.host->is_off()) {
+      synchro->execution.host->isOff()) {
     /* If the host running the synchro failed, notice it so that the asking
      * process can be killed if it runs on that host itself */
     synchro->state = SIMIX_FAILED;
index dd2bb72..046ff2f 100644 (file)
@@ -62,7 +62,7 @@ smx_synchro_t SIMIX_file_read(smx_file_t fd, sg_size_t size, sg_host_t host)
   smx_synchro_t synchro;
 
   /* check if the host is active */
-  if (host->is_off()) {
+  if (host->isOff()) {
     THROWF(host_error, 0, "Host %s failed, you cannot call this function",
            sg_host_get_name(host));
   }
@@ -94,7 +94,7 @@ smx_synchro_t SIMIX_file_write(smx_file_t fd, sg_size_t size, sg_host_t host)
   smx_synchro_t synchro;
 
   /* check if the host is active */
-  if (host->is_off()) {
+  if (host->isOff()) {
     THROWF(host_error, 0, "Host %s failed, you cannot call this function",
            sg_host_get_name(host));
   }
@@ -126,7 +126,7 @@ smx_synchro_t SIMIX_file_open(const char* fullpath, sg_host_t host)
   smx_synchro_t synchro;
 
   /* check if the host is active */
-  if (host->is_off()) {
+  if (host->isOff()) {
     THROWF(host_error, 0, "Host %s failed, you cannot call this function",
            sg_host_get_name(host));
   }
@@ -158,7 +158,7 @@ smx_synchro_t SIMIX_file_close(smx_file_t fd, sg_host_t host)
   smx_synchro_t synchro;
 
   /* check if the host is active */
-  if (host->is_off()) {
+  if (host->isOff()) {
     THROWF(host_error, 0, "Host %s failed, you cannot call this function",
            sg_host_get_name(host));
   }
@@ -182,7 +182,7 @@ smx_synchro_t SIMIX_file_close(smx_file_t fd, sg_host_t host)
 int SIMIX_file_unlink(smx_file_t fd, sg_host_t host)
 {
   /* check if the host is active */
-  if (host->is_off()) {
+  if (host->isOff()) {
     THROWF(host_error, 0, "Host %s failed, you cannot call this function",
            sg_host_get_name(host));
   }
@@ -376,7 +376,7 @@ void SIMIX_io_finish(smx_synchro_t synchro)
             (int)synchro->state);
     }
 
-    if (simcall->issuer->host->is_off()) {
+    if (simcall->issuer->host->isOff()) {
       simcall->issuer->context->iwannadie = 1;
     }
 
index 83c7107..0832f20 100644 (file)
@@ -793,7 +793,7 @@ void SIMIX_comm_finish(smx_synchro_t synchro)
 
     /* Check out for errors */
 
-    if (simcall->issuer->host->is_off()) {
+    if (simcall->issuer->host->isOff()) {
       simcall->issuer->context->iwannadie = 1;
       SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
     } else
@@ -871,7 +871,7 @@ void SIMIX_comm_finish(smx_synchro_t synchro)
       }
     }
 
-    if (simcall->issuer->host->is_off()) {
+    if (simcall->issuer->host->isOff()) {
       simcall->issuer->context->iwannadie = 1;
     }
 
index 46007fb..f61113a 100644 (file)
@@ -189,7 +189,7 @@ void SIMIX_process_stop(smx_process_t arg) {
   /* execute the on_exit functions */
   SIMIX_process_on_exit_runall(arg);
   /* Add the process to the list of process to restart, only if the host is down */
-  if (arg->auto_restart && arg->host->is_off()) {
+  if (arg->auto_restart && arg->host->isOff()) {
     SIMIX_host_add_auto_restart_process(arg->host,arg->name,arg->code, arg->data,
                                         sg_host_get_name(arg->host),
                                         SIMIX_timer_get_date(arg->kill_timer),
@@ -268,7 +268,7 @@ smx_process_t SIMIX_process_create(
 
   XBT_DEBUG("Start process %s on host '%s'", name, hostname);
 
-  if (host->is_off()) {
+  if (host->isOff()) {
     int i;
     XBT_WARN("Cannot launch process '%s' on failed host '%s'", name,
           hostname);
@@ -362,7 +362,7 @@ smx_process_t SIMIX_process_attach(
   sg_host_t host = sg_host_by_name(hostname);
   XBT_DEBUG("Attach process %s on host '%s'", name, hostname);
 
-  if (host->is_off()) {
+  if (host->isOff()) {
     XBT_WARN("Cannot launch process '%s' on failed host '%s'",
       name, hostname);
     return nullptr;
@@ -898,7 +898,7 @@ smx_synchro_t SIMIX_process_sleep(smx_process_t process, double duration)
   sg_host_t host = process->host;
 
   /* check if the host is active */
-  if (host->is_off()) {
+  if (host->isOff()) {
     THROWF(host_error, 0, "Host %s failed, you cannot call this function",
            sg_host_get_name(host));
   }
@@ -940,7 +940,7 @@ void SIMIX_post_process_sleep(smx_synchro_t synchro)
         THROW_IMPOSSIBLE;
         break;
     }
-    if (simcall->issuer->host->is_off()) {
+    if (simcall->issuer->host->isOff()) {
       simcall->issuer->context->iwannadie = 1;
     }
     simcall_process_sleep__set__result(simcall, state);
index fe32215..1bf7c7a 100644 (file)
@@ -5,12 +5,9 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "smx_private.h"
-#include "xbt/sysdep.h"
-#include "xbt/log.h"
-#include "xbt/dict.h"
 #include "mc/mc.h"
-#include "src/surf/host_interface.hpp"
 #include "src/surf/virtual_machine.hpp"
+#include "src/surf/HostImpl.hpp"
 
 //If you need to log some stuffs, just uncomment these two lines and uses XBT_DEBUG for instance
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_vm, simix, "Logging specific to SIMIX (vms)");
@@ -40,7 +37,7 @@ sg_host_t SIMIX_vm_create(const char *name, sg_host_t ind_phys_host)
 static long host_get_ramsize(sg_host_t vm, int *overcommit)
 {
   s_vm_params_t params;
-  vm->extension<simgrid::surf::Host>()->getParams(&params);
+  vm->extension<simgrid::surf::HostImpl>()->getParams(&params);
 
   if (overcommit)
     *overcommit = params.overcommit;
@@ -68,7 +65,7 @@ static int __can_be_started(sg_host_t vm)
   }
 
   long total_ramsize_of_vms = 0;
-  xbt_dynar_t dyn_vms = pm->extension<simgrid::surf::Host>()->getVms();
+  xbt_dynar_t dyn_vms = pm->extension<simgrid::surf::HostImpl>()->getVms();
   {
     unsigned int cursor = 0;
     sg_host_t another_vm;
@@ -93,7 +90,7 @@ void SIMIX_vm_start(sg_host_t ind_vm)
 {
   if (__can_be_started(ind_vm))
     static_cast<simgrid::surf::VirtualMachine*>(
-      ind_vm->extension<simgrid::surf::Host>()
+      ind_vm->extension<simgrid::surf::HostImpl>()
     )->setState(SURF_VM_STATE_RUNNING);
   else
     THROWF(vm_error, 0, "The VM %s cannot be started", sg_host_get_name(ind_vm));
@@ -103,7 +100,7 @@ void SIMIX_vm_start(sg_host_t ind_vm)
 e_surf_vm_state_t SIMIX_vm_get_state(sg_host_t ind_vm)
 {
   return static_cast<simgrid::surf::VirtualMachine*>(
-    ind_vm->extension<simgrid::surf::Host>()
+    ind_vm->extension<simgrid::surf::HostImpl>()
   )->getState();
 }
 
@@ -348,7 +345,7 @@ void SIMIX_vm_shutdown(sg_host_t ind_vm, smx_process_t issuer)
 
   /* FIXME: we may have to do something at the surf layer, e.g., vcpu action */
   static_cast<simgrid::surf::VirtualMachine*>(
-    ind_vm->extension<simgrid::surf::Host>()
+    ind_vm->extension<simgrid::surf::HostImpl>()
   )->setState(SURF_VM_STATE_CREATED);
 }
 
index 22fd814..2c7bff8 100644 (file)
@@ -84,21 +84,17 @@ void smpi_group_destroy(MPI_Group group)
 
 void smpi_group_set_mapping(MPI_Group group, int index, int rank)
 {
-  char * key;
   int * val_rank;
 
   if (rank < group->size) {
     group->rank_to_index_map[rank] = index;
     if (index!=MPI_UNDEFINED ) {
       val_rank = (int *) malloc(sizeof(int));
-      *val_rank = rank; 
-      int size = asprintf(&key, "%d", index);
-      if (size!=-1){
-        xbt_dict_set(group->index_to_rank_map, key, val_rank, NULL);
-        free(key);
-      } else {
-        xbt_die("could not allocate memory for asprintf");
-      }
+      *val_rank = rank;
+
+      char * key = bprintf("%d", index);
+      xbt_dict_set(group->index_to_rank_map, key, val_rank, NULL);
+      free(key);
     }
   }
 }
@@ -116,13 +112,10 @@ int smpi_group_index(MPI_Group group, int rank)
 int smpi_group_rank(MPI_Group group, int index)
 {
   int * ptr_rank = NULL;
-  char * key;
-  int size = asprintf(&key, "%d", index);
-  if (size!=-1){
-    ptr_rank = static_cast<int*>(xbt_dict_get_or_null(group->index_to_rank_map, key));
-    xbt_free(key);
-  }else
-    xbt_die("could not allocate memory for asprintf");
+  char * key = bprintf("%d", index);
+  ptr_rank = static_cast<int*>(xbt_dict_get_or_null(group->index_to_rank_map, key));
+  xbt_free(key);
+
   if (!ptr_rank)
     return MPI_UNDEFINED;
   return *ptr_rank;
index 4648703..1024d3d 100644 (file)
@@ -34,33 +34,28 @@ static void log_timed_action (const char *const *action, double clock){
 }
 
 
-static xbt_dynar_t get_reqq_self(){
-   char * key;
-   
-   int size = asprintf(&key, "%d", smpi_process_index());
-   if(size==-1)
-     xbt_die("could not allocate memory for asprintf");
+static xbt_dynar_t get_reqq_self()
+{
+   char * key = bprintf("%d", smpi_process_index());
    xbt_dynar_t dynar_mpi_request = (xbt_dynar_t) xbt_dict_get(reqq, key);
    free(key);
  
    return dynar_mpi_request;
 }
 
-static void set_reqq_self(xbt_dynar_t mpi_request){
-   char * key;
-   
-   int size = asprintf(&key, "%d", smpi_process_index());
-   if(size==-1)
-     xbt_die("could not allocate memory for asprintf");
+static void set_reqq_self(xbt_dynar_t mpi_request)
+{
+   char * key = bprintf("%d", smpi_process_index());
    xbt_dict_set(reqq, key, mpi_request, free);
    free(key);
 }
 
 
 //allocate a single buffer for all sends, growing it if needed
-void* smpi_get_tmp_sendbuffer(int size){
+void* smpi_get_tmp_sendbuffer(int size)
+{
   if (!smpi_process_get_replaying())
-  return xbt_malloc(size);
+    return xbt_malloc(size);
   if (sendbuffer_size<size){
     sendbuffer=static_cast<char*>(xbt_realloc(sendbuffer,size));
     sendbuffer_size=size;
similarity index 87%
rename from src/surf/host_interface.cpp
rename to src/surf/HostImpl.cpp
index bda8a18..df99dc0 100644 (file)
@@ -4,12 +4,11 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "host_interface.hpp"
-
 #include <simgrid/s4u/host.hpp>
 
 #include "src/simix/smx_private.h"
 #include "cpu_cas01.hpp"
+#include "src/surf/HostImpl.hpp"
 #include "simgrid/sg_config.h"
 
 #include "network_interface.hpp"
@@ -27,15 +26,15 @@ simgrid::surf::HostModel *surf_host_model = NULL;
 namespace simgrid {
 namespace surf {
 
-simgrid::xbt::Extension<simgrid::s4u::Host, Host> Host::EXTENSION_ID;
+simgrid::xbt::Extension<simgrid::s4u::Host, HostImpl> HostImpl::EXTENSION_ID;
 
 /*********
  * Model *
  *********/
-Host *HostModel::createHost(const char *name,NetCard *netElm, Cpu *cpu, xbt_dict_t props){
+HostImpl *HostModel::createHost(const char *name,NetCard *netElm, Cpu *cpu, xbt_dict_t props){
   xbt_dynar_t storageList = (xbt_dynar_t)xbt_lib_get_or_null(storage_lib, name, ROUTING_STORAGE_HOST_LEVEL);
 
-  Host *host = new simgrid::surf::Host(surf_host_model, name, props, storageList, cpu);
+  HostImpl *host = new simgrid::surf::HostImpl(surf_host_model, name, props, storageList, cpu);
   XBT_DEBUG("Create host %s with %ld mounted disks", name, xbt_dynar_length(host->p_storage));
   return host;
 }
@@ -117,14 +116,14 @@ Action *HostModel::executeParallelTask(int host_nb,
  ************/
 
 
-void Host::classInit()
+void HostImpl::classInit()
 {
   if (!EXTENSION_ID.valid()) {
-    EXTENSION_ID = simgrid::s4u::Host::extension_create<simgrid::surf::Host>();
+    EXTENSION_ID = simgrid::s4u::Host::extension_create<simgrid::surf::HostImpl>();
   }
 }
 
-Host::Host(simgrid::surf::HostModel *model, const char *name, xbt_dict_t props,
+HostImpl::HostImpl(simgrid::surf::HostModel *model, const char *name, xbt_dict_t props,
                      xbt_dynar_t storage, Cpu *cpu)
  : Resource(model, name)
  , PropertyHolder(props)
@@ -133,7 +132,7 @@ Host::Host(simgrid::surf::HostModel *model, const char *name, xbt_dict_t props,
   p_params.ramsize = 0;
 }
 
-Host::Host(simgrid::surf::HostModel *model, const char *name, xbt_dict_t props, lmm_constraint_t constraint,
+HostImpl::HostImpl(simgrid::surf::HostModel *model, const char *name, xbt_dict_t props, lmm_constraint_t constraint,
                  xbt_dynar_t storage, Cpu *cpu)
  : Resource(model, name, constraint)
  , PropertyHolder(props)
@@ -143,11 +142,11 @@ Host::Host(simgrid::surf::HostModel *model, const char *name, xbt_dict_t props,
 }
 
 /** @brief use destroy() instead of this destructor */
-Host::~Host()
+HostImpl::~HostImpl()
 {
 }
 
-void Host::attach(simgrid::s4u::Host* host)
+void HostImpl::attach(simgrid::s4u::Host* host)
 {
   if (p_host != nullptr)
     xbt_die("Already attached to host %s", host->name().c_str());
@@ -155,26 +154,26 @@ void Host::attach(simgrid::s4u::Host* host)
   p_host = host;
 }
 
-bool Host::isOn() {
+bool HostImpl::isOn() {
   return p_cpu->isOn();
 }
-bool Host::isOff() {
+bool HostImpl::isOff() {
   return p_cpu->isOff();
 }
-void Host::turnOn(){
+void HostImpl::turnOn(){
   if (isOff()) {
     p_cpu->turnOn();
     simgrid::s4u::Host::onStateChange(*this->p_host);
   }
 }
-void Host::turnOff(){
+void HostImpl::turnOff(){
   if (isOn()) {
     p_cpu->turnOff();
     simgrid::s4u::Host::onStateChange(*this->p_host);
   }
 }
 
-simgrid::surf::Storage *Host::findStorageOnMountList(const char* mount)
+simgrid::surf::Storage *HostImpl::findStorageOnMountList(const char* mount)
 {
   simgrid::surf::Storage *st = NULL;
   s_mount_t mnt;
@@ -193,7 +192,7 @@ simgrid::surf::Storage *Host::findStorageOnMountList(const char* mount)
   return st;
 }
 
-xbt_dict_t Host::getMountedStorageList()
+xbt_dict_t HostImpl::getMountedStorageList()
 {
   s_mount_t mnt;
   unsigned int i;
@@ -207,7 +206,7 @@ xbt_dict_t Host::getMountedStorageList()
   return storage_list;
 }
 
-xbt_dynar_t Host::getAttachedStorageList()
+xbt_dynar_t HostImpl::getAttachedStorageList()
 {
   xbt_lib_cursor_t cursor;
   char *key;
@@ -224,7 +223,7 @@ xbt_dynar_t Host::getAttachedStorageList()
   return result;
 }
 
-Action *Host::open(const char* fullpath) {
+Action *HostImpl::open(const char* fullpath) {
 
   simgrid::surf::Storage *st = NULL;
   s_mount_t mnt;
@@ -268,25 +267,25 @@ Action *Host::open(const char* fullpath) {
   return action;
 }
 
-Action *Host::close(surf_file_t fd) {
+Action *HostImpl::close(surf_file_t fd) {
   simgrid::surf::Storage *st = findStorageOnMountList(fd->mount);
   XBT_DEBUG("CLOSE %s on disk '%s'",fd->name, st->getName());
   return st->close(fd);
 }
 
-Action *Host::read(surf_file_t fd, sg_size_t size) {
+Action *HostImpl::read(surf_file_t fd, sg_size_t size) {
   simgrid::surf::Storage *st = findStorageOnMountList(fd->mount);
   XBT_DEBUG("READ %s on disk '%s'",fd->name, st->getName());
   return st->read(fd, size);
 }
 
-Action *Host::write(surf_file_t fd, sg_size_t size) {
+Action *HostImpl::write(surf_file_t fd, sg_size_t size) {
   simgrid::surf::Storage *st = findStorageOnMountList(fd->mount);
   XBT_DEBUG("WRITE %s on disk '%s'",fd->name, st->getName());
   return st->write(fd, size);
 }
 
-int Host::unlink(surf_file_t fd) {
+int HostImpl::unlink(surf_file_t fd) {
   if (!fd){
     XBT_WARN("No such file descriptor. Impossible to unlink");
     return -1;
@@ -313,11 +312,11 @@ int Host::unlink(surf_file_t fd) {
   }
 }
 
-sg_size_t Host::getSize(surf_file_t fd){
+sg_size_t HostImpl::getSize(surf_file_t fd){
   return fd->size;
 }
 
-xbt_dynar_t Host::getInfo( surf_file_t fd)
+xbt_dynar_t HostImpl::getInfo( surf_file_t fd)
 {
   simgrid::surf::Storage *st = findStorageOnMountList(fd->mount);
   sg_size_t *psize = xbt_new(sg_size_t, 1);
@@ -332,11 +331,11 @@ xbt_dynar_t Host::getInfo( surf_file_t fd)
   return info;
 }
 
-sg_size_t Host::fileTell(surf_file_t fd){
+sg_size_t HostImpl::fileTell(surf_file_t fd){
   return fd->current_position;
 }
 
-int Host::fileSeek(surf_file_t fd, sg_offset_t offset, int origin){
+int HostImpl::fileSeek(surf_file_t fd, sg_offset_t offset, int origin){
 
   switch (origin) {
   case SEEK_SET:
@@ -353,7 +352,7 @@ int Host::fileSeek(surf_file_t fd, sg_offset_t offset, int origin){
   }
 }
 
-int Host::fileMove(surf_file_t fd, const char* fullpath){
+int HostImpl::fileMove(surf_file_t fd, const char* fullpath){
   /* Check if the new full path is on the same mount point */
   if(!strncmp((const char*)fd->mount, fullpath, strlen(fd->mount))) {
     sg_size_t *psize, *new_psize;
@@ -383,7 +382,7 @@ int Host::fileMove(surf_file_t fd, const char* fullpath){
   }
 }
 
-xbt_dynar_t Host::getVms()
+xbt_dynar_t HostImpl::getVms()
 {
   xbt_dynar_t dyn = xbt_dynar_new(sizeof(simgrid::surf::VirtualMachine*), NULL);
 
@@ -393,19 +392,19 @@ xbt_dynar_t Host::getVms()
        iter !=  simgrid::surf::VMModel::ws_vms.end(); ++iter) {
 
     simgrid::surf::VirtualMachine *ws_vm = &*iter;
-    if (this == ws_vm->p_hostPM->extension(simgrid::surf::Host::EXTENSION_ID))
+    if (this == ws_vm->p_hostPM->extension(simgrid::surf::HostImpl::EXTENSION_ID))
       xbt_dynar_push(dyn, &ws_vm);
   }
 
   return dyn;
 }
 
-void Host::getParams(vm_params_t params)
+void HostImpl::getParams(vm_params_t params)
 {
   *params = p_params;
 }
 
-void Host::setParams(vm_params_t params)
+void HostImpl::setParams(vm_params_t params)
 {
   /* may check something here. */
   p_params = *params;
similarity index 94%
rename from src/surf/host_interface.hpp
rename to src/surf/HostImpl.hpp
index f1c199d..69d0ce6 100644 (file)
@@ -23,7 +23,7 @@ namespace simgrid {
 namespace surf {
 
 class XBT_PRIVATE HostModel;
-class XBT_PRIVATE Host;
+class XBT_PRIVATE HostImpl;
 class XBT_PRIVATE HostAction;
 
 
@@ -52,7 +52,7 @@ public:
   HostModel() : Model() {}
   ~HostModel() override {}
 
-  Host *createHost(const char *name, NetCard *net, Cpu *cpu, xbt_dict_t props);
+  HostImpl *createHost(const char *name, NetCard *net, Cpu *cpu, xbt_dict_t props);
 
   virtual void adjustWeightOfDummyCpuActions();
   virtual Action *executeParallelTask(int host_nb,
@@ -71,11 +71,11 @@ public:
  * @brief SURF Host interface class
  * @details An host represents a machine with a aggregation of a Cpu, a RoutingEdge and a Storage
  */
-class Host :
-    public simgrid::surf::Resource,
-   public simgrid::surf::PropertyHolder {
+class HostImpl
+: public simgrid::surf::Resource,
+  public simgrid::surf::PropertyHolder {
 public:
-  static simgrid::xbt::Extension<simgrid::s4u::Host, Host> EXTENSION_ID;
+  static simgrid::xbt::Extension<simgrid::s4u::Host, HostImpl> EXTENSION_ID;
 
 public:
   static void classInit(); // must be called before the first use of that class
@@ -88,7 +88,7 @@ public:
    * @param storage The Storage associated to this Host
    * @param cpu The Cpu associated to this Host
    */
-  Host(HostModel *model, const char *name, xbt_dict_t props,
+  HostImpl(HostModel *model, const char *name, xbt_dict_t props,
           xbt_dynar_t storage, Cpu *cpu);
 
   /**
@@ -101,12 +101,12 @@ public:
    * @param storage The Storage associated to this Host
    * @param cpu The Cpu associated to this Host
    */
-  Host(HostModel *model, const char *name, xbt_dict_t props,
+  HostImpl(HostModel *model, const char *name, xbt_dict_t props,
       lmm_constraint_t constraint, xbt_dynar_t storage, Cpu *cpu);
 
   /* Host destruction logic */
   /**************************/
-  ~Host();
+  ~HostImpl();
 
 public:
   HostModel *getModel()
diff --git a/src/surf/callbacks.cpp b/src/surf/callbacks.cpp
deleted file mode 100644 (file)
index 7af364a..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Copyright (c) 2015. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include <xbt/asserts.h>
-
-#include "src/surf/callbacks.h"
-#include "src/surf/surf_interface.hpp"
-#include "src/surf/host_interface.hpp"
-
-void surf_on_storage_created(void (*callback)(sg_storage_t))
-{
-  simgrid::surf::storageCreatedCallbacks.connect([callback](simgrid::surf::Storage* storage) {
-    const char* id = storage->getName();
-    // TODO, create sg_storage_by_name
-    sg_storage_t s = xbt_lib_get_elm_or_null(storage_lib, id);
-    xbt_assert(s != NULL, "Storage not found for name %s", id);
-    callback(s);
-  });
-}
diff --git a/src/surf/callbacks.h b/src/surf/callbacks.h
deleted file mode 100644 (file)
index 4713790..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* Copyright (c) 2015. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#ifndef SIMGRID_SURF_CALLBACKS_H
-#define SIMGRID_SURF_CALLBACKS_H
-
-/** \file callbacks.h
- *
- *  C interface for the C++ SURF callbacks.
- */
-
-#include <xbt/base.h>
-#include "simgrid/host.h"
-#include "simgrid/msg.h"
-
-SG_BEGIN_DECL();
-
-XBT_PRIVATE void surf_on_storage_created(void (*callback)(sg_storage_t));
-
-SG_END_DECL();
-
-#endif
index 3f1ab84..008a0c0 100644 (file)
@@ -83,15 +83,12 @@ CpuCas01Model::~CpuCas01Model()
 }
 
 Cpu *CpuCas01Model::createCpu(simgrid::s4u::Host *host, xbt_dynar_t speedPeak,
-                      int pstate, double speedScale,
-                          tmgr_trace_t speedTrace, int core,
-                          int initiallyOn,
-                          tmgr_trace_t state_trace)
+     tmgr_trace_t speedTrace, int core, tmgr_trace_t state_trace)
 {
   xbt_assert(xbt_dynar_getfirst_as(speedPeak, double) > 0.0,
       "Speed has to be >0.0. Did you forget to specify the mandatory power attribute?");
   xbt_assert(core > 0, "Invalid number of cores %d. Must be larger than 0", core);
-  Cpu *cpu = new CpuCas01(this, host, speedPeak, pstate, speedScale, speedTrace, core, initiallyOn, state_trace);
+  Cpu *cpu = new CpuCas01(this, host, speedPeak, speedTrace, core, state_trace);
   return cpu;
 }
 
@@ -104,13 +101,11 @@ double CpuCas01Model::next_occuring_event_full(double /*now*/)
  * Resource *
  ************/
 CpuCas01::CpuCas01(CpuCas01Model *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeak,
-                         int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
-                         int initiallyOn, tmgr_trace_t stateTrace)
+    tmgr_trace_t speedTrace, int core,  tmgr_trace_t stateTrace)
 : Cpu(model, host,
-  lmm_constraint_new(model->getMaxminSystem(), this, core * speedScale * xbt_dynar_get_as(speedPeak, pstate, double)),
-  speedPeak, pstate,
-  core, xbt_dynar_get_as(speedPeak, pstate, double), speedScale,
-    initiallyOn) {
+    lmm_constraint_new(model->getMaxminSystem(), this, core * xbt_dynar_get_as(speedPeak, 0/*pstate*/, double)),
+    speedPeak, core, xbt_dynar_get_as(speedPeak, 0/*pstate*/, double))
+{
 
   XBT_DEBUG("CPU create: peak=%f, pstate=%d", p_speed.peak, m_pstate);
 
index d2022aa..3a5a2b9 100644 (file)
@@ -27,11 +27,8 @@ public:
   CpuCas01Model();
   ~CpuCas01Model();
 
-  Cpu *createCpu(simgrid::s4u::Host *host, xbt_dynar_t speedPeak, int pstate,
-                   double speedScale,
-                          tmgr_trace_t speedTrace, int core,
-                          int initiallyOn,
-                          tmgr_trace_t state_trace) override;
+  Cpu *createCpu(simgrid::s4u::Host *host, xbt_dynar_t speedPeak,
+      tmgr_trace_t speedTrace, int core, tmgr_trace_t state_trace) override;
   double next_occuring_event_full(double now) override;
   ActionList *p_cpuRunningActionSetThatDoesNotNeedBeingChecked;
 };
@@ -43,8 +40,7 @@ public:
 class CpuCas01 : public Cpu {
 public:
   CpuCas01(CpuCas01Model *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeak,
-        int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
-        int initiallyOn, tmgr_trace_t stateTrace) ;
+      tmgr_trace_t speedTrace, int core, tmgr_trace_t stateTrace) ;
   ~CpuCas01();
   void apply_event(tmgr_trace_iterator_t event, double value) override;
   CpuAction *execution_start(double size) override;
index 50b4ee1..e6a50ec 100644 (file)
@@ -7,6 +7,7 @@
 #include <xbt/dynar.h>
 #include "cpu_interface.hpp"
 #include "plugins/energy.hpp"
+#include "src/instr/instr_private.h" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
 
 XBT_LOG_EXTERNAL_CATEGORY(surf_kernel);
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu, surf,
@@ -128,23 +129,19 @@ void CpuModel::updateActionsStateFull(double now, double delta)
  * Resource *
  ************/
 Cpu::Cpu(Model *model, simgrid::s4u::Host *host,
-       xbt_dynar_t speedPeakList, int pstate,
-     int core, double speedPeak, double speedScale,
-     int initiallyOn)
- : Cpu(model, host, NULL/*constraint*/, speedPeakList, pstate, core, speedPeak, speedScale, initiallyOn)
+    xbt_dynar_t speedPeakList, int core, double speedPeak)
+ : Cpu(model, host, NULL/*constraint*/, speedPeakList, core, speedPeak)
 {
 }
 
 Cpu::Cpu(Model *model, simgrid::s4u::Host *host, lmm_constraint_t constraint,
-        xbt_dynar_t speedPeakList, int pstate,
-      int core, double speedPeak,
-        double speedScale, int initiallyOn)
- : Resource(model, host->name().c_str(), constraint, initiallyOn)
+    xbt_dynar_t speedPeakList, int core, double speedPeak)
+ : Resource(model, host->name().c_str(), constraint)
  , m_core(core)
  , m_host(host)
 {
   p_speed.peak = speedPeak;
-  p_speed.scale = speedScale;
+  p_speed.scale = 1;
   host->pimpl_cpu = this;
   xbt_assert(p_speed.scale > 0, "Available speed has to be >0");
 
@@ -156,8 +153,6 @@ Cpu::Cpu(Model *model, simgrid::s4u::Host *host, lmm_constraint_t constraint,
     xbt_dynar_push(p_speedPeakList, &value);
   }
 
-  m_pstate = pstate;
-
   /* Currently, we assume that a VM does not have a multicore CPU. */
   if (core > 1)
     xbt_assert(model == surf_cpu_model_pm);
index 6e8e71a..768d8d6 100644 (file)
@@ -43,18 +43,13 @@ public:
    * @brief Create a Cpu
    *
    * @param host The host that will have this CPU
-   * @param speedPeak The peak spead (max speed in Flops)
-   * @param pstate [TODO]
-   * @param speedScale The speed scale (in [O;1] available speed from peak)
+   * @param speedPeak The peak spead (max speed in Flops when no external load comes from a trace)
    * @param speedTrace Trace variations
    * @param core The number of core of this Cpu
-   * @param initiallyOn [TODO]
    * @param state_trace [TODO]
    */
   virtual Cpu *createCpu(simgrid::s4u::Host *host, xbt_dynar_t speedPeak,
-                          int pstate, double speedScale,
                           tmgr_trace_t speedTrace, int core,
-                          int initiallyOn,
                           tmgr_trace_t state_trace)=0;
 
   void updateActionsStateLazy(double now, double delta);
@@ -79,17 +74,11 @@ public:
    * @param host The host in which this Cpu should be plugged
    * @param constraint The lmm constraint associated to this Cpu if it is part of a LMM component
    * @param speedPeakList [TODO]
-   * @param pstate [TODO]
    * @param core The number of core of this Cpu
    * @param speedPeak The speed peak of this Cpu in flops (max speed)
-   * @param speedScale The speed scale of this Cpu in [0;1] (available amount)
-   * @param initiallyOn whether it is created running or crashed
    */
   Cpu(simgrid::surf::Model *model, simgrid::s4u::Host *host,
-    lmm_constraint_t constraint,
-    xbt_dynar_t speedPeakList, int pstate,
-    int core, double speedPeak, double speedScale,
-    int initiallyOn);
+    lmm_constraint_t constraint, xbt_dynar_t speedPeakList, int core, double speedPeak);
 
   /**
    * @brief Cpu constructor
@@ -97,16 +86,11 @@ public:
    * @param model The CpuModel associated to this Cpu
    * @param host The host in which this Cpu should be plugged
    * @param speedPeakList [TODO]
-   * @param pstate
    * @param core The number of core of this Cpu
    * @param speedPeak The speed peak of this Cpu in flops (max speed)
-   * @param speedScale The speed scale of this Cpu in [0;1] (available amount)
-   * @param initiallyOn whether it is created running or crashed
    */
   Cpu(simgrid::surf::Model *model, simgrid::s4u::Host *host,
-      xbt_dynar_t speedPeakList, int pstate,
-    int core, double speedPeak, double speedScale,
-    int initiallyOn);
+      xbt_dynar_t speedPeakList, int core, double speedPeak);
 
   ~Cpu();
 
index 2cc517e..20392ff 100644 (file)
@@ -415,19 +415,15 @@ CpuTiModel::~CpuTiModel()
 }
 
 Cpu *CpuTiModel::createCpu(simgrid::s4u::Host *host,
-                         xbt_dynar_t speedPeak,
-                         int pstate,
-                           double speedScale,
-                           tmgr_trace_t speedTrace,
-                           int core,
-                           int initiallyOn,
-                           tmgr_trace_t stateTrace)
+    xbt_dynar_t speedPeak,
+    tmgr_trace_t speedTrace,
+    int core,
+    tmgr_trace_t stateTrace)
 {
   xbt_assert(core==1,"Multi-core not handled with this model yet");
   xbt_assert(xbt_dynar_getfirst_as(speedPeak, double) > 0.0,
       "Speed has to be >0.0. Did you forget to specify the mandatory speed attribute?");
-  CpuTi *cpu = new CpuTi(this, host, speedPeak, pstate, speedScale, speedTrace,
-               core, initiallyOn, stateTrace);
+  CpuTi *cpu = new CpuTi(this, host, speedPeak, speedTrace, core, stateTrace);
   return cpu;
 }
 
@@ -471,15 +467,14 @@ void CpuTiModel::updateActionsState(double now, double /*delta*/)
  * Resource *
  ************/
 CpuTi::CpuTi(CpuTiModel *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeak,
-        int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
-        int initiallyOn, tmgr_trace_t stateTrace)
-  : Cpu(model, host, NULL, pstate, core, 0, speedScale, initiallyOn)
+        tmgr_trace_t speedTrace, int core,
+        tmgr_trace_t stateTrace)
+  : Cpu(model, host, NULL, core, 0)
 {
   xbt_assert(core==1,"Multi-core not handled by this model yet");
   m_core = core;
 
-  p_speed.scale = speedScale;
-  availTrace_ = new CpuTiTgmr(speedTrace, speedScale);
+  availTrace_ = new CpuTiTgmr(speedTrace, 1/*scale*/);
 
   actionSet_ = new ActionTiList();
 
index 1c5d3ec..2f01f7f 100644 (file)
@@ -111,8 +111,8 @@ typedef boost::intrusive::list<CpuTiAction, ActionTiListOptions > ActionTiList;
 class CpuTi : public Cpu {
 public:
   CpuTi(CpuTiModel *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeak,
-        int pstate, double speedScale, tmgr_trace_t speedTrace, int core,
-        int initiallyOn, tmgr_trace_t stateTrace) ;
+        tmgr_trace_t speedTrace, int core,
+        tmgr_trace_t stateTrace) ;
   ~CpuTi();
 
   void set_speed_trace(tmgr_trace_t trace) override;
@@ -150,9 +150,7 @@ public:
   CpuTiModel();
   ~CpuTiModel();
   Cpu *createCpu(simgrid::s4u::Host *host,  xbt_dynar_t speedPeak,
-                          int pstate, double speedScale,
-                          tmgr_trace_t speedTrace, int core,
-                          int initiallyOn, tmgr_trace_t state_trace) override;
+      tmgr_trace_t speedTrace, int core, tmgr_trace_t state_trace) override;
   double next_occuring_event(double now) override;
   void updateActionsState(double now, double delta) override;
 
index 4c66fc7..ac9b57d 100644 (file)
@@ -8,7 +8,7 @@
 
 #include "storage_interface.hpp"
 #include "cpu_interface.hpp"
-#include "host_interface.hpp"
+#include "src/surf/HostImpl.hpp"
 #include "network_interface.hpp"
 
 #ifndef SURF_HOST_CLM03_HPP_
index e79947a..fc53997 100644 (file)
@@ -6,7 +6,8 @@
 
 #include "src/instr/instr_private.h"
 
-#include "src/surf/surf_private.h"
+#include "src/surf/surf_routing.hpp"
+#include "src/surf/xml/platf_private.hpp"
 #include "xbt/graph.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_routing, instr, "Tracing platform hierarchy");
@@ -122,14 +123,14 @@ static void linkContainers (container_t src, container_t dst, xbt_dict_t filter)
   XBT_DEBUG ("  linkContainers %s <-> %s", src->name, dst->name);
 }
 
-static void recursiveGraphExtraction (AS_t rc, container_t container, xbt_dict_t filter)
+static void recursiveGraphExtraction (simgrid::surf::As *rc, container_t container, xbt_dict_t filter)
 {
   if (!TRACE_platform_topology()){
     XBT_DEBUG("Graph extraction disabled by user.");
     return;
   }
-  XBT_DEBUG ("Graph extraction for routing_component = %s", surf_AS_get_name(rc));
-  if (!xbt_dict_is_empty(surf_AS_get_routing_sons(rc))){
+  XBT_DEBUG ("Graph extraction for routing_component = %s", rc->name_);
+  if (!xbt_dict_is_empty(rc->sons_)){
     xbt_dict_cursor_t cursor = NULL;
     AS_t rc_son;
     char *child_name;
index dc0d4f9..64ba10d 100644 (file)
@@ -9,6 +9,7 @@
 #include "network_cm02.hpp"
 #include "maxmin_private.hpp"
 #include "simgrid/sg_config.h"
+#include "src/instr/instr_private.h" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_network);
 
@@ -162,7 +163,7 @@ NetworkCm02Model::NetworkCm02Model()
 
   routing_model_create(createLink("__loopback__",
                                 498000000, NULL, 0.000015, NULL,
-                                1 /*SURF_RESOURCE_ON*/, NULL,
+                                NULL,
                                 SURF_LINK_FATPIPE, NULL));
 
   if (p_updateMechanism == UM_LAZY) {
@@ -176,7 +177,7 @@ NetworkCm02Model::NetworkCm02Model()
 Link* NetworkCm02Model::createLink(const char *name,
     double bw_initial, tmgr_trace_t bw_trace,
     double lat_initial, tmgr_trace_t lat_trace,
-    int initiallyOn, tmgr_trace_t state_trace,
+    tmgr_trace_t state_trace,
     e_surf_link_sharing_policy_t policy, xbt_dict_t properties)
 {
   xbt_assert(NULL == Link::byName(name),
@@ -184,7 +185,7 @@ Link* NetworkCm02Model::createLink(const char *name,
              name);
 
   Link* link = new NetworkCm02Link(this, name, properties, p_maxminSystem, sg_bandwidth_factor * bw_initial,
-                     initiallyOn, state_trace, bw_initial, bw_trace, lat_initial, lat_trace, policy);
+                     state_trace, bw_initial, bw_trace, lat_initial, lat_trace, policy);
   Link::onCreation(link);
   return link;
 }
@@ -436,17 +437,12 @@ Action *NetworkCm02Model::communicate(NetCard *src, NetCard *dst,
 NetworkCm02Link::NetworkCm02Link(NetworkCm02Model *model, const char *name, xbt_dict_t props,
     lmm_system_t system,
     double constraint_value,
-    int initiallyOn, tmgr_trace_t state_trace,
+    tmgr_trace_t state_trace,
     double bw_peak, tmgr_trace_t bw_trace,
     double lat_initial, tmgr_trace_t lat_trace,
     e_surf_link_sharing_policy_t policy)
 : Link(model, name, props, lmm_constraint_new(system, this, constraint_value), state_trace)
 {
-  if (initiallyOn)
-    turnOn();
-  else
-    turnOff();
-
   m_bandwidth.scale = 1.0;
   m_bandwidth.peak = bw_peak;
   if (bw_trace)
index 7637d0e..f1c6b68 100644 (file)
@@ -43,7 +43,7 @@ public:
   Link* createLink(const char *name,
       double bw_initial, tmgr_trace_t bw_trace,
       double lat_initial, tmgr_trace_t lat_trace,
-      int initiallyOn, tmgr_trace_t state_trace,
+      tmgr_trace_t state_trace,
       e_surf_link_sharing_policy_t policy,
       xbt_dict_t properties) override;
   void updateActionsStateLazy(double now, double delta) override;
@@ -64,7 +64,7 @@ public:
   NetworkCm02Link(NetworkCm02Model *model, const char *name, xbt_dict_t props,
       lmm_system_t system,
       double constraint_value,
-      int initiallyOn, tmgr_trace_t state_trace,
+      tmgr_trace_t state_trace,
       double bw_peak, tmgr_trace_t bw_trace,
       double lat_initial, tmgr_trace_t lat_trace,
       e_surf_link_sharing_policy_t policy);
index f428c3a..fea074d 100644 (file)
@@ -38,7 +38,7 @@ public:
   createLink(const char *name,
       double bw_initial, tmgr_trace_t bw_trace,
       double lat_initial, tmgr_trace_t lat_trace,
-      int initiallyOn, tmgr_trace_t state_trace,
+      tmgr_trace_t state_trace,
       e_surf_link_sharing_policy_t policy,
       xbt_dict_t properties)          override { DIE_IMPOSSIBLE; }
 };
index 43efa04..ecc9e63 100644 (file)
@@ -8,9 +8,10 @@
 #include <utility>
 
 #include "network_ib.hpp"
+
+#include "src/surf/HostImpl.hpp"
 #include "simgrid/sg_config.h"
 #include "maxmin_private.hpp"
-#include "src/surf/host_interface.hpp"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_network);
 
index 547145b..a1cb5d3 100644 (file)
@@ -114,7 +114,6 @@ void netlink_parse_init(sg_platf_link_cbarg_t link){
                       link->bandwidth_trace,
                       link->latency,
                       link->latency_trace,
-                      link->initiallyOn,
                       link->state_trace, link->policy, link->properties);
     xbt_free(link_id);
     link_id = bprintf("%s_DOWN", link->id);
@@ -123,7 +122,6 @@ void netlink_parse_init(sg_platf_link_cbarg_t link){
                       link->bandwidth_trace,
                       link->latency,
                       link->latency_trace,
-                      link->initiallyOn,
                       link->state_trace, link->policy, link->properties);
     xbt_free(link_id);
   } else {
@@ -132,7 +130,6 @@ void netlink_parse_init(sg_platf_link_cbarg_t link){
         link->bandwidth_trace,
         link->latency,
         link->latency_trace,
-        link->initiallyOn,
         link->state_trace, link->policy, link->properties);
   }
 }
index ca9f7e1..1977d96 100644 (file)
@@ -84,7 +84,6 @@ public:
    * @param bw_trace The trace associated to the Link bandwidth
    * @param lat_initial The initial latency of the Link in seconds
    * @param lat_trace The trace associated to the Link latency
-   * @param initiallyOn The initial Link (state)[e_surf_resource_state_t]
    * @param state_trace The trace associated to the Link (state)[e_surf_resource_state_t]
    * @param policy The sharing policy of the Link
    * @param properties Dictionary of properties associated to this Resource
@@ -95,7 +94,6 @@ public:
                                    tmgr_trace_t bw_trace,
                                    double lat_initial,
                                    tmgr_trace_t lat_trace,
-                                   int initiallyOn,
                                    tmgr_trace_t state_trace,
                                    e_surf_link_sharing_policy_t policy,
                                    xbt_dict_t properties)=0;
index a14c184..491fa43 100644 (file)
@@ -5,9 +5,11 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "src/surf/network_ns3.hpp"
+
+#include "src/surf/HostImpl.hpp"
 #include "src/surf/surf_private.h"
-#include "src/surf/host_interface.hpp"
 #include "simgrid/sg_config.h"
+#include "src/instr/instr_private.h" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(ns3);
 
@@ -33,17 +35,13 @@ static void parse_ns3_add_link(sg_platf_link_cbarg_t link)
 {
   XBT_DEBUG("NS3_ADD_LINK '%s'",link->id);
 
-  if(!IPV4addr) IPV4addr = xbt_dynar_new(sizeof(char*),free);
+  if(!IPV4addr)
+    IPV4addr = xbt_dynar_new(sizeof(char*),free);
 
   surf_network_model->createLink(link->id,
-                                     link->bandwidth,
-                                     link->bandwidth_trace,
-                                     link->latency,
-                                     link->latency_trace,
-                                     link->initiallyOn,
-                                     link->state_trace,
-                                     link->policy,
-                                     link->properties);
+      link->bandwidth, link->bandwidth_trace,
+      link->latency, link->latency_trace,
+      link->state_trace, link->policy, link->properties);
 }
 
 static void simgrid_ns3_add_router(simgrid::surf::NetCard* router)
@@ -259,14 +257,11 @@ NetworkNS3Model::~NetworkNS3Model() {
 }
 
 Link* NetworkNS3Model::createLink(const char *name,
-                                   double bw_initial,
-                                   tmgr_trace_t bw_trace,
-                                   double lat_initial,
-                                   tmgr_trace_t lat_trace,
-                                   int initiallyOn,
-                                   tmgr_trace_t state_trace,
-                                   e_surf_link_sharing_policy_t policy,
-                                   xbt_dict_t properties){
+    double bw_initial, tmgr_trace_t bw_trace,
+    double lat_initial, tmgr_trace_t lat_trace,
+    tmgr_trace_t state_trace,
+    e_surf_link_sharing_policy_t policy,
+    xbt_dict_t properties){
   if (bw_trace)
     XBT_INFO("The NS3 network model doesn't support bandwidth state traces");
   if (lat_trace)
index 716dc4c..fa19671 100644 (file)
@@ -44,14 +44,11 @@ public:
 
   ~NetworkNS3Model();
   Link* createLink(const char *name,
-                                     double bw_initial,
-                                     tmgr_trace_t bw_trace,
-                                     double lat_initial,
-                                     tmgr_trace_t lat_trace,
-                                     int initiallyOn,
-                                     tmgr_trace_t state_trace,
-                                     e_surf_link_sharing_policy_t policy,
-                                     xbt_dict_t properties);
+      double bw_initial, tmgr_trace_t bw_trace,
+      double lat_initial, tmgr_trace_t lat_trace,
+      tmgr_trace_t state_trace,
+      e_surf_link_sharing_policy_t policy,
+      xbt_dict_t properties) override;
   xbt_dynar_t getRoute(NetCard *src, NetCard *dst);
   Action *communicate(NetCard *src, NetCard *dst, double size, double rate);
   double next_occuring_event(double now) override;
index 02ffe37..c5c9f3a 100644 (file)
@@ -7,11 +7,11 @@
 #include <utility>
 #include <vector>
 
-#include <simgrid/plugins/energy.h>
-#include <simgrid/simix.hpp>
-#include <src/surf/plugins/energy.hpp>
-#include <src/surf/cpu_interface.hpp>
-#include <src/surf/virtual_machine.hpp>
+#include "simgrid/plugins/energy.h"
+#include "simgrid/simix.hpp"
+#include "src/surf/plugins/energy.hpp"
+#include "src/surf/cpu_interface.hpp"
+#include "src/surf/virtual_machine.hpp"
 
 /** @addtogroup SURF_plugin_energy
 
@@ -65,7 +65,7 @@ simgrid::xbt::Extension<simgrid::s4u::Host, HostEnergy> HostEnergy::EXTENSION_ID
 /* Computes the consumption so far.  Called lazily on need. */
 void HostEnergy::update()
 {
-  simgrid::surf::Host* surf_host = host->extension<simgrid::surf::Host>();
+  simgrid::surf::HostImpl* surf_host = host->extension<simgrid::surf::HostImpl>();
   double start_time = this->last_updated;
   double finish_time = surf_get_clock();
   double cpu_load;
@@ -83,7 +83,7 @@ void HostEnergy::update()
   double previous_energy = this->total_energy;
 
   double instantaneous_consumption;
-  if (host->is_off())
+  if (host->isOff())
     instantaneous_consumption = this->watts_off;
   else
     instantaneous_consumption = this->getCurrentWattsValue(cpu_load);
@@ -199,7 +199,7 @@ void HostEnergy::initWattsRangeList()
 
 /* **************************** events  callback *************************** */
 static void onCreation(simgrid::s4u::Host& host) {
-  simgrid::surf::Host* surf_host = host.extension<simgrid::surf::Host>();
+  simgrid::surf::HostImpl* surf_host = host.extension<simgrid::surf::HostImpl>();
   if (dynamic_cast<simgrid::surf::VirtualMachine*>(surf_host)) // Ignore virtual machines
     return;
   host.extension_set(new HostEnergy(&host));
@@ -207,10 +207,10 @@ static void onCreation(simgrid::s4u::Host& host) {
 
 static void onActionStateChange(simgrid::surf::CpuAction *action, e_surf_action_state_t previous) {
   const char *name = getActionCpu(action)->getName();
-  simgrid::surf::Host *host = sg_host_by_name(name)->extension<simgrid::surf::Host>();
+  simgrid::surf::HostImpl *host = sg_host_by_name(name)->extension<simgrid::surf::HostImpl>();
   simgrid::surf::VirtualMachine *vm = dynamic_cast<simgrid::surf::VirtualMachine*>(host);
   if (vm) // If it's a VM, take the corresponding PM
-    host = vm->getPm()->extension<simgrid::surf::Host>();
+    host = vm->getPm()->extension<simgrid::surf::HostImpl>();
 
   HostEnergy *host_energy = host->p_host->extension<HostEnergy>();
 
@@ -219,7 +219,7 @@ static void onActionStateChange(simgrid::surf::CpuAction *action, e_surf_action_
 }
 
 static void onHostStateChange(simgrid::s4u::Host &host) {
-  simgrid::surf::Host* surf_host = host.extension<simgrid::surf::Host>();
+  simgrid::surf::HostImpl* surf_host = host.extension<simgrid::surf::HostImpl>();
   if (dynamic_cast<simgrid::surf::VirtualMachine*>(surf_host)) // Ignore virtual machines
     return;
 
@@ -231,7 +231,7 @@ static void onHostStateChange(simgrid::s4u::Host &host) {
 
 static void onHostDestruction(simgrid::s4u::Host& host) {
   // Ignore virtual machines
-  simgrid::surf::Host* surf_host = host.extension<simgrid::surf::Host>();
+  simgrid::surf::HostImpl* surf_host = host.extension<simgrid::surf::HostImpl>();
   if (dynamic_cast<simgrid::surf::VirtualMachine*>(surf_host))
     return;
   HostEnergy *host_energy = host.extension<HostEnergy>();
index e2610ac..b854921 100644 (file)
@@ -8,9 +8,10 @@
 
 #include <xbt/base.h>
 
-#include "src/surf/host_interface.hpp"
 #include <map>
 
+#include "src/surf/HostImpl.hpp"
+
 #ifndef ENERGY_CALLBACK_HPP_
 #define ENERGY_CALLBACK_HPP_
 
index 8754117..5d5e099 100644 (file)
@@ -52,7 +52,7 @@ HostL07Model::HostL07Model() : HostModel() {
   routing_model_create(surf_network_model->createLink("__loopback__",
                                                     498000000, NULL,
                                                     0.000015, NULL,
-                                                    1/*ON*/, NULL,
+                                                    NULL,
                                                     SURF_LINK_FATPIPE, NULL));
 }
 
@@ -167,7 +167,7 @@ void HostL07Model::updateActionsState(double /*now*/, double delta) {
       while ((cnst = lmm_get_cnst_from_var(p_maxminSystem, action->getVariable(), i++))) {
         void *constraint_id = lmm_constraint_id(cnst);
 
-        if (static_cast<Host*>(constraint_id)->isOff()) {
+        if (static_cast<HostImpl*>(constraint_id)->isOff()) {
           XBT_DEBUG("Action (%p) Failed!!", action);
           action->finish();
           action->setState(SURF_ACTION_FAILED);
@@ -296,13 +296,9 @@ Action *NetworkL07Model::communicate(NetCard *src, NetCard *dst,
 }
 
 Cpu *CpuL07Model::createCpu(simgrid::s4u::Host *host,  xbt_dynar_t powerPeakList,
-                          int pstate, double power_scale,
-                          tmgr_trace_t power_trace, int core,
-                          int initiallyOn,
-                          tmgr_trace_t state_trace)
+    tmgr_trace_t power_trace, int core, tmgr_trace_t state_trace)
 {
-  CpuL07 *cpu = new CpuL07(this, host, powerPeakList, pstate, power_scale, power_trace,
-                         core, initiallyOn, state_trace);
+  CpuL07 *cpu = new CpuL07(this, host, powerPeakList, power_trace, core, state_trace);
   return cpu;
 }
 
@@ -311,7 +307,6 @@ Link* NetworkL07Model::createLink(const char *name,
                                  tmgr_trace_t bw_trace,
                                  double lat_initial,
                                  tmgr_trace_t lat_trace,
-                                 int initiallyOn,
                                  tmgr_trace_t state_trace,
                                  e_surf_link_sharing_policy_t policy,
                                  xbt_dict_t properties)
@@ -320,10 +315,10 @@ Link* NetworkL07Model::createLink(const char *name,
            "Link '%s' declared several times in the platform file.", name);
 
   Link* link = new LinkL07(this, name, properties,
-                 bw_initial, bw_trace,
-           lat_initial, lat_trace,
-           initiallyOn, state_trace,
-           policy);
+      bw_initial, bw_trace,
+      lat_initial, lat_trace,
+      state_trace,
+      policy);
   Link::onCreation(link);
   return link;
 }
@@ -333,13 +328,12 @@ Link* NetworkL07Model::createLink(const char *name,
  ************/
 
 CpuL07::CpuL07(CpuL07Model *model, simgrid::s4u::Host *host,
-               xbt_dynar_t speedPeakList, int pstate,
-         double speedScale, tmgr_trace_t speedTrace,
-             int core, int initiallyOn, tmgr_trace_t state_trace)
- : Cpu(model, host, speedPeakList, pstate,
-     core, xbt_dynar_get_as(speedPeakList,pstate,double), speedScale, initiallyOn)
+    xbt_dynar_t speedPeakList,
+    tmgr_trace_t speedTrace,
+    int core, tmgr_trace_t state_trace)
+ : Cpu(model, host, speedPeakList, core, xbt_dynar_get_as(speedPeakList,0,double))
 {
-  p_constraint = lmm_constraint_new(model->getMaxminSystem(), this, xbt_dynar_get_as(speedPeakList,pstate,double) * speedScale);
+  p_constraint = lmm_constraint_new(model->getMaxminSystem(), this, xbt_dynar_get_as(speedPeakList,0,double));
 
   if (speedTrace)
     p_speed.event = future_evt_set->add_trace(speedTrace, 0.0, this);
@@ -355,7 +349,7 @@ CpuL07::~CpuL07()
 LinkL07::LinkL07(NetworkL07Model *model, const char* name, xbt_dict_t props,
              double bw_initial, tmgr_trace_t bw_trace,
              double lat_initial, tmgr_trace_t lat_trace,
-             int initiallyOn, tmgr_trace_t state_trace,
+             tmgr_trace_t state_trace,
              e_surf_link_sharing_policy_t policy)
  : Link(model, name, props, lmm_constraint_new(model->getMaxminSystem(), this, bw_initial), state_trace)
 {
@@ -363,17 +357,12 @@ LinkL07::LinkL07(NetworkL07Model *model, const char* name, xbt_dict_t props,
   if (bw_trace)
     m_bandwidth.event = future_evt_set->add_trace(bw_trace, 0.0, this);
 
-  if (initiallyOn)
-    turnOn();
-  else
-    turnOff();
-
   m_latency.peak = lat_initial;
   if (lat_trace)
     m_latency.event = future_evt_set->add_trace(lat_trace, 0.0, this);
 
   if (policy == SURF_LINK_FATPIPE)
-  lmm_constraint_shared(getConstraint());
+    lmm_constraint_shared(getConstraint());
 }
 
 Action *CpuL07::execution_start(double size)
index 1476127..74209df 100644 (file)
@@ -10,7 +10,7 @@
 
 #include <xbt/base.h>
 
-#include "host_interface.hpp"
+#include "src/surf/HostImpl.hpp"
 
 #ifndef HOST_L07_HPP_
 #define HOST_L07_HPP_
@@ -55,9 +55,7 @@ public:
   ~CpuL07Model();
 
   Cpu *createCpu(simgrid::s4u::Host *host,  xbt_dynar_t speedPeakList,
-                          int pstate, double speedScale,
                           tmgr_trace_t speedTrace, int core,
-                          int initiallyOn,
                           tmgr_trace_t state_trace) override;
   HostL07Model *p_hostModel;
 };
@@ -71,7 +69,6 @@ public:
       tmgr_trace_t bw_trace,
       double lat_initial,
       tmgr_trace_t lat_trace,
-      int initiallyOn,
       tmgr_trace_t state_trace,
       e_surf_link_sharing_policy_t policy,
       xbt_dict_t properties) override;
@@ -88,9 +85,8 @@ public:
 
 class CpuL07 : public Cpu {
 public:
-  CpuL07(CpuL07Model *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeakList, int pstate,
-     double power_scale, tmgr_trace_t power_trace,
-     int core, int initiallyOn, tmgr_trace_t state_trace);
+  CpuL07(CpuL07Model *model, simgrid::s4u::Host *host, xbt_dynar_t speedPeakList,
+     tmgr_trace_t power_trace, int core, tmgr_trace_t state_trace);
   ~CpuL07();
   bool isUsed() override;
   void apply_event(tmgr_trace_iterator_t event, double value) override;
@@ -107,7 +103,6 @@ public:
           tmgr_trace_t bw_trace,
           double lat_initial,
           tmgr_trace_t lat_trace,
-          int initiallyOn,
           tmgr_trace_t state_trace,
           e_surf_link_sharing_policy_t policy);
   ~LinkL07(){ };
index a3ae7d8..e3f704f 100644 (file)
@@ -10,6 +10,7 @@
 #include "xbt/dict.h"
 #include "xbt/RngStream.h"
 #include <xbt/signal.hpp>
+#include "src/surf/HostImpl.hpp"
 #include "surf/surf.h"
 
 #include "src/simix/smx_private.h"
@@ -18,7 +19,6 @@
 #include "src/surf/xml/platf_private.hpp"
 
 #include "src/surf/cpu_interface.hpp"
-#include "src/surf/host_interface.hpp"
 #include "src/surf/network_interface.hpp"
 #include "surf/surf_routing.h" // FIXME: brain dead public header
 #include "src/surf/surf_routing_cluster.hpp"
@@ -101,11 +101,14 @@ void sg_platf_new_host(sg_platf_host_cbarg_t host)
 
   simgrid::surf::Cpu *cpu = surf_cpu_model_pm->createCpu( h,
       host->speed_peak,
-      host->pstate,
-      host->speed_scale, host->speed_trace,
+      host->speed_trace,
       host->core_amount,
-      host->initiallyOn, host->state_trace);
+      host->state_trace);
   surf_host_model->createHost(host->id, netcard, cpu, host->properties)->attach(h);
+
+  if (host->pstate != 0)
+    cpu->setPState(host->pstate);
+
   simgrid::s4u::Host::onCreation(*h);
 
   if (TRACE_is_enabled() && TRACE_needs_platform())
@@ -273,9 +276,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster)
       host.pstate = 0;
 
       //host.power_peak = cluster->power;
-      host.speed_scale = 1.0;
       host.core_amount = cluster->core_amount;
-      host.initiallyOn = 1;
       host.coord = "";
       sg_platf_new_host(&host);
       xbt_dynar_free(&host.speed_peak);
@@ -304,7 +305,6 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster)
         link.id        = tmp_link;
         link.bandwidth = cluster->loopback_bw;
         link.latency   = cluster->loopback_lat;
-        link.initiallyOn = 1;
         link.policy    = SURF_LINK_FATPIPE;
         sg_platf_new_link(&link);
         info_loop.link_up   = Link::byName(tmp_link);
@@ -325,7 +325,6 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster)
         link.id = tmp_link;
         link.bandwidth = cluster->limiter_link;
         link.latency = 0;
-        link.initiallyOn = 1;
         link.policy = SURF_LINK_SHARED;
         sg_platf_new_link(&link);
         info_lim.link_up = Link::byName(tmp_link);
@@ -389,7 +388,6 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster)
     link.id        = link_backbone;
     link.bandwidth = cluster->bb_bw;
     link.latency   = cluster->bb_lat;
-    link.initiallyOn = 1;
     link.policy    = cluster->bb_sharing_policy;
 
     sg_platf_new_link(&link);
index 20e209b..803c934 100644 (file)
@@ -4,7 +4,7 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "host_interface.hpp"
+#include "src/surf/HostImpl.hpp"
 #include "surf_interface.hpp"
 #include "network_interface.hpp"
 #include "surf_routing_cluster.hpp"
@@ -18,12 +18,12 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_kernel);
  * TOOLS *
  *********/
 
-static simgrid::surf::Host *get_casted_host(sg_host_t host){ //FIXME: killme
-  return host->extension<simgrid::surf::Host>();
+static simgrid::surf::HostImpl *get_casted_host(sg_host_t host){ //FIXME: killme
+  return host->extension<simgrid::surf::HostImpl>();
 }
 
 static simgrid::surf::VirtualMachine *get_casted_vm(sg_host_t host){
-  return static_cast<simgrid::surf::VirtualMachine*>(host->extension<simgrid::surf::Host>());
+  return static_cast<simgrid::surf::VirtualMachine*>(host->extension<simgrid::surf::HostImpl>());
 }
 
 extern double NOW;
index a2624dd..6f02607 100644 (file)
@@ -4,16 +4,18 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
+#include "src/portable.h"
 #include "surf_private.h"
 #include "surf_interface.hpp"
 #include "network_interface.hpp"
 #include "cpu_interface.hpp"
-#include "host_interface.hpp"
+#include "src/surf/HostImpl.hpp"
 #include "src/simix/smx_host_private.h"
 #include "surf_routing.hpp"
 #include "simgrid/sg_config.h"
 #include "mc/mc.h"
 #include "virtual_machine.hpp"
+#include "src/instr/instr_private.h" // TRACE_is_enabled(). FIXME: remove by subscribing tracing to the surf signals
 
 XBT_LOG_NEW_CATEGORY(surf, "All SURF categories");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_kernel, surf,
@@ -264,12 +266,6 @@ int find_model_description(s_surf_model_description_t * table,
   return -1;
 }
 
-static XBT_INLINE void routing_asr_prop_free(void *p)
-{
-  //xbt_dict_t elm = (xbt_dict_t) p;
-  //xbt_dict_free(&elm); FIXME: leaking in some case? That's a sometimes double-free with AsCluster::~AsCluster
-}
-
 static XBT_INLINE void surf_storage_free(void *r)
 {
   delete static_cast<simgrid::surf::Storage*>(r);
@@ -316,10 +312,10 @@ void surf_init(int *argc, char **argv)
   sg_host_init();
 
   XBT_DEBUG("Add routing levels");
-  ROUTING_PROP_ASR_LEVEL = xbt_lib_add_level(as_router_lib,routing_asr_prop_free);
+  ROUTING_PROP_ASR_LEVEL = xbt_lib_add_level(as_router_lib, NULL);
 
   XBT_DEBUG("Add SURF levels");
-  simgrid::surf::Host::classInit();
+  simgrid::surf::HostImpl::classInit();
   SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,surf_storage_free);
 
   xbt_init(argc, argv);
index 2719ed6..4b3a940 100644 (file)
@@ -54,6 +54,10 @@ extern XBT_PRIVATE simgrid::xbt::signal<void(void)> surfExitCallbacks;
 
 int XBT_PRIVATE __surf_is_absolute_file_path(const char *file_path);
 
+static inline char* sg_storage_name(sg_storage_t storage) {
+  return storage->key;
+}
+
 /***********
  * Classes *
  ***********/
index 2cf7e4c..336a532 100644 (file)
@@ -7,15 +7,9 @@
 #ifndef _SURF_SURF_PRIVATE_H
 #define _SURF_SURF_PRIVATE_H
 
-#include <xbt/base.h>
-
 #include "surf/surf.h"
 #include "surf/maxmin.h"
-#include "xbt/log.h"
 #include "src/surf/trace_mgr.hpp"
-#include "src/instr/instr_private.h"
-#include "surf/surfxml_parse_values.h"
-#include "src/surf/xml/platf_private.hpp"
 
 #define NO_MAX_DURATION -1.0
 
@@ -65,32 +59,15 @@ XBT_PUBLIC(void) routing_exit(void);
 XBT_PUBLIC(void) storage_register_callbacks(void);
 
 XBT_PUBLIC(void) routing_register_callbacks(void);
-XBT_PUBLIC(void) routing_route_free(sg_platf_route_cbarg_t route); // FIXME: make previous function private to routing again?
 
 XBT_PUBLIC(void) generic_get_graph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges, AS_t rc);
-/**
- * Resource protected methods
- */
-XBT_PRIVATE void surfxml_bufferstack_push(int _new);
-XBT_PRIVATE void surfxml_bufferstack_pop(int _new);
 XBT_PRIVATE void parse_after_config(void);
 
-XBT_PUBLIC_DATA(int) surfxml_bufferstack_size;
-
-XBT_PRIVATE void sg_platf_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect);
-
 /********** Tracing **********/
 /* from surf_instr.c */
 void TRACE_surf_host_set_speed(double date, const char *resource, double power);
 void TRACE_surf_link_set_bandwidth(double date, const char *resource, double bandwidth);
 
-/********** Instr. **********/
-
-XBT_PRIVATE void sg_instr_AS_begin(sg_platf_AS_cbarg_t AS);
-XBT_PRIVATE void sg_instr_new_router(sg_platf_router_cbarg_t router);
-XBT_PRIVATE void sg_instr_new_host(sg_platf_host_cbarg_t host);
-XBT_PRIVATE void sg_instr_AS_end(void);
-
 SG_END_DECL()
 
 #endif                          /* _SURF_SURF_PRIVATE_H */
index 3028a23..073de70 100644 (file)
@@ -5,12 +5,10 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "surf_routing.hpp"
-#include "surf_routing_private.hpp"
 #include "surf_routing_cluster.hpp"
 
 #include "simgrid/sg_config.h"
 #include "storage_interface.hpp"
-#include "surf/surfxml_parse_values.h"
 
 #include "src/surf/surf_routing_cluster_torus.hpp"
 #include "src/surf/surf_routing_cluster_fat_tree.hpp"
@@ -616,14 +614,11 @@ void sg_platf_new_cabinet(sg_platf_cabinet_cbarg_t cabinet)
     }
     s_sg_platf_host_cbarg_t host = SG_PLATF_HOST_INITIALIZER;
     memset(&host, 0, sizeof(host));
-    host.initiallyOn   = 1;
     host.pstate        = 0;
-    host.speed_scale   = 1.0;
     host.core_amount   = 1;
 
     s_sg_platf_link_cbarg_t link = SG_PLATF_LINK_INITIALIZER;
     memset(&link, 0, sizeof(link));
-    link.initiallyOn = 1;
     link.policy    = SURF_LINK_FULLDUPLEX;
     link.latency   = cabinet->lat;
     link.bandwidth = cabinet->bw;
@@ -670,9 +665,9 @@ void sg_platf_new_peer(sg_platf_peer_cbarg_t peer)
   char *router_id = NULL;
 
   XBT_DEBUG(" ");
-  host_id = HOST_PEER(peer->id);
-  link_id = LINK_PEER(peer->id);
-  router_id = ROUTER_PEER(peer->id);
+  host_id = bprintf("peer_%s", peer->id);
+  link_id = bprintf("link_%s", peer->id);
+  router_id = bprintf("router_%s", peer->id);
 
   XBT_DEBUG("<AS id=\"%s\"\trouting=\"Cluster\">", peer->id);
   s_sg_platf_AS_cbarg_t AS = SG_PLATF_AS_INITIALIZER;
@@ -683,14 +678,12 @@ void sg_platf_new_peer(sg_platf_peer_cbarg_t peer)
   XBT_DEBUG("<host\tid=\"%s\"\tpower=\"%f\"/>", host_id, peer->speed);
   s_sg_platf_host_cbarg_t host = SG_PLATF_HOST_INITIALIZER;
   memset(&host, 0, sizeof(host));
-  host.initiallyOn = 1;
   host.id = host_id;
 
   host.speed_peak = xbt_dynar_new(sizeof(double), NULL);
   xbt_dynar_push(host.speed_peak,&peer->speed);
   host.pstate = 0;
   //host.power_peak = peer->power;
-  host.speed_scale = 1.0;
   host.speed_trace = peer->availability_trace;
   host.state_trace = peer->state_trace;
   host.core_amount = 1;
@@ -699,7 +692,6 @@ void sg_platf_new_peer(sg_platf_peer_cbarg_t peer)
 
   s_sg_platf_link_cbarg_t link = SG_PLATF_LINK_INITIALIZER;
   memset(&link, 0, sizeof(link));
-  link.initiallyOn = 1;
   link.policy  = SURF_LINK_SHARED;
   link.latency = peer->lat;
 
index 5671de1..c3b614b 100644 (file)
 #include <xbt/signal.hpp>
 
 #include "surf_interface.hpp"
+#include "src/surf/xml/platf_private.hpp" // FIXME: including this here is pure madness. KILKILKIL XML.
 #include <float.h>
 
 #include <vector>
 #include <map>
 
+SG_BEGIN_DECL()
 XBT_PUBLIC(void) routing_model_create( void *loopback);
+XBT_PRIVATE xbt_node_t new_xbt_graph_node (xbt_graph_t graph, const char *name, xbt_dict_t nodes);
+XBT_PRIVATE xbt_edge_t new_xbt_graph_edge (xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xbt_dict_t edges);
+SG_END_DECL()
 
 namespace simgrid {
 namespace surf {
index c5e1d63..6af5f56 100644 (file)
@@ -16,7 +16,6 @@
 #include "xbt/dynar.h"
 #include "xbt/graph.h"
 
-#include "surf_routing_private.hpp"
 #include "network_interface.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_routing_generic, surf_route, "Generic implementation of the surf routing");
index 9b364b1..be5d606 100644 (file)
@@ -5,7 +5,6 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "surf_routing_cluster.hpp"
-#include "surf_routing_private.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_cluster, surf, "Routing part of surf");
 
@@ -143,7 +142,6 @@ void AsCluster::create_links_for_node(sg_platf_cluster_cbarg_t cluster, int id,
   link.id = link_id;
   link.bandwidth = cluster->bw;
   link.latency = cluster->lat;
-  link.initiallyOn = 1;
   link.policy = cluster->sharing_policy;
   sg_platf_new_link(&link);
 
index 4e40b92..93ba4eb 100644 (file)
@@ -6,7 +6,6 @@
 #include <vector>
 #include <iostream>
 
-#include "src/surf/surf_routing_private.hpp"
 #include "src/surf/surf_routing_cluster_fat_tree.hpp"
 #include "xbt/lib.h"
 
@@ -475,7 +474,6 @@ FatTreeNode::FatTreeNode(sg_platf_cluster_cbarg_t cluster, int id, int level,
     memset(&linkTemplate, 0, sizeof(linkTemplate));
     linkTemplate.bandwidth = cluster->limiter_link;
     linkTemplate.latency = 0;
-    linkTemplate.initiallyOn = 1;
     linkTemplate.policy = SURF_LINK_SHARED;
     linkTemplate.id = bprintf("limiter_%d", id);
     sg_platf_new_link(&linkTemplate);
@@ -486,7 +484,6 @@ FatTreeNode::FatTreeNode(sg_platf_cluster_cbarg_t cluster, int id, int level,
     memset(&linkTemplate, 0, sizeof(linkTemplate));
     linkTemplate.bandwidth = cluster->loopback_bw;
     linkTemplate.latency = cluster->loopback_lat;
-    linkTemplate.initiallyOn = 1;
     linkTemplate.policy = SURF_LINK_FATPIPE;
     linkTemplate.id = bprintf("loopback_%d", id);
     sg_platf_new_link(&linkTemplate);
@@ -504,7 +501,6 @@ FatTreeLink::FatTreeLink(sg_platf_cluster_cbarg_t cluster,
   memset(&linkTemplate, 0, sizeof(linkTemplate));
   linkTemplate.bandwidth = cluster->bw;
   linkTemplate.latency = cluster->lat;
-  linkTemplate.initiallyOn = 1;
   linkTemplate.policy = cluster->sharing_policy; // sthg to do with that ?
   linkTemplate.id = bprintf("link_from_%d_to_%d_%d", downNode->id, upNode->id,
                             uniqueId);
index 5653259..8cd9b74 100644 (file)
@@ -4,7 +4,6 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "src/surf/surf_routing_private.hpp"
 #include "src/surf/surf_routing_cluster_torus.hpp"
 #include "src/surf/xml/platf.hpp" // FIXME: move that back to the parsing area
 
@@ -60,7 +59,6 @@ namespace simgrid {
         link.id = link_id;
         link.bandwidth = cluster->bw;
         link.latency = cluster->lat;
-        link.initiallyOn = 1;
         link.policy = cluster->sharing_policy;
         sg_platf_new_link(&link);
         s_surf_parsing_link_up_down_t info;
index c0ae31a..0d2108d 100644 (file)
@@ -4,7 +4,6 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "src/surf/surf_routing_private.hpp"
 #include "src/surf/surf_routing_dijkstra.hpp"
 #include "src/surf/network_interface.hpp"
 
index 9601c1b..2f297fd 100644 (file)
@@ -4,7 +4,6 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "src/surf/surf_routing_private.hpp"
 #include "src/surf/surf_routing_floyd.hpp"
 #include "src/surf/network_interface.hpp"
 
index f23626a..9a000f4 100644 (file)
@@ -4,7 +4,6 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "src/surf/surf_routing_private.hpp"
 #include "src/surf/surf_routing_full.hpp"
 #include "src/surf/network_interface.hpp"
 
index 887e9ac..1e9014f 100644 (file)
@@ -4,7 +4,6 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include "src/surf/surf_routing_private.hpp"
 #include "src/surf/surf_routing_none.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_none, surf, "Routing part of surf");
diff --git a/src/surf/surf_routing_private.hpp b/src/surf/surf_routing_private.hpp
deleted file mode 100644 (file)
index 041dda8..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Copyright (c) 2009-2011, 2013-2015. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#ifndef _SURF_SURF_ROUTING_PRIVATE_H
-#define _SURF_SURF_ROUTING_PRIVATE_H
-
-#include <float.h>
-#include "src/internal_config.h"
-
-#include "surf_interface.hpp"
-#include "xbt/base.h"
-#include "xbt/dynar.h"
-#include "xbt/str.h"
-#include "xbt/config.h"
-#include "xbt/graph.h"
-
-/* ************************************************************************** */
-/* ******************************* NO ROUTING ******************************* */
-/* Only save the AS tree, and forward calls to child ASes */
-XBT_PRIVATE AS_t model_none_create(void);
-XBT_PRIVATE AS_t model_none_create_sized(size_t childsize);
-XBT_PRIVATE void model_none_finalize(AS_t as);
-/* ************************************************************************** */
-/* ***************** GENERIC PARSE FUNCTIONS (declarations) ***************** */
-XBT_PRIVATE AS_t model_generic_create_sized(size_t childsize);
-XBT_PRIVATE void model_generic_finalize(AS_t as);
-
-XBT_PRIVATE int generic_parse_PU(AS_t rc, sg_netcard_t elm);
-XBT_PRIVATE int generic_parse_AS(AS_t rc, sg_netcard_t elm);
-XBT_PRIVATE void generic_parse_bypassroute(AS_t rc, sg_platf_route_cbarg_t e_route);
-
-/* ************************************************************************** */
-/* *************** GENERIC BUSINESS METHODS (declarations) ****************** */
-
-XBT_PRIVATE xbt_dynar_t generic_get_onelink_routes(AS_t rc);
-XBT_PRIVATE sg_platf_route_cbarg_t generic_get_bypassroute(AS_t rc,
-    sg_netcard_t src,
-    sg_netcard_t dst,
-    double *lat);
-
-/* ************************************************************************** */
-/* ****************** GENERIC AUX FUNCTIONS (declarations) ****************** */
-
-/* change a route containing link names into a route containing link entities.
- * If change_order is true, the links are put in reverse order in the
- * produced route */
-XBT_PRIVATE sg_platf_route_cbarg_t generic_new_extended_route(e_surf_routing_hierarchy_t hierarchy,
-                                   sg_platf_route_cbarg_t data, int preserve_order);
-XBT_PRIVATE AS_t generic_autonomous_system_exist(AS_t rc, char *element);
-XBT_PRIVATE AS_t generic_processing_units_exist(AS_t rc, char *element);
-void generic_src_dst_check(AS_t rc, sg_netcard_t src, sg_netcard_t dst);
-
-/* ************************************************************************** */
-/* *************************** FLOYD ROUTING ******************************** */
-XBT_PRIVATE void model_floyd_parse_route(AS_t rc, sg_platf_route_cbarg_t route);
-
-#define HOST_PEER(peername) bprintf("peer_%s", peername)
-#define ROUTER_PEER(peername) bprintf("router_%s", peername)
-#define LINK_PEER(peername) bprintf("link_%s", peername)
-
-/* ************************************************************************** */
-/* ********** Dijkstra & Dijkstra Cached ROUTING **************************** */
-XBT_PRIVATE void model_dijkstra_both_parse_route (AS_t rc, sg_platf_route_cbarg_t route);
-XBT_PRIVATE void model_full_set_route(  /* Set the route and ASroute between src and dst */
-    AS_t rc, sg_platf_route_cbarg_t route);
-/* ************************************************************************** */
-/* ************************* GRAPH EXPORTING FUNCTIONS ********************** */
-XBT_PRIVATE xbt_node_t new_xbt_graph_node (xbt_graph_t graph, const char *name, xbt_dict_t nodes);
-XBT_PRIVATE xbt_edge_t new_xbt_graph_edge (xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xbt_dict_t edges);
-
-
-#endif                          /* _SURF_SURF_ROUTING_PRIVATE_H */
index eb30182..ffb7620 100644 (file)
@@ -78,6 +78,9 @@ XBT_PUBLIC(void) tmgr_trace_event_unref(tmgr_trace_iterator_t *trace_event);
 
 XBT_PUBLIC(void) tmgr_finalize(void);
 
+XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_file(const char *filename);
+XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_string(const char *id, const char *input, double periodicity);
+
 SG_END_DECL()
 
 #ifdef __cplusplus
index 96b5ecb..2bf24a3 100644 (file)
@@ -34,11 +34,11 @@ VMModel::vm_list_t VMModel::ws_vms;
  ************/
 
 VirtualMachine::VirtualMachine(HostModel *model, const char *name, xbt_dict_t props, simgrid::s4u::Host *hostPM)
-: Host(model, name, props, NULL, NULL, NULL)
+: HostImpl(model, name, props, NULL, NULL, NULL)
 , p_hostPM(hostPM)
 {
   VMModel::ws_vms.push_back(*this);
-  simgrid::s4u::Host::by_name_or_create(name)->extension_set<simgrid::surf::Host>(this);
+  simgrid::s4u::Host::by_name_or_create(name)->extension_set<simgrid::surf::HostImpl>(this);
 }
 
 /*
index 21c4896..40395ab 100644 (file)
@@ -6,7 +6,7 @@
 
 #include <xbt/base.h>
 
-#include "host_interface.hpp"
+#include "src/surf/HostImpl.hpp"
 
 #ifndef VM_INTERFACE_HPP_
 #define VM_INTERFACE_HPP_
@@ -51,7 +51,7 @@ extern XBT_PRIVATE simgrid::xbt::signal<void(simgrid::surf::VirtualMachine*)> VM
  * @brief SURF VM interface class
  * @details A VM represent a virtual machine
  */
-class VirtualMachine : public Host {
+class VirtualMachine : public HostImpl {
 public:
   /**
    * @brief Constructor
index 6e8450f..e453e8a 100644 (file)
@@ -132,12 +132,11 @@ VMHL13::VMHL13(VMModel *model, const char* name, xbt_dict_t props, sg_host_t hos
 
   p_cpu = surf_cpu_model_vm->createCpu(host_VM, // the machine hosting the VM
       sub_cpu->getSpeedPeakList(),        // host->power_peak,
-      sub_cpu->getPState(),
-      1,                          // host->power_scale,
       NULL,                       // host->power_trace,
       1,                          // host->core_amount,
-      1/*ON*/,                    // host->initiallyOn,
       NULL);                      // host->state_trace,
+  if (sub_cpu->getPState() != 0)
+    p_cpu->setPState(sub_cpu->getPState());
 
   /* We create cpu_action corresponding to a VM process on the host operating system. */
   /* FIXME: TODO: we have to periodically input GUESTOS_NOISE to the system? how ? */
@@ -182,7 +181,7 @@ void VMHL13::restore()
  */
 void VMHL13::migrate(sg_host_t host_dest)
 {
-   Host *surfHost_dst = host_dest->extension<Host>();
+   HostImpl *surfHost_dst = host_dest->extension<HostImpl>();
    const char *vm_name = getName();
    const char *pm_name_src = p_hostPM->name().c_str();
    const char *pm_name_dst = surfHost_dst->getName();
index 64e16dc..d001631 100644 (file)
@@ -30,8 +30,17 @@ XBT_PUBLIC(double) surf_parse_get_size(const char *string, const char *entity_ki
 XBT_PUBLIC(double) surf_parse_get_bandwidth(const char *string, const char *entity_kind, const char *name);
 XBT_PUBLIC(double) surf_parse_get_speed(const char *string, const char *entity_kind, const char *name);
 
-/* What is needed to bypass the parser. */
 XBT_PUBLIC_DATA(int_f_void_t) surf_parse;       /* Entry-point to the parser. Set this to your function. */
 
+
 SG_END_DECL()
+
+namespace simgrid {
+namespace surf {
+
+extern XBT_PRIVATE xbt::signal<void(void)> on_postparse;
+
+}
+}
+
 #endif
index b505dc9..260e117 100644 (file)
@@ -20,16 +20,8 @@ SG_BEGIN_DECL()
 typedef size_t yy_size_t;
 #endif
 
-static inline char* sg_storage_name(sg_storage_t storage) {
-  return storage->key;
-}
-
 XBT_PUBLIC(sg_netcard_t) sg_netcard_by_name_or_null(const char *name);
 
-XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_file(const char *filename);
-XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_string(const char *id,
-                                                    const char *input,
-                                                    double periodicity);
 typedef enum {
   SURF_CLUSTER_FAT_TREE=2,
   SURF_CLUSTER_FLAT = 1,
@@ -52,17 +44,14 @@ typedef struct {
   xbt_dynar_t speed_peak;
   int pstate;
   int core_amount;
-  double speed_scale;
   tmgr_trace_t speed_trace;
-  int initiallyOn;
   tmgr_trace_t state_trace;
   const char* coord;
   xbt_dict_t properties;
 } s_sg_platf_host_cbarg_t, *sg_platf_host_cbarg_t;
 
 #define SG_PLATF_HOST_INITIALIZER { \
-    NULL, 0, 1, 1, 1., NULL, 1/*ON*/, NULL, \
-    NULL, NULL \
+    NULL, 0, 1, 1, NULL, NULL, NULL, NULL \
 }
 
 typedef struct {
@@ -86,15 +75,13 @@ typedef struct {
   tmgr_trace_t bandwidth_trace;
   double latency;
   tmgr_trace_t latency_trace;
-  int initiallyOn;
   tmgr_trace_t state_trace;
   e_surf_link_sharing_policy_t policy;
   xbt_dict_t properties;
 } s_sg_platf_link_cbarg_t, *sg_platf_link_cbarg_t;
 
 #define SG_PLATF_LINK_INITIALIZER {\
-  NULL, 0., NULL, 0., NULL, 1/*ON*/, \
-  NULL, SURF_LINK_SHARED, NULL \
+  NULL, 0., NULL, 0., NULL, NULL, SURF_LINK_SHARED, NULL \
 }
 
 typedef struct s_sg_platf_peer_cbarg *sg_platf_peer_cbarg_t;
@@ -288,6 +275,7 @@ XBT_PUBLIC(void) sg_platf_new_storage_type(sg_platf_storage_type_cbarg_t storage
 XBT_PUBLIC(void) sg_platf_new_mount(sg_platf_mount_cbarg_t mount);
 
 XBT_PUBLIC(void) sg_platf_new_process(sg_platf_process_cbarg_t process);
+XBT_PRIVATE void sg_platf_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect);
 
 /* Prototypes of the functions offered by flex */
 XBT_PUBLIC(int) surf_parse_lex(void);
@@ -303,6 +291,24 @@ XBT_PUBLIC(int) surf_parse_get_debug(void);
 XBT_PUBLIC(void) surf_parse_set_debug(int bdebug);
 XBT_PUBLIC(int) surf_parse_lex_destroy(void);
 
+/* To include files (?) */
+XBT_PRIVATE void surfxml_bufferstack_push(int _new);
+XBT_PRIVATE void surfxml_bufferstack_pop(int _new);
+XBT_PUBLIC_DATA(int) surfxml_bufferstack_size;
+
+XBT_PUBLIC(void) routing_route_free(sg_platf_route_cbarg_t route);
+/********** Instr. **********/
+XBT_PRIVATE void sg_instr_AS_begin(sg_platf_AS_cbarg_t AS);
+XBT_PRIVATE void sg_instr_new_router(sg_platf_router_cbarg_t router);
+XBT_PRIVATE void sg_instr_new_host(sg_platf_host_cbarg_t host);
+XBT_PRIVATE void sg_instr_AS_end(void);
+
+typedef struct s_surf_parsing_link_up_down *surf_parsing_link_up_down_t;
+typedef struct s_surf_parsing_link_up_down {
+  void* link_up;
+  void* link_down;
+} s_surf_parsing_link_up_down_t;
+
 
 SG_END_DECL()
 
@@ -311,7 +317,6 @@ namespace surf {
 
 extern XBT_PRIVATE simgrid::xbt::signal<void(sg_platf_link_cbarg_t)> on_link;
 extern XBT_PRIVATE simgrid::xbt::signal<void(sg_platf_cluster_cbarg_t)> on_cluster;
-extern XBT_PRIVATE simgrid::xbt::signal<void(void)> on_postparse;
 
 }
 }
index f352bde..ef48af4 100644 (file)
@@ -9,6 +9,9 @@ To upgrade your files, use the tool simgrid_update_xml
      that a <host>, <peer>, <cluster> or <cabinet> can deliver per second.
 
    - In <trace_connect>, attribute kind="POWER" is now kind="SPEED".
+   
+   - In <host> and <link>, attributes availability and state are gone.
+     It was redundent with state and availability traces, and with peak values.
 
    - The DOCTYPE points to the right URL (this file):
      http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd
@@ -98,9 +101,7 @@ To upgrade your files, use the tool simgrid_update_xml
 <!ATTLIST host id CDATA #REQUIRED>
 <!ATTLIST host speed CDATA #REQUIRED>
 <!ATTLIST host core  CDATA "1">
-<!ATTLIST host availability CDATA "1.0">
 <!ATTLIST host availability_file CDATA "">
-<!ATTLIST host state (ON|OFF) "ON">
 <!ATTLIST host state_file CDATA "">
 <!ATTLIST host coordinates  CDATA "">
 <!ATTLIST host pstate CDATA "0.0">
@@ -176,7 +177,6 @@ To upgrade your files, use the tool simgrid_update_xml
 <!ATTLIST link bandwidth_file CDATA "">
 <!ATTLIST link latency CDATA "0">
 <!ATTLIST link latency_file CDATA "">
-<!ATTLIST link state (ON|OFF) "ON">
 <!ATTLIST link state_file CDATA "">
 <!ATTLIST link sharing_policy (SHARED|FATPIPE|FULLDUPLEX) "SHARED">
 
index c8b3eee..b2d329e 100644 (file)
@@ -410,8 +410,8 @@ static void yy_fatal_error (yyconst char msg[]  );
        *yy_cp = '\0'; \
        (yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 595
-#define YY_END_OF_BUFFER 596
+#define YY_NUM_RULES 585
+#define YY_END_OF_BUFFER 586
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -419,7 +419,7 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[3477] =
+static yyconst flex_int16_t yy_accept[3438] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -447,14 +447,14 @@ static yyconst flex_int16_t yy_accept[3477] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  596,  594,   15,   10,
-       10,   15,   15,  574,   10,  574,    5,    6,    5,    8,
-        9,    8,  590,  582,  583,  591,  588,  591,  589,  593,
-      582,  583,  593,   40,   10,   40,   40,   40,   38,   40,
-       40,   44,   10,   44,   44,  594,   44,  594,  594,   44,
+        0,    0,    0,    0,    0,    0,  586,  584,   15,   10,
+       10,   15,   15,  564,   10,  564,    5,    6,    5,    8,
+        9,    8,  580,  572,  573,  581,  578,  581,  579,  583,
+      572,  573,  583,   40,   10,   40,   40,   40,   38,   40,
+       40,   44,   10,   44,   44,  584,   44,  584,  584,   44,
        61,   10,   61,   61,   61,   59,   61,   61,   61,   65,
 
-       10,   65,  594,   65,   72,   10,   72,   72,   72,   70,
+       10,   65,  584,   65,   72,   10,   72,   72,   72,   70,
        72,   76,   10,   76,   87,   10,   87,   87,   87,   85,
        87,   87,   87,   91,   10,   91,  104,   10,  104,  104,
       104,  102,  104,  104,  104,  108,   10,  108,  108,  117,
@@ -465,34 +465,34 @@ static yyconst flex_int16_t yy_accept[3477] =
       199,  203,   10,  203,  203,  210,   10,  210,  210,  210,
       208,  210,  214,   10,  214,  214,  221,   10,  221,  221,
 
-      221,  219,  221,  225,   10,  225,  250,   10,  250,  250,
-      250,  248,  250,  250,  250,  250,  250,  254,   10,  254,
-      594,  254,  265,   10,  265,  265,  265,  263,  265,  265,
-      265,  269,   10,  269,  276,   10,  276,  276,  276,  274,
-      276,  280,   10,  280,  594,  280,  307,   10,  307,  307,
-      307,  305,  307,  307,  307,  307,  311,   10,  311,  311,
-      324,   10,  324,  324,  324,  322,  324,  324,  328,   10,
-      328,  337,   10,  337,  337,  337,  335,  337,  337,  341,
-       10,  341,  350,   10,  350,  350,  350,  348,  350,  350,
-      354,   10,  354,  363,   10,  363,  363,  363,  361,  363,
-
-      363,  367,   10,  367,  388,   10,  388,  388,  388,  386,
-      388,  388,  388,  388,  388,  388,  392,   10,  392,  594,
-      399,   10,  399,  399,  399,  397,  399,  403,   10,  403,
-      403,  594,  403,  594,  403,  420,   10,  420,  420,  420,
-      418,  420,  420,  420,  420,  420,  424,   10,  424,  594,
-      424,  433,   10,  433,  433,  433,  431,  433,  433,  437,
-       10,  437,  464,   10,  464,  464,  464,  462,  464,  464,
-      464,  464,  464,  468,   10,  468,  481,   10,  481,  481,
-      481,  479,  481,  481,  485,   10,  485,  485,  494,   10,
-      494,  494,  494,  492,  494,  494,  498,   10,  498,  513,
-
-       10,  513,  513,  513,  511,  513,  513,  513,  513,  517,
-       10,  517,  517,  532,   10,  532,  532,  532,  530,  532,
-      532,  532,  532,  536,   10,  536,  594,  536,  547,   10,
-      547,  547,  547,  545,  547,  547,  547,  591,  590,  569,
-       10,  569,  569,  569,  567,  569,  569,  569,  573,   10,
-      573,   10,    0,    2,    2,    0,    4,    7,  585,  584,
+      221,  219,  221,  225,   10,  225,  244,   10,  244,  244,
+      244,  242,  244,  244,  244,  244,  244,  248,   10,  248,
+      584,  248,  259,   10,  259,  259,  259,  257,  259,  259,
+      259,  263,   10,  263,  270,   10,  270,  270,  270,  268,
+      270,  274,   10,  274,  584,  274,  297,   10,  297,  297,
+      297,  295,  297,  297,  297,  297,  301,   10,  301,  301,
+      314,   10,  314,  314,  314,  312,  314,  314,  318,   10,
+      318,  327,   10,  327,  327,  327,  325,  327,  327,  331,
+       10,  331,  340,   10,  340,  340,  340,  338,  340,  340,
+      344,   10,  344,  353,   10,  353,  353,  353,  351,  353,
+
+      353,  357,   10,  357,  378,   10,  378,  378,  378,  376,
+      378,  378,  378,  378,  378,  378,  382,   10,  382,  584,
+      389,   10,  389,  389,  389,  387,  389,  393,   10,  393,
+      393,  584,  393,  584,  393,  410,   10,  410,  410,  410,
+      408,  410,  410,  410,  410,  410,  414,   10,  414,  584,
+      414,  423,   10,  423,  423,  423,  421,  423,  423,  427,
+       10,  427,  454,   10,  454,  454,  454,  452,  454,  454,
+      454,  454,  454,  458,   10,  458,  471,   10,  471,  471,
+      471,  469,  471,  471,  475,   10,  475,  475,  484,   10,
+      484,  484,  484,  482,  484,  484,  488,   10,  488,  503,
+
+       10,  503,  503,  503,  501,  503,  503,  503,  503,  507,
+       10,  507,  507,  522,   10,  522,  522,  522,  520,  522,
+      522,  522,  522,  526,   10,  526,  584,  526,  537,   10,
+      537,  537,  537,  535,  537,  537,  537,  581,  580,  559,
+       10,  559,  559,  559,  557,  559,  559,  559,  563,   10,
+      563,   10,    0,    2,    2,    0,    4,    7,  575,  574,
         0,    0,    0,    0,    0,    0,   39,   41,   41,   41,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -504,24 +504,24 @@ static yyconst flex_int16_t yy_accept[3477] =
         0,  139,  141,  141,  141,  141,  141,  141,  141,  141,
         0,  198,  200,  200,  200,  200,  200,  200,  200,  200,
       200,  200,  200,  200,  200,  200,  200,  200,  200,    0,
-      209,  211,  211,    0,  220,  222,  222,    0,  249,  251,
-      251,  251,  251,  251,  251,  251,    0,    0,  264,  266,
-      266,  266,  266,    0,  275,  277,  277,    0,    0,  306,
-      308,  308,  308,  308,  308,  308,    0,  323,  325,  325,
-
-      325,    0,  336,  338,  338,  338,    0,  349,  351,  351,
-      351,    0,  362,  364,  364,  364,    0,  387,  389,  389,
-      389,  389,  389,  389,  389,  389,    0,    0,  398,  400,
-      400,    0,    0,    0,    0,    0,    0,  419,  421,  421,
-      421,  421,  421,  421,    0,    0,  432,  434,  434,  434,
-        0,  463,  465,  465,  465,  465,  465,  465,  465,  465,
-      465,    0,  480,  482,  482,  482,  482,    0,  493,  495,
-      495,  495,    0,  512,  514,  514,  514,  514,  514,    0,
-      531,  533,  533,  533,  533,  533,    0,    0,  546,  548,
-      548,  548,  548,    0,    0,    0,  568,  570,  570,  570,
-
-      570,    0,    0,    0,    0,    0,    3,    0,    0,    0,
-        0,    0,    0,    0,  592,    0,    0,   41,    0,    0,
+      209,  211,  211,    0,  220,  222,  222,    0,  243,  245,
+      245,  245,  245,  245,  245,  245,    0,    0,  258,  260,
+      260,  260,  260,    0,  269,  271,  271,    0,    0,  296,
+      298,  298,  298,  298,  298,  298,    0,  313,  315,  315,
+
+      315,    0,  326,  328,  328,  328,    0,  339,  341,  341,
+      341,    0,  352,  354,  354,  354,    0,  377,  379,  379,
+      379,  379,  379,  379,  379,  379,    0,    0,  388,  390,
+      390,    0,    0,    0,    0,    0,    0,  409,  411,  411,
+      411,  411,  411,  411,    0,    0,  422,  424,  424,  424,
+        0,  453,  455,  455,  455,  455,  455,  455,  455,  455,
+      455,    0,  470,  472,  472,  472,  472,    0,  483,  485,
+      485,  485,    0,  502,  504,  504,  504,  504,  504,    0,
+      521,  523,  523,  523,  523,  523,    0,    0,  536,  538,
+      538,  538,  538,    0,    0,    0,  558,  560,  560,  560,
+
+      560,    0,    0,    0,    0,    0,    3,    0,    0,    0,
+        0,    0,    0,    0,  582,    0,    0,   41,    0,    0,
        17,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,   16,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -533,21 +533,21 @@ static yyconst flex_int16_t yy_accept[3477] =
 
       200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
       200,    0,    0,    0,    0,    0,    0,  222,    0,    0,
-      251,  251,  251,    0,    0,  251,  251,  251,    0,    0,
-        0,    0,  266,    0,    0,    0,    0,    0,    0,  277,
-        0,    0,   17,  308,    0,    0,  308,  308,  308,    0,
-        0,  325,    0,    0,    0,    0,    0,    0,  338,    0,
-        0,  351,  351,    0,    0,  364,  364,    0,    0,  389,
-      389,  389,    0,    0,  389,  389,  389,    0,    0,    0,
-      400,    0,    0,    0,    0,    0,  421,  421,  421,  421,
-      421,    0,    0,    0,    0,    0,  434,    0,    0,  465,
-
-        0,    0,  465,  465,  465,  465,  465,  465,    0,    0,
-      482,  482,  482,    0,    0,  495,    0,    0,    0,    0,
-      514,  514,    0,    0,  514,    0,    0,  533,    0,    0,
-      533,  533,    0,    0,    0,  548,    0,    0,  548,    0,
-        0,    0,  587,  570,  570,  570,    0,    0,    0,   14,
-        1,    0,    0,  580,    0,    0,    0,  577,  576,    0,
+      245,  245,  245,    0,    0,  245,  245,  245,    0,    0,
+        0,    0,  260,    0,    0,    0,    0,    0,    0,  271,
+        0,    0,   17,  298,    0,    0,  298,  298,  298,    0,
+        0,  315,    0,    0,    0,    0,    0,    0,  328,    0,
+        0,  341,  341,    0,    0,  354,  354,    0,    0,  379,
+      379,  379,    0,    0,  379,  379,  379,    0,    0,    0,
+      390,    0,    0,    0,    0,    0,  411,  411,  411,  411,
+      411,    0,    0,    0,    0,    0,  424,    0,    0,  455,
+
+        0,    0,  455,  455,  455,  455,  455,  455,    0,    0,
+      472,  472,  472,    0,    0,  485,    0,    0,    0,    0,
+      504,  504,    0,    0,  504,    0,    0,  523,    0,    0,
+      523,  523,    0,    0,    0,  538,    0,    0,  538,    0,
+        0,    0,  577,  560,  560,  560,    0,    0,    0,   14,
+        1,    0,    0,  570,    0,    0,    0,  567,  566,    0,
         0,   19,   18,   41,    0,    0,   43,    0,   17,    0,
         0,    0,    0,    0,    0,    0,  216,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -564,245 +564,241 @@ static yyconst flex_int16_t yy_accept[3477] =
       200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
         0,    0,  202,    0,    0,  207,  206,    0,    0,  213,
 
-        0,  222,    0,    0,  224,    0,  251,  251,  251,    0,
-      237,  236,  251,  251,  251,    0,    0,  253,    0,    0,
-        0,  266,    0,  260,  259,    0,  262,  261,    0,    0,
-      268,    0,  277,    0,    0,  279,    0,  308,    0,  288,
-      287,  308,  308,  308,    0,    0,  310,    0,  325,    0,
-      321,  320,    0,    0,  327,    0,    0,  332,  331,  338,
-        0,    0,  340,    0,  351,  351,    0,    0,  353,    0,
-      364,  364,    0,    0,  366,    0,  389,  389,  389,  389,
-        0,  379,  378,    0,    0,  389,  389,    0,    0,  391,
-        0,    0,  400,    0,    0,  402,    0,    0,    0,    0,
-
-      421,  421,  421,  421,  421,    0,    0,  423,    0,    0,
-        0,  428,  427,  434,    0,    0,  436,    0,  465,    0,
-      449,  448,    0,    0,  465,    0,    0,  465,  465,  465,
-        0,    0,  467,    0,    0,    0,    0,    0,  482,    0,
-        0,  484,    0,  495,    0,  491,  490,    0,    0,  497,
-        0,  514,  514,    0,  508,  507,  514,    0,    0,  516,
-        0,  533,    0,  525,  524,  533,  533,    0,    0,  535,
-        0,    0,  548,    0,  542,  541,  548,    0,    0,    0,
-      550,    0,  570,  570,  570,    0,    0,  572,    0,    0,
-        0,  581,  575,    0,    0,   41,    0,   42,    0,    0,
-
-        0,    0,    0,    0,    0,  216,  227,    0,  282,    0,
-        0,    0,  369,    0,    0,  426,    0,    0,    0,    0,
-      425,    0,    0,    0,    0,    0,  215,  226,    0,  281,
-      368,    0,    0,    0,    0,    0,    0,   48,   47,   62,
-       62,    0,   54,   53,   62,    0,  281,   73,    0,   88,
+        0,  222,    0,    0,  224,    0,  245,  245,  245,    0,
+      235,  234,  245,  245,  245,    0,    0,  247,    0,    0,
+        0,  260,    0,  254,  253,    0,  256,  255,    0,    0,
+      262,    0,  271,    0,    0,  273,    0,  298,    0,  282,
+      281,  298,  298,  298,    0,    0,  300,    0,  315,    0,
+      311,  310,    0,    0,  317,    0,    0,  322,  321,  328,
+        0,    0,  330,    0,  341,  341,    0,    0,  343,    0,
+      354,  354,    0,    0,  356,    0,  379,  379,  379,  379,
+        0,  369,  368,    0,    0,  379,  379,    0,    0,  381,
+        0,    0,  390,    0,    0,  392,    0,    0,    0,    0,
+
+      411,  411,  411,  411,  411,    0,    0,  413,    0,    0,
+        0,  418,  417,  424,    0,    0,  426,    0,  455,    0,
+      439,  438,    0,    0,  455,    0,    0,  455,  455,  455,
+        0,    0,  457,    0,    0,    0,    0,    0,  472,    0,
+        0,  474,    0,  485,    0,  481,  480,    0,    0,  487,
+        0,  504,  504,    0,  498,  497,  504,    0,    0,  506,
+        0,  523,    0,  515,  514,  523,  523,    0,    0,  525,
+        0,    0,  538,    0,  532,  531,  538,    0,    0,    0,
+      540,    0,  560,  560,  560,    0,    0,  562,    0,    0,
+        0,  571,  565,    0,    0,   41,    0,   42,    0,    0,
+
+        0,    0,    0,    0,    0,  216,  227,    0,  276,    0,
+        0,    0,  359,    0,    0,  416,    0,    0,    0,    0,
+      415,    0,    0,    0,    0,    0,  215,  226,    0,  275,
+      358,    0,    0,    0,    0,    0,    0,   48,   47,   62,
+       62,    0,   54,   53,   62,    0,  275,   73,    0,   88,
        88,    0,    0,   95,   94,  105,  105,    0,  101,  100,
         0,    0,  112,  111,    0,  114,  113,    0,    0,  129,
       128,  141,  141,  141,  141,    0,  200,  200,  200,  200,
         0,    0,    0,  164,  163,  200,  200,  200,  200,  200,
       200,  200,  200,  200,  200,  200,    0,    0,    0,    0,
 
-        0,  251,  251,    0,    0,  251,  251,  251,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  308,  308,  308,
-      308,    0,  325,    0,  338,    0,    0,    0,  351,    0,
-        0,    0,  364,    0,  389,  389,  389,  389,    0,  381,
-      380,  389,  389,    0,    0,  400,    0,    0,    0,    0,
-      421,    0,    0,  421,  421,  421,    0,    0,  434,    0,
-      465,    0,  451,  450,    0,    0,    0,  455,  454,  465,
-        0,    0,  465,    0,    0,  472,  471,    0,  474,  473,
-      482,    0,  495,    0,  514,  514,  514,    0,  533,  533,
-        0,    0,    0,    0,    0,    0,  548,    0,    0,  570,
-
-        0,    0,  570,    0,    0,    0,    0,   12,    0,  578,
-      579,   41,    0,    0,    0,    0,    0,    0,    0,  227,
-        0,    0,  282,    0,    0,  342,    0,  369,    0,    0,
-      426,    0,  470,    0,  538,  425,    0,    0,    0,    0,
-        0,  226,    0,    0,  281,  368,  469,    0,  537,  470,
-      469,   62,   62,   62,    0,    0,    0,    0,    0,   88,
+        0,  245,  245,    0,    0,  245,  245,  245,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  298,  298,  298,
+      298,    0,  315,    0,  328,    0,    0,    0,  341,    0,
+        0,    0,  354,    0,  379,  379,  379,  379,    0,  371,
+      370,  379,  379,    0,    0,  390,    0,    0,    0,    0,
+      411,    0,    0,  411,  411,  411,    0,    0,  424,    0,
+      455,    0,  441,  440,    0,    0,    0,  445,  444,  455,
+        0,    0,  455,    0,    0,  462,  461,    0,  464,  463,
+      472,    0,  485,    0,  504,  504,  504,    0,  523,  523,
+        0,    0,    0,    0,    0,    0,  538,    0,    0,  560,
+
+        0,    0,  560,    0,    0,    0,    0,   12,    0,  568,
+      569,   41,    0,    0,    0,    0,    0,    0,    0,  227,
+        0,    0,  276,    0,    0,  332,    0,  359,    0,    0,
+      416,    0,  460,    0,  528,  415,    0,    0,    0,    0,
+        0,  226,    0,    0,  275,  358,  459,    0,  527,  460,
+      459,   62,   62,   62,    0,    0,    0,    0,    0,   88,
        88,    0,  105,  105,    0,    0,  141,  141,    0,    0,
       141,    0,  200,    0,    0,  200,  200,    0,  160,  159,
       200,  200,  200,  200,  200,  200,    0,    0,  200,  200,
-      200,  200,    0,    0,    0,  218,  217,    0,  223,  251,
-
-      251,    0,  235,  234,  251,    0,    0,    0,    0,  251,
-        0,  343,    0,    0,  258,  257,    0,    0,  273,  272,
-        0,  308,  308,  308,    0,    0,  308,    0,  325,    0,
-        0,    0,    0,    0,  345,  344,  351,    0,    0,  358,
-      357,  364,    0,  389,    0,    0,  389,  389,    0,    0,
-      389,    0,    0,  400,    0,    0,    0,    0,  421,    0,
-      409,  408,  421,  421,  421,    0,    0,    0,    0,    0,
-      465,    0,  453,  452,  465,    0,  459,  458,  465,    0,
-      482,    0,  495,    0,  514,  514,  514,    0,  533,    0,
-        0,    0,  529,  528,    0,    0,    0,  540,  539,  548,
-
-        0,    0,  570,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   11,   41,    0,    0,    0,    0,    0,    0,
-      204,    0,    0,    0,    0,  342,    0,    0,    0,  438,
-      470,  487,    0,  538,    0,    0,    0,    0,    0,    0,
-        0,    0,  469,  486,    0,  537,    0,    0,    0,    0,
-        0,   62,    0,    0,    0,   69,   68,    0,   88,   88,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  141,
-        0,  135,  134,    0,    0,    0,  200,    0,  150,  149,
-        0,    0,  200,  200,  200,    0,    0,  200,  200,  200,
-        0,  184,  183,  200,    0,    0,  200,  200,    0,    0,
-
-      251,  251,    0,    0,    0,  241,  240,    0,    0,    0,
-      251,    0,  252,  343,    0,    0,    0,  308,  308,  308,
-        0,    0,    0,  308,    0,  309,  325,    0,    0,  334,
-      333,    0,  351,    0,    0,    0,    0,  389,    0,  373,
-      372,    0,    0,  389,    0,  383,  382,  389,    0,  390,
-        0,  400,    0,  205,    0,  439,  421,  421,  421,  421,
-        0,    0,    0,  430,  429,    0,  435,  465,  465,  465,
-        0,  482,    0,  495,    0,    0,    0,  514,    0,    0,
-        0,  533,    0,  527,  526,    0,    0,  548,    0,    0,
-      570,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-      566,  565,    0,    0,    0,    0,    0,    0,   46,    0,
-        0,    0,    0,  123,  146,  204,    0,  271,    0,    0,
-        0,    0,  404,  438,  487,  500,    0,   45,    0,    0,
-        0,  122,  145,    0,  270,  486,  499,    0,    0,   50,
+      200,  200,    0,    0,    0,  218,  217,    0,  223,  245,
+
+      245,    0,  233,  232,  245,    0,    0,  245,    0,  333,
+        0,    0,  252,  251,    0,    0,  267,  266,    0,  298,
+      298,  298,  298,    0,  315,    0,    0,    0,    0,    0,
+      335,  334,  341,    0,    0,  348,  347,  354,    0,  379,
+        0,    0,  379,  379,    0,    0,  379,    0,    0,  390,
+        0,    0,    0,    0,  411,    0,  399,  398,  411,  411,
+      411,    0,    0,    0,    0,    0,  455,    0,  443,  442,
+      455,    0,  449,  448,  455,    0,  472,    0,  485,    0,
+      504,  504,  504,    0,  523,    0,    0,    0,  519,  518,
+        0,    0,    0,  530,  529,  538,    0,    0,  560,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,   11,   41,
+        0,    0,    0,    0,    0,    0,  204,    0,    0,    0,
+        0,  332,    0,    0,    0,  428,  460,  477,    0,  528,
+        0,    0,    0,    0,    0,    0,    0,    0,  459,  476,
+        0,  527,    0,    0,    0,    0,    0,   62,    0,    0,
+        0,   69,   68,    0,   88,   88,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  141,    0,  135,  134,    0,
+        0,    0,  200,    0,  150,  149,    0,    0,  200,  200,
+      200,    0,    0,  200,  200,  200,    0,  184,  183,  200,
+        0,    0,  200,  200,    0,    0,  245,  245,    0,    0,
+
+        0,  239,  238,  245,    0,  246,  333,    0,    0,    0,
+      298,  298,  298,  298,    0,  299,  315,    0,    0,  324,
+      323,    0,  341,    0,    0,    0,    0,  379,    0,  363,
+      362,    0,    0,  379,    0,  373,  372,  379,    0,  380,
+        0,  390,    0,  205,    0,  429,  411,  411,  411,  411,
+        0,    0,    0,  420,  419,    0,  425,  455,  455,  455,
+        0,  472,    0,  485,    0,    0,    0,  504,    0,    0,
+        0,  523,    0,  517,  516,    0,    0,  538,    0,    0,
+      560,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+      556,  555,    0,    0,    0,    0,    0,    0,   46,    0,
+
+        0,    0,    0,  123,  146,  204,    0,  265,    0,    0,
+        0,    0,  394,  428,  477,  490,    0,   45,    0,    0,
+        0,  122,  145,    0,  264,  476,  489,    0,    0,   50,
        49,    0,   52,   51,   62,    0,    0,    0,   88,    0,
         0,    0,    0,   97,   96,    0,   99,   98,    0,    0,
         0,  131,  130,    0,    0,    0,  137,  136,    0,  200,
         0,  152,  151,  200,  200,  200,    0,  172,  171,    0,
         0,  200,  200,  200,    0,  188,  187,  200,  200,    0,
-        0,  251,  251,    0,  239,  238,    0,    0,  251,    0,
-
-        0,    0,  308,    0,    0,  308,  308,    0,    0,  308,
-      325,    0,    0,  351,    0,  352,    0,  360,  359,    0,
-      389,    0,  375,  374,  389,  389,    0,    0,    0,    0,
-      205,  405,  439,  421,  421,  421,  421,    0,    0,  465,
-        0,    0,  465,    0,  482,    0,  483,  495,    0,    0,
-      502,  501,    0,    0,  514,    0,  510,  509,    0,    0,
-        0,  533,    0,    0,  548,    0,    0,  549,    0,    0,
+        0,  245,  245,    0,  237,  236,  245,    0,    0,    0,
+      298,    0,    0,  298,  298,  298,  315,    0,    0,  341,
+
+        0,  342,    0,  350,  349,    0,  379,    0,  365,  364,
+      379,  379,    0,    0,    0,    0,  205,  395,  429,  411,
+      411,  411,  411,    0,    0,  455,    0,    0,  455,    0,
+      472,    0,  473,  485,    0,    0,  492,  491,    0,    0,
+      504,    0,  500,  499,    0,    0,    0,  523,    0,    0,
+      538,    0,    0,  539,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   46,   66,   78,
-        0,    0,  123,  146,    0,  271,  312,    0,  355,  393,
-
-      404,  500,    0,    0,   45,   77,    0,    0,  122,  145,
-        0,  270,  499,    0,    0,   62,    0,  313,    0,   88,
-        0,   84,   83,    0,    0,    0,    0,  133,  132,    0,
-      200,  200,  200,  200,    0,  174,  173,  200,  200,  200,
-      200,    0,    0,    0,    0,  212,  251,  251,    0,    0,
-        0,    0,  251,  356,    0,    0,  308,    0,  290,  289,
-      308,  308,    0,    0,    0,    0,  308,  325,    0,    0,
-      351,    0,  389,  389,  389,  394,    0,  396,  395,    0,
-      405,    0,    0,  421,  421,  421,    0,   67,  465,    0,
-      457,  456,  465,    0,  466,  482,  495,    0,  496,    0,
-
-      504,  503,  514,    0,    0,  521,  520,  533,    0,    0,
-      548,  586,    0,  554,  553,    0,    0,    0,    0,    0,
+        0,    0,    0,   46,   66,   78,    0,    0,  123,  146,
+        0,  265,  302,    0,  345,  383,  394,  490,    0,    0,
+       45,   77,    0,    0,  122,  145,    0,  264,  489,    0,
+
+        0,   62,    0,  303,    0,   88,    0,   84,   83,    0,
+        0,    0,    0,  133,  132,    0,  200,  200,  200,  200,
+        0,  174,  173,  200,  200,  200,  200,    0,    0,    0,
+        0,  212,  245,  245,  245,  346,    0,    0,  298,    0,
+      284,  283,  298,  298,  298,  315,    0,    0,  341,    0,
+      379,  379,  379,  384,    0,  386,  385,    0,  395,    0,
+        0,  411,  411,  411,    0,   67,  455,    0,  447,  446,
+      455,    0,  456,  472,  485,    0,  486,    0,  494,  493,
+      504,    0,    0,  511,  510,  523,    0,    0,  538,  576,
+        0,  544,  543,    0,    0,    0,    0,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   66,
-       78,    0,    0,  256,  312,    0,  355,  393,    0,    0,
-       77,    0,    0,  255,    0,    0,   62,    0,   63,  313,
-        0,    0,    0,    0,    0,    0,    0,  142,  200,  200,
-      200,  200,  200,    0,    0,  200,  200,  200,    0,    0,
-        0,    0,  201,  251,  251,    0,  243,    0,  242,  251,
-      356,    0,    0,  278,    0,    0,  308,  308,  308,    0,
-
-      300,    0,  299,  308,    0,    0,    0,    0,    0,    0,
-        0,  389,  389,  389,  394,    0,    0,  407,  406,    0,
-        0,  421,  421,    0,  422,   67,    0,    0,  465,  482,
-      495,  514,    0,  515,  533,    0,    0,  548,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   66,   78,    0,
+        0,  250,  302,    0,  345,  383,    0,    0,   77,    0,
+        0,  249,    0,    0,   62,    0,   63,  303,    0,    0,
+        0,    0,    0,    0,    0,  142,  200,  200,  200,  200,
+      200,    0,    0,  200,  200,  200,    0,    0,    0,    0,
+      201,  245,  245,  245,  346,    0,    0,  272,    0,    0,
+      298,  298,  298,  298,    0,    0,    0,    0,    0,    0,
+        0,  379,  379,  379,  384,    0,    0,  397,  396,    0,
+        0,  411,  411,    0,  412,   67,    0,    0,  455,  472,
+
+      485,  504,    0,  505,  523,    0,    0,  538,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  256,  329,    0,    0,
-        0,    0,  255,    0,    0,   62,    0,   74,    0,   80,
+        0,    0,    0,    0,    0,    0,  250,  319,    0,    0,
+        0,    0,  249,    0,    0,   62,    0,   74,    0,   80,
        79,    0,   89,    0,    0,  200,  200,  200,  200,  200,
         0,  176,  175,  200,    0,    0,  200,    0,    0,    0,
+        0,  245,  245,    0,    0,    0,    0,  278,  277,  298,
+      298,  298,    0,    0,    0,    0,    0,    0,  316,    0,
+        0,  337,  336,    0,  355,  379,  379,    0,    0,    0,
 
-        0,  251,  251,  245,  244,    0,    0,    0,    0,  284,
-      283,  308,  308,  308,  302,  301,    0,    0,    0,    0,
-        0,    0,  326,    0,    0,  347,  346,    0,  365,  389,
-      389,    0,    0,    0,  401,    0,  411,  410,    0,    0,
-        0,    0,    0,    0,    0,  465,  482,  495,  514,  533,
-        0,  330,  548,    0,    0,    0,    0,    0,    0,    0,
+      391,    0,  401,  400,    0,    0,    0,    0,    0,    0,
+        0,  455,  472,  485,  504,  523,    0,  320,  538,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      110,  329,    0,    0,    0,  109,    0,    0,    0,    0,
-        0,    0,  200,  200,  200,    0,    0,  200,  200,    0,
-
-      186,  185,  200,    0,    0,    0,    0,    0,    0,  251,
-        0,    0,    0,  247,  246,    0,  267,  308,  308,  308,
-        0,  304,  303,    0,    0,    0,    0,    0,    0,    0,
-      389,    0,    0,    0,  385,  384,    0,    0,    0,    0,
-      417,  416,    0,    0,    0,    0,    0,    0,  465,    0,
-        0,    0,    0,  514,  533,    0,  330,    0,    0,    0,
-        0,    0,    0,  558,    0,    0,    0,    0,  557,    0,
+        0,    0,    0,    0,    0,    0,  110,  319,    0,    0,
+        0,  109,    0,    0,    0,    0,    0,    0,  200,  200,
+      200,    0,    0,  200,  200,    0,  186,  185,  200,    0,
+        0,    0,    0,    0,    0,  245,    0,    0,    0,  241,
+      240,    0,  261,  298,  298,  298,    0,  294,  293,    0,
+        0,    0,    0,    0,    0,    0,  379,    0,    0,    0,
+
+      375,  374,    0,    0,    0,    0,  407,  406,    0,    0,
+        0,    0,    0,    0,  455,    0,    0,    0,    0,  504,
+      523,    0,  320,    0,    0,    0,    0,    0,    0,  548,
+        0,    0,    0,    0,  547,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  110,  519,    0,    0,
-      109,  518,    0,    0,    0,    0,    0,    0,  200,  200,
-
-        0,    0,    0,  168,  167,    0,    0,  200,  200,    0,
-        0,    0,    0,    0,    0,    0,    0,  251,    0,  233,
-      232,  308,    0,    0,  308,    0,    0,    0,    0,    0,
-        0,    0,  339,  389,    0,  377,  376,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  465,
-        0,    0,    0,    0,  489,  488,    0,    0,    0,    0,
-        0,    0,  544,  543,    0,    0,    0,    0,    0,    0,
+        0,    0,  110,  509,    0,    0,  109,  508,    0,    0,
+        0,    0,    0,    0,  200,  200,    0,    0,    0,  168,
+      167,    0,    0,  200,  200,    0,    0,    0,    0,    0,
+        0,  245,    0,  231,  230,  298,    0,    0,  298,    0,
+        0,    0,    0,    0,    0,    0,  329,  379,    0,  367,
+
+      366,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  455,    0,    0,    0,    0,  479,  478,
+        0,    0,    0,    0,    0,    0,  534,  533,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       21,   29,    0,    0,    0,    0,   20,   28,    0,   93,
-      519,  552,   92,  518,  551,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   21,   29,    0,    0,    0,    0,
+       20,   28,    0,   93,  509,  542,   92,  508,  541,    0,
+        0,    0,    0,    0,    0,  119,  200,  200,    0,  166,
+      165,    0,  170,  169,  200,  200,    0,    0,    0,    0,
+        0,    0,  245,  298,    0,  286,  285,  298,    0,    0,
+      305,    0,    0,  304,  379,    0,    0,    0,    0,    0,
 
-        0,  119,  200,  200,    0,  166,  165,    0,  170,  169,
-      200,  200,    0,    0,    0,    0,    0,    0,    0,  229,
-      228,  251,  308,    0,  292,  291,  308,    0,    0,  315,
-        0,    0,  314,  389,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  506,  505,    0,  523,  522,    0,    0,
-        0,  564,    0,    0,    0,  563,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   23,    0,    0,    0,
-       22,    0,   93,  552,   92,  551,    0,    0,    0,    0,
-        0,  200,  200,    0,    0,  200,    0,  192,    0,    0,
-
-      191,    0,  251,    0,    0,    0,    0,    0,    0,    0,
-        0,  389,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  461,  460,    0,    0,    0,
-        0,    0,  534,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  496,  495,    0,  513,  512,    0,
+        0,    0,  554,    0,    0,    0,  553,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   23,    0,    0,
+        0,   22,    0,   93,  542,   92,  541,    0,    0,    0,
+        0,    0,  200,  200,    0,    0,  200,    0,  192,    0,
+        0,  191,    0,  245,    0,    0,    0,    0,    0,    0,
+        0,    0,  379,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  451,  450,    0,    0,
+        0,    0,    0,  524,    0,    0,    0,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   58,    0,   57,    0,    0,  106,  200,  200,
-        0,    0,    0,    0,    0,    0,  194,    0,  193,  251,
-        0,  286,  285,    0,    0,    0,  317,  319,  316,  318,
-      389,  413,    0,  412,    0,    0,  447,  443,    0,    0,
-      446,  442,    0,  478,    0,  477,    0,  562,    0,    0,
-
-      561,    0,    0,    0,  571,    0,    0,    0,   12,    0,
-       12,    0,   33,    0,    0,    0,   31,   32,    0,    0,
-        0,   30,   56,   55,  200,  200,    0,    0,    0,    0,
-        0,  190,  189,    0,    0,  251,    0,    0,    0,    0,
-      389,    0,    0,    0,    0,    0,    0,  476,  475,  556,
-      560,  555,  559,    0,    0,    0,    0,    0,    0,    0,
-       25,    0,    0,    0,   24,    0,    0,    0,    0,    0,
+        0,    0,    0,   58,    0,   57,    0,    0,  106,  200,
+      200,    0,    0,    0,    0,    0,    0,  194,    0,  193,
+      245,    0,  280,  279,    0,    0,    0,  307,  309,  306,
+      308,  379,  403,    0,  402,    0,    0,  437,  433,    0,
+        0,  436,  432,    0,  468,    0,  467,    0,  552,    0,
+        0,  551,    0,    0,    0,  561,    0,    0,    0,   12,
+        0,   12,    0,   33,    0,    0,    0,   31,   32,    0,
+        0,    0,   30,   56,   55,  200,  200,    0,    0,    0,
+        0,    0,  190,  189,    0,    0,  245,    0,    0,    0,
+
+        0,  379,    0,    0,    0,    0,    0,    0,  466,  465,
+      546,  550,  545,  549,    0,    0,    0,    0,    0,    0,
+        0,   25,    0,    0,    0,   24,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  148,  147,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  196,  195,    0,  229,  228,
+        0,    0,    0,    0,    0,    0,    0,  361,  360,    0,
+        0,  431,    0,  430,    0,    0,   11,    0,    0,    0,
 
-        0,    0,    0,  148,  147,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  196,  195,    0,  231,  230,    0,
-        0,    0,    0,    0,    0,    0,  371,  370,    0,    0,
-      441,    0,  440,    0,    0,   11,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  415,  414,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  405,
+      404,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  435,  434,    0,    0,
+       35,    0,    0,   34,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  445,  444,    0,    0,   35,
-        0,    0,   34,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   27,    0,   26,    0,    0,    0,    0,    0,
-        0,  178,    0,    0,  177,    0,    0,  294,    0,    0,
-      293,    0,   37,   36,    0,    0,    0,    0,  182,    0,
-      181,    0,  296,    0,  295,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  154,    0,  153,
-        0,    0,    0,    0,    0,    0,  156,  155,  180,  179,
-      298,  297,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   27,    0,   26,    0,    0,    0,    0,
+        0,    0,  178,    0,    0,  177,    0,    0,  288,    0,
+        0,  287,    0,   37,   36,    0,    0,    0,    0,  182,
+
+        0,  181,    0,  290,    0,  289,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  154,    0,
+      153,    0,    0,    0,    0,    0,    0,  156,  155,  180,
+      179,  292,  291,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   13,    0
+        0,    0,    0,    0,    0,   13,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -849,7 +845,7 @@ static yyconst flex_int32_t yy_meta[75] =
         5,    5,    5,    5
     } ;
 
-static yyconst flex_int16_t yy_base[3984] =
+static yyconst flex_int16_t yy_base[3945] =
     {   0,
         0,    0,    0,    3,    6,    9,   12,   29,   16,   19,
        14,   17,   33,   36,   49,   55,   45,   61,  108,  174,
@@ -877,867 +873,859 @@ static yyconst flex_int16_t yy_base[3984] =
      1923, 1967, 3230, 3287, 1970, 1973, 3344, 3412, 1977, 1980,
      2024, 2027, 2030, 2034, 2037, 2054, 3480, 3547, 2094, 2097,
      2100, 2104, 2107, 2124, 2164, 2167, 3614, 3678, 2180, 2189,
-     3742, 3810, 2171, 2176,    0,    0, 9489,12459,12459,   95,
-      100,   29,   41,12459,  103,   51,12459,12459, 9478,12459,
-    12459, 9467,12459, 9478, 9478,  164,12459,12459,12459,12459,
-     9476, 9474, 9429,12459,  158, 9455,    0,  142,12459, 9418,
-     9406,12459,  164, 3874, 9404, 3938, 2183, 1362, 9453,   31,
-    12459,  253, 9444,    0,  143,12459, 9396, 9387,   84,12459,
-
-      258,  253,  109,  141,12459,  322, 9437,    0,  209,12459,
-     9407,12459,  325,  372,12459,  328, 9433,    0,  218,12459,
-     9403, 9399, 9397,12459,  392,  380,12459,  395, 9425,    0,
-      242,12459, 9377, 9370, 9374,12459,  455,  451,  246,12459,
-      458, 9419,    0,  245,12459, 9367, 9367,12459,  462,  457,
-      287,12459,  525, 9412,    0,  313,12459, 9358, 9376, 9378,
-     9356, 9372,    2,12459,  528,  579,12459,  531, 9400,    0,
-      370,12459, 9347,  101, 9353, 9363,  317, 9344,  258,  651,
-     9346,12459,  534, 9396,  377,12459,  592, 9385,    0,  446,
-    12459, 9352,12459,  652, 9391,  388,12459,  719, 9378,    0,
-
-      576,12459, 9348,12459,  722,  639,12459,  783, 9376,    0,
-      577,12459, 9323, 9329, 9339, 9319,  577,12459,  786,  272,
-     9324,  681,12459,  789, 9364,    0,  580,12459, 9318, 9328,
-     9315,12459,  847,  706,12459,  850, 9354,    0,  637,12459,
-     9308,12459,  853, 2188, 9352,  704,12459,  856, 9343,    0,
-      707,12459, 9309, 9305, 9307,   32,12459,  914, 9339,  748,
-    12459,  917, 9330,    0,  773,12459, 9292, 9292,12459,  920,
-      967,12459,  923, 9323,    0,  774,12459, 9290, 9288,12459,
-      980, 1034,12459,  989, 9316,    0,  840,12459, 9286, 9262,
-    12459, 1047, 1289,12459, 1056, 9309,    0,  841,12459, 9279,
-
-     9250,12459, 1188, 1290,12459, 1245, 9302,    0,  907,12459,
-     9251, 9245, 9252, 9262, 9260,  593,12459, 1302, 1351,  964,
-    12459, 1305, 9288,    0,  908,12459, 9254,12459, 1364, 1429,
-      771, 1365,  815, 9238,  882,12459, 1367, 9281,    0,  965,
-    12459, 9231, 9232, 9237, 9231, 9220,12459, 1432,   11, 9238,
-      949,12459, 1435, 9266,    0,  968,12459, 9229, 9231,12459,
-     1494, 1352,12459, 1499, 9259,    0, 1031,12459, 9221, 9221,
-     1358, 9223,   71,12459, 1502, 1547,12459, 1561, 9247,    0,
-     1032,12459, 9199, 1114,12459, 1567, 1514, 1171,12459, 1573,
-     9245,    0, 1035,12459, 9197, 9207,12459, 1630, 1616,12459,
-
-     1636, 9238,    0, 1172,12459, 9185, 9189, 9199, 9173,12459,
-     1639, 9233, 1176,12459, 1642, 9224,    0, 1173,12459, 9176,
-     9186, 9174, 9175,12459, 1806, 1222, 9170, 1233,12459, 1815,
-     9210,    0, 1354,12459, 9168, 9172, 9170, 1793, 9171,12459,
-     1818, 9197,    0, 1478,12459, 9156, 9154, 9144,12459, 1873,
-     1860, 1882,  239, 9137,12459, 9194, 9183,12459,12459,12459,
-     1874,   30, 9134, 9129, 9127, 9175,12459,    0, 2240, 9121,
-     9167, 9149, 9117,  168,  384, 9118, 9118, 9114, 9118,  638,
-     1184,  259, 9106, 9103, 1500, 9129,  369, 1425, 9103, 8523,
-     8523, 8526, 1569,  524, 8514, 8515, 8541,  439, 1879,  584,
-
-      629, 1369,12459,    0, 8511, 8530, 8526, 8514, 8552, 8515,
-    12459,    0, 8504, 8514,12459,    0, 8499, 2251, 8485, 8501,
-    12459,    0, 8482, 8500, 8492, 8492,12459,    0, 8472, 8483,
-     8482,12459,    0, 2258, 2298, 8460, 8473, 8473, 8462, 8450,
-     8452,12459,    0, 8444, 8444, 2301, 8424, 2304, 8412, 8412,
-     8409, 8417, 8417, 8383, 8400, 8394, 8394, 8386, 8375, 8380,
-    12459,    0, 2307, 8379,12459,    0, 8367, 8368,12459,    0,
-     8373,  405, 2310, 8352, 8358, 8361, 8350,  839,12459,    0,
-     8322, 2366, 2369, 8329,12459,    0, 8324, 8325, 8337,12459,
-        0, 8313, 2372, 8305, 8315, 8310, 8287,12459,    0, 8280,
-
-     2375, 8279,12459,    0, 2378, 8278, 8275,12459,    0, 8274,
-     8270, 8264,12459,    0, 8263, 8258, 8252,12459,    0, 8263,
-     8262, 8245, 2434, 8220, 8234, 8236, 8216, 8218,12459,    0,
-     8211, 8211, 1630, 1936, 1492, 1638, 1937,12459,    0, 8199,
-     8175, 8180, 8191, 8188, 8162, 8149,12459,    0, 2437, 8154,
-     8148,12459,    0, 8145, 2440, 8134, 8154, 8139, 8148, 8145,
-     8144, 8129,12459,    0, 8125, 8128, 8117, 8110,12459,    0,
-     8108, 2443, 8104,12459,    0, 8095, 8100, 2447, 8096, 8092,
-    12459,    0, 8095, 2501, 8093, 8070, 8075, 1415,12459,    0,
-     8081, 2504, 8065,  493, 8062, 8108,12459,    0, 8067, 8055,
-
-     8063, 8042, 8089, 8097, 1775, 8038,12459, 2049,    0, 8034,
-     8005, 8049, 8045, 7994,12459, 2507, 2130, 7981, 2513, 2568,
-     2199, 7993, 7987, 7973, 7977, 7957, 7962, 7947, 7946, 7957,
-     7945,  489, 7933, 7943, 7946, 7922, 7920, 7904, 7908, 7917,
-     7902, 2264, 7904, 7890, 7902, 7874, 7866, 7866, 7870, 7854,
-     7862, 7844, 7832, 7845, 2272, 7823, 7821, 2510, 2582, 2571,
-     2579, 2576, 2639, 7827, 7818, 2589, 2648, 7821, 2642, 2330,
-     7819, 2651, 2728, 2654, 2719, 2708, 2713, 2716, 2722, 2776,
+     3742, 3810, 2171, 2176,    0,    0, 9443,12349,12349,   95,
+      100,   29,   41,12349,  103,   51,12349,12349, 9432,12349,
+    12349, 9419,12349, 9434, 9434,  164,12349,12349,12349,12349,
+     9428, 9428, 9383,12349,  158, 9407,    0,  142,12349, 9374,
+     9362,12349,  164, 3874, 9356, 3938, 2183, 1362, 9407,   31,
+    12349,  253, 9398,    0,  143,12349, 9348, 9343,   84,12349,
+
+      258,  253,  109,  141,12349,  322, 9393,    0,  209,12349,
+     9359,12349,  325,  372,12349,  328, 9387,    0,  218,12349,
+     9357, 9351, 9353,12349,  392,  380,12349,  395, 9381,    0,
+      242,12349, 9329, 9324, 9328,12349,  455,  451,  246,12349,
+      458, 9371,    0,  245,12349, 9323, 9323,12349,  462,  457,
+      287,12349,  525, 9364,    0,  313,12349, 9312, 9330, 9330,
+     9312, 9328,    2,12349,  528,  579,12349,  531, 9352,    0,
+      370,12349, 9301,  101, 9307, 9315,  317, 9300,  258,  651,
+     9302,12349,  534, 9348,  377,12349,  592, 9339,    0,  446,
+    12349, 9306,12349,  652, 9343,  388,12349,  719, 9334,    0,
+
+      576,12349, 9304,12349,  722,  639,12349,  783, 9328,    0,
+      577,12349, 9277, 9283, 9291, 9275,  577,12349,  786,  272,
+     9280,  681,12349,  789, 9316,    0,  580,12349, 9272, 9282,
+     9267,12349,  847,  706,12349,  850, 9310,    0,  637,12349,
+     9272,12349,  853, 2188, 9312,  704,12349,  856, 9303,    0,
+      707,12349, 9273, 9267, 9269,   32,12349,  914, 9305,  748,
+    12349,  917, 9292,    0,  773,12349, 9254, 9258,12349,  920,
+      967,12349,  923, 9287,    0,  774,12349, 9254, 9256,12349,
+      980, 1034,12349,  989, 9280,    0,  840,12349, 9250, 9230,
+    12349, 1047, 1289,12349, 1056, 9275,    0,  841,12349, 9245,
+
+     9220,12349, 1188, 1290,12349, 1245, 9268,    0,  907,12349,
+     9217, 9215, 9220, 9230, 9232,  593,12349, 1302, 1351,  964,
+    12349, 1305, 9256,    0,  908,12349, 9222,12349, 1364, 1429,
+      771, 1365,  815, 9210,  882,12349, 1367, 9251,    0,  965,
+    12349, 9201, 9206, 9207, 9193, 9186,12349, 1432,   11, 9204,
+      949,12349, 1435, 9228,    0,  968,12349, 9195, 9197,12349,
+     1494, 1352,12349, 1499, 9221,    0, 1031,12349, 9187, 9187,
+     1358, 9185,   71,12349, 1502, 1547,12349, 1561, 9213,    0,
+     1032,12349, 9165, 1114,12349, 1567, 1514, 1171,12349, 1573,
+     9207,    0, 1035,12349, 9163, 9173,12349, 1630, 1616,12349,
+
+     1636, 9200,    0, 1172,12349, 9151, 9155, 9161, 9139,12349,
+     1639, 9199, 1176,12349, 1642, 9186,    0, 1173,12349, 9142,
+     9152, 9136, 9141,12349, 1806, 1222, 9136, 1233,12349, 1815,
+     9172,    0, 1354,12349, 9134, 9138, 9132, 1793, 9137,12349,
+     1818, 9163,    0, 1478,12349, 9118, 9120, 9110,12349, 1873,
+     1860, 1882,  239, 9099,12349, 9160, 9149,12349,12349,12349,
+     1874,   30, 9096, 9095, 9093, 9137,12349,    0, 2240, 9087,
+     9133, 9111, 9083,  168,  384, 9084, 9080, 9080, 9084,  638,
+     1184,  259, 9068, 9069, 1500, 9095,  369, 1425, 9065, 9065,
+     9065, 9065, 1569,  524, 9053, 9054, 9076,  439, 1879,  584,
+
+      629, 1369,12349,    0, 9046, 9065, 9057, 9046, 9084, 9044,
+    12349,    0, 9040, 9050,12349,    0, 9032, 2251, 9025, 9042,
+    12349,    0, 9019, 9038, 9034, 9030,12349,    0, 9011, 9027,
+     9023,12349,    0, 2258, 2298, 9004, 9018, 9014, 9012, 9010,
+     9008,12349,    0, 9009, 9009, 2301, 8410, 2304, 8407, 8412,
+     8409, 8418, 8418, 8400, 8419, 8414, 8416, 8410, 8398, 8403,
+    12349,    0, 2307, 8402,12349,    0, 8390, 8388,12349,    0,
+     8392,  405, 2310, 8372, 8385, 8384, 8376,  839,12349,    0,
+     8359, 2366, 2369, 8368,12349,    0, 8362, 8361, 8377,12349,
+        0, 8353, 2372, 8337, 8345, 8344, 8323,12349,    0, 8316,
+
+     2375, 8320,12349,    0, 2378, 8310, 8302,12349,    0, 8301,
+     8297, 8298,12349,    0, 8281, 8275, 8276,12349,    0, 8284,
+     8282, 8266, 2434, 8253, 8267, 8269, 8249, 8252,12349,    0,
+     8244, 8237, 1630, 1936, 1492, 1638, 1937,12349,    0, 8238,
+     8229, 8223, 8227, 8225, 8208, 8200,12349,    0, 2437, 8205,
+     8199,12349,    0, 8192, 2440, 8177, 8188, 8174, 8177, 8175,
+     8174, 8159,12349,    0, 8155, 8164, 8153, 8146,12349,    0,
+     8140, 2443, 8136,12349,    0, 8132, 8136, 2447, 8114, 8110,
+    12349,    0, 8113, 2501, 8118, 8094, 8100, 1415,12349,    0,
+     8105, 2504, 8085,  493, 8064, 8110,12349,    0, 8076, 8065,
+
+     8067, 8037, 8084, 8092, 1775, 8036,12349, 2049,    0, 8032,
+     8030, 8074, 8073, 8025,12349, 2507, 2130, 8018, 2513, 2568,
+     2199, 8030, 8032, 8005, 8018, 7997, 7999, 7989, 7985, 7999,
+     7979,  489, 7972, 7981, 7984, 7968, 7958, 7948, 7949, 7961,
+     7946, 2264, 7956, 7935, 7948, 7899, 7897, 7895, 7906, 7887,
+     7895, 7869, 7874, 7878, 2272, 7857, 7855, 2510, 2582, 2571,
+     2579, 2576, 2639, 7854, 7844, 2589, 2648, 7856, 2642, 2330,
+     7854, 2651, 2728, 2654, 2719, 2708, 2713, 2716, 2722, 2776,
      2779, 2788, 2794, 2396, 2801, 2466, 2843, 2854, 2861, 2868,
-     2872, 2846, 2912, 7813, 1993, 2921, 2533, 7816, 2925, 2602,
-
-     2931, 7795, 7787, 7795, 7791, 7778, 7775, 7787, 7766, 7779,
-     7768, 2939, 2985, 2982, 2673, 2990, 2993, 7767, 2996, 3000,
-     7762, 7751, 7759, 3049, 2879, 7762, 7756, 7736, 3057, 3063,
-     1199, 7729, 7733, 3068, 2949, 3116, 3076, 3119, 3125, 7741,
-     3129, 3134, 2340, 7740, 3183, 3149, 7728, 7713, 7710, 3187,
-     3196, 7723, 3201, 3215, 3191, 3252, 3210, 3255, 7705, 3263,
-     3266, 7720, 7705, 3308, 3311, 7707, 7706, 3315, 3319, 7700,
-       26, 7686, 3322, 3276, 3364, 7697, 7681, 3367, 3450, 7698,
-     7677, 3374, 3377, 7680, 7675, 7667, 7677, 7658, 7658, 7662,
-     7649, 3436, 3440, 7654, 3432, 3396, 7636, 3444, 3505, 7650,
-
-     3509, 3469, 3513, 7631, 3516, 7634, 7637, 7636, 3519, 3581,
-     3570, 3573, 3576, 3636, 3639, 7617, 3584, 3603, 3642, 3645,
-     7632, 7608, 3648, 3701, 7618, 3709, 3713, 7585, 3651, 3717,
-     7599, 7597, 3762, 3765, 1261, 7596, 3768, 3771, 7590, 7622,
-     3788, 3832,12459, 7568, 7576, 7575, 3835, 3838, 7601,12459,
-    12459, 1721, 7560,12459, 7601, 7596, 7545,12459,12459, 7542,
-     3794,12459,12459, 7551, 3841, 3844,12459, 3847, 2065, 7544,
-     7531, 7533, 7542, 7532, 7514, 7526, 2407, 7510, 7517, 7516,
-     7521, 7506, 7497, 7493, 7489,  718, 7500, 7483, 7483, 7486,
-     1691, 2474, 7472, 7471, 7480, 7470, 7452, 2541, 7450, 7452,
-
-     7451, 7443, 7438, 7439, 7452, 7434, 7432, 3868, 3871, 7422,
-     7422, 3880, 3888, 7433, 3898, 3906,12459, 3912, 7421, 7424,
-     3917, 3942,12459, 3945, 7400, 3948,12459,12459, 7408, 3964,
-     3970,12459, 3977, 3903, 4005, 7392, 7389, 3909, 4013, 4021,
-     4027,12459, 4030, 3967, 4033, 3973, 4042, 4050, 4053,12459,
-     4056, 4059,12459,12459, 4075,12459,12459, 4083, 4086, 7396,
-     7389, 7387, 7380, 4094, 4097,12459, 4101, 7366, 7354, 7366,
-     7341, 4104,12459,12459, 4120, 4123,12459,12459, 4131, 4134,
-     7328, 7336, 7328, 7332, 7329, 7317, 7313, 7311, 7296,  110,
-     4142, 4145,12459, 4150, 4154,12459,12459, 4164, 4169,12459,
-
-     4172, 4175, 4178, 4183,12459, 4193, 7290, 7279, 4197, 4202,
-    12459,12459, 7261, 7272, 7270, 4218, 4221,12459, 4224, 7256,
-     7249, 4227, 4233,12459,12459, 4245,12459,12459, 4253, 4256,
-    12459, 4261, 4264, 4267, 4275,12459, 4282, 7240, 4290,12459,
-    12459, 7243, 7247, 7249, 4286, 4301,12459, 4305, 7240, 4308,
-    12459,12459, 4316, 4320,12459, 4327, 4335,12459,12459, 7228,
-     4346, 4349,12459, 4352, 4355, 4358, 4361, 4376,12459, 4380,
-     4383, 4389, 4395, 4407,12459, 4410, 7216, 7206, 7181, 7197,
-     4414,12459,12459, 4422, 4429, 7185, 7155, 4440, 4443,12459,
-     4448, 7138, 7135, 4451, 4454,12459, 4462, 7109, 1748, 7090,
-
-     7064, 4473, 7082, 7078, 7050, 4477, 4482,12459, 4485, 7045,
-     4504,12459,12459, 7060, 4492, 4496,12459, 4515, 7042, 4518,
-    12459,12459, 4526, 4530, 4538, 4547, 4550, 7036, 4558, 7011,
-     4561, 4565,12459, 4568, 4571, 4580, 4589, 4592, 6972, 4600,
-     4603,12459, 4607, 6946, 4610,12459,12459, 4622, 4629,12459,
-     4632, 6918, 6912, 4635,12459,12459, 6790, 4643, 4651,12459,
-     4654, 6766, 4658,12459,12459, 6740, 4666, 4675, 4678,12459,
-     4684, 6745, 4687, 4690,12459,12459, 4705, 6716, 4708, 4711,
-    12459, 4716, 6650, 4719, 6626, 4723, 4730,12459, 4737,  955,
-     4742,12459,12459, 6661, 6619, 6506, 4749,12459, 6496, 6482,
-
-     6443, 6387, 6365, 6342, 6227, 2610, 2681, 6134, 2943,  130,
+     2872, 2846, 2912, 7844, 1993, 2921, 2533, 7843, 2925, 2602,
+
+     2931, 7828, 7820, 7828, 7816, 7803, 7800, 7812, 7795, 7800,
+     7783, 2939, 2985, 2982, 2673, 2990, 2993, 7791, 2996, 3000,
+     7775, 7761, 7773, 3049, 2879, 7775, 7753, 7737, 3057, 3063,
+     1199, 7735, 7739, 3068, 2949, 3116, 3076, 3119, 3125, 7747,
+     3129, 3134, 2340, 7746, 3183, 3149, 7731, 7717, 7713, 3187,
+     3196, 7727, 3201, 3215, 3191, 3252, 3210, 3255, 7694, 3263,
+     3266, 7709, 7694, 3308, 3311, 7706, 7704, 3315, 3319, 7695,
+       26, 7685, 3322, 3276, 3364, 7692, 7676, 3367, 3450, 7693,
+     7664, 3374, 3377, 7668, 7665, 7661, 7671, 7652, 7655, 7658,
+     7640, 3436, 3440, 7650, 3432, 3396, 7634, 3444, 3505, 7642,
+
+     3509, 3469, 3513, 7632, 3516, 7631, 7635, 7637, 3519, 3581,
+     3570, 3573, 3576, 3636, 3639, 7606, 3584, 3603, 3642, 3645,
+     7616, 7596, 3648, 3701, 7601, 3709, 3713, 7585, 3651, 3717,
+     7598, 7590, 3762, 3765, 1261, 7588, 3768, 3771, 7583, 7610,
+     3788, 3832,12349, 7569, 7576, 7567, 3835, 3838, 7596,12349,
+    12349, 1721, 7554,12349, 7592, 7591, 7539,12349,12349, 7533,
+     3794,12349,12349, 7539, 3841, 3844,12349, 3847, 2065, 7515,
+     7508, 7516, 7525, 7515, 7504, 7500, 2407, 7485, 7491, 7487,
+     7492, 7481, 7475, 7471, 7467,  718, 7481, 7464, 7459, 7466,
+     1691, 2474, 7453, 7455, 7457, 7448, 7436, 2541, 7434, 7440,
+
+     7440, 7427, 7417, 7418, 7431, 7409, 7408, 3868, 3871, 7407,
+     7396, 3880, 3888, 7407, 3898, 3906,12349, 3912, 7396, 7401,
+     3917, 3942,12349, 3945, 7381, 3948,12349,12349, 7382, 3964,
+     3970,12349, 3977, 3903, 4005, 7376, 7371, 3909, 4013, 4021,
+     4027,12349, 4030, 3967, 4033, 3973, 4042, 4050, 4053,12349,
+     4056, 4059,12349,12349, 4075,12349,12349, 4083, 4086, 7378,
+     7383, 7379, 7373, 4094, 4097,12349, 4101, 7368, 7356, 7376,
+     7358, 4104,12349,12349, 4120, 4123,12349,12349, 4131, 4134,
+     7345, 7361, 7348, 7351, 7343, 7338, 7332, 7327, 7321,  110,
+     4142, 4145,12349, 4150, 4154,12349,12349, 4164, 4169,12349,
+
+     4172, 4175, 4178, 4183,12349, 4193, 7305, 7312, 4197, 4202,
+    12349,12349, 7294, 7299, 7297, 4218, 4221,12349, 4224, 7278,
+     7259, 4227, 4233,12349,12349, 4245,12349,12349, 4253, 4256,
+    12349, 4261, 4264, 4267, 4275,12349, 4282, 7250, 4290,12349,
+    12349, 7249, 7251, 7254, 4286, 4301,12349, 4305, 7248, 4308,
+    12349,12349, 4316, 4320,12349, 4327, 4335,12349,12349, 7237,
+     4346, 4349,12349, 4352, 4355, 4358, 4361, 4376,12349, 4380,
+     4383, 4389, 4395, 4407,12349, 4410, 7229, 7194, 7185, 7191,
+     4414,12349,12349, 4422, 4429, 7190, 7184, 4440, 4443,12349,
+     4448, 7168, 7173, 4451, 4454,12349, 4462, 7175, 1748, 7150,
+
+     7091, 4473, 7085, 7082, 7049, 4477, 4482,12349, 4485, 6998,
+     4504,12349,12349, 7004, 4492, 4496,12349, 4515, 6989, 4518,
+    12349,12349, 4526, 4530, 4538, 4547, 4550, 6990, 4558, 6987,
+     4561, 4565,12349, 4568, 4571, 4580, 4589, 4592, 6980, 4600,
+     4603,12349, 4607, 6960, 4610,12349,12349, 4622, 4629,12349,
+     4632, 6899, 6870, 4635,12349,12349, 6891, 4643, 4651,12349,
+     4654, 6864, 4658,12349,12349, 6834, 4666, 4675, 4678,12349,
+     4684, 6837, 4687, 4690,12349,12349, 4705, 6653, 4708, 4711,
+    12349, 4716, 6587, 4719, 6586, 4723, 4730,12349, 4737,  955,
+     4742,12349,12349, 6583, 6507, 6445, 4749,12349, 6433, 6419,
+
+     6358, 6324, 6202, 6168, 6162, 2610, 2681, 6112, 2943,  130,
       148,  172, 2613,  192,  214, 2750,  248,  325,  339,  392,
      2813,  445,  472,  551,  642,  703, 2849, 3158,  703, 3223,
-     3022,  721,  787,  785,  786,  788, 4752,12459,12459,  835,
-      854, 4768,12459,12459,  840, 4776, 3407, 4779, 4785,  985,
-     1011, 4788, 4791,12459,12459, 1086, 1118, 4800,12459,12459,
-     4808, 4811,12459,12459, 4820,12459,12459, 4828, 4831,12459,
-    12459, 1109, 1162, 4839, 1154, 4842, 1189, 4847, 1223, 1243,
-     4857, 4861, 4869,12459,12459, 1259, 1296, 1281, 1305, 1326,
+     3022,  721,  787,  785,  786,  788, 4752,12349,12349,  835,
+      854, 4768,12349,12349,  840, 4776, 3407, 4779, 4785,  985,
+     1011, 4788, 4791,12349,12349, 1086, 1118, 4800,12349,12349,
+     4808, 4811,12349,12349, 4820,12349,12349, 4828, 4831,12349,
+    12349, 1109, 1162, 4839, 1154, 4842, 1189, 4847, 1223, 1243,
+     4857, 4861, 4869,12349,12349, 1259, 1296, 1281, 1305, 1326,
      1351, 4877, 1371, 1349, 1378, 1396, 4880, 4883, 4886, 4889,
 
-     4904, 1430, 1429, 4907, 4910, 1455, 4919, 4925, 4928, 1441,
-     1483, 4931, 4937, 4949, 4952, 4955, 4963, 1493, 1521, 1511,
-     4972, 4975, 1527, 4978, 4982, 4985, 4990, 5004, 1555, 5012,
-     5000, 5022, 1566, 5037, 1570, 5040, 1556, 1590, 5043,12459,
-    12459, 5051, 1616, 5058, 1634, 1628, 5061, 1640, 1647, 1655,
-     1676, 5064, 5073, 1676, 1690, 1703, 5069, 1691, 5082, 5088,
-     1705, 5093,12459,12459, 5102, 5107, 5124,12459,12459, 1723,
-     5115, 5133, 1734, 5141, 5144,12459,12459, 5153,12459,12459,
-     1728, 5161, 1744, 5164, 1759, 1777, 1802, 5167, 1800, 5170,
-     5173, 5176, 5192, 1803, 5195, 5198, 1814, 1846, 5206, 1816,
-
-     5215, 5218, 5233, 5236, 2026, 1859, 5239,12459, 1862,12459,
-    12459, 1851, 1853, 1876, 1867, 1866, 1882, 1887, 1888, 3089,
-     1884, 1911, 3271, 1927, 1938, 3404, 1938, 3463, 1929, 1933,
-     3540, 1940, 3670, 1965, 3735, 3673, 1967, 1981, 1980, 1996,
-     2001, 3802, 1999, 2013, 5242, 5245, 5251, 2015, 5258, 5261,
-     5264, 5267, 5270, 5274, 5277, 2022, 5280, 5292, 5300, 2038,
-     2032, 5308, 5312, 5319, 5322, 5330, 5333, 5341, 5345, 5353,
-     5363, 5366, 2063, 5369, 5372, 5381, 2048, 5389,12459,12459,
-     2050, 2066, 5400, 2059, 2075, 2069, 5403, 5406, 2075, 5414,
-     2081, 2080, 5421, 5427, 5433,12459,12459, 5441,12459, 2087,
-
-     2076, 5446,12459,12459, 5454, 5460, 5463, 5472, 5479, 2086,
-     5490, 5493, 2092, 5496,12459,12459, 5504, 5509,12459,12459,
-     5517, 2091, 2087, 2117, 5523, 5526, 2122, 5536, 2120, 5541,
-     5544, 5551, 5547, 5562,12459,12459, 2128, 5570, 5573,12459,
-    12459, 5581, 5589, 2136, 5592, 5595, 5610, 2125, 5613, 5616,
-     2142, 5624, 2136, 2142, 5631, 2153, 2142, 2173, 2172, 5637,
-    12459,12459, 2180, 2178, 2172, 5645, 2188, 5650, 5654, 5664,
-     2178, 5668,12459,12459, 2188, 5677,12459,12459, 2180, 5685,
-     2197, 5688, 2202, 5691, 5697, 5700, 5710, 5718, 2201, 5721,
-     5724, 5733,12459,12459, 5743, 2223, 5747,12459,12459, 2215,
-
-     2254, 5755, 2247, 5767, 2298, 3101, 5758, 5776, 5784, 2298,
-     2321, 2342,12459, 5762, 2263, 2257, 2260, 2365, 2260, 2279,
-     5787, 2327, 2333, 2321, 2326, 5791, 2341, 2335, 2337, 5794,
-     5797, 5803, 2354, 5807, 2361, 2360, 2368, 2435, 2380, 2386,
-     2397, 2402, 5810, 5813, 2405, 5816, 2416, 5819, 5822, 5830,
-     5837, 2422, 5848, 2412, 5851,12459,12459, 5859, 2429, 5862,
-     5867, 5870, 5874, 5882, 5888, 5900, 5903, 5896, 5915, 5906,
-     5925,12459,12459, 5933, 5936, 5944, 2461, 5947,12459,12459,
-     5955, 5959, 2462, 2473, 2463, 5969, 5973, 5981, 2467, 2477,
-     5987,12459,12459, 2477, 5999, 6002, 2474, 2473, 6010, 6013,
-
-     2490, 2515, 6017, 6020, 6035,12459,12459, 6043, 2540, 2541,
-     2530, 6051,12459, 6054, 2534, 6057, 6062, 2529, 6070, 2551,
-     6077, 2564, 2566, 2546, 6088,12459, 2547, 6091, 6094,12459,
-    12459, 6102, 2617, 6117, 6121, 6124, 6132, 2591, 6142,12459,
-    12459, 6151, 6154, 2611, 6162,12459,12459, 2605, 6170,12459,
-     2597, 6173, 6176, 6180, 2599, 6183, 2605, 2608, 2601, 2615,
-     6191, 2612, 6195,12459,12459, 6203,12459, 2617, 6206, 2624,
-     6210, 2629, 6213, 2638, 6216, 6224, 6238, 6246, 6249, 6253,
-     6270, 6273, 6277,12459,12459, 6285, 2640, 2662, 2706, 6293,
-     6296, 2715, 2703, 2763, 2703, 2721, 2709, 2837, 2709, 6300,
-
-    12459,12459, 6308, 2768, 2787, 2824, 6314, 6320, 6328, 2681,
-     2697, 2745, 2724, 6332, 6335, 6339, 2738, 6342, 2744, 2744,
-     2759, 2758, 6345, 6348, 6351, 6355, 2758, 6358, 2801, 2816,
-     2797, 6361, 6364, 2815, 6367, 6370, 6373, 2815, 6376,12459,
-    12459, 6384,12459,12459, 2833, 6392, 2824, 6395, 2833, 6398,
-     6402, 6416, 6420,12459,12459, 6428,12459,12459, 6436, 6439,
-     6444,12459,12459, 6460, 6463, 6478,12459,12459, 6471, 2857,
-     6486,12459,12459, 2857, 2860, 2874, 6494,12459,12459, 6502,
-     6505, 2878, 2867, 2876, 6513,12459,12459, 2888, 6521, 6524,
-     6527, 2888, 2886, 6532,12459,12459, 2979, 2980, 2896, 2904,
-
-     6546, 6549, 2904, 6552, 6555, 2924, 2926, 3027, 3028, 2951,
-     2950, 6571, 6574, 2966, 6577,12459, 6580,12459,12459, 6596,
-     2961, 6602,12459,12459, 2954, 2967, 2996, 6610, 6615, 6623,
-     6628, 6631, 6638, 6642, 6645, 6650, 6653, 6656, 2990, 3003,
-     6663, 6671, 3024, 6681, 3023, 6684,12459, 3013, 6688, 6691,
-    12459,12459, 6703, 6709, 3020, 6722,12459,12459, 6717, 6730,
-     6736, 3021, 6744, 3028, 3055, 3079, 6748,12459, 6752, 6756,
-     3106, 3105, 3106, 3112, 3124, 3121, 3118, 3119, 3144, 3166,
-     6770, 6773, 3240, 3317, 6776, 6759, 6764, 6800, 6805, 6808,
-     3131, 3132, 6811, 6814, 3149, 6820, 6823, 3159, 6826, 6829,
-
-     6832, 6835, 3155, 3166, 6838, 6841, 3180, 3183, 6844, 6847,
-     3203, 6850, 6853, 3195, 3222, 3267, 6856, 6859, 6862, 6865,
-     6868,12459,12459, 6876, 6883, 6886, 6889,12459,12459, 6897,
-     3263, 3272, 3273, 3282, 6905,12459,12459, 6916, 3273, 3287,
-     3282, 6921, 6930, 6924, 6939,12459, 3303, 3319, 3346, 3369,
-     3355, 3376, 3335, 6943, 6948, 6951, 6954, 6958,12459,12459,
-     6972, 6975, 3362, 3386, 3369, 3394, 6978, 6981, 6984, 7003,
-     7009, 7012, 3347, 3375, 3388, 7015, 7018,12459,12459, 7031,
-     7037, 7040, 7046, 7054, 7058, 7064, 7068, 7072, 7076, 7087,
-    12459,12459, 7082, 7095,12459, 3396, 3396, 7100,12459, 7103,
-
-    12459,12459, 3377, 7119, 7122,12459,12459, 3384, 7131, 3399,
-     3400,12459, 7134,12459,12459, 3449, 3436, 3451, 3447, 3470,
-     3477, 3464, 3479, 3478, 3488, 7142, 7145, 3518, 3525, 3464,
-     3472, 3521, 3467, 3476, 3474, 3479, 3531, 3477, 3489, 7150,
-     7153, 3500, 3501, 7156, 7164, 3532, 7167, 7170, 3524, 3537,
-     7173, 3539, 3542, 7178, 3538, 3551, 3576, 7181,12459, 7184,
-     7187, 7191, 7194, 7209, 7212, 7215, 7218,12459, 3589, 3610,
-     3601, 3593, 3617, 7221, 7224, 3609, 7239, 3641, 7242, 3674,
-     3682, 7250,12459, 3632, 3639, 3712,12459, 3718,12459, 7253,
-     7257, 7260, 7263,12459, 7271, 7283, 3674, 3670, 3671, 3728,
-
-    12459, 3731,12459, 7291, 7294, 7297, 7305, 7312, 7318, 7324,
-     7332, 3673, 3691, 7336, 7339, 7342, 7345,12459,12459, 7354,
-     7357, 7365, 7368, 7374,12459, 7377, 7386, 7389, 7397, 3716,
-     3711, 3715, 7400,12459, 3720, 7404, 3722, 3720, 3751, 3751,
-     3767, 3759, 3784, 3783, 3784, 3818, 3806, 3834, 7407, 3873,
-     3846, 3919, 3791, 3804, 3802, 3808, 3814, 3811, 3816, 3830,
-     3826, 3857, 3865, 3866, 3884, 3902, 7410, 7415, 3892, 3905,
-     3892, 3910, 7419, 3900, 3930, 7426, 7429,12459, 7432,12459,
-    12459, 7440,12459, 7444, 7448, 3912, 3927, 3937, 7454, 3933,
-     7472,12459,12459, 3946, 7463, 7481, 3942, 4005, 3976, 4042,
-
-     3977, 3945, 7489,12459,12459, 7492, 7495, 7459, 7511,12459,
-    12459, 3963, 3968, 3969,12459,12459, 7519, 7522, 7530, 4177,
-     4291, 7538,12459, 7541, 7544,12459,12459, 7552,12459, 3967,
-     7560, 7563, 7567, 7581,12459, 7584,12459,12459, 7592, 7600,
-     7595, 7613, 7621, 4093, 4215, 7629, 7632, 7635, 3990, 3996,
-     7638, 7641, 7653, 4036, 4045, 4045, 4049, 4066, 4044, 4058,
-     4058, 4061, 4082, 7657, 4092, 4099, 4170, 4026, 4050, 4038,
-     4055, 4063, 4081, 4075, 4096, 4086, 4104, 4116, 4134, 4120,
-     7660, 7663, 4138, 4142, 4139, 7666, 4156, 4159, 7671, 7676,
-     7684, 7692, 4166, 4152, 7695, 7698, 7704, 7718, 4166, 7721,
-
-    12459,12459, 4180, 4203, 4223, 4214, 4221, 4250, 4236, 7729,
-     7732, 7737, 7752,12459,12459, 7760,12459, 4215, 7763, 4229,
-     7766,12459,12459, 4246, 4261, 4261, 4264, 4265, 4276, 7781,
-     4267, 7784, 7787, 7796,12459,12459, 7804, 4350, 4365, 7812,
-    12459,12459, 4289, 4298, 4399, 4297, 4306, 4426, 7820, 7823,
-     7826, 7834, 7841, 7852, 7855, 7858, 7861, 7864, 7882, 4318,
-     4303, 4301, 4326,12459, 4345, 4329, 4328, 4334,12459, 7873,
-     4402, 4374, 7877, 4327, 4334, 4353, 4400, 4422, 4376, 4369,
-     4372, 4388, 4450, 4453, 4407, 4416, 7896, 7899, 4404, 4420,
-     7902, 7905, 4415, 7908, 4458, 4469, 7916, 7921, 4436, 4431,
-
-     7925, 7928, 7936,12459,12459, 7944, 7947, 4436, 4449, 4475,
-     4485, 4485, 4483, 4497, 4497, 7955, 7958, 4489, 7966,12459,
-    12459, 4491, 7974, 7977, 4473, 4504, 4520, 4552, 4533, 4544,
-     4571, 7985,12459, 4533, 7988,12459,12459, 4567, 4573, 4570,
-     4589, 4595, 4583, 4586, 4594, 4606, 4594, 4605, 4615, 7996,
-     8000, 4630, 4638, 8008,12459,12459, 8016, 8019, 8027, 8030,
-     8038, 8041,12459,12459, 4608, 4628, 4645, 4637, 4626, 4650,
-     4675, 4675, 8049, 4683, 8052, 8057, 8061, 4647, 4634, 4699,
-    12459,12459, 4664, 4676, 4662, 4726,12459,12459, 4690, 8071,
-     8076, 8080, 8083, 8086, 8090, 4712, 4723, 4723, 4734, 8093,
-
-     8099,12459, 4707, 4709, 8102,12459,12459, 8112,12459,12459,
-     8120, 4700, 4733, 4769, 4737, 4744, 4776, 4760, 8123,12459,
-    12459, 4744, 8131, 8134,12459,12459, 8145, 4772, 4790,12459,
-     4783, 4793,12459, 4764, 4799, 4788, 4810, 4799, 4817, 4827,
-     4830, 4817, 4833, 4843, 4849, 4855, 8149, 8152, 4861, 4875,
-     4866, 4878, 8163,12459,12459, 8171,12459,12459, 8179, 4886,
-     4887,12459, 4888, 4891, 4895,12459, 4906, 8182, 4948, 8185,
-     8188, 8207, 8250, 8297, 4876, 4879,12459, 4892, 4894, 4896,
-    12459, 4906, 8215, 8218, 8221, 8226, 4964, 4933, 4981, 4958,
-     8229, 4939, 4949, 8241, 8232, 8244, 4974,12459, 5012, 4983,
-
-    12459, 5013, 4967, 8262, 8270, 8288, 8280, 5023, 5024, 5024,
-     5026, 4976, 5042, 5010, 5042, 5016, 5033, 5063, 5074, 5047,
-     5063, 5084, 5085, 5058, 8317,12459,12459, 5097, 5068, 5103,
-     5075, 8291,12459, 5109, 5089, 5090, 5116, 5098, 5099, 8325,
-     5120, 8328, 5185, 5129, 8348, 8395, 5474, 5092, 5145, 5387,
-     5105, 5149,12459, 5154,12459, 5174, 8338,12459, 5135, 5117,
-     8368, 5176, 5184, 8359, 8377, 5180,12459, 5187,12459, 5163,
-     8415,12459,12459, 8423, 5261, 5280,12459,12459,12459,12459,
-     5172,12459, 5206,12459, 5208, 5217,12459,12459, 5212, 5237,
-    12459,12459, 5237,12459, 5279,12459, 5281,12459, 5285, 5299,
-
-    12459, 5299, 5304, 8385,12459, 5319, 5357, 5333, 5312, 5370,
-     5320, 8388,12459, 5292, 5288, 5414,12459,12459, 5338, 5331,
-     5402,12459,12459,12459, 8431, 8434, 5391, 5370, 5399, 5405,
-     8442,12459,12459, 5420, 5425, 8452, 5437, 5424, 5446, 5425,
-     8455, 5422, 5432, 5456, 5451, 5471, 5464,12459,12459,12459,
-    12459,12459,12459, 8458, 5497, 5483, 5500, 8461, 5448, 5451,
-    12459, 5473, 5455, 5465,12459, 5484, 8464, 8473, 8482, 8485,
-     5494, 5503, 5519, 5518, 5526, 5540, 5563, 5561, 8493, 8496,
-     5538, 5547, 5559, 5547, 5555, 5580, 8504, 8507, 5563, 5565,
-     5600, 5586, 5601, 5599, 8515, 5603, 5584, 5561, 5580, 5596,
-
-     5568, 5591, 8518,12459,12459, 8527, 5623, 5634, 5608, 5626,
-     5626, 5638, 5643, 5640,12459,12459, 8535,12459,12459, 5645,
-     5663, 5659, 5669, 5674, 5671, 8543,12459,12459, 5704, 5706,
-    12459, 5683,12459, 5684, 5782,12459, 5665, 5665, 5678, 5677,
-     5685, 5698, 5733, 5743, 5752, 5754, 5754, 5778, 5803, 5800,
-     5810, 5810, 5812, 5819, 5819, 5817, 5823, 5830,12459,12459,
-     5852, 5850, 5875, 5814, 5869, 5829, 5835, 5884, 5843, 5871,
-     5891, 5882, 5904, 5895, 5892, 5916, 5906, 5903, 5929, 5918,
-     5919, 5941, 5932, 5937, 5955,12459,12459, 5967, 5928,12459,
-     5980, 5939,12459, 5985, 5958, 5960, 5962, 5971, 5984, 5988,
-
-     6021, 6002, 5994, 6023, 6008, 5998, 6034, 6016, 6006, 6039,
-     6049, 6044,12459, 6042,12459, 6032, 6041, 6040, 6050, 6072,
-     6051,12459, 6076, 6054,12459, 6082, 6066,12459, 6092, 6069,
-    12459, 6095,12459,12459, 6070, 6084, 6073, 6087,12459, 6087,
-    12459, 6090,12459, 6105,12459, 6106, 8553, 6112, 6133, 6115,
-     6134, 6103, 6105, 6115, 6117, 8556, 6156,12459, 6158,12459,
-     6163, 6179, 6183, 6182, 6182, 6204,12459,12459,12459,12459,
-    12459,12459, 6201, 6202, 6217, 6225, 6214, 6243, 6215, 6393,
-     6234, 6307, 6369, 6371, 6241, 6247, 6209, 6244, 6364, 6372,
-     6394, 6396, 6435, 6466, 6387, 6456, 6180, 6408, 6441, 6474,
-
-     6415, 6463, 6448, 6479, 6500, 6522, 6526, 6602, 6490, 6517,
-     6540, 6542, 6576, 6590, 6550, 6642, 6547, 6608, 6630, 6643,
-     6709, 6710, 6271, 6661, 6716, 6724, 6617, 6733, 6697, 6855,
-     6603, 6749, 6896, 6928, 6853, 6874, 6451, 6682, 6737, 6882,
-     6970, 6979, 6946, 6952, 6568, 6861, 6885, 6892, 7027, 7033,
-     6969, 6973, 6976, 7141, 7061, 7109, 6988, 7044, 7062, 7121,
-     6863, 6918, 6785, 6981, 7179, 7184, 7214, 7249, 7219, 7227,
-     6775, 7268, 8564, 8567,12459,12459, 8587, 8596, 8605, 8614,
-     8623, 8632, 8641, 8650, 8659, 8668, 8677, 8686, 8695, 8704,
-     8713, 8722, 8731, 8740, 8749, 8758, 8767, 8776, 8785, 8794,
-
-     8803, 8812, 8821, 8830, 8839, 8848, 8857, 8866, 8875, 8884,
-     8893, 8902, 8911, 8920, 8929, 8938, 8947, 8956, 8965, 8974,
-     8983, 8992, 9001, 9010, 9019, 9028, 9037, 9046, 9055, 9064,
-     9073, 9082, 9091, 9100, 9109, 9118, 9127, 9136, 9145, 9154,
-     9161, 9168, 9175, 9182, 9189, 9196, 9203, 9210, 9217, 9224,
-     9231, 9238, 9245, 9252, 9259, 9266, 9273, 9280, 9287, 9294,
-     9301, 9308, 9315, 9322, 9329, 9336, 9343, 9350, 9357, 9366,
-     9373, 9378, 9385, 9390, 9397, 9402, 9409, 9414, 9421, 9426,
-     9433, 9438, 9445, 9450, 9457, 9462, 9469, 9474, 9481, 9486,
-     9493, 9498, 9505, 9510, 9517, 9522, 9529, 9534, 9541, 9546,
-
-     9553, 9558, 9565, 9570, 9577, 9582, 9589, 9594, 9601, 9606,
-     9613, 9618, 9625, 9630, 9637, 9642, 9649, 9654, 9661, 9666,
-     9673, 9678, 9685, 9690, 9697, 9702, 9709, 9714, 9723, 9729,
-     9736, 9744, 9752, 9760, 9767, 9775, 9782, 9790, 9798, 9806,
-     9814, 9822, 9830, 9838, 9845, 9853, 9861, 9868, 9876, 9883,
-     9891, 9898, 9906, 9913, 9921, 9928, 9936, 9943, 9951, 9958,
-     9966, 9973, 9981, 9988, 9996,10003,10011,10018,10026,10033,
-    10041,10048,10056,10063,10071,10079,10087,10094,10102,10109,
-    10117,10124,10132,10139,10147,10154,10162,10171,10177,10184,
-    10192,10199,10207,10214,10222,10229,10237,10244,10252,10260,
-
-    10267,10275,10282,10290,10298,10306,10314,10321,10329,10337,
-    10345,10353,10361,10368,10376,10383,10391,10398,10406,10414,
-    10422,10430,10438,10445,10453,10460,10468,10475,10483,10490,
-    10498,10505,10513,10520,10528,10535,10543,10550,10558,10565,
-    10573,10581,10589,10596,10604,10613,10622,10629,10636,10644,
-    10652,10660,10667,10675,10682,10690,10698,10705,10713,10720,
-    10728,10736,10744,10751,10759,10767,10775,10782,10790,10797,
-    10805,10813,10821,10828,10836,10843,10851,10858,10866,10873,
-    10881,10888,10896,10904,10912,10919,10927,10934,10942,10949,
-    10957,10964,10972,10979,10987,10994,11002,11009,11017,11026,
-
-    11035,11042,11050,11058,11066,11073,11081,11089,11097,11105,
-    11113,11121,11128,11136,11144,11151,11159,11167,11175,11182,
-    11190,11197,11205,11213,11220,11228,11236,11244,11251,11259,
-    11266,11274,11281,11289,11297,11304,11312,11319,11327,11334,
-    11342,11350,11358,11365,11373,11380,11388,11395,11403,11412,
-    11421,11429,11436,11444,11452,11459,11467,11475,11483,11491,
-    11499,11506,11514,11522,11529,11537,11545,11552,11559,11567,
-    11575,11582,11590,11598,11605,11613,11621,11628,11636,11643,
-    11651,11658,11666,11673,11681,11689,11697,11705,11713,11720,
-    11728,11736,11744,11753,11762,11769,11777,11785,11792,11800,
-
-    11808,11816,11824,11831,11839,11847,11854,11862,11870,11877,
-    11884,11892,11900,11907,11915,11922,11930,11938,11946,11953,
-    11961,11968,11975,11983,11990,11998,12005,12013,12020,12028,
-    12037,12046,12053,12061,12069,12077,12085,12093,12101,12109,
-    12116,12124,12131,12139,12147,12155,12163,12171,12179,12187,
-    12195,12202,12210,12218,12226,12234,12241,12248,12255,12263,
-    12270,12278,12285,12293,12302,12311,12318,12326,12334,12342,
-    12350,12357,12364,12372,12379,12387,12395,12404,12413,12422,
-    12431,12440,12449
+     4904, 1430, 1429, 4907, 4910, 1455, 4919, 1461, 4925, 1481,
+     1484, 4929, 4937, 4932, 4947, 4951, 4959, 1515, 1522, 1533,
+     1562, 4965, 1550, 4968, 4971, 4978, 4992, 4999, 1564, 5010,
+     5013, 5019, 1572, 5031, 1598, 5034, 1596, 1631, 5037,12349,
+    12349, 5045, 1643, 5053, 1643, 1637, 5056, 1661, 1680, 1681,
+     1690, 5059, 5065, 1683, 1695, 1706, 5077, 1711, 5080, 5083,
+     1738, 5086,12349,12349, 5098, 5102, 5112,12349,12349, 1747,
+     5123, 5127, 1748, 5135, 5142,12349,12349, 5150,12349,12349,
+     1747, 5158, 1782, 5161, 1798, 1800, 1811, 5164, 1804, 5167,
+     5170, 5173, 5188, 1808, 5191, 5194, 1826, 1857, 5202, 1820,
+
+     5209, 5212, 5221, 5229, 2026, 1886, 5232,12349, 1901,12349,
+    12349, 1874, 1862, 1880, 1872, 1873, 1890, 1891, 1908, 3089,
+     1918, 1934, 3271, 1936, 1944, 3404, 1951, 3463, 1938, 1953,
+     3540, 1974, 3670, 1989, 3735, 3673, 1979, 1986, 1987, 2006,
+     2012, 3802, 2010, 2021, 4974, 5235, 5239, 2035, 5242, 5253,
+     5256, 5259, 5262, 5265, 5268, 2054, 5272, 5290, 5304, 2061,
+     2041, 5307, 5310, 5313, 5331, 5336, 5339, 5342, 5345, 5364,
+     5350, 5372, 2066, 5375, 5378, 5386, 2051, 5404,12349,12349,
+     2053, 2072, 5393, 2064, 2081, 2075, 5397, 5415, 2081, 5423,
+     2088, 2083, 5426, 5429, 5434,12349,12349, 5448,12349, 2090,
+
+     2079, 5451,12349,12349, 5459, 5462, 5467, 2089, 5480, 5485,
+     2111, 5489,12349,12349, 5499, 5502,12349,12349, 5510, 2120,
+     2103, 2122, 2127, 5513, 2129, 5518, 5521, 5525, 5533, 5539,
+    12349,12349, 2134, 5547, 5552,12349,12349, 5561, 5566, 2146,
+     5569, 5572, 5580, 2137, 5587, 5592, 2150, 5600, 2145, 2147,
+     5605, 2179, 2168, 2176, 2175, 5608,12349,12349, 2183, 2181,
+     2178, 5619, 2195, 5624, 5627, 5638, 2182, 5642,12349,12349,
+     2203, 5651,12349,12349, 2194, 5659, 2203, 5662, 2209, 5665,
+     5671, 5674, 5684, 5692, 2204, 5695, 5698, 5707,12349,12349,
+     5717, 2246, 5721,12349,12349, 2258, 2276, 5729, 2250, 5741,
+
+     2298, 3101, 5732, 5750, 5758, 2308, 2321, 2342,12349, 5736,
+     2266, 2260, 2273, 2365, 2316, 2320, 5761, 2332, 2337, 2328,
+     2337, 5765, 2349, 2341, 2345, 5768, 5771, 5777, 2360, 5781,
+     2379, 2395, 2390, 2435, 2386, 2389, 2401, 2414, 5784, 5787,
+     2426, 5790, 2429, 5793, 5796, 5804, 5811, 2440, 5822, 2450,
+     5825,12349,12349, 5833, 2451, 5836, 5841, 5844, 5848, 5856,
+     5862, 5874, 5877, 5870, 5889, 5880, 5899,12349,12349, 5907,
+     5910, 5918, 2464, 5921,12349,12349, 5929, 5933, 2465, 2476,
+     2466, 5943, 5947, 5955, 2477, 2492, 5961,12349,12349, 2489,
+     5973, 5976, 2481, 2491, 5984, 5987, 2519, 2528, 5991, 5994,
+
+     6009,12349,12349, 2530, 6018,12349, 6021, 2534, 6024, 6027,
+     2529, 6030, 2551, 2543, 6037,12349, 2539, 6048, 6052,12349,
+    12349, 6060, 2573, 6063, 6067, 6085, 6070, 2553, 6094,12349,
+    12349, 6073, 6103, 2598, 6111,12349,12349, 2591, 6119,12349,
+     2594, 6122, 6125, 6128, 2595, 6131, 2601, 2605, 2598, 2612,
+     6134, 2608, 6140,12349,12349, 6148,12349, 2609, 6153, 2617,
+     6156, 2623, 6159, 2632, 6162, 6167, 6171, 6181, 6187, 6190,
+     6200, 6205, 6209,12349,12349, 6219, 2622, 2636, 2682, 6223,
+     6228, 2691, 2692, 2715, 2702, 2718, 2707, 2763, 2709, 6231,
+    12349,12349, 6242, 2768, 2787, 2801, 6246, 6254, 6264, 2681,
+
+     2697, 2745, 2724, 6267, 6273, 6276, 2738, 6279, 2744, 2744,
+     2759, 2758, 6282, 6285, 6289, 6292, 2781, 6295, 2801, 2816,
+     2796, 6298, 6301, 2798, 6304, 6307, 6310, 2814, 6313,12349,
+    12349, 6321,12349,12349, 2827, 6329, 2822, 6332, 2830, 6335,
+     6339, 6353, 6357,12349,12349, 6365,12349,12349, 6373, 6376,
+     6381,12349,12349, 6397, 6400, 6415,12349,12349, 6408, 2829,
+     6423,12349,12349, 2828, 2857, 2871, 6431,12349,12349, 6439,
+     6442, 2868, 2858, 2870, 6450,12349,12349, 2882, 6458, 6461,
+     6464, 2876, 2869, 6469,12349,12349, 2888, 2901, 6483, 6486,
+     2900, 6489, 6492, 2903, 2896, 2918, 2928, 6508, 6511, 2954,
+
+     6514,12349, 6517,12349,12349, 6533, 2947, 6539,12349,12349,
+     2943, 2952, 2953, 6547, 6552, 6560, 6565, 6568, 6575, 6579,
+     6582, 6587, 6590, 6593, 2947, 2952, 6600, 6608, 2972, 6618,
+     2971, 6621,12349, 2959, 6625, 6628,12349,12349, 6640, 6646,
+     2986, 6659,12349,12349, 6654, 6667, 6673, 2987, 6681, 2991,
+     3001, 3016, 6685,12349, 6689, 6693, 3028, 3030, 3033, 3039,
+     3055, 3053, 3050, 3054, 3077, 3099, 6707, 6710, 3159, 3130,
+     6713, 4962, 5262, 6721, 6729, 6733, 3075, 3075, 6736, 6739,
+     3087, 6742, 6745, 3084, 6748, 6751, 6757, 6760, 3088, 3095,
+     6763, 6766, 3093, 3123, 6769, 6772, 3142, 6775, 6778, 3140,
+
+     3161, 3179, 6781, 6784, 6787, 6790, 6793,12349,12349, 6801,
+     6808, 6811, 6814,12349,12349, 6822, 3189, 3197, 3203, 3270,
+     6830,12349,12349, 6841, 3199, 3210, 3223, 6846, 6855, 6849,
+     6864,12349, 3246, 3263, 3274, 6868, 6873, 6876, 6879, 6883,
+    12349,12349, 6897, 6900, 6903, 6906, 6909, 6928, 6934, 6937,
+     3275, 3283, 3284, 6940, 6943,12349,12349, 6956, 6962, 6965,
+     6971, 6979, 6983, 6989, 6993, 6997, 7001, 7012,12349,12349,
+     7007, 7020,12349, 3291, 3289, 7025,12349, 7028,12349,12349,
+     3270, 7044, 7047,12349,12349, 3287, 7056, 3309, 3305,12349,
+     7059,12349,12349, 3350, 3342, 3358, 3353, 3362, 3364, 3352,
+
+     3370, 3371, 3378, 7067, 7070, 3425, 3448, 3368, 3384, 3464,
+     3386, 3393, 3397, 3405, 3469, 3411, 3419, 7075, 7078, 3416,
+     3428, 7081, 7089, 3438, 7092, 7095, 3431, 3448, 7098, 3451,
+     3462, 7103, 3461, 3474, 3480, 7106,12349, 7109, 7112, 7116,
+     7119, 7134, 7137, 7140, 7143,12349, 3477, 3498, 3501, 3498,
+     3521, 7146, 7149, 3521, 7164, 3529, 7167, 3570, 3573, 7175,
+    12349, 3522, 3524, 7178, 7182, 7185, 7188,12349, 7196, 7208,
+     3542, 3539, 3542, 7216, 7219, 7222, 7230, 7237, 7243, 7249,
+     7257, 3543, 3569, 7261, 7264, 7267, 7270,12349,12349, 7279,
+     7282, 7290, 7293, 7299,12349, 7302, 7311, 7314, 7322, 3597,
+
+     3591, 3599, 7325,12349, 3600, 7329, 3602, 3596, 3651, 3652,
+     3666, 3658, 3684, 3671, 3670, 3687, 3679, 3703, 7332, 3766,
+     3721, 3840, 3661, 3673, 3671, 3680, 3696, 3706, 3710, 3726,
+     3730, 3734, 3737, 3732, 3738, 3756, 7335, 7340, 3768, 3800,
+     3785, 3806, 7344, 3798, 3812, 7351, 7354,12349, 7357,12349,
+    12349, 7365,12349, 7369, 7373, 3793, 3804, 3817, 7379, 3813,
+     7397,12349,12349, 3828, 7388, 7406, 3820, 3931, 3853, 3963,
+     3857, 3844, 7414, 7417, 7420, 7384, 7436,12349,12349, 3870,
+     3880, 3879, 7444, 7447, 7455, 3985, 4039, 7463,12349, 7466,
+     7469,12349,12349, 7477,12349, 3866, 7485, 7488, 7492, 7506,
+
+    12349, 7509,12349,12349, 7517, 7525, 7520, 7538, 7546, 4093,
+     4177, 7554, 7557, 7560, 3902, 3903, 7563, 7566, 7578, 3928,
+     3939, 3939, 3960, 3977, 3961, 3979, 3979, 3990, 4004, 7582,
+     4018, 4007, 4020, 3951, 3962, 3970, 3989, 4013, 4022, 4005,
+     4016, 4010, 4031, 4040, 4060, 4043, 7585, 7588, 4059, 4064,
+     4048, 7591, 4066, 4079, 7596, 7601, 7609, 7617, 4093, 4079,
+     7620, 7623, 7629, 7643, 4104, 7646,12349,12349, 4106, 4121,
+     4142, 4131, 4143, 4166, 4152, 4143, 7654, 7657, 7665,12349,
+    12349, 7673,12349, 4133, 7677, 4156, 7680,12349,12349, 4173,
+     4174, 4177, 4181, 4182, 4195, 7688, 4185, 7695, 7698, 7707,
+
+    12349,12349, 7715, 4215, 4236, 7723,12349,12349, 4205, 4209,
+     4278, 4212, 4216, 4310, 7731, 7734, 7737, 7745, 7752, 7763,
+     7766, 7769, 7772, 7775, 7793, 4247, 4233, 4235, 4240,12349,
+     4272, 4256, 4256, 4273,12349, 7784, 4307, 4315, 7788, 4248,
+     4259, 4282, 4336, 4337, 4286, 4300, 4304, 4321, 4367, 4379,
+     4330, 4341, 7807, 7810, 4327, 4348, 7813, 7816, 4335, 7819,
+     4394, 4424, 7827, 7832, 4351, 4346, 7836, 7839, 7847,12349,
+    12349, 7855, 7858, 4348, 4356, 4380, 4394, 4395, 4389, 4400,
+     4407, 4407, 7866,12349,12349, 4409, 7874, 7877, 4394, 4427,
+     4437, 4467, 4440, 4455, 4482, 7885,12349, 4439, 7888,12349,
+
+    12349, 4473, 4478, 4479, 4488, 4493, 4488, 4490, 4498, 4509,
+     4502, 4503, 4515, 7896, 7900, 4552, 4583, 7908,12349,12349,
+     7916, 7919, 7927, 7930, 7938, 7941,12349,12349, 4504, 4524,
+     4541, 4533, 4518, 4554, 4570, 4558, 7949, 4597, 7952, 7957,
+     7961, 4546, 4532, 4609,12349,12349, 4569, 4569, 4561, 4631,
+    12349,12349, 4591, 7971, 7976, 7980, 7983, 7986, 7990, 4612,
+     4624, 4623, 4639, 7993, 7999,12349, 4609, 4615, 8002,12349,
+    12349, 8012,12349,12349, 8020, 4606, 4635, 4677, 4645, 4657,
+     4691, 4663, 4646, 8023, 8026,12349,12349, 8034, 4670, 4690,
+    12349, 4694, 4704,12349, 4678, 4711, 4703, 4722, 4710, 4724,
+
+     4734, 4739, 4727, 4732, 4747, 4750, 4737, 8041, 8045, 4748,
+     4759, 4763, 4775, 8053,12349,12349, 8061,12349,12349, 8069,
+     4778, 4786,12349, 4788, 4790, 4791,12349, 4795, 8072, 4854,
+     8075, 8078, 8097, 8140, 8187, 4761, 4770,12349, 4781, 4786,
+     4787,12349, 4798, 8105, 8108, 8111, 8116, 4850, 4829, 4860,
+     4855, 8119, 4837, 4850, 8131, 8122, 8134, 4864,12349, 4898,
+     4877,12349, 4909, 4860, 8152, 8160, 8178, 8170, 4919, 4924,
+     4933, 4935, 4896, 4952, 4919, 4955, 4925, 4958, 4978, 4985,
+     4952, 4974, 4997, 4998, 4969, 8207,12349,12349, 5004, 4979,
+     5011, 4987, 8181,12349, 5023, 5009, 5011, 5036, 5017, 5019,
+
+     8215, 5046, 8218, 5071, 5045, 8238, 8285, 5069, 5021, 5087,
+     5382, 5049, 5098,12349, 5104,12349, 5104, 8228,12349, 5067,
+     5049, 8258, 5096, 5180, 8249, 8267, 5106,12349, 5108,12349,
+     5087, 8305,12349,12349, 8313, 5256, 5291,12349,12349,12349,
+    12349, 5088,12349, 5121,12349, 5127, 5136,12349,12349, 5119,
+     5144,12349,12349, 5142,12349, 5177,12349, 5176,12349, 5182,
+     5193,12349, 5192, 5193, 8275,12349, 5189, 5330, 5227, 5211,
+     5351, 5211, 8278,12349, 5178, 5188, 5276,12349,12349, 5224,
+     5214, 5411,12349,12349,12349, 8321, 8324, 5257, 5272, 5363,
+     5274, 8332,12349,12349, 5294, 5295, 8342, 5417, 5294, 5426,
+
+     5296, 8345, 5288, 5290, 5340, 5333, 5347, 5337,12349,12349,
+    12349,12349,12349,12349, 8348, 5366, 5362, 5377, 8351, 5325,
+     5345,12349, 5365, 5347, 5357,12349, 5392, 8354, 8363, 8372,
+     8375, 5404, 5412, 5425, 5416, 5426, 5450, 5468, 5466, 8383,
+     8386, 5437, 5446, 5458, 5445, 5457, 5474, 8394, 8397, 5457,
+     5459, 5501, 5487, 5501, 5496, 8405, 5506, 5492, 5470, 5493,
+     5506, 5483, 5506, 8408,12349,12349, 8417, 5558, 5608, 5522,
+     5527, 5524, 5540, 5554, 5554,12349,12349, 8425,12349,12349,
+     5563, 5572, 5575, 5579, 5585, 5581, 8433,12349,12349, 5618,
+     5625,12349, 5603,12349, 5604, 5636,12349, 5583, 5583, 5596,
+
+     5604, 5604, 5624, 5661, 5655, 5667, 5662, 5662, 5680, 5680,
+     5678, 5692, 5700, 5698, 5704, 5720, 5718, 5732, 5732,12349,
+    12349, 5770, 5768, 5783, 5748, 5798, 5756, 5757, 5807, 5765,
+     5779, 5799, 5790, 5810, 5796, 5800, 5824, 5819, 5821, 5842,
+     5832, 5829, 5860, 5850, 5847, 5871,12349,12349, 5914, 5847,
+    12349, 5900, 5854,12349, 5906, 5880, 5880, 5891, 5891, 5914,
+     5906, 5946, 5929, 5923, 5952, 5940, 5931, 5963, 5946, 5936,
+     5972, 5979, 5977,12349, 5975,12349, 5971, 5976, 5976, 5982,
+     6003, 5981,12349, 6007, 5984,12349, 6013, 6002,12349, 6027,
+     6010,12349, 6025,12349,12349, 6009, 6023, 6016, 6035,12349,
+
+     6055,12349, 6056,12349, 6059,12349, 6067, 8443, 6069, 6095,
+     6076, 6095, 6066, 6067, 6072, 6074, 8446, 6134,12349, 6138,
+    12349, 6142, 6144, 6161, 6169, 6185, 6196,12349,12349,12349,
+    12349,12349,12349, 6252, 6253, 6324, 6330, 6178, 6190, 6331,
+     6454, 6175, 6239, 6306, 6350, 6194, 6369, 6308, 6366, 6177,
+     6344, 6326, 6333, 6459, 6463, 6393, 6400, 6387, 6480, 6411,
+     6427, 6449, 6489, 6479, 6545, 6309, 6510, 6539, 6567, 6502,
+     6626, 6377, 6429, 6527, 6596, 6616, 6646, 6435, 6644, 6588,
+     6652, 6647, 6700, 6598, 6680, 6818, 6826, 6674, 6786, 6660,
+     6807, 6540, 6678, 6821, 6894, 6778, 6799, 6485, 6554, 6701,
+
+     6842, 6904, 6906, 6871, 6898, 6843, 6986, 6788, 6810, 6895,
+     6958, 6931, 6987, 7066, 7068, 6999, 7069, 6913, 6969, 7046,
+     7136, 7142, 7144, 7032, 7193, 7154, 7155, 7181, 7207, 7196,
+     7258, 6914, 7152, 8454, 8457,12349,12349, 8477, 8486, 8495,
+     8504, 8513, 8522, 8531, 8540, 8549, 8558, 8567, 8576, 8585,
+     8594, 8603, 8612, 8621, 8630, 8639, 8648, 8657, 8666, 8675,
+     8684, 8693, 8702, 8711, 8720, 8729, 8738, 8747, 8756, 8765,
+     8774, 8783, 8792, 8801, 8810, 8819, 8828, 8837, 8846, 8855,
+     8864, 8873, 8882, 8891, 8900, 8909, 8918, 8927, 8936, 8945,
+     8954, 8963, 8972, 8981, 8990, 8999, 9008, 9017, 9026, 9035,
+
+     9044, 9051, 9058, 9065, 9072, 9079, 9086, 9093, 9100, 9107,
+     9114, 9121, 9128, 9135, 9142, 9149, 9156, 9163, 9170, 9177,
+     9184, 9191, 9198, 9205, 9212, 9219, 9226, 9233, 9240, 9247,
+     9256, 9263, 9268, 9275, 9280, 9287, 9292, 9299, 9304, 9311,
+     9316, 9323, 9328, 9335, 9340, 9347, 9352, 9359, 9364, 9371,
+     9376, 9383, 9388, 9395, 9400, 9407, 9412, 9419, 9424, 9431,
+     9436, 9443, 9448, 9455, 9460, 9467, 9472, 9479, 9484, 9491,
+     9496, 9503, 9508, 9515, 9520, 9527, 9532, 9539, 9544, 9551,
+     9556, 9563, 9568, 9575, 9580, 9587, 9592, 9599, 9604, 9613,
+     9619, 9626, 9634, 9642, 9650, 9657, 9665, 9672, 9680, 9688,
+
+     9696, 9704, 9712, 9720, 9728, 9735, 9743, 9751, 9758, 9766,
+     9773, 9781, 9788, 9796, 9803, 9811, 9818, 9826, 9833, 9841,
+     9848, 9856, 9863, 9871, 9878, 9886, 9893, 9901, 9908, 9916,
+     9923, 9931, 9938, 9946, 9953, 9961, 9969, 9977, 9984, 9992,
+     9999,10007,10014,10022,10029,10037,10044,10052,10061,10067,
+    10074,10082,10089,10097,10104,10112,10119,10127,10134,10142,
+    10150,10157,10165,10172,10180,10188,10196,10204,10211,10219,
+    10227,10235,10243,10251,10258,10266,10273,10281,10288,10296,
+    10304,10312,10320,10328,10335,10343,10350,10358,10365,10373,
+    10380,10388,10395,10403,10410,10418,10425,10433,10440,10448,
+
+    10455,10463,10471,10479,10486,10494,10503,10512,10519,10526,
+    10534,10542,10550,10557,10565,10572,10580,10588,10595,10603,
+    10610,10618,10626,10634,10641,10649,10657,10665,10672,10680,
+    10687,10695,10703,10711,10718,10726,10733,10741,10748,10756,
+    10763,10771,10778,10786,10794,10802,10809,10817,10824,10832,
+    10839,10847,10854,10862,10869,10877,10884,10892,10899,10907,
+    10916,10925,10932,10940,10948,10956,10963,10971,10979,10987,
+    10995,11003,11011,11018,11026,11034,11041,11049,11057,11065,
+    11072,11080,11087,11095,11103,11110,11118,11126,11134,11141,
+    11149,11156,11164,11171,11179,11187,11194,11202,11209,11217,
+
+    11224,11232,11240,11248,11255,11263,11270,11278,11285,11293,
+    11302,11311,11319,11326,11334,11342,11349,11357,11365,11373,
+    11381,11389,11396,11404,11412,11419,11427,11435,11442,11449,
+    11457,11465,11472,11480,11488,11495,11503,11511,11518,11526,
+    11533,11541,11548,11556,11563,11571,11579,11587,11595,11603,
+    11610,11618,11626,11634,11643,11652,11659,11667,11675,11682,
+    11690,11698,11706,11714,11721,11729,11737,11744,11752,11760,
+    11767,11774,11782,11790,11797,11805,11812,11820,11828,11836,
+    11843,11851,11858,11865,11873,11880,11888,11895,11903,11910,
+    11918,11927,11936,11943,11951,11959,11967,11975,11983,11991,
+
+    11999,12006,12014,12021,12029,12037,12045,12053,12061,12069,
+    12077,12085,12092,12100,12108,12116,12124,12131,12138,12145,
+    12153,12160,12168,12175,12183,12192,12201,12208,12216,12224,
+    12232,12240,12247,12254,12262,12269,12277,12285,12294,12303,
+    12312,12321,12330,12339
     } ;
 
-static yyconst flex_int16_t yy_def[3984] =
+static yyconst flex_int16_t yy_def[3945] =
     {   0,
-     3477, 3477, 3478, 3478, 3478, 3478, 3479, 3479, 3480, 3480,
-     3481, 3481, 3482, 3482, 3482, 3482, 3483, 3483, 3484, 3484,
-     3485, 3485, 3485, 3485, 3477, 3477, 3485, 3485, 3485, 3485,
-     3477, 3477, 3485, 3485, 3477, 3477, 3485, 3485, 3485, 3485,
-     3486, 3486, 3487, 3487, 3477, 3477, 3487, 3487, 3487, 3487,
-     3488, 3488, 3489, 3489, 3490, 3490, 3491, 3491, 3492, 3492,
-     3493, 3493, 3477, 3477, 3493, 3493, 3493, 3493, 3494, 3494,
-     3495, 3495, 3477, 3477, 3495, 3495, 3495, 3495, 3496, 3496,
-     3497, 3497, 3476,   83, 3498, 3498, 3477, 3477, 3498, 3498,
-     3498, 3498, 3499, 3499, 3500, 3500, 3477, 3477, 3500, 3500,
-
-     3500, 3500, 3501, 3501, 3502, 3502, 3503, 3503, 3504, 3504,
-     3477, 3477, 3504, 3504, 3504, 3504, 3505, 3505, 3506, 3506,
-     3507, 3507, 3508, 3508, 3477, 3477, 3508, 3508, 3508, 3508,
-     3509, 3509, 3510, 3510, 3477, 3477, 3510, 3510, 3510, 3510,
-     3511, 3511, 3512, 3512, 3513, 3513, 3514, 3514, 3515, 3515,
-     3516, 3516, 3517, 3517, 3518, 3518, 3519, 3519, 3520, 3520,
-     3477, 3477, 3521, 3521, 3522, 3522, 3522, 3522, 3477, 3477,
-     3522, 3522, 3522, 3522, 3477, 3477, 3522, 3522, 3477, 3477,
-     3522, 3522, 3522, 3522, 3523, 3523, 3524, 3524, 3477, 3477,
-     3524, 3524, 3524, 3524, 3525, 3525, 3526, 3526, 3527, 3527,
-
-     3528, 3528, 3529, 3529, 3530, 3530, 3477, 3477, 3530, 3530,
-     3530, 3530, 3531, 3531, 3532, 3532, 3533, 3533, 3534, 3534,
-     3477, 3477, 3534, 3534, 3534, 3534, 3535, 3535, 3536, 3536,
-     3477, 3477, 3536, 3536, 3536, 3536, 3537, 3537, 3538, 3538,
-     3539, 3539, 3540, 3540, 3477, 3477, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3541, 3476, 3476, 3541,
-     3541, 3476, 3476, 3476,  284, 3476,  286,  284,  287,  286,
-     3476, 3476, 3476, 3542, 3476, 3476, 3542, 3542, 3542, 3476,
-
-     3476,  286,  286,  286, 3476, 3476, 3476, 3543, 3476, 3476,
-     3543, 3476, 3476, 3476, 3476, 3476, 3476, 3544, 3476, 3476,
-     3544, 3544, 3544, 3476, 3476, 3476, 3476, 3476, 3476, 3545,
-     3476, 3476, 3545, 3545, 3545, 3476, 3476,  286,  286, 3476,
-     3476, 3476, 3546, 3476, 3476, 3546, 3546, 3476, 3476,  286,
-      286, 3476, 3476, 3476, 3547, 3476, 3476, 3547, 3547, 3547,
-     3547, 3547, 3547, 3476, 3476, 3476, 3476, 3476, 3476, 3548,
-     3476, 3476, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548,
-     3548, 3476, 3476,  286,  286, 3476, 3476, 3476, 3549, 3476,
-     3476, 3549, 3476, 3476,  286,  286, 3476, 3476, 3476, 3550,
-
-     3476, 3476, 3550, 3476, 3476, 3476, 3476, 3476, 3476, 3551,
-     3476, 3476, 3551, 3551, 3551, 3551, 3551, 3476, 3476,  286,
-      286,  286, 3476, 3476, 3476, 3552, 3476, 3476, 3552, 3552,
-     3552, 3476, 3476, 3476, 3476, 3476, 3476, 3553, 3476, 3476,
-     3553, 3476, 3476,  286,  444,  286, 3476, 3476, 3476, 3554,
-     3476, 3476, 3554, 3554, 3554, 3554, 3476, 3476,  286,  286,
-     3476, 3476, 3476, 3555, 3476, 3476, 3555, 3555, 3476, 3476,
-     3476, 3476, 3476, 3476, 3556, 3476, 3476, 3556, 3556, 3476,
-     3476, 3476, 3476, 3476, 3476, 3557, 3476, 3476, 3557, 3557,
-     3476, 3476, 3476, 3476, 3476, 3476, 3558, 3476, 3476, 3558,
-
-     3558, 3476, 3476, 3476, 3476, 3476, 3476, 3559, 3476, 3476,
-     3559, 3559, 3559, 3559, 3559, 3559, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3560, 3476, 3476, 3560, 3476, 3476,  444,
-      444,  286,  286,  286,  286, 3476, 3476, 3476, 3561, 3476,
-     3476, 3561, 3561, 3561, 3561, 3561, 3476, 3476,  286,  286,
-      286, 3476, 3476, 3476, 3562, 3476, 3476, 3562, 3562, 3476,
-     3476, 3476, 3476, 3476, 3476, 3563, 3476, 3476, 3563, 3563,
-     3563, 3563, 3563, 3476, 3476, 3476, 3476, 3476, 3476, 3564,
-     3476, 3476, 3564, 3564, 3476, 3476,  286,  286, 3476, 3476,
-     3476, 3565, 3476, 3476, 3565, 3565, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3566, 3476, 3476, 3566, 3566, 3566, 3566, 3476,
-     3476,  286,  286, 3476, 3476, 3476, 3567, 3476, 3476, 3567,
-     3567, 3567, 3567, 3476, 3476,  286,  286,  286, 3476, 3476,
-     3476, 3568, 3476, 3476, 3568, 3568, 3568, 3476, 3476, 3476,
-     3476, 3476, 3569, 3476, 3476, 3569, 3569, 3569, 3476, 3476,
-     3476, 3476, 3570, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3571, 3571, 3571,
-     3572, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3573, 3573, 3573, 3573, 3573, 3574, 3476,
-     3476, 3575, 3575, 3576, 3476, 3577, 3577, 3577, 3577, 3578,
-     3476, 3579, 3579, 3579, 3579, 3580, 3476, 3581, 3581, 3581,
-     3582, 3476, 3583, 3583, 3583, 3583, 3583, 3583, 3583, 3583,
-     3584, 3476, 3585, 3585, 3585, 3585, 3585, 3585, 3585, 3585,
-     3585, 3585, 3585, 3585, 3585, 3585, 3585, 3585, 3585, 3586,
-     3476, 3587, 3587, 3588, 3476, 3589, 3589, 3590, 3476, 3591,
-     3591, 3591, 3591, 3591, 3591, 3591, 3592, 3476, 3476, 3593,
-     3593, 3593, 3593, 3594, 3476, 3595, 3595, 3596, 3476, 3476,
-     3597, 3597, 3597, 3597, 3597, 3597, 3598, 3476, 3599, 3599,
-
-     3599, 3600, 3476, 3601, 3601, 3601, 3602, 3476, 3603, 3603,
-     3603, 3604, 3476, 3605, 3605, 3605, 3606, 3476, 3607, 3607,
-     3607, 3607, 3607, 3607, 3607, 3607, 3608, 3476, 3476, 3609,
-     3609, 3610, 3476, 3476, 3476, 3476, 3476, 3476, 3611, 3611,
-     3611, 3611, 3611, 3611, 3612, 3476, 3476, 3613, 3613, 3613,
-     3614, 3476, 3615, 3615, 3615, 3615, 3615, 3615, 3615, 3615,
-     3615, 3616, 3476, 3617, 3617, 3617, 3617, 3618, 3476, 3619,
-     3619, 3619, 3620, 3476, 3621, 3621, 3621, 3621, 3621, 3622,
-     3476, 3623, 3623, 3623, 3623, 3623, 3624, 3476, 3476, 3625,
-     3625, 3625, 3625, 3476, 3626, 3476, 3476, 3627, 3627, 3627,
-
-     3627, 3628, 3629, 3476, 3629, 3476, 3476, 3476, 3630, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3631, 3632, 3632,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3633, 3633, 3633,
-     3633, 3634, 3634, 3476, 3635, 3636, 3636, 3637, 3476, 3476,
-     3637, 3638, 3638, 3639, 3639, 3639, 3640, 3640, 3641, 3641,
-     3642, 3642, 3476, 3476, 3476, 3476, 3643, 3643, 3643, 3643,
-     3643, 3644, 3644, 3645, 3645, 3476, 3476, 3645, 3476, 3476,
-
-     3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645, 3645,
-     3645, 3646, 3646, 3476, 3476, 3647, 3647, 3648, 3649, 3649,
-     3650, 3650, 3650, 3476, 3476, 3650, 3650, 3650, 3651, 3651,
-     3476, 3476, 3652, 3476, 3476, 3476, 3476, 3653, 3653, 3654,
-     3655, 3655, 3476, 3656, 3476, 3476, 3656, 3656, 3656, 3657,
-     3657, 3658, 3476, 3476, 3659, 3659, 3476, 3476, 3660, 3661,
-     3661, 3662, 3662, 3663, 3663, 3664, 3664, 3665, 3665, 3666,
-     3666, 3666, 3476, 3476, 3666, 3666, 3666, 3667, 3667, 3476,
-     3668, 3669, 3669, 3476, 3476, 3476, 3670, 3670, 3670, 3670,
-     3670, 3671, 3671, 3476, 3476, 3476, 3672, 3673, 3673, 3674,
-
-     3476, 3476, 3674, 3674, 3674, 3674, 3674, 3674, 3675, 3675,
-     3676, 3676, 3676, 3677, 3677, 3678, 3476, 3476, 3679, 3679,
-     3680, 3680, 3476, 3476, 3680, 3681, 3681, 3682, 3476, 3476,
-     3682, 3682, 3683, 3683, 3476, 3684, 3476, 3476, 3684, 3476,
-     3685, 3685, 3476, 3686, 3686, 3686, 3687, 3687, 3688, 3476,
-     3476, 3688, 3476, 3476, 3689, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3690, 3476, 3691, 3476, 3691, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3692,
-     3692, 3476, 3476, 3692, 3476, 3693, 3476, 3693, 3476, 3694,
-     3476, 3695, 3476, 3695, 3696, 3476, 3476, 3476, 3696, 3476,
-     3697, 3476, 3697, 3476, 3476, 3698, 3698, 3476, 3476, 3476,
-     3699, 3476, 3699, 3476, 3476, 3476, 3476, 3476, 3700, 3476,
-     3700, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3701,
-     3701, 3701, 3701, 3476, 3702, 3476, 3702, 3703, 3703, 3703,
-     3703, 3476, 3476, 3476, 3703, 3476, 3476, 3476, 3476, 3476,
-     3703, 3703, 3703, 3703, 3703, 3703, 3703, 3703, 3703, 3703,
-     3476, 3704, 3476, 3704, 3476, 3476, 3476, 3476, 3705, 3476,
-
-     3705, 3706, 3476, 3707, 3476, 3707, 3708, 3708, 3708, 3476,
-     3476, 3476, 3708, 3708, 3708, 3476, 3709, 3476, 3709, 3476,
-     3476, 3710, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3711,
-     3476, 3711, 3712, 3476, 3713, 3476, 3713, 3714, 3476, 3476,
-     3476, 3714, 3714, 3714, 3476, 3715, 3476, 3715, 3716, 3476,
-     3476, 3476, 3476, 3717, 3476, 3717, 3476, 3476, 3476, 3718,
-     3476, 3719, 3476, 3719, 3720, 3720, 3476, 3721, 3476, 3721,
-     3722, 3722, 3476, 3723, 3476, 3723, 3724, 3724, 3724, 3724,
-     3476, 3476, 3476, 3476, 3476, 3724, 3724, 3476, 3725, 3476,
-     3725, 3476, 3726, 3476, 3727, 3476, 3727, 3476, 3476, 3476,
-
-     3728, 3728, 3728, 3728, 3728, 3476, 3729, 3476, 3729, 3476,
-     3476, 3476, 3476, 3730, 3476, 3731, 3476, 3731, 3732, 3476,
-     3476, 3476, 3476, 3476, 3732, 3476, 3476, 3732, 3732, 3732,
-     3476, 3733, 3476, 3733, 3476, 3476, 3476, 3476, 3734, 3476,
-     3735, 3476, 3735, 3736, 3476, 3476, 3476, 3476, 3737, 3476,
-     3737, 3738, 3738, 3476, 3476, 3476, 3738, 3476, 3739, 3476,
-     3739, 3740, 3476, 3476, 3476, 3740, 3740, 3476, 3741, 3476,
-     3741, 3476, 3742, 3476, 3476, 3476, 3742, 3476, 3476, 3743,
-     3476, 3743, 3744, 3744, 3744, 3476, 3745, 3476, 3745, 3746,
-     3747, 3476, 3476, 3476, 3476, 3748, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3749,
-     3749, 3476, 3476, 3476, 3749, 3750, 3476, 3751, 3752, 3753,
-     3753, 3754, 3476, 3476, 3476, 3755, 3755, 3476, 3476, 3476,
-     3756, 3476, 3476, 3476, 3476, 3476, 3476, 3757, 3476, 3476,
-     3476, 3758, 3758, 3758, 3758, 3759, 3760, 3760, 3760, 3760,
-     3476, 3476, 3476, 3476, 3476, 3760, 3760, 3760, 3760, 3760,
-     3760, 3760, 3760, 3760, 3760, 3760, 3761, 3762, 3476, 3476,
-
-     3763, 3764, 3764, 3476, 3476, 3764, 3764, 3764, 3765, 3476,
-     3476, 3476, 3476, 3766, 3476, 3476, 3767, 3768, 3768, 3768,
-     3768, 3769, 3770, 3771, 3772, 3773, 3476, 3476, 3774, 3775,
-     3476, 3476, 3776, 3777, 3778, 3778, 3778, 3778, 3476, 3476,
-     3476, 3778, 3778, 3779, 3476, 3780, 3781, 3476, 3476, 3476,
-     3782, 3476, 3476, 3782, 3782, 3782, 3783, 3476, 3784, 3785,
-     3786, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3786,
-     3476, 3476, 3786, 3787, 3476, 3476, 3476, 3476, 3476, 3476,
-     3788, 3789, 3790, 3791, 3792, 3792, 3792, 3793, 3794, 3794,
-     3476, 3476, 3795, 3476, 3476, 3476, 3796, 3476, 3797, 3798,
-
-     3476, 3476, 3798, 3799, 3800, 3801, 3801, 3476, 3801, 3476,
-     3476, 3802, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3803, 3803, 3803, 3804, 3476, 3476, 3476, 3805, 3806,
-     3806, 3807, 3808, 3808, 3809, 3810, 3811, 3811, 3476, 3476,
-     3811, 3812, 3813, 3476, 3476, 3813, 3813, 3476, 3476, 3476,
-     3813, 3813, 3813, 3813, 3813, 3813, 3476, 3476, 3813, 3813,
-     3813, 3813, 3814, 3815, 3476, 3476, 3476, 3476, 3476, 3816,
-
-     3816, 3476, 3476, 3476, 3816, 3476, 3476, 3476, 3476, 3816,
-     3817, 3476, 3476, 3476, 3476, 3476, 3818, 3476, 3476, 3476,
-     3819, 3820, 3820, 3820, 3476, 3476, 3820, 3821, 3822, 3823,
-     3476, 3476, 3824, 3476, 3476, 3476, 3825, 3826, 3476, 3476,
-     3476, 3827, 3828, 3829, 3476, 3476, 3829, 3829, 3476, 3476,
-     3829, 3830, 3476, 3831, 3832, 3476, 3476, 3476, 3833, 3476,
-     3476, 3476, 3833, 3833, 3833, 3834, 3476, 3476, 3476, 3835,
-     3836, 3476, 3476, 3476, 3836, 3476, 3476, 3476, 3836, 3837,
-     3838, 3839, 3840, 3841, 3842, 3842, 3842, 3843, 3844, 3476,
-     3476, 3476, 3476, 3476, 3845, 3476, 3476, 3476, 3476, 3846,
-
-     3476, 3847, 3848, 3476, 3476, 3476, 3476, 3476, 3849, 3850,
-     3851, 3851, 3476, 3852, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3853, 3854, 3476, 3476, 3476, 3476, 3855, 3856, 3856,
-     3857, 3476, 3476, 3476, 3476, 3858, 3859, 3476, 3476, 3860,
-     3476, 3476, 3476, 3476, 3476, 3861, 3862, 3476, 3476, 3476,
-     3476, 3476, 3862, 3862, 3862, 3476, 3476, 3862, 3862, 3862,
-     3476, 3476, 3476, 3862, 3476, 3476, 3862, 3862, 3863, 3864,
-
-     3865, 3865, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3865, 3476, 3476, 3476, 3476, 3866, 3867, 3868, 3868, 3868,
-     3476, 3476, 3476, 3868, 3476, 3476, 3869, 3870, 3476, 3476,
-     3476, 3871, 3872, 3873, 3476, 3476, 3874, 3875, 3476, 3476,
-     3476, 3476, 3476, 3875, 3476, 3476, 3476, 3875, 3476, 3476,
-     3476, 3876, 3877, 3476, 3476, 3476, 3878, 3878, 3878, 3878,
-     3879, 3476, 3476, 3476, 3476, 3476, 3476, 3880, 3880, 3880,
-     3881, 3882, 3883, 3884, 3885, 3476, 3476, 3886, 3476, 3476,
-     3887, 3888, 3476, 3476, 3476, 3889, 3476, 3890, 3476, 3891,
-     3892, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3893, 3894, 3895, 3895, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3896, 3897, 3476, 3898, 3899, 3476,
-     3476, 3900, 3476, 3476, 3476, 3476, 3476, 3476, 3901, 3902,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3903, 3904,
-     3476, 3476, 3476, 3904, 3904, 3904, 3476, 3476, 3476, 3476,
-     3476, 3904, 3904, 3904, 3476, 3476, 3476, 3904, 3904, 3905,
-     3906, 3907, 3907, 3476, 3476, 3476, 3476, 3476, 3907, 3476,
-
-     3908, 3909, 3910, 3476, 3476, 3910, 3910, 3476, 3476, 3910,
-     3911, 3912, 3913, 3914, 3476, 3476, 3476, 3476, 3476, 3915,
-     3916, 3476, 3476, 3476, 3916, 3916, 3476, 3476, 3476, 3917,
-     3476, 3476, 3476, 3918, 3918, 3918, 3918, 3919, 3476, 3920,
-     3476, 3476, 3920, 3921, 3922, 3476, 3476, 3923, 3924, 3476,
-     3476, 3476, 3476, 3476, 3925, 3476, 3476, 3476, 3926, 3476,
-     3476, 3927, 3928, 3476, 3929, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3930, 3931, 3932, 3932, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3933, 3934, 3476, 3935, 3936,
-     3476, 3476, 3476, 3937, 3938, 3939, 3476, 3476, 3476, 3940,
-     3941, 3941, 3941, 3941, 3476, 3476, 3476, 3941, 3941, 3941,
-     3941, 3476, 3476, 3942, 3476, 3476, 3943, 3943, 3476, 3476,
-     3476, 3476, 3943, 3476, 3944, 3945, 3946, 3476, 3476, 3476,
-     3946, 3946, 3476, 3476, 3476, 3476, 3946, 3947, 3948, 3949,
-     3950, 3951, 3952, 3952, 3952, 3476, 3476, 3476, 3476, 3953,
-     3476, 3476, 3476, 3954, 3954, 3954, 3955, 3476, 3956, 3476,
-     3476, 3476, 3956, 3476, 3476, 3957, 3958, 3476, 3476, 3476,
-
-     3476, 3476, 3959, 3960, 3476, 3476, 3476, 3961, 3962, 3476,
-     3963, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3964, 3965, 3966, 3966, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3967, 3476, 3476, 3476,
-     3968, 3476, 3476, 3969, 3970, 3971, 3476, 3476, 3972, 3972,
-     3972, 3972, 3972, 3476, 3476, 3972, 3972, 3972, 3476, 3476,
-     3476, 3476, 3476, 3973, 3973, 3476, 3476, 3476, 3476, 3973,
-     3476, 3974, 3476, 3476, 3476, 3476, 3975, 3975, 3975, 3476,
-
-     3476, 3476, 3476, 3975, 3476, 3476, 3976, 3977, 3476, 3476,
-     3951, 3952, 3952, 3952, 3476, 3953, 3476, 3476, 3476, 3476,
-     3476, 3954, 3954, 3476, 3476, 3476, 3476, 3476, 3956, 3957,
-     3958, 3959, 3476, 3476, 3961, 3962, 3476, 3963, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3964, 3965,
-     3966, 3966, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3967, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3970, 3971, 3972, 3972, 3972, 3972, 3972,
-     3476, 3476, 3476, 3972, 3476, 3476, 3972, 3476, 3476, 3476,
-
-     3476, 3973, 3973, 3476, 3476, 3476, 3476, 3974, 3476, 3476,
-     3476, 3975, 3975, 3975, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3977, 3476, 3476, 3476, 3476, 3476, 3952,
-     3952, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3956, 3957, 3958, 3959, 3961,
-     3962, 3476, 3963, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3964, 3965, 3966, 3966, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3970, 3971, 3972, 3972, 3972, 3476, 3476, 3972, 3972, 3476,
-
-     3476, 3476, 3972, 3476, 3476, 3476, 3476, 3476, 3476, 3973,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3975, 3975, 3975,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3977,
-     3952, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3956, 3476,
-     3476, 3476, 3476, 3959, 3961, 3962, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3964,
-     3965, 3966, 3966, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3970, 3971, 3972, 3972,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3972, 3972, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3973, 3476, 3476,
-     3476, 3975, 3476, 3476, 3975, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3952, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3956,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3962, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3964, 3965, 3966, 3966, 3966, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3970,
-
-     3476, 3476, 3972, 3972, 3476, 3476, 3476, 3476, 3476, 3476,
-     3972, 3972, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3973, 3975, 3476, 3476, 3476, 3975, 3476, 3476, 3476,
-     3476, 3476, 3476, 3952, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3962, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3964, 3965, 3966,
-     3966, 3966, 3978, 3979, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3970, 3972, 3972, 3476, 3476, 3972, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3973, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3952, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3964,
-     3965, 3966, 3980, 3981, 3978, 3979, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3972, 3972,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3973,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3952, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3965, 3980, 3966, 3982, 3981,
-     3983, 3966, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3972, 3972, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3973, 3476, 3476, 3476, 3476,
-     3952, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3965, 3982, 3476, 3983, 3966, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3965, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3965, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3965, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3965, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3965, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3965, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3965, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3965, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3965, 3965, 3476, 3476, 3476, 3476,
-     3476, 3476, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-
-     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3476,    0, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476
+     3438, 3438, 3439, 3439, 3439, 3439, 3440, 3440, 3441, 3441,
+     3442, 3442, 3443, 3443, 3443, 3443, 3444, 3444, 3445, 3445,
+     3446, 3446, 3446, 3446, 3438, 3438, 3446, 3446, 3446, 3446,
+     3438, 3438, 3446, 3446, 3438, 3438, 3446, 3446, 3446, 3446,
+     3447, 3447, 3448, 3448, 3438, 3438, 3448, 3448, 3448, 3448,
+     3449, 3449, 3450, 3450, 3451, 3451, 3452, 3452, 3453, 3453,
+     3454, 3454, 3438, 3438, 3454, 3454, 3454, 3454, 3455, 3455,
+     3456, 3456, 3438, 3438, 3456, 3456, 3456, 3456, 3457, 3457,
+     3458, 3458, 3437,   83, 3459, 3459, 3438, 3438, 3459, 3459,
+     3459, 3459, 3460, 3460, 3461, 3461, 3438, 3438, 3461, 3461,
+
+     3461, 3461, 3462, 3462, 3463, 3463, 3464, 3464, 3465, 3465,
+     3438, 3438, 3465, 3465, 3465, 3465, 3466, 3466, 3467, 3467,
+     3468, 3468, 3469, 3469, 3438, 3438, 3469, 3469, 3469, 3469,
+     3470, 3470, 3471, 3471, 3438, 3438, 3471, 3471, 3471, 3471,
+     3472, 3472, 3473, 3473, 3474, 3474, 3475, 3475, 3476, 3476,
+     3477, 3477, 3478, 3478, 3479, 3479, 3480, 3480, 3481, 3481,
+     3438, 3438, 3482, 3482, 3483, 3483, 3483, 3483, 3438, 3438,
+     3483, 3483, 3483, 3483, 3438, 3438, 3483, 3483, 3438, 3438,
+     3483, 3483, 3483, 3483, 3484, 3484, 3485, 3485, 3438, 3438,
+     3485, 3485, 3485, 3485, 3486, 3486, 3487, 3487, 3488, 3488,
+
+     3489, 3489, 3490, 3490, 3491, 3491, 3438, 3438, 3491, 3491,
+     3491, 3491, 3492, 3492, 3493, 3493, 3494, 3494, 3495, 3495,
+     3438, 3438, 3495, 3495, 3495, 3495, 3496, 3496, 3497, 3497,
+     3438, 3438, 3497, 3497, 3497, 3497, 3498, 3498, 3499, 3499,
+     3500, 3500, 3501, 3501, 3438, 3438, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3502, 3437, 3437, 3502,
+     3502, 3437, 3437, 3437,  284, 3437,  286,  284,  287,  286,
+     3437, 3437, 3437, 3503, 3437, 3437, 3503, 3503, 3503, 3437,
+
+     3437,  286,  286,  286, 3437, 3437, 3437, 3504, 3437, 3437,
+     3504, 3437, 3437, 3437, 3437, 3437, 3437, 3505, 3437, 3437,
+     3505, 3505, 3505, 3437, 3437, 3437, 3437, 3437, 3437, 3506,
+     3437, 3437, 3506, 3506, 3506, 3437, 3437,  286,  286, 3437,
+     3437, 3437, 3507, 3437, 3437, 3507, 3507, 3437, 3437,  286,
+      286, 3437, 3437, 3437, 3508, 3437, 3437, 3508, 3508, 3508,
+     3508, 3508, 3508, 3437, 3437, 3437, 3437, 3437, 3437, 3509,
+     3437, 3437, 3509, 3509, 3509, 3509, 3509, 3509, 3509, 3509,
+     3509, 3437, 3437,  286,  286, 3437, 3437, 3437, 3510, 3437,
+     3437, 3510, 3437, 3437,  286,  286, 3437, 3437, 3437, 3511,
+
+     3437, 3437, 3511, 3437, 3437, 3437, 3437, 3437, 3437, 3512,
+     3437, 3437, 3512, 3512, 3512, 3512, 3512, 3437, 3437,  286,
+      286,  286, 3437, 3437, 3437, 3513, 3437, 3437, 3513, 3513,
+     3513, 3437, 3437, 3437, 3437, 3437, 3437, 3514, 3437, 3437,
+     3514, 3437, 3437,  286,  444,  286, 3437, 3437, 3437, 3515,
+     3437, 3437, 3515, 3515, 3515, 3515, 3437, 3437,  286,  286,
+     3437, 3437, 3437, 3516, 3437, 3437, 3516, 3516, 3437, 3437,
+     3437, 3437, 3437, 3437, 3517, 3437, 3437, 3517, 3517, 3437,
+     3437, 3437, 3437, 3437, 3437, 3518, 3437, 3437, 3518, 3518,
+     3437, 3437, 3437, 3437, 3437, 3437, 3519, 3437, 3437, 3519,
+
+     3519, 3437, 3437, 3437, 3437, 3437, 3437, 3520, 3437, 3437,
+     3520, 3520, 3520, 3520, 3520, 3520, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3521, 3437, 3437, 3521, 3437, 3437,  444,
+      444,  286,  286,  286,  286, 3437, 3437, 3437, 3522, 3437,
+     3437, 3522, 3522, 3522, 3522, 3522, 3437, 3437,  286,  286,
+      286, 3437, 3437, 3437, 3523, 3437, 3437, 3523, 3523, 3437,
+     3437, 3437, 3437, 3437, 3437, 3524, 3437, 3437, 3524, 3524,
+     3524, 3524, 3524, 3437, 3437, 3437, 3437, 3437, 3437, 3525,
+     3437, 3437, 3525, 3525, 3437, 3437,  286,  286, 3437, 3437,
+     3437, 3526, 3437, 3437, 3526, 3526, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3527, 3437, 3437, 3527, 3527, 3527, 3527, 3437,
+     3437,  286,  286, 3437, 3437, 3437, 3528, 3437, 3437, 3528,
+     3528, 3528, 3528, 3437, 3437,  286,  286,  286, 3437, 3437,
+     3437, 3529, 3437, 3437, 3529, 3529, 3529, 3437, 3437, 3437,
+     3437, 3437, 3530, 3437, 3437, 3530, 3530, 3530, 3437, 3437,
+     3437, 3437, 3531, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3532, 3532, 3532,
+     3533, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3534, 3534, 3534, 3534, 3534, 3535, 3437,
+     3437, 3536, 3536, 3537, 3437, 3538, 3538, 3538, 3538, 3539,
+     3437, 3540, 3540, 3540, 3540, 3541, 3437, 3542, 3542, 3542,
+     3543, 3437, 3544, 3544, 3544, 3544, 3544, 3544, 3544, 3544,
+     3545, 3437, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546,
+     3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3547,
+     3437, 3548, 3548, 3549, 3437, 3550, 3550, 3551, 3437, 3552,
+     3552, 3552, 3552, 3552, 3552, 3552, 3553, 3437, 3437, 3554,
+     3554, 3554, 3554, 3555, 3437, 3556, 3556, 3557, 3437, 3437,
+     3558, 3558, 3558, 3558, 3558, 3558, 3559, 3437, 3560, 3560,
+
+     3560, 3561, 3437, 3562, 3562, 3562, 3563, 3437, 3564, 3564,
+     3564, 3565, 3437, 3566, 3566, 3566, 3567, 3437, 3568, 3568,
+     3568, 3568, 3568, 3568, 3568, 3568, 3569, 3437, 3437, 3570,
+     3570, 3571, 3437, 3437, 3437, 3437, 3437, 3437, 3572, 3572,
+     3572, 3572, 3572, 3572, 3573, 3437, 3437, 3574, 3574, 3574,
+     3575, 3437, 3576, 3576, 3576, 3576, 3576, 3576, 3576, 3576,
+     3576, 3577, 3437, 3578, 3578, 3578, 3578, 3579, 3437, 3580,
+     3580, 3580, 3581, 3437, 3582, 3582, 3582, 3582, 3582, 3583,
+     3437, 3584, 3584, 3584, 3584, 3584, 3585, 3437, 3437, 3586,
+     3586, 3586, 3586, 3437, 3587, 3437, 3437, 3588, 3588, 3588,
+
+     3588, 3589, 3590, 3437, 3590, 3437, 3437, 3437, 3591, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3592, 3593, 3593,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3594, 3594, 3594,
+     3594, 3595, 3595, 3437, 3596, 3597, 3597, 3598, 3437, 3437,
+     3598, 3599, 3599, 3600, 3600, 3600, 3601, 3601, 3602, 3602,
+     3603, 3603, 3437, 3437, 3437, 3437, 3604, 3604, 3604, 3604,
+     3604, 3605, 3605, 3606, 3606, 3437, 3437, 3606, 3437, 3437,
+
+     3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606, 3606,
+     3606, 3607, 3607, 3437, 3437, 3608, 3608, 3609, 3610, 3610,
+     3611, 3611, 3611, 3437, 3437, 3611, 3611, 3611, 3612, 3612,
+     3437, 3437, 3613, 3437, 3437, 3437, 3437, 3614, 3614, 3615,
+     3616, 3616, 3437, 3617, 3437, 3437, 3617, 3617, 3617, 3618,
+     3618, 3619, 3437, 3437, 3620, 3620, 3437, 3437, 3621, 3622,
+     3622, 3623, 3623, 3624, 3624, 3625, 3625, 3626, 3626, 3627,
+     3627, 3627, 3437, 3437, 3627, 3627, 3627, 3628, 3628, 3437,
+     3629, 3630, 3630, 3437, 3437, 3437, 3631, 3631, 3631, 3631,
+     3631, 3632, 3632, 3437, 3437, 3437, 3633, 3634, 3634, 3635,
+
+     3437, 3437, 3635, 3635, 3635, 3635, 3635, 3635, 3636, 3636,
+     3637, 3637, 3637, 3638, 3638, 3639, 3437, 3437, 3640, 3640,
+     3641, 3641, 3437, 3437, 3641, 3642, 3642, 3643, 3437, 3437,
+     3643, 3643, 3644, 3644, 3437, 3645, 3437, 3437, 3645, 3437,
+     3646, 3646, 3437, 3647, 3647, 3647, 3648, 3648, 3649, 3437,
+     3437, 3649, 3437, 3437, 3650, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3651, 3437, 3652, 3437, 3652, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3653,
+     3653, 3437, 3437, 3653, 3437, 3654, 3437, 3654, 3437, 3655,
+     3437, 3656, 3437, 3656, 3657, 3437, 3437, 3437, 3657, 3437,
+     3658, 3437, 3658, 3437, 3437, 3659, 3659, 3437, 3437, 3437,
+     3660, 3437, 3660, 3437, 3437, 3437, 3437, 3437, 3661, 3437,
+     3661, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3662,
+     3662, 3662, 3662, 3437, 3663, 3437, 3663, 3664, 3664, 3664,
+     3664, 3437, 3437, 3437, 3664, 3437, 3437, 3437, 3437, 3437,
+     3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664, 3664,
+     3437, 3665, 3437, 3665, 3437, 3437, 3437, 3437, 3666, 3437,
+
+     3666, 3667, 3437, 3668, 3437, 3668, 3669, 3669, 3669, 3437,
+     3437, 3437, 3669, 3669, 3669, 3437, 3670, 3437, 3670, 3437,
+     3437, 3671, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3672,
+     3437, 3672, 3673, 3437, 3674, 3437, 3674, 3675, 3437, 3437,
+     3437, 3675, 3675, 3675, 3437, 3676, 3437, 3676, 3677, 3437,
+     3437, 3437, 3437, 3678, 3437, 3678, 3437, 3437, 3437, 3679,
+     3437, 3680, 3437, 3680, 3681, 3681, 3437, 3682, 3437, 3682,
+     3683, 3683, 3437, 3684, 3437, 3684, 3685, 3685, 3685, 3685,
+     3437, 3437, 3437, 3437, 3437, 3685, 3685, 3437, 3686, 3437,
+     3686, 3437, 3687, 3437, 3688, 3437, 3688, 3437, 3437, 3437,
+
+     3689, 3689, 3689, 3689, 3689, 3437, 3690, 3437, 3690, 3437,
+     3437, 3437, 3437, 3691, 3437, 3692, 3437, 3692, 3693, 3437,
+     3437, 3437, 3437, 3437, 3693, 3437, 3437, 3693, 3693, 3693,
+     3437, 3694, 3437, 3694, 3437, 3437, 3437, 3437, 3695, 3437,
+     3696, 3437, 3696, 3697, 3437, 3437, 3437, 3437, 3698, 3437,
+     3698, 3699, 3699, 3437, 3437, 3437, 3699, 3437, 3700, 3437,
+     3700, 3701, 3437, 3437, 3437, 3701, 3701, 3437, 3702, 3437,
+     3702, 3437, 3703, 3437, 3437, 3437, 3703, 3437, 3437, 3704,
+     3437, 3704, 3705, 3705, 3705, 3437, 3706, 3437, 3706, 3707,
+     3708, 3437, 3437, 3437, 3437, 3709, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3710,
+     3710, 3437, 3437, 3437, 3710, 3711, 3437, 3712, 3713, 3714,
+     3714, 3715, 3437, 3437, 3437, 3716, 3716, 3437, 3437, 3437,
+     3717, 3437, 3437, 3437, 3437, 3437, 3437, 3718, 3437, 3437,
+     3437, 3719, 3719, 3719, 3719, 3720, 3721, 3721, 3721, 3721,
+     3437, 3437, 3437, 3437, 3437, 3721, 3721, 3721, 3721, 3721,
+     3721, 3721, 3721, 3721, 3721, 3721, 3722, 3723, 3437, 3437,
+
+     3724, 3725, 3725, 3437, 3437, 3725, 3725, 3725, 3726, 3437,
+     3437, 3437, 3437, 3727, 3437, 3437, 3728, 3729, 3729, 3729,
+     3729, 3730, 3731, 3732, 3733, 3734, 3437, 3437, 3735, 3736,
+     3437, 3437, 3737, 3738, 3739, 3739, 3739, 3739, 3437, 3437,
+     3437, 3739, 3739, 3740, 3437, 3741, 3742, 3437, 3437, 3437,
+     3743, 3437, 3437, 3743, 3743, 3743, 3744, 3437, 3745, 3746,
+     3747, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3747,
+     3437, 3437, 3747, 3748, 3437, 3437, 3437, 3437, 3437, 3437,
+     3749, 3750, 3751, 3752, 3753, 3753, 3753, 3754, 3755, 3755,
+     3437, 3437, 3756, 3437, 3437, 3437, 3757, 3437, 3758, 3759,
+
+     3437, 3437, 3759, 3760, 3761, 3762, 3762, 3437, 3762, 3437,
+     3437, 3763, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3764, 3764, 3764, 3765, 3437, 3437, 3437, 3766, 3767,
+     3767, 3768, 3769, 3769, 3770, 3771, 3772, 3772, 3437, 3437,
+     3772, 3773, 3774, 3437, 3437, 3774, 3774, 3437, 3437, 3437,
+     3774, 3774, 3774, 3774, 3774, 3774, 3437, 3437, 3774, 3774,
+     3774, 3774, 3775, 3776, 3437, 3437, 3437, 3437, 3437, 3777,
+
+     3777, 3437, 3437, 3437, 3777, 3437, 3437, 3777, 3778, 3437,
+     3437, 3437, 3437, 3437, 3779, 3437, 3437, 3437, 3780, 3781,
+     3781, 3781, 3781, 3782, 3783, 3784, 3437, 3437, 3785, 3437,
+     3437, 3437, 3786, 3787, 3437, 3437, 3437, 3788, 3789, 3790,
+     3437, 3437, 3790, 3790, 3437, 3437, 3790, 3791, 3437, 3792,
+     3793, 3437, 3437, 3437, 3794, 3437, 3437, 3437, 3794, 3794,
+     3794, 3795, 3437, 3437, 3437, 3796, 3797, 3437, 3437, 3437,
+     3797, 3437, 3437, 3437, 3797, 3798, 3799, 3800, 3801, 3802,
+     3803, 3803, 3803, 3804, 3805, 3437, 3437, 3437, 3437, 3437,
+     3806, 3437, 3437, 3437, 3437, 3807, 3437, 3808, 3809, 3437,
+
+     3437, 3437, 3437, 3437, 3810, 3811, 3812, 3812, 3437, 3813,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3814, 3815, 3437,
+     3437, 3437, 3437, 3816, 3817, 3817, 3818, 3437, 3437, 3437,
+     3437, 3819, 3820, 3437, 3437, 3821, 3437, 3437, 3437, 3437,
+     3437, 3822, 3823, 3437, 3437, 3437, 3437, 3437, 3823, 3823,
+     3823, 3437, 3437, 3823, 3823, 3823, 3437, 3437, 3437, 3823,
+     3437, 3437, 3823, 3823, 3824, 3825, 3826, 3826, 3437, 3437,
+
+     3437, 3437, 3437, 3826, 3437, 3437, 3437, 3437, 3827, 3828,
+     3829, 3829, 3829, 3829, 3437, 3437, 3830, 3831, 3437, 3437,
+     3437, 3832, 3833, 3834, 3437, 3437, 3835, 3836, 3437, 3437,
+     3437, 3437, 3437, 3836, 3437, 3437, 3437, 3836, 3437, 3437,
+     3437, 3837, 3838, 3437, 3437, 3437, 3839, 3839, 3839, 3839,
+     3840, 3437, 3437, 3437, 3437, 3437, 3437, 3841, 3841, 3841,
+     3842, 3843, 3844, 3845, 3846, 3437, 3437, 3847, 3437, 3437,
+     3848, 3849, 3437, 3437, 3437, 3850, 3437, 3851, 3437, 3852,
+     3853, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3854, 3855, 3856, 3856, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3857, 3858, 3437, 3859, 3860, 3437,
+     3437, 3861, 3437, 3437, 3437, 3437, 3437, 3437, 3862, 3863,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3864, 3865,
+     3437, 3437, 3437, 3865, 3865, 3865, 3437, 3437, 3437, 3437,
+     3437, 3865, 3865, 3865, 3437, 3437, 3437, 3865, 3865, 3866,
+     3867, 3868, 3868, 3437, 3437, 3437, 3868, 3437, 3869, 3870,
+     3871, 3437, 3437, 3871, 3871, 3871, 3872, 3873, 3874, 3875,
+
+     3437, 3437, 3437, 3437, 3437, 3876, 3877, 3437, 3437, 3437,
+     3877, 3877, 3437, 3437, 3437, 3878, 3437, 3437, 3437, 3879,
+     3879, 3879, 3879, 3880, 3437, 3881, 3437, 3437, 3881, 3882,
+     3883, 3437, 3437, 3884, 3885, 3437, 3437, 3437, 3437, 3437,
+     3886, 3437, 3437, 3437, 3887, 3437, 3437, 3888, 3889, 3437,
+     3890, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3891, 3892, 3893, 3893,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3894, 3895, 3437, 3896, 3897, 3437, 3437, 3437, 3898,
+     3899, 3900, 3437, 3437, 3437, 3901, 3902, 3902, 3902, 3902,
+     3437, 3437, 3437, 3902, 3902, 3902, 3902, 3437, 3437, 3903,
+     3437, 3437, 3904, 3904, 3904, 3437, 3905, 3906, 3907, 3437,
+     3437, 3437, 3907, 3907, 3907, 3908, 3909, 3910, 3911, 3912,
+     3913, 3913, 3913, 3437, 3437, 3437, 3437, 3914, 3437, 3437,
+     3437, 3915, 3915, 3915, 3916, 3437, 3917, 3437, 3437, 3437,
+     3917, 3437, 3437, 3918, 3919, 3437, 3437, 3437, 3437, 3437,
+     3920, 3921, 3437, 3437, 3437, 3922, 3923, 3437, 3924, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3925, 3926, 3927, 3927, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3928, 3437, 3437, 3437, 3929, 3437,
+     3437, 3930, 3931, 3932, 3437, 3437, 3933, 3933, 3933, 3933,
+     3933, 3437, 3437, 3933, 3933, 3933, 3437, 3437, 3437, 3437,
+     3437, 3934, 3934, 3934, 3437, 3935, 3437, 3437, 3437, 3437,
+     3936, 3936, 3936, 3936, 3437, 3437, 3937, 3938, 3437, 3437,
+     3912, 3913, 3913, 3913, 3437, 3914, 3437, 3437, 3437, 3437,
+     3437, 3915, 3915, 3437, 3437, 3437, 3437, 3437, 3917, 3918,
+
+     3919, 3920, 3437, 3437, 3922, 3923, 3437, 3924, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3925, 3926,
+     3927, 3927, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3928, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3931, 3932, 3933, 3933, 3933, 3933, 3933,
+     3437, 3437, 3437, 3933, 3437, 3437, 3933, 3437, 3437, 3437,
+     3437, 3934, 3934, 3437, 3437, 3935, 3437, 3437, 3437, 3936,
+     3936, 3936, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3938,
+     3437, 3437, 3437, 3437, 3437, 3913, 3913, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3917, 3918, 3919, 3920, 3922, 3923, 3437, 3924, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3925,
+     3926, 3927, 3927, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3931, 3932, 3933, 3933,
+     3933, 3437, 3437, 3933, 3933, 3437, 3437, 3437, 3933, 3437,
+     3437, 3437, 3437, 3437, 3437, 3934, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3936, 3936, 3936, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3938, 3913, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3917, 3437, 3437, 3437, 3437, 3920,
+     3922, 3923, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3925, 3926, 3927, 3927, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3931, 3932, 3933, 3933, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3933, 3933, 3437, 3437, 3437, 3437, 3437,
+     3437, 3934, 3437, 3437, 3437, 3936, 3437, 3437, 3936, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3913, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3917, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3923, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3925, 3926, 3927, 3927,
+     3927, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3931, 3437, 3437, 3933, 3933, 3437, 3437,
+     3437, 3437, 3437, 3437, 3933, 3933, 3437, 3437, 3437, 3437,
+     3437, 3437, 3934, 3936, 3437, 3437, 3437, 3936, 3437, 3437,
+     3437, 3437, 3437, 3437, 3913, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3923,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3925, 3926,
+     3927, 3927, 3927, 3939, 3940, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3931, 3933, 3933, 3437, 3437, 3933, 3437, 3437, 3437,
+     3437, 3437, 3437, 3934, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3913, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3925, 3926, 3927, 3941, 3942, 3939, 3940, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3933,
+     3933, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3934, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3913, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3926, 3941, 3927, 3943,
+     3942, 3944, 3927, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3933, 3933, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3934, 3437, 3437, 3437,
+
+     3437, 3913, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3926, 3943, 3437, 3944, 3927, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3926, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3926, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3926, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3926, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3926, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3926, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3926, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3926, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3926, 3926, 3437, 3437, 3437,
+     3437, 3437, 3437, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3437,    0, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437
     } ;
 
-static yyconst flex_int16_t yy_nxt[12534] =
+static yyconst flex_int16_t yy_nxt[12424] =
     {   0,
-     3476,  250,  251,  250,  250,  251,  250,  250,  251,  250,
+     3437,  250,  251,  250,  250,  251,  250,  250,  251,  250,
       250,  251,  250,  255,  251,  255,  261,  252,  258,  261,
-      252,  258,  845,  253, 3476,  259,  253, 3476,  259,  256,
+      252,  258,  845,  253, 3437,  259,  253, 3437,  259,  256,
       255,  251,  255,  653,  262,  264,  265,  262,  264,  265,
       266,  267,  671,  266,  267,  653,  256,  271,  272,  654,
       268,  264,  265,  268,  269,  656,  266,  264,  265,  846,
@@ -1885,7 +1873,7 @@ static yyconst flex_int16_t yy_nxt[12534] =
       492,  492,  251,  492, 1782,  503,  251,  503,  503,  251,
       503,  482, 1783, 1784,  493,  656,  656,  493,  656,  397,
       397,  504,  827,  851,  504,  652,  652,  652,  652,  652,
-      652,  655,  655, 3476,  655,  403,  407,  408,  251,  408,
+      652,  655,  655, 3437,  655,  403,  407,  408,  251,  408,
       407,  407,  407,  407,  407,  407,  407,  409,  407,  407,
       407, 1785,  407,  411,  407,  412,  407,  518,  251,  518,
 
@@ -1900,788 +1888,776 @@ static yyconst flex_int16_t yy_nxt[12534] =
       530,  933,  656,  530,  946, 1801,  531,  927,  407,  407,
       531,  413,  834,  414,  835,  652,  652,  652,  655,  415,
 
-      652,  652,  652,  652,  652,  652,  416, 1805, 1812,  417,
+      652,  652,  652,  652,  652,  652,  416, 1805, 1808,  417,
       423,  424,  251,  424,  423,  423,  423,  423,  423,  423,
       423,  425,  423,  423,  423,  868,  423,  427,  423,  428,
       423,  251,  251,  251,  251,  251,  251,  529,  251,  529,
-     1086,  529,  251,  529,  529,  251,  529,  532, 1813, 1822,
+     1086,  529,  251,  529,  529,  251,  529,  532, 1810, 1811,
       532,  656,  934,  530,  952,  423,  423,  530,  862,  935,
       533,  429,  652,  652,  652,  941,  430,  655,  652,  652,
-      652, 1823, 1824,  710,  652,  652,  652,  699,  431,  423,
+      652, 1820, 1821,  710,  652,  652,  652,  699,  431,  423,
       424,  251,  424,  423,  423,  423,  423,  423,  423,  423,
-      425,  423,  423,  423, 1829,  423,  427,  423,  428,  423,
+      425,  423,  423,  423, 1822,  423,  427,  423,  428,  423,
 
-      529,  251,  529,  251,  251,  251,  251,  251,  251, 1837,
-      529,  251,  529,  529,  251,  529,  533, 1842, 1844,  445,
-      656,  951,  445, 1847,  423,  423,  531,  873,  935,  531,
+      529,  251,  529,  251,  251,  251,  251,  251,  251, 1823,
+      529,  251,  529,  529,  251,  529,  533, 1825, 1833,  445,
+      656,  951,  445, 1838,  423,  423,  531,  873,  935,  531,
       429,  652,  652,  652,  936,  430,  655,  652,  652,  652,
-      652,  652,  652,  652,  652,  652, 1848,  431,  435,  436,
+      652,  652,  652,  652,  652,  652, 1840,  431,  435,  436,
       251,  436,  435,  435,  435,  435,  435,  435,  435,  437,
-      435,  435,  435, 1851,  435,  439,  435,  440,  435,  251,
+      435,  435,  435, 1843,  435,  439,  435,  440,  435,  251,
       251,  251,  251,  251,  251,  529,  251,  529,  925,  529,
-      251,  529,  529,  251,  529,  534,  945, 1853,  534,  926,
-     1854,  533, 1084,  435,  435,  533, 1856,  946,  535, 1857,
+      251,  529,  529,  251,  529,  534,  945, 1844,  534,  926,
+     1847,  533, 1084,  435,  435,  533, 1849,  946,  535, 1850,
 
      1084,  441,  435,  436,  251,  436,  435,  435,  435,  435,
-      435,  435,  435,  437,  435,  435,  435, 1858,  435,  439,
+      435,  435,  435,  437,  435,  435,  435, 1852,  435,  439,
       435,  440,  435,  529,  251,  529,  548,  251,  548,  548,
-      251,  548, 1859,  251,  251,  251,  251,  251,  251,  535,
-     1150, 1515,  549, 1863, 1490,  549, 1864,  435,  435,  550,
-     1865, 1867,  550, 1871, 1521,  441,  447,  448,  251,  448,
+      251,  548, 1853,  251,  251,  251,  251,  251,  251,  535,
+     1150, 1515,  549, 1854, 1490,  549, 1855,  435,  435,  550,
+     1859, 1860,  550, 1861, 1521,  441,  447,  448,  251,  448,
       447,  447,  447,  447,  447,  447,  447,  449,  447,  447,
-      447, 1875,  447,  451,  447,  452,  447,  548,  251,  548,
-      548,  251,  548,  548,  251,  548, 1879,  548,  251,  548,
-      561,  251,  561,  549, 1150, 1881,  549,  894, 1649,  551,
+      447, 1863,  447,  451,  447,  452,  447,  548,  251,  548,
+      548,  251,  548,  548,  251,  548, 1867,  548,  251,  548,
+      561,  251,  561,  549, 1150, 1871,  549,  894, 1649,  551,
 
-     1883,  447,  447,  551,  895,  453,  562,  652,  652,  652,
-     1152, 1521,  454,  655, 1885,  455,  652,  652,  652,  652,
+     1875,  447,  447,  551,  895,  453,  562,  652,  652,  652,
+     1152, 1521,  454,  655, 1877,  455,  652,  652,  652,  652,
       652,  652,  456,  447,  448,  251,  448,  447,  447,  447,
-      447,  447,  447,  447,  449,  447,  447,  447, 1886,  447,
+      447,  447,  447,  447,  449,  447,  447,  447, 1879,  447,
       451,  447,  452,  447,  561,  251,  561,  575,  251,  575,
-      575,  251,  575, 1887,  586,  251,  586,  586,  251,  586,
-      562, 1889, 1896,  576,  656, 1900,  576, 1901,  447,  447,
-      587,  902,  453,  587,  652,  652,  652, 1903, 1708,  454,
-      655, 1913,  455,  652,  652,  652,  908,  908,  908,  456,
+      575,  251,  575, 1881,  586,  251,  586,  586,  251,  586,
+      562, 1882, 1883,  576,  656, 1885,  576, 1892,  447,  447,
+      587,  902,  453,  587,  652,  652,  652, 1896, 1897,  454,
+      655, 1899,  455,  652,  652,  652,  908,  908,  908,  456,
       461,  462,  251,  462,  461,  461,  461,  461,  461,  461,
 
-      461,  463,  461,  461,  461, 1914,  461,  465,  461,  466,
+      461,  463,  461,  461,  461, 1708,  461,  465,  461,  466,
       461,  251,  251,  251,  251,  251,  251,  586,  251,  586,
-     1915,  586,  251,  586,  586,  251,  586,  303, 1916, 1917,
-      303,  951, 1918,  587, 1919,  461,  461,  587,  935, 1920,
-      588,  467, 1921, 1922,  941,  909,  468,  461,  462,  251,
+     1909,  586,  251,  586,  586,  251,  586,  303, 1910, 1911,
+      303,  951, 1912,  587, 1913,  461,  461,  587,  935, 1914,
+      588,  467, 1915, 1916,  941,  909,  468,  461,  462,  251,
       462,  461,  461,  461,  461,  461,  461,  461,  463,  461,
-      461,  461, 1923,  461,  465,  461,  466,  461,  586,  251,
-      586,  598,  251,  598,  598,  251,  598, 1924,  611,  251,
-      611,  611,  251,  611,  588, 1925, 1927,  599,  934,  951,
-      599, 1928,  461,  461,  612,  935,  935,  612,  467, 1929,
+      461,  461, 1917,  461,  465,  461,  466,  461,  586,  251,
+      586,  598,  251,  598,  598,  251,  598, 1918,  611,  251,
+      611,  611,  251,  611,  588, 1919, 1920,  599,  934,  951,
+      599, 1921,  461,  461,  612,  935,  935,  612,  467, 1923,
 
-     1930, 1085, 1085,  468,  472,  473,  251,  473,  472,  472,
-      472,  472,  472,  472,  472,  474,  472,  472,  472, 1933,
+     1924, 1085, 1085,  468,  472,  473,  251,  473,  472,  472,
+      472,  472,  472,  472,  472,  474,  472,  472,  472, 1925,
       472,  476,  472,  477,  472,  251,  251,  251,  251,  251,
-      251,  611,  251,  611, 1936,  611,  251,  611,  611,  251,
-      611,  286, 1269, 1937,  286, 1150, 1938,  612, 1939,  472,
-      472,  612, 1270, 1940,  613,  611,  251,  611, 1941, 1271,
-      478,  908,  908,  908, 1942, 1154, 1169, 1169, 1169, 1945,
-     1910,  613, 1954,  479,  472,  473,  251,  473,  472,  472,
-      472,  472,  472,  472,  472,  474,  472,  472,  472, 1959,
+      251,  611,  251,  611, 1926,  611,  251,  611,  611,  251,
+      611,  286, 1269, 1929,  286, 1150, 1932,  612, 1933,  472,
+      472,  612, 1270, 1934,  613,  611,  251,  611, 1935, 1271,
+      478,  908,  908,  908, 1936, 1154, 1169, 1169, 1169, 1937,
+     1906,  613, 1938,  479,  472,  473,  251,  473,  472,  472,
+      472,  472,  472,  472,  472,  474,  472,  472,  472, 1941,
       472,  476,  472,  477,  472,  625,  251,  625,  625,  251,
 
-      625,  251,  251,  251, 1960,  251,  251,  251,  625,  251,
-      625,  626, 1977, 1983,  626, 1984, 1985,  627, 1988,  472,
-      472,  627, 1989, 1990,  626,  625,  251,  625, 1994, 1997,
-      478, 1161, 1161, 1161, 1998, 1162, 2001, 2002, 1163, 2011,
-     2015,  626, 2018,  479,  483,  484,  251,  484,  483,  483,
-      483,  483,  483,  483,  483,  485,  483,  483,  483, 2019,
+      625,  251,  251,  251, 1950,  251,  251,  251,  625,  251,
+      625,  626, 1955, 1956,  626, 1973, 1979,  627, 1980,  472,
+      472,  627, 1981, 1984,  626,  625,  251,  625, 1985, 1986,
+      478, 1161, 1161, 1161, 1990, 1162, 1993, 1994, 1163, 1997,
+     1998,  626, 2004,  479,  483,  484,  251,  484,  483,  483,
+      483,  483,  483,  483,  483,  485,  483,  483,  483, 2008,
       483,  487,  483,  488,  483,  625,  251,  625,  625,  251,
-      625, 2020,  650,  251,  650, 2024, 2027,  650,  251,  650,
-     2033,  628,  264,  265,  628, 2038, 2044,  266,  651,  483,
-      483,  264,  265,  651,  671, 2048,  266,  638, 2051,  788,
+      625, 2011,  650,  251,  650, 2012, 2013,  650,  251,  650,
+     2014,  628,  264,  265,  628, 2017, 2023,  266,  651,  483,
+      483,  264,  265,  651,  671, 2028,  266,  638, 2034,  788,
 
-     1169, 1169, 1169, 2052,  697,  489,  638, 2054, 2055,  789,
+     1169, 1169, 1169, 2038,  697,  489,  638, 2041, 2042,  789,
       490,  483,  484,  251,  484,  483,  483,  483,  483,  483,
       483,  483,  485,  483,  483,  483,  639,  483,  487,  483,
-      488,  483,  698, 2056, 2057,  639, 2058, 2059,  675, 2060,
-     2062,  916,  916,  916,  678, 2068,  699, 2069,  700, 2070,
+      488,  483,  698, 2044, 2045,  639, 2046, 2047,  675, 2048,
+     2049,  916,  916,  916,  678, 2050,  699, 2052,  700, 2058,
       684,  685,  969,  969,  969,  684,  483,  483,  917,  983,
-      983,  983, 2072, 2074, 1170, 1192, 1192, 1192, 2082,  970,
-     2087, 2088,  489, 1192, 1192, 1192,  984,  490,  494,  495,
+      983,  983, 2059, 2060, 1170, 1192, 1192, 1192, 2062,  970,
+     2064, 2072,  489, 1192, 1192, 1192,  984,  490,  494,  495,
       251,  495,  494,  494,  494,  494,  494,  494,  494,  496,
-      494,  494,  494, 2089,  494,  498,  494,  499,  494,  985,
+      494,  494,  494, 2077,  494,  498,  494,  499,  494,  985,
 
       985,  985,  996,  996,  996,  999,  999,  999, 1014, 1014,
-     1014, 1024, 1024, 1024, 2091, 2109,  986, 1150, 2110,  997,
-     2092, 2111, 1000,  494,  494, 1015, 2093, 2114, 1025, 1193,
-     2094, 1226, 1226, 1226, 2104, 1227, 2095, 1170, 1228,  500,
-     1708, 1169, 1169, 1169, 2115,  501,  494,  495,  251,  495,
+     1014, 1024, 1024, 1024, 2078, 2079,  986, 2081, 2099,  997,
+     2082, 2100, 1000,  494,  494, 1015, 2083, 1150, 1025, 1193,
+     2084, 1226, 1226, 1226, 2101, 1227, 2085, 1170, 1228,  500,
+     1708, 1169, 1169, 1169, 2094,  501,  494,  495,  251,  495,
       494,  494,  494,  494,  494,  494,  494,  496,  494,  494,
       494, 1708,  494,  498,  494,  499,  494, 1034, 1034, 1034,
      1036, 1036, 1036, 1045, 1045, 1045, 1053, 1053, 1053, 1057,
-     1057, 1057, 2105, 2117, 1035, 2118, 2112, 1037, 2119, 2120,
-     1046,  494,  494, 1054, 2106, 2121, 1058, 1252, 1252, 1252,
+     1057, 1057, 2095, 2104, 1035, 2105, 2102, 1037, 2107, 2108,
+     1046,  494,  494, 1054, 2096, 2109, 1058, 1252, 1252, 1252,
 
-     2122, 1253, 2113, 2123, 1254, 1193, 2126,  500, 1506, 1506,
-     1506, 2127, 2128,  501,  505,  506,  251,  506,  505,  505,
-      505,  505,  505,  505,  505,  507,  505,  505,  505, 2129,
+     2110, 1253, 2103, 2111, 1254, 1193, 2112,  500, 1506, 1506,
+     1506, 2113, 2116,  501,  505,  506,  251,  506,  505,  505,
+      505,  505,  505,  505,  505,  507,  505,  505,  505, 2117,
       505,  509,  505,  510,  505, 1073, 1073, 1073, 1095, 1095,
-     1095, 1101, 1101, 1101, 1117, 1117, 1117, 2132, 1123, 1123,
-     1123, 2133, 1074, 2134, 2135, 1096, 2130, 2137, 1102,  505,
-      505, 1118,  511,  512,  513, 1124, 2138, 1255, 1255, 1255,
-      514, 1256, 2131,  515, 1257, 1192, 1192, 1192, 2145, 2147,
+     1095, 1101, 1101, 1101, 1117, 1117, 1117, 2118, 1123, 1123,
+     1123, 2119, 1074, 2122, 2123, 1096, 2120, 2124, 1102,  505,
+      505, 1118,  511,  512,  513, 1124, 2125, 1255, 1255, 1255,
+      514, 1256, 2121,  515, 1257, 1192, 1192, 1192, 2127, 2128,
       516,  505,  506,  251,  506,  505,  505,  505,  505,  505,
-      505,  505,  507,  505,  505,  505, 2149,  505,  509,  505,
+      505,  505,  507,  505,  505,  505, 2135,  505,  509,  505,
 
       510,  505, 1129, 1129, 1129, 1137, 1137, 1137,  916,  916,
-      916, 1208, 1208, 1208, 1165, 1165, 1165, 2170, 2174, 1130,
-     2175, 2176, 1138, 2182, 2183,  917,  505,  505, 1209,  511,
-      512,  513, 1167, 2184, 1272, 1272, 1272,  514, 1273, 2188,
-      515, 1274, 1527, 1527, 1527, 2189, 2192,  516,  521,  522,
+      916, 1208, 1208, 1208, 1165, 1165, 1165, 2137, 2139, 1130,
+     2160, 2164, 1138, 2165, 2166,  917,  505,  505, 1209,  511,
+      512,  513, 1167, 2172, 1272, 1272, 1272,  514, 1273, 2173,
+      515, 1274, 1527, 1527, 1527, 2174, 2178,  516,  521,  522,
       251,  522,  521,  521,  521,  521,  521,  521,  521,  523,
-      521,  521,  521, 2193,  521,  525,  521,  526,  521, 1165,
-     1165, 1165, 1212, 1212, 1212, 2197, 2198, 1215, 1215, 1215,
-     3476, 3476, 3476, 3476, 3476, 3476, 2199, 1167, 2200, 1213,
-     1221, 1221, 1221,  521,  521, 1217, 2203, 3476, 2207, 2208,
+      521,  521,  521, 2179,  521,  525,  521,  526,  521, 1165,
+     1165, 1165, 1212, 1212, 1212, 2182, 2183, 1215, 1215, 1215,
+     3437, 3437, 3437, 3437, 3437, 3437, 2187, 1167, 2188, 1213,
+     1221, 1221, 1221,  521,  521, 1217, 2191, 3437, 2195, 2196,
 
-     3476, 2209, 2210, 1276, 1276, 1276, 1168, 1277, 1223, 2211,
+     3437, 2197, 2200, 1276, 1276, 1276, 1168, 1277, 1223, 2207,
      1278, 1506, 1506, 1506, 1728, 1728, 1728,  527,  521,  522,
       251,  522,  521,  521,  521,  521,  521,  521,  521,  523,
       521,  521,  521, 1210,  521,  525,  521,  526,  521, 1214,
-     1215, 1215, 1215,  969,  969,  969, 2214, 2221, 1211, 1221,
-     1221, 1221, 1230, 1230, 1230, 1234, 1234, 1234, 1217, 2225,
-      970, 2226, 2227,  521,  521, 2232, 2234, 1223, 2235, 2236,
-     1232, 2237, 1235, 2239, 1295, 1295, 1295, 1218, 1296, 2240,
-     2243, 1297, 1720, 1720, 1720, 2245, 2248,  527,  536,  537,
+     1215, 1215, 1215,  969,  969,  969, 2211, 2212, 1211, 1221,
+     1221, 1221, 1230, 1230, 1230, 1234, 1234, 1234, 1217, 2213,
+      970, 2218, 2220,  521,  521, 2221, 2222, 1223, 2223, 2225,
+     1232, 2226, 1235, 2229, 1295, 1295, 1295, 1218, 1296, 2231,
+     2234, 1297, 1720, 1720, 1720, 2250, 2251,  527,  536,  537,
       251,  537,  536,  536,  536,  536,  536,  536,  536,  538,
 
-      536,  536,  536, 2264,  536,  540,  536,  541,  536, 1238,
-     1238, 1238, 2265, 1224, 1240, 1240, 1240, 1240, 1240, 1240,
-     3476, 3476, 3476, 1244, 1244, 1244, 1239, 2266, 1721, 1230,
-     1230, 1230, 1242,  536,  536, 1242, 2271, 3476, 2272, 2275,
-     1245,  542, 2276,  543, 2277, 2280,  544, 1232, 2289, 2290,
+      536,  536,  536, 2252,  536,  540,  536,  541,  536, 1238,
+     1238, 1238, 2257, 1224, 1240, 1240, 1240, 1240, 1240, 1240,
+     3437, 3437, 3437, 1244, 1244, 1244, 1239, 2258, 1721, 1230,
+     1230, 1230, 1242,  536,  536, 1242, 2259, 3437, 2261, 2262,
+     1245,  542, 2263,  543, 2260, 2266,  544, 1232, 2275, 2276,
       545, 1731, 1731, 1731,  546,  536,  537,  251,  537,  536,
       536,  536,  536,  536,  536,  536,  538,  536,  536,  536,
      1236,  536,  540,  536,  541,  536, 1233, 1246, 1246, 1246,
-     1248, 1248, 1248, 2291, 2273, 1237, 2292, 1150, 1243, 1248,
-     1248, 1248, 2274, 2282, 1247,  983,  983,  983, 1250, 2295,
-
-      536,  536,  985,  985,  985, 2297, 1708, 1250,  542, 2298,
-      543, 2299,  984,  544, 1736, 1736, 1736,  545, 2300,  986,
-     2304,  546,  552,  553,  251,  553,  552,  552,  552,  552,
-      552,  552,  552,  554,  552,  552,  552, 2283,  552,  556,
-      552,  557,  552, 1708, 1258, 1258, 1258, 1264, 1264, 1264,
-     1527, 1527, 1527, 2306, 2307, 3476, 3476, 3476, 2278, 2308,
-     1251, 1259, 3476, 3476, 3476, 1266, 2279,  552,  552, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 2311, 2315,  558, 3476,
-     1310, 1310, 1310, 2316, 1311, 2318, 3476, 1312, 2320, 2284,
-     3476,  559,  552,  553,  251,  553,  552,  552,  552,  552,
+     1248, 1248, 1248, 2277, 2264, 1237, 2278, 1150, 1243, 1248,
+     1248, 1248, 2265, 2268, 1247,  983,  983,  983, 1250, 2281,
+
+      536,  536,  985,  985,  985, 2283, 1708, 1250,  542, 2284,
+      543, 2285,  984,  544, 1736, 1736, 1736,  545, 2286,  986,
+     1708,  546,  552,  553,  251,  553,  552,  552,  552,  552,
+      552,  552,  552,  554,  552,  552,  552, 2269,  552,  556,
+      552,  557,  552, 2290, 1258, 1258, 1258, 1264, 1264, 1264,
+     1527, 1527, 1527, 2292, 2293, 3437, 3437, 3437, 2294, 2297,
+     1251, 1259, 3437, 3437, 3437, 1266, 2270,  552,  552, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 2301, 2302,  558, 3437,
+     1310, 1310, 1310, 2304, 1311, 2306, 3437, 1312, 2317, 2318,
+     3437,  559,  552,  553,  251,  553,  552,  552,  552,  552,
 
       552,  552,  552,  554,  552,  552,  552, 1260,  552,  556,
-      552,  557,  552, 1264, 1264, 1264, 2331, 1261, 2332, 2333,
-     1262, 2334,  996,  996,  996, 1263,  999,  999,  999, 2338,
-     2339, 1266, 1279, 1279, 1279, 2340, 2341,  552,  552,  997,
-     1291, 1291, 1291, 1000, 1723, 1723, 1723, 2347,  558, 1280,
-     1323, 1323, 1323, 2348, 1324, 2353, 2354, 1325, 1293, 2357,
+      552,  557,  552, 1264, 1264, 1264, 2319, 1261, 2320, 2324,
+     1262, 2325,  996,  996,  996, 1263,  999,  999,  999, 2326,
+     2327, 1266, 1279, 1279, 1279, 2333, 2334,  552,  552,  997,
+     1291, 1291, 1291, 1000, 1723, 1723, 1723, 2335,  558, 1280,
+     1323, 1323, 1323, 2336, 1324, 2339, 2343, 1325, 1293, 2344,
      1267,  559,  563,  564,  251,  564,  563,  563,  563,  563,
-      563,  563,  563,  565,  563,  563,  563, 2361,  563,  567,
-      563,  568,  563, 1014, 1014, 1014, 1291, 1291, 1291, 2362,
+      563,  563,  563,  565,  563,  563,  563, 2345,  563,  567,
+      563,  568,  563, 1014, 1014, 1014, 1291, 1291, 1291, 2346,
      1724, 1298, 1298, 1298, 1298, 1298, 1298, 1303, 1303, 1303,
 
      1015, 1303, 1303, 1303, 1293, 2349, 2351,  563,  563, 1300,
-     2367, 2368, 1300, 2350, 2352, 1305,  569, 2371,  570, 1305,
-     2373, 2374,  571, 1746, 1746, 1746, 2375,  572,  573,  563,
+     2352, 2353, 1300, 2354, 2366, 1305,  569, 2367,  570, 1305,
+     2371, 2374,  571, 1746, 1746, 1746, 2375,  572,  573,  563,
       564,  251,  564,  563,  563,  563,  563,  563,  563,  563,
       565,  563,  563,  563, 1294,  563,  567,  563,  568,  563,
-     1024, 1024, 1024, 2363, 2365, 1301, 2376, 2388, 1316, 1316,
-     1316, 2364, 2366, 1306, 1316, 1316, 1316, 1025, 2389, 1034,
-     1034, 1034, 2393, 2396,  563,  563, 1318, 1326, 1326, 1326,
-     2397, 1327, 1318,  569, 1328,  570, 1035, 2403, 2408,  571,
-     1720, 1720, 1720, 2410,  572,  573,  577,  578,  251,  578,
+     1024, 1024, 1024, 2381, 2386, 1301, 2388, 2389, 1316, 1316,
+     1316, 2390, 2394, 1306, 1316, 1316, 1316, 1025, 2395, 1034,
+     1034, 1034, 2396, 2397,  563,  563, 1318, 1326, 1326, 1326,
+     2398, 1327, 1318,  569, 1328,  570, 1035, 2399, 2400,  571,
+     1720, 1720, 1720, 2401,  572,  573,  577,  578,  251,  578,
 
       577,  577,  577,  577,  577,  577,  577,  579,  577,  577,
-      577, 2411,  577,  581,  577,  582,  577, 1036, 1036, 1036,
-     1329, 1329, 1329, 2096, 2412, 1319, 1329, 1329, 1329, 2097,
-     1334, 1334, 1334, 2098, 1037, 1334, 1334, 1334, 1331, 2099,
-     2416,  577,  577, 2417, 1331, 2418, 2419,  583, 1336, 2420,
-     1339, 1339, 1339, 1336, 1340, 2421, 2422, 1341, 2423, 1742,
+      577, 2402,  577,  581,  577,  582,  577, 1036, 1036, 1036,
+     1329, 1329, 1329, 2086, 2403, 1319, 1329, 1329, 1329, 2087,
+     1334, 1334, 1334, 2088, 1037, 1334, 1334, 1334, 1331, 2089,
+     2420,  577,  577, 2421, 1331, 2422, 2424,  583, 1336, 1708,
+     1339, 1339, 1339, 1336, 1340, 2427, 2428, 1341, 2430, 1742,
      1742, 1742,  584,  577,  578,  251,  578,  577,  577,  577,
-      577,  577,  577,  577,  579,  577,  577,  577, 2424,  577,
+      577,  577,  577,  577,  579,  577,  577,  577, 1708,  577,
       581,  577,  582,  577, 1045, 1045, 1045, 1332, 1345, 1345,
-     1345, 2425, 1353, 1353, 1353, 1337, 2442, 1345, 1345, 1345,
+     1345, 2431, 1353, 1353, 1353, 1337, 2407, 1345, 1345, 1345,
 
-     2443, 1046, 1053, 1053, 1053, 1743, 1347, 2444,  577,  577,
+     2432, 1046, 1053, 1053, 1053, 1743, 1347, 2433,  577,  577,
      1355, 1057, 1057, 1057,  583, 1347, 1350, 1350, 1350, 1054,
-     1351, 2446, 2449, 1352, 1745, 1745, 1745, 2450, 1058,  584,
+     1351, 2406, 2434, 1352, 1745, 1745, 1745, 2435, 1058,  584,
       589,  590,  251,  590,  589,  589,  589,  589,  589,  589,
-      589,  591,  589,  589,  589, 2452,  589,  593,  589,  594,
-      589, 2453, 1348, 1353, 1353, 1353, 1357, 1357, 1357, 1708,
+      589,  591,  589,  589,  589, 2447,  589,  593,  589,  594,
+      589, 2448, 1348, 1353, 1353, 1353, 1357, 1357, 1357, 2449,
      1358, 2454, 2455, 1359, 1361, 1361, 1361, 1361, 1361, 1361,
      1724, 1355, 1723, 1723, 1723,  589,  589, 1381, 1381, 1381,
       595, 1382, 1363, 2456, 1383, 1363,  596,  589,  590,  251,
       590,  589,  589,  589,  589,  589,  589,  589,  591,  589,
 
-      589,  589, 2428,  589,  593,  589,  594,  589, 1356, 1367,
-     1367, 1367, 1367, 1367, 1367, 2457, 1373, 1373, 1373, 2469,
-     1373, 1373, 1373, 1073, 1073, 1073, 2470, 1369, 1364, 2471,
-     1369, 2472,  589,  589, 1375, 2476, 1708,  595, 1375, 2477,
-     1074, 2473, 2478,  596,  600,  601,  251,  601,  600,  600,
-      600,  600,  600,  600,  600,  602,  600,  600,  600, 2484,
+      589,  589, 2462,  589,  593,  589,  594,  589, 1356, 1367,
+     1367, 1367, 1367, 1367, 1367, 2463, 1373, 1373, 1373, 2450,
+     1373, 1373, 1373, 1073, 1073, 1073, 2464, 1369, 1364, 2451,
+     1369, 2482,  589,  589, 1375, 2483, 2484,  595, 1375, 2500,
+     1074, 2501, 2502,  596,  600,  601,  251,  601,  600,  600,
+      600,  600,  600,  600,  600,  602,  600,  600,  600, 2505,
       600,  604,  600,  605,  600, 1384, 1384, 1384, 1388, 1388,
-     1388, 2485, 2486, 1370, 2487, 1394, 1394, 1394, 1394, 1394,
-     1394, 2488, 1385, 2429, 2489, 1376, 1390, 2490, 2500,  600,
-      600, 2501,  606, 1396,  607, 2502, 1396, 1411, 1411, 1411,
+     1388, 2507, 2508, 1370, 2509, 1394, 1394, 1394, 1394, 1394,
+     1394, 2510, 1385, 2511, 2512, 1376, 1390, 2513, 2514,  600,
+      600, 2515,  606, 1396,  607, 2516, 1396, 1411, 1411, 1411,
 
-      608, 1412, 2503, 2512, 1413, 1926, 1926, 1926, 1745, 1745,
+      608, 1412, 2517, 2518, 1413, 1922, 1922, 1922, 1745, 1745,
      1745,  609,  600,  601,  251,  601,  600,  600,  600,  600,
-      600,  600,  600,  602,  600,  600,  600, 2513,  600,  604,
+      600,  600,  600,  602,  600,  600,  600, 2523,  600,  604,
       600,  605,  600, 1095, 1095, 1095, 1397, 1406, 1406, 1406,
-     2514, 1406, 1406, 1406, 2530, 1415, 1415, 1415, 2531, 2532,
-     1096, 1388, 1388, 1388, 1756, 1408, 2535,  600,  600, 1408,
-      606, 2537,  607, 1417, 1728, 1728, 1728, 2538,  608, 1390,
-     1420, 1420, 1420, 2539, 1421, 2540, 2541, 1422, 2542,  609,
+     2524, 1406, 1406, 1406, 1708, 1415, 1415, 1415, 2527, 2528,
+     1096, 1388, 1388, 1388, 1756, 1408, 2529,  600,  600, 1408,
+      606, 2530,  607, 1417, 1728, 1728, 1728, 1708,  608, 1390,
+     1420, 1420, 1420, 2533, 1421, 2534, 2521, 1422, 2535,  609,
       614,  615,  251,  615,  614,  614,  614,  614,  614,  614,
-      614,  616,  614,  614,  614, 2543,  614,  618,  614,  619,
+      614,  616,  614,  614,  614, 2536,  614,  618,  614,  619,
 
-      614, 2544, 1391, 2545, 2546, 1409, 1415, 1415, 1415, 2547,
-     1101, 1101, 1101, 2548, 1423, 1423, 1423, 1426, 1426, 1426,
-     1431, 1431, 1431, 2553, 1417,  614,  614, 1102, 2554, 2557,
-      620, 1424, 2558, 2559, 1427, 2560,  621, 1708, 1433, 2563,
-      622, 1731, 1731, 1731, 1708, 2564,  623,  614,  615,  251,
+      614, 2538, 1391, 2539, 2522, 1409, 1415, 1415, 1415, 2540,
+     1101, 1101, 1101, 2541, 1423, 1423, 1423, 1426, 1426, 1426,
+     1431, 1431, 1431, 2525, 1417,  614,  614, 1102, 2531, 2542,
+      620, 1424, 2526, 2544, 1427, 2545,  621, 2532, 1433, 2546,
+      622, 1731, 1731, 1731, 2556, 2557,  623,  614,  615,  251,
       615,  614,  614,  614,  614,  614,  614,  614,  616,  614,
-      614,  614, 2565,  614,  618,  614,  619,  614, 2566, 2551,
-     1418, 1435, 1435, 1435, 1437, 1437, 1437, 3476, 3476, 3476,
-     2555, 2552, 1431, 1431, 1431, 1117, 1117, 1117, 1436, 2556,
-     2561, 1438,  614,  614, 3476, 2568, 2569,  620, 2570, 2562,
+      614,  614, 2558,  614,  618,  614,  619,  614, 2559, 2560,
+     1418, 1435, 1435, 1435, 1437, 1437, 1437, 3437, 3437, 3437,
+     2564, 2567, 1431, 1431, 1431, 1117, 1117, 1117, 1436, 2572,
+     2573, 1438,  614,  614, 3437, 2580, 2568,  620, 2581, 2570,
 
-     1433, 2571, 1118,  621, 1445, 1445, 1445,  622, 1446, 2572,
-     2574, 1447, 2575,  623,  629,  630,  251,  630,  629,  629,
+     1433, 2582, 1118,  621, 1445, 1445, 1445,  622, 1446, 2569,
+     2596, 1447, 2571,  623,  629,  630,  251,  630,  629,  629,
       629,  629,  629,  629,  629,  631,  629,  629,  629, 1434,
-      629,  633,  629,  634,  629, 2576, 1439, 1440, 1440, 1440,
+      629,  633,  629,  634,  629, 2597, 1439, 1440, 1440, 1440,
      1440, 1440, 1440, 1448, 1448, 1448, 1448, 1448, 1448, 1123,
-     1123, 1123, 1129, 1129, 1129, 1442, 2586, 2587, 1442,  629,
-      629, 1450, 2588, 2589, 1450, 2590, 1124,  635, 2594, 1130,
-      636, 1931, 1931, 1931, 1736, 1736, 1736,  637,  629,  630,
+     1123, 1123, 1129, 1129, 1129, 1442, 2613, 2614, 1442,  629,
+      629, 1450, 2615, 2616, 1450, 2618, 1124,  635, 2619, 1130,
+      636, 1927, 1927, 1927, 1736, 1736, 1736,  637,  629,  630,
       251,  630,  629,  629,  629,  629,  629,  629,  629,  631,
-      629,  629,  629, 2597,  629,  633,  629,  634,  629, 2602,
-
-     2598, 1443, 1454, 1454, 1454, 2603, 1455, 1451, 2600, 1456,
-     1458, 1458, 1458, 2599, 1458, 1458, 1458, 2604, 1463, 1463,
-     1463, 2601, 1464,  629,  629, 1465, 2605, 2612, 1460, 2613,
-     2614,  635, 1460, 2615,  636, 1932, 1934, 1934, 1934, 2616,
-     2630,  637,  640,  641,  251,  641,  640,  640,  640,  640,
-      640,  640,  640,  642,  640,  640,  640, 2631,  640,  644,
+      629,  629,  629, 2620,  629,  633,  629,  634,  629, 2621,
+
+     2622, 1443, 1454, 1454, 1454, 2623, 1455, 1451, 2624, 1456,
+     1458, 1458, 1458, 2625, 1458, 1458, 1458, 2626, 1463, 1463,
+     1463, 2627, 1464,  629,  629, 1465, 2628, 2629, 1460, 2634,
+     2635,  635, 1460, 2636,  636, 1928, 1930, 1930, 1930, 2637,
+     1708,  637,  640,  641,  251,  641,  640,  640,  640,  640,
+      640,  640,  640,  642,  640,  640,  640, 2638,  640,  644,
       640,  645,  640, 1468, 1468, 1468, 1468, 1468, 1468, 1137,
-     1137, 1137, 1474, 1474, 1474, 2647, 1475, 2648, 2649, 1476,
-     1461, 1470, 1935, 2650, 1470, 2652, 1138,  640,  640, 1479,
-     1479, 1479, 2653, 2654,  646, 1161, 1161, 1161, 2655, 1162,
+     1137, 1137, 1474, 1474, 1474, 2639, 1475, 2632, 2640, 1476,
+     1461, 1470, 1931, 2641, 1470, 1150, 1138,  640,  640, 1479,
+     1479, 1479, 2642, 2643,  646, 1161, 1161, 1161, 2644, 1162,
 
-      647, 2656, 1163, 1742, 1742, 1742, 2657, 1481, 2658,  648,
+      647, 2645, 1163, 1742, 1742, 1742, 2646, 1481, 2647,  648,
       640,  641,  251,  641,  640,  640,  640,  640,  640,  640,
-      640,  642,  640,  640,  640, 2659,  640,  644,  640,  645,
-      640, 2660, 1471, 1479, 1479, 1479, 1486, 1486, 1486, 1486,
+      640,  642,  640,  640,  640, 2631,  640,  644,  640,  645,
+      640, 2649, 1471, 1479, 1479, 1479, 1486, 1486, 1486, 1486,
      1486, 1486, 1165, 1165, 1165, 1165, 1165, 1165, 1497, 1497,
-     1497, 1481, 2661, 2662, 1488,  640,  640, 1488, 2663, 2668,
-     1167, 2669,  646, 1167, 2670, 1708, 1498, 2671,  647, 1208,
-     1208, 1208, 1537, 1537, 1537, 2672, 1538,  648,  656, 1539,
-     2673, 1212, 1212, 1212, 2674,  671, 1209, 2675, 2676, 1542,
-     1542, 1542, 1150, 1543,  655,  672, 1544, 1482, 1213, 1215,
-
-     1215, 1215, 2666, 1489, 1234, 1234, 1234, 1215, 1215, 1215,
-     1238, 1238, 1238, 1215, 1215, 1215, 2677, 1217, 1221, 1221,
-     1221, 1235,  673,  674,  675, 1217, 2678, 1239,  676,  677,
-      678, 1217, 2665,  679,  680, 2679, 1223,  681, 1708,  682,
+     1497, 1481, 2650, 2651, 1488,  640,  640, 1488, 2652, 1708,
+     1167, 2653,  646, 1167, 2654, 2659, 1498, 2660,  647, 1208,
+     1208, 1208, 1537, 1537, 1537, 2661, 1538,  648,  656, 1539,
+     2664, 1212, 1212, 1212, 2665,  671, 1209, 2669, 2672, 1542,
+     1542, 1542, 2675, 1543,  655,  672, 1544, 1482, 1213, 1215,
+
+     1215, 1215, 2633, 1489, 1234, 1234, 1234, 1215, 1215, 1215,
+     1238, 1238, 1238, 1215, 1215, 1215, 2676, 1217, 1221, 1221,
+     1221, 1235,  673,  674,  675, 1217, 2684, 1239,  676,  677,
+      678, 1217, 2685,  679,  680, 2686, 1223,  681, 2697,  682,
       683,  684,  656, 1221, 1221, 1221, 1221, 1221, 1221, 1226,
-     1226, 1226, 2680, 1227, 2681, 2683, 1228, 2684,  655,  686,
-     2685, 1223, 2686, 2687, 1223, 1230, 1230, 1230, 1244, 1244,
+     1226, 1226, 2670, 1227, 2720, 2721, 1228, 2726,  655,  686,
+     2727, 1223, 2728, 2671, 1223, 1230, 1230, 1230, 1244, 1244,
      1244, 1230, 1230, 1230, 1246, 1246, 1246, 1546, 1230, 1230,
-     1230, 2667, 2688, 1232, 2693, 1245,  673,  687,  688, 1232,
-     2694, 1247,  689,  690,  691, 2695, 1232,  692,  680, 1549,
-
-     2698,  693, 2699,  694,  695,  696, 1553, 1553, 1553, 2703,
-     1554, 2706, 2709, 1555, 1558, 1558, 1558, 2710, 1559, 2718,
-     2719, 1560, 1240, 1240, 1240, 2720, 2704, 1552, 1240, 1240,
-     1240, 1240, 1240, 1240, 1562, 1562, 1562, 2705, 1563, 2731,
-     1242, 1564, 2754, 1565, 1565, 1565, 1242, 1566, 2755, 1242,
+     1230, 2729, 2730, 1232, 2673, 1245,  673,  687,  688, 1232,
+     2731, 1247,  689,  690,  691, 2674, 1232,  692,  680, 1549,
+
+     2732,  693, 2733,  694,  695,  696, 1553, 1553, 1553, 2690,
+     1554, 2734, 2735, 1555, 1558, 1558, 1558, 2740, 1559, 2691,
+     2741, 1560, 1240, 1240, 1240, 2692, 1708, 1552, 1240, 1240,
+     1240, 1240, 1240, 1240, 1562, 1562, 1562, 1150, 1563, 1708,
+     1242, 1564, 2742, 1565, 1565, 1565, 1242, 1566, 2743, 1242,
      1567, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248,
-     1252, 1252, 1252, 2707, 1253, 2760, 2761, 1254, 2762, 1250,
-     2763, 2764, 1250, 2765, 2708, 1250, 1255, 1255, 1255, 2766,
-     1256, 2767, 2768, 1257, 1258, 1258, 1258, 1569, 1569, 1569,
-     2769, 1570, 2774, 1561, 1571, 1264, 1264, 1264, 1264, 1264,
-
-     1264, 1259, 1264, 1264, 1264, 1272, 1272, 1272, 2775, 1273,
-     2776, 1150, 1274, 1266, 2777, 2778, 1266, 2743, 1708, 1568,
-     1266, 1581, 1581, 1581, 1276, 1276, 1276, 2744, 1277, 2779,
-     2745, 1278, 1279, 1279, 1279, 1583, 1583, 1583, 1582, 1584,
-     2771, 2780, 1585, 1291, 1291, 1291, 1291, 1291, 1291, 1280,
-     1576, 1291, 1291, 1291, 2781, 1295, 1295, 1295, 2782, 1296,
-     2772, 1293, 1297, 2783, 1293, 1298, 1298, 1298, 2784, 1293,
+     1252, 1252, 1252, 2693, 1253, 2744, 2737, 1254, 2738, 1250,
+     2745, 2746, 1250, 2694, 2747, 1250, 1255, 1255, 1255, 2695,
+     1256, 2739, 2748, 1257, 1258, 1258, 1258, 1569, 1569, 1569,
+     2749, 1570, 2750, 1561, 1571, 1264, 1264, 1264, 1264, 1264,
+
+     1264, 1259, 1264, 1264, 1264, 1272, 1272, 1272, 2751, 1273,
+     2752, 2754, 1274, 1266, 2755, 2756, 1266, 2709, 2758, 1568,
+     1266, 1581, 1581, 1581, 1276, 1276, 1276, 2710, 1277, 2759,
+     2711, 1278, 1279, 1279, 1279, 1583, 1583, 1583, 1582, 1584,
+     2765, 2766, 1585, 1291, 1291, 1291, 1291, 1291, 1291, 1280,
+     1576, 1291, 1291, 1291, 2774, 1295, 1295, 1295, 2775, 1296,
+     2776, 1293, 1297, 2777, 1293, 1298, 1298, 1298, 2778, 1293,
      1298, 1298, 1298, 1298, 1298, 1298, 1599, 1599, 1599, 1303,
-     1303, 1303, 2785, 1300, 1303, 1303, 1303, 2786, 1300, 1708,
-     2788, 1300, 2789, 1600, 1303, 1303, 1303, 1305, 1604, 1604,
+     1303, 1303, 2779, 1300, 1303, 1303, 1303, 2780, 1300, 2781,
+     2782, 1300, 2786, 1600, 1303, 1303, 1303, 1305, 1604, 1604,
 
-     1604, 2724, 1305, 1310, 1310, 1310, 2790, 1311, 2792, 2793,
-     1312, 2725, 1305, 2799, 2800, 1605, 2808, 2726, 1597, 1316,
+     1604, 2712, 1305, 1310, 1310, 1310, 2789, 1311, 2790, 2791,
+     1312, 2713, 1305, 2792, 2714, 1605, 2793, 2794, 1597, 1316,
      1316, 1316, 1316, 1316, 1316, 1316, 1316, 1316, 1612, 1612,
-     1612, 2773, 2809, 1598, 1323, 1323, 1323, 1318, 1324, 2746,
-     1318, 1325, 2810, 1318, 2811, 1613, 1326, 1326, 1326, 2747,
-     1327, 2812, 2748, 1328, 1329, 1329, 1329, 1329, 1329, 1329,
-     2813, 1601, 1329, 1329, 1329, 1615, 1615, 1615, 1334, 1334,
-     1334, 2814, 1331, 2815, 2822, 1331, 1334, 1334, 1334, 2825,
-     1331, 2826, 1616, 1334, 1334, 1334, 1336, 1345, 1345, 1345,
-     1609, 1339, 1339, 1339, 1336, 1340, 2827, 2828, 1341, 2829,
-
-     2830, 1336, 1345, 1345, 1345, 1347, 1345, 1345, 1345, 1350,
-     1350, 1350, 2831, 1351, 2834, 2727, 1352, 1353, 1353, 1353,
-     1347, 1353, 1353, 1353, 1347, 2728, 2842, 1614, 1353, 1353,
-     1353, 2729, 1617, 2843, 2846, 1355, 1357, 1357, 1357, 1355,
-     1358, 2847, 2865, 1359, 2866, 2867, 1355, 1361, 1361, 1361,
-     1361, 1361, 1361, 1361, 1361, 1361, 1627, 1627, 1627, 3476,
-     3476, 3476, 1367, 1367, 1367, 1363, 1622, 2868, 1363, 2869,
-     2870, 1363, 2871, 1628, 2838, 2872, 3476, 1367, 1367, 1367,
-     1369, 1367, 1367, 1367, 1631, 1631, 1631, 2839, 1624, 2840,
-     3476, 3476, 3476, 1708, 2878, 1369, 1373, 1373, 1373, 1369,
-
-     2879, 1632, 2841, 1626, 2880, 2881, 1629, 3476, 1373, 1373,
+     1612, 2795, 2798, 1598, 1323, 1323, 1323, 1318, 1324, 2802,
+     1318, 1325, 2806, 1318, 2807, 1613, 1326, 1326, 1326, 2810,
+     1327, 2811, 2803, 1328, 1329, 1329, 1329, 1329, 1329, 1329,
+     2804, 1601, 1329, 1329, 1329, 1615, 1615, 1615, 1334, 1334,
+     1334, 2829, 1331, 2805, 2830, 1331, 1334, 1334, 1334, 2831,
+     1331, 2832, 1616, 1334, 1334, 1334, 1336, 1345, 1345, 1345,
+     1609, 1339, 1339, 1339, 1336, 1340, 2833, 2834, 1341, 2808,
+
+     2835, 1336, 1345, 1345, 1345, 1347, 1345, 1345, 1345, 1350,
+     1350, 1350, 2809, 1351, 2836, 2842, 1352, 1353, 1353, 1353,
+     1347, 1353, 1353, 1353, 1347, 2843, 1150, 1614, 1353, 1353,
+     1353, 2812, 1617, 2844, 1708, 1355, 1357, 1357, 1357, 1355,
+     1358, 2845, 2846, 1359, 2813, 2847, 1355, 1361, 1361, 1361,
+     1361, 1361, 1361, 1361, 1361, 1361, 1627, 1627, 1627, 3437,
+     3437, 3437, 1367, 1367, 1367, 1363, 1622, 2848, 1363, 2839,
+     2849, 1363, 2850, 1628, 2838, 2851, 3437, 1367, 1367, 1367,
+     1369, 1367, 1367, 1367, 1631, 1631, 1631, 2852, 1624, 2853,
+     3437, 3437, 3437, 2854, 2856, 1369, 1373, 1373, 1373, 1369,
+
+     2857, 1632, 2859, 1626, 2867, 2868, 1629, 3437, 1373, 1373,
      1373, 1373, 1373, 1373, 1375, 1381, 1381, 1381, 1633, 1382,
-     2844, 1150, 1383, 1384, 1384, 1384, 1375, 2882, 2875, 1375,
-     1639, 1639, 1639, 2845, 1640, 2883, 2884, 1641, 2885, 2886,
-     1385, 1388, 1388, 1388, 1388, 1388, 1388, 2848, 1630, 1388,
-     1388, 1388, 1394, 1394, 1394, 1394, 1394, 1394, 2887, 1390,
-     2849, 2888, 1390, 1394, 1394, 1394, 2889, 1390, 2890, 2874,
-     1396, 2892, 2893, 1396, 1652, 1652, 1652, 1634, 1406, 1406,
-     1406, 1396, 2895, 1406, 1406, 1406, 1406, 1406, 1406, 2903,
-     2904, 1653, 2896, 1415, 1415, 1415, 1408, 1415, 1415, 1415,
-
-     1644, 1408, 2897, 2898, 1408, 1411, 1411, 1411, 2911, 1412,
-     1647, 1417, 1413, 2899, 2912, 1417, 1415, 1415, 1415, 1420,
-     1420, 1420, 2913, 1421, 2914, 2915, 1422, 1423, 1423, 1423,
-     2916, 1662, 1662, 1662, 1417, 1663, 2917, 2918, 1664, 1665,
-     1665, 1665, 2922, 2923, 1424, 2927, 2928, 1657, 1426, 1426,
-     1426, 1667, 1667, 1667, 2929, 1668, 1666, 2930, 1669, 1671,
+     2875, 2876, 1383, 1384, 1384, 1384, 1375, 2877, 2860, 1375,
+     1639, 1639, 1639, 2878, 1640, 2879, 2880, 1641, 2861, 2881,
+     1385, 1388, 1388, 1388, 1388, 1388, 1388, 2882, 1630, 1388,
+     1388, 1388, 1394, 1394, 1394, 1394, 1394, 1394, 2862, 1390,
+     2883, 2884, 1390, 1394, 1394, 1394, 2888, 1390, 2863, 2889,
+     1396, 2890, 2891, 1396, 1652, 1652, 1652, 1634, 1406, 1406,
+     1406, 1396, 2892, 1406, 1406, 1406, 1406, 1406, 1406, 2893,
+     2894, 1653, 2895, 1415, 1415, 1415, 1408, 1415, 1415, 1415,
+
+     1644, 1408, 2896, 2897, 1408, 1411, 1411, 1411, 2898, 1412,
+     1647, 1417, 1413, 2899, 2900, 1417, 1415, 1415, 1415, 1420,
+     1420, 1420, 2901, 1421, 2902, 2903, 1422, 1423, 1423, 1423,
+     2904, 1662, 1662, 1662, 1417, 1663, 2905, 2906, 1664, 1665,
+     1665, 1665, 2907, 2921, 1424, 2922, 2923, 1657, 1426, 1426,
+     1426, 1667, 1667, 1667, 2924, 1668, 1666, 2925, 1669, 1671,
      1671, 1671, 1431, 1431, 1431, 1427, 1431, 1431, 1431, 1431,
-     1431, 1431, 1435, 1435, 1435, 2931, 1672, 1660, 2932, 2933,
-     1433, 1675, 1675, 1675, 1433, 1676, 2934, 1433, 1677, 1436,
-     1437, 1437, 1437, 1678, 1678, 1678, 2935, 1679, 2936, 2937,
+     1431, 1431, 1435, 1435, 1435, 2926, 1672, 1660, 2927, 2928,
+     1433, 1675, 1675, 1675, 1433, 1676, 2910, 1433, 1677, 1436,
+     1437, 1437, 1437, 1678, 1678, 1678, 2911, 1679, 2936, 2937,
 
      1680, 1440, 1440, 1440, 1440, 1440, 1440, 1438, 1440, 1440,
-     1440, 1445, 1445, 1445, 2938, 1446, 2939, 2940, 1447, 1442,
-     2941, 2942, 1442, 1448, 1448, 1448, 1442, 2943, 2944, 1674,
-     1448, 1448, 1448, 1448, 1448, 1448, 1454, 1454, 1454, 2945,
-     1455, 1450, 2946, 1456, 1458, 1458, 1458, 2960, 1450, 2961,
-     2962, 1450, 1458, 1458, 1458, 1458, 1458, 1458, 2963, 1463,
-     1463, 1463, 1460, 1464, 2949, 2964, 1465, 1691, 1691, 1691,
-     1460, 2965, 2951, 1460, 2950, 1682, 1468, 1468, 1468, 1468,
-     1468, 1468, 2952, 2966, 1692, 1468, 1468, 1468, 1695, 1695,
-     1695, 1474, 1474, 1474, 1470, 1475, 2967, 1470, 1476, 2975,
-
-     1684, 2976, 1150, 1470, 2977, 1696, 3476, 3476, 3476, 1479,
-     1479, 1479, 1479, 1479, 1479, 2978, 1688, 1479, 1479, 1479,
-     1701, 1701, 1701, 3476, 1486, 1486, 1486, 1481, 2979, 2980,
-     1481, 1486, 1486, 1486, 2981, 1481, 2969, 1702, 1486, 1486,
-     1486, 2982, 1488, 1707, 1707, 1707, 1693, 2987, 2988, 1488,
-     1497, 1497, 1497, 1537, 1537, 1537, 1488, 1538, 2989, 2990,
-     1539, 1708, 1709, 2992, 1699, 2993, 2996, 1697, 1498, 1542,
-     1542, 1542, 2997, 1543, 2998, 2999, 1544, 1215, 1215, 1215,
-     1757, 1757, 1757, 3000, 3001, 1704, 1221, 1221, 1221, 1230,
-     1230, 1230, 1553, 1553, 1553, 1217, 1554, 1758, 3002, 1555,
-
-     3003, 1558, 1558, 1558, 1223, 1559, 3008, 1232, 1560, 1240,
-     1240, 1240, 1562, 1562, 1562, 3009, 1563, 3010, 3011, 1564,
-     3012, 1565, 1565, 1565, 3013, 1566, 3014, 1242, 1567, 1248,
-     1248, 1248, 1569, 1569, 1569, 3015, 1570, 3016, 1755, 1571,
+     1440, 1445, 1445, 1445, 2938, 1446, 1150, 2912, 1447, 1442,
+     2939, 2940, 1442, 1448, 1448, 1448, 1442, 2913, 2941, 1674,
+     1448, 1448, 1448, 1448, 1448, 1448, 1454, 1454, 1454, 2942,
+     1455, 1450, 2943, 1456, 1458, 1458, 1458, 2948, 1450, 2949,
+     2930, 1450, 1458, 1458, 1458, 1458, 1458, 1458, 2950, 1463,
+     1463, 1463, 1460, 1464, 2951, 2953, 1465, 1691, 1691, 1691,
+     1460, 2954, 2957, 1460, 2958, 1682, 1468, 1468, 1468, 1468,
+     1468, 1468, 2959, 2960, 1692, 1468, 1468, 1468, 1695, 1695,
+     1695, 1474, 1474, 1474, 1470, 1475, 2961, 1470, 1476, 2962,
+
+     1684, 2963, 2964, 1470, 2969, 1696, 3437, 3437, 3437, 1479,
+     1479, 1479, 1479, 1479, 1479, 2970, 1688, 1479, 1479, 1479,
+     1701, 1701, 1701, 3437, 1486, 1486, 1486, 1481, 2971, 2972,
+     1481, 1486, 1486, 1486, 2973, 1481, 2974, 1702, 1486, 1486,
+     1486, 2975, 1488, 1707, 1707, 1707, 1693, 2976, 2977, 1488,
+     1497, 1497, 1497, 1537, 1537, 1537, 1488, 1538, 2978, 2979,
+     1539, 1708, 1709, 2980, 1699, 2981, 2982, 1697, 1498, 1542,
+     1542, 1542, 2983, 1543, 2984, 2985, 1544, 1215, 1215, 1215,
+     1757, 1757, 1757, 2989, 2990, 1704, 1221, 1221, 1221, 1230,
+     1230, 1230, 1553, 1553, 1553, 1217, 1554, 1758, 2991, 1555,
+
+     2992, 1558, 1558, 1558, 1223, 1559, 2995, 1232, 1560, 1240,
+     1240, 1240, 1562, 1562, 1562, 2996, 1563, 2997, 2998, 1564,
+     2999, 1565, 1565, 1565, 3000, 1566, 3008, 1242, 1567, 1248,
+     1248, 1248, 1569, 1569, 1569, 3009, 1570, 3010, 1755, 1571,
      1769, 1769, 1769, 1264, 1264, 1264, 1762, 1250, 1774, 1774,
-     1774, 3017, 3018, 1759, 3019, 3020, 1765, 1770, 1581, 1581,
-     1581, 1266, 1778, 1778, 1778, 1775, 1779, 3021, 3022, 1780,
-     1583, 1583, 1583, 3023, 1584, 1582, 1766, 1585, 1787, 1787,
+     1774, 3011, 3012, 1759, 3013, 3014, 1765, 1770, 1581, 1581,
+     1581, 1266, 1778, 1778, 1778, 1775, 1779, 3015, 3016, 1780,
+     1583, 1583, 1583, 1150, 1584, 1582, 1766, 1585, 1787, 1787,
      1787, 1291, 1291, 1291, 1298, 1298, 1298, 1599, 1599, 1599,
-     1795, 1795, 1795, 3024, 1796, 1788, 3028, 1797, 1772, 1293,
-
-     3029, 3030, 1300, 3031, 1600, 1798, 1798, 1798, 1604, 1604,
-     1604, 1802, 1802, 1802, 3034, 1803, 3035, 3036, 1804, 3037,
-     1806, 1806, 1806, 1799, 3038, 1605, 1808, 1808, 1808, 1316,
-     1316, 1316, 1612, 1612, 1612, 3039, 1794, 1807, 1814, 1814,
-     1814, 3047, 1815, 1809, 3048, 1816, 1793, 1318, 3049, 1613,
-     1329, 1329, 1329, 1615, 1615, 1615, 1818, 1818, 1818, 3050,
-     1819, 3051, 3052, 1820, 1334, 1334, 1334, 1150, 1331, 3053,
-     1616, 3054, 1810, 1825, 1825, 1825, 1345, 1345, 1345, 1353,
-     1353, 1353, 1336, 1831, 1831, 1831, 1361, 1361, 1361, 3055,
-     1826, 1627, 1627, 1627, 1347, 1811, 3056, 1355, 3059, 3060,
-
-     1832, 1631, 1631, 1631, 1363, 1834, 1834, 1834, 1628, 1835,
-     3041, 3066, 1836, 1367, 1367, 1367, 1817, 3067, 1632, 1827,
-     3068, 3069, 1821, 1839, 1839, 1839, 3070, 1840, 3077, 3078,
-     1841, 1369, 3079, 1828, 3080, 3081, 1830, 1833, 1373, 1373,
-     1373, 1845, 1845, 1845, 1639, 1639, 1639, 3082, 1640, 3083,
-     3084, 1641, 1849, 1849, 1849, 3085, 1375, 3086, 1846, 1388,
-     1388, 1388, 1394, 1394, 1394, 1652, 1652, 1652, 3087, 1850,
-     1406, 1406, 1406, 1838, 1860, 1860, 1860, 1390, 1861, 3088,
-     1396, 1862, 1653, 1868, 1868, 1868, 3089, 3090, 1408, 1415,
-     1415, 1415, 3091, 3092, 1662, 1662, 1662, 3093, 1663, 1843,
-
-     1869, 1664, 3094, 1665, 1665, 1665, 3095, 1417, 1872, 1872,
-     1872, 3096, 1873, 3097, 3098, 1874, 1671, 1671, 1671, 1866,
-     1666, 3099, 3100, 1852, 3101, 1667, 1667, 1667, 1855, 1668,
-     3102, 3103, 1669, 1672, 1876, 1876, 1876, 3108, 1877, 1150,
-     3116, 1878, 1431, 1431, 1431, 1675, 1675, 1675, 3111, 1676,
-     3117, 1870, 1677, 3121, 1678, 1678, 1678, 3122, 1679, 3123,
-     1433, 1680, 1440, 1440, 1440, 1448, 1448, 1448, 1458, 1458,
-     1458, 1890, 1890, 1890, 1691, 1691, 1691, 1892, 1892, 1892,
-     1442, 1893, 3124, 1450, 1894, 3106, 1460, 3125, 1891, 3126,
-     3108, 1692, 1880, 1468, 1468, 1468, 1695, 1695, 1695, 1897,
-
-     1897, 1897, 3127, 1898, 3109, 3134, 1899, 1479, 1479, 1479,
-     3129, 1470, 3135, 1696, 3128, 3136, 1701, 1701, 1701, 1904,
-     1904, 1904, 3130, 1905, 3141, 1481, 1906, 3142, 1882, 3143,
-     3144, 1884, 1888, 1702, 1907, 1907, 1907, 1486, 1486, 1486,
-     1707, 1707, 1707, 1745, 1745, 1745, 1746, 1746, 1746, 3145,
-     3146, 1908, 1943, 1943, 1943, 1488, 1902, 1895, 1708, 1946,
-     1946, 1946, 1931, 1931, 1931, 1943, 1943, 1943, 1948, 1948,
-     1948, 1950, 1950, 1950, 3147, 3476, 3476, 3476, 1215, 1215,
-     1215, 1757, 1757, 1757, 3148, 1949, 1909, 3137, 1951, 3149,
-     3150, 1911, 3476, 1955, 1955, 1955, 1217, 1956, 1758, 3138,
-
-     1957, 1221, 1221, 1221, 3151, 1947, 3139, 3152, 1912, 1230,
-     1230, 1230, 3153, 1962, 1962, 1962, 1944, 3156, 3140, 1223,
-     1964, 1964, 1964, 1240, 1240, 1240, 1944, 1232, 3156, 1932,
-     1963, 1248, 1248, 1248, 1968, 1968, 1968, 1965, 1150, 1952,
-     3159, 1242, 3476, 3476, 3476, 1953, 1769, 1769, 1769, 1250,
-     3160, 1969, 1708, 1709, 1971, 1971, 1971, 1961, 1972, 3476,
-     1958, 1973, 3108, 1770, 1974, 1974, 1974, 1264, 1264, 1264,
-     1774, 1774, 1774, 1978, 1978, 1978, 3109, 1979, 3108, 3154,
-     1980, 1975, 1981, 1981, 1981, 1266, 3163, 1775, 1966, 3111,
-     1778, 1778, 1778, 3164, 1779, 3118, 1967, 1780, 3173, 1982,
-
-     1970, 1986, 1986, 1986, 1787, 1787, 1787, 1991, 1991, 1991,
-     3165, 1992, 3171, 3119, 1993, 1995, 1995, 1995, 1987, 3161,
-     3174, 1788, 1291, 1291, 1291, 3166, 3120, 1976, 1298, 1298,
-     1298, 3172, 1996, 3176, 1795, 1795, 1795, 3162, 1796, 3175,
-     1293, 1797, 1798, 1798, 1798, 3177, 1300, 1802, 1802, 1802,
-     3178, 1803, 3183, 3186, 1804, 2003, 2003, 2003, 3181, 3189,
-     1799, 1806, 1806, 1806, 2005, 2005, 2005, 3184, 2006, 3190,
-     3191, 2007, 2004, 1808, 1808, 1808, 3192, 3182, 1807, 3113,
-     2008, 2008, 2008, 2000, 2009, 3193, 3185, 2010, 1999, 3194,
-     1809, 2012, 2012, 2012, 2014, 2014, 2014, 1814, 1814, 1814,
-
-     3114, 1815, 3156, 3196, 1816, 1329, 1329, 1329, 3156, 2013,
-     1818, 1818, 1818, 3115, 1819, 3197, 3198, 1820, 1334, 1334,
-     1334, 3199, 3200, 1331, 1825, 1825, 1825, 2021, 2021, 2021,
-     3201, 2022, 3202, 3209, 2023, 3210, 1336, 2025, 2025, 2025,
-     3211, 1826, 1353, 1353, 1353, 1831, 1831, 1831, 1361, 1361,
-     1361, 2016, 2029, 2029, 2029, 2026, 2030, 3212, 3213, 2031,
-     1355, 3214, 1832, 1834, 1834, 1834, 1363, 1835, 3215, 3216,
-     1836, 1367, 1367, 1367, 1839, 1839, 1839, 3220, 1840, 3221,
-     3222, 1841, 2035, 2035, 2035, 2017, 3223, 3224, 2028, 1369,
-     1373, 1373, 1373, 1845, 1845, 1845, 2039, 2039, 2039, 2036,
-
-     2040, 3225, 3229, 2041, 3230, 3231, 2032, 3232, 1375, 3233,
-     1846, 2042, 2042, 2042, 1849, 1849, 1849, 2045, 2045, 2045,
-     3234, 2046, 3236, 3237, 2047, 2049, 2049, 2049, 2043, 3238,
-     3239, 1850, 1394, 1394, 1394, 3240, 3241, 2034, 1860, 1860,
-     1860, 3242, 1861, 2050, 3247, 1862, 1406, 1406, 1406, 3243,
-     1396, 1868, 1868, 1868, 2037, 2063, 2063, 2063, 3248, 2064,
-     3245, 3244, 2065, 3249, 1408, 2066, 2066, 2066, 1869, 1872,
-     1872, 1872, 3246, 1873, 3250, 3251, 1874, 3252, 1876, 1876,
-     1876, 3253, 1877, 2067, 2053, 1878, 1431, 1431, 1431, 1440,
-     1440, 1440, 1448, 1448, 1448, 3254, 3255, 2061, 2076, 2076,
-
-     2076, 3476, 3476, 3476, 1433, 3256, 3257, 1442, 3258, 3259,
-     1450, 2079, 2079, 2079, 3260, 2077, 3261, 3262, 3476, 1458,
-     1458, 1458, 1890, 1890, 1890, 2083, 2083, 2083, 2080, 2084,
-     3264, 3265, 2085, 3266, 1892, 1892, 1892, 1460, 1893, 1891,
-     2073, 1894, 3267, 2075, 1468, 1468, 1468, 2071, 1897, 1897,
-     1897, 3268, 1898, 3269, 3270, 1899, 1479, 1479, 1479, 1907,
-     1907, 1907, 1470, 2107, 2107, 2107, 2081, 2078, 1904, 1904,
-     1904, 3271, 1905, 3272, 1481, 1906, 1908, 2100, 2100, 2100,
-     2108, 2101, 3273, 3274, 2102, 1486, 1486, 1486, 2116, 2116,
-     2116, 2086, 1926, 1926, 1926, 2124, 2124, 2124, 1931, 1931,
-
-     1931, 1150, 3275, 1488, 2125, 2125, 2125, 2090, 1934, 1934,
-     1934, 1943, 1943, 1943, 2136, 2136, 2136, 1946, 1946, 1946,
-     1948, 1948, 1948, 2139, 2139, 2139, 3263, 2140, 3276, 3277,
-     2141, 1950, 1950, 1950, 3278, 3279, 2103, 1949, 2142, 2142,
-     2142, 3280, 2143, 3281, 3282, 2144, 3283, 3284, 1951, 1215,
-     1215, 1215, 1955, 1955, 1955, 3285, 1956, 3286, 3287, 1957,
-     1221, 1221, 1221, 2150, 2150, 2150, 3289, 1217, 1230, 1230,
-     1230, 1962, 1962, 1962, 3290, 2153, 2153, 2153, 1223, 2154,
-     2151, 3291, 2155, 1964, 1964, 1964, 1232, 3292, 1963, 2156,
-     2156, 2156, 3293, 2157, 1150, 3294, 2158, 1968, 1968, 1968,
-
-     1965, 1240, 1240, 1240, 1248, 1248, 1248, 2164, 2164, 2164,
-     3295, 2148, 3296, 3288, 1969, 2146, 2161, 2161, 2161, 1242,
-     2162, 3297, 1250, 2163, 2165, 3298, 1971, 1971, 1971, 2152,
-     1972, 3299, 3300, 1973, 1974, 1974, 1974, 2166, 2166, 2166,
-     3301, 2167, 3302, 3303, 2168, 1264, 1264, 1264, 1978, 1978,
-     1978, 1975, 1979, 3304, 3305, 1980, 1981, 1981, 1981, 3306,
-     2171, 2171, 2171, 1266, 2172, 3307, 2159, 2173, 3308, 2160,
-     1986, 1986, 1986, 1982, 2177, 2177, 2177, 3309, 2178, 3310,
-     3312, 2179, 2180, 2180, 2180, 3313, 1150, 1987, 1991, 1991,
-     1991, 3314, 1992, 3315, 3316, 1993, 2169, 3317, 3318, 2181,
-
-     1995, 1995, 1995, 2185, 2185, 2185, 3311, 2186, 3319, 3320,
-     2187, 1291, 1291, 1291, 1298, 1298, 1298, 1996, 2003, 2003,
-     2003, 2194, 2194, 2194, 3321, 2195, 3322, 3323, 2196, 1293,
-     3324, 3325, 1300, 3326, 3327, 2004, 2005, 2005, 2005, 3328,
-     2006, 3329, 3330, 2007, 2008, 2008, 2008, 3331, 2009, 3333,
-     3334, 2010, 2012, 2012, 2012, 2014, 2014, 2014, 1329, 1329,
-     1329, 3335, 2190, 1334, 1334, 1334, 3336, 2191, 1150, 3337,
-     2013, 2204, 2204, 2204, 3332, 3338, 1331, 3339, 2021, 2021,
-     2021, 1336, 2022, 3340, 3341, 2023, 3342, 3343, 2205, 2025,
-     2025, 2025, 1353, 1353, 1353, 2029, 2029, 2029, 3344, 2030,
-
-     3345, 3346, 2031, 1361, 1361, 1361, 3348, 2026, 3349, 3350,
-     1355, 3351, 3352, 2202, 1150, 3353, 2201, 2206, 2215, 2215,
-     2215, 1363, 2035, 2035, 2035, 2217, 2217, 2217, 3347, 2218,
-     3354, 3355, 2219, 1373, 1373, 1373, 2216, 3357, 3358, 2036,
-     3359, 2212, 3360, 2039, 2039, 2039, 3361, 2040, 3362, 2213,
-     2041, 1375, 2042, 2042, 2042, 2222, 2222, 2222, 3363, 2223,
-     3364, 3367, 2224, 2045, 2045, 2045, 3368, 2046, 3369, 2043,
-     2047, 2049, 2049, 2049, 2228, 2228, 2228, 1394, 1394, 1394,
-     2220, 2231, 2231, 2231, 2233, 2233, 2233, 3370, 3371, 2050,
-     3372, 2229, 1406, 1406, 1406, 1396, 2063, 2063, 2063, 1150,
-
-     2064, 1150, 1722, 2065, 2066, 2066, 2066, 2241, 2241, 2241,
-     1408, 1431, 1431, 1431, 2246, 2246, 2246, 1448, 1448, 1448,
-     1150, 1150, 2067, 1150, 2242, 2076, 2076, 2076, 1150, 1433,
-     3381, 3399, 2247, 1150, 1150, 1450, 1150, 3373, 2230, 2250,
-     2250, 2250, 2077, 2251, 1150, 3383, 2252, 2253, 2253, 2253,
-     2079, 2079, 2079, 1150, 2256, 2256, 2256, 2238, 2257, 3374,
-     1150, 2258, 1150, 1150, 2254, 3389, 1150, 2080, 3375, 3376,
-     2244, 1458, 1458, 1458, 2260, 2260, 2260, 3379, 2083, 2083,
-     2083, 2249, 2084, 1719, 3377, 2085, 1468, 1468, 1468, 1460,
-     1150, 2261, 3378, 2255, 2267, 2267, 2267, 2269, 2269, 2269,
-
-     3390, 2100, 2100, 2100, 1470, 2101, 3380, 3387, 2102, 1486,
-     1486, 1486, 2268, 3388, 2270, 2107, 2107, 2107, 3384, 3425,
-     2262, 2285, 2285, 2285, 2259, 2286, 1150, 1488, 2287, 2288,
-     2288, 2288, 2108, 2293, 2293, 2293, 2294, 2294, 2294, 2263,
-     2116, 2116, 2116, 2296, 2296, 2296, 2301, 2301, 2301, 2124,
-     2124, 2124, 2125, 2125, 2125, 2281, 2302, 2302, 2302, 2305,
-     2305, 2305, 2309, 2309, 2309, 2310, 2310, 2310, 2312, 2312,
-     2312, 2136, 2136, 2136, 2313, 2313, 2313, 2139, 2139, 2139,
-     3385, 2140, 3386, 1150, 2141, 2142, 2142, 2142, 1150, 2143,
-     1150, 1150, 2144, 1215, 1215, 1215, 1221, 1221, 1221, 2150,
-
-     2150, 2150, 2303, 2321, 2321, 2321, 1150, 2322, 3382, 1718,
-     2323, 1217, 1150, 1150, 1223, 1150, 2151, 1230, 1230, 1230,
-     2314, 2153, 2153, 2153, 3391, 2154, 1717, 1150, 2155, 2156,
-     2156, 2156, 3392, 2157, 1150, 1232, 2158, 1240, 1240, 1240,
-     1248, 1248, 1248, 3397, 2317, 2161, 2161, 2161, 3393, 2162,
-     3394, 3401, 2163, 1716, 1150, 1242, 2319, 2325, 1250, 3400,
-     1150, 2164, 2164, 2164, 2327, 2327, 2327, 1150, 2328, 3403,
-     1150, 2329, 1264, 1264, 1264, 1150, 2326, 2324, 2165, 2166,
-     2166, 2166, 1150, 2167, 3402, 1150, 2168, 2171, 2171, 2171,
-     1266, 2172, 1715, 1150, 2173, 2177, 2177, 2177, 1150, 2178,
-
-     3395, 3405, 2179, 2180, 2180, 2180, 2335, 2335, 2335, 1150,
-     2336, 3439, 3398, 2337, 2185, 2185, 2185, 3404, 2186, 1150,
-     2181, 2187, 2342, 2342, 2342, 1291, 1291, 1291, 2345, 2345,
-     2345, 3396, 3406, 2194, 2194, 2194, 1150, 2195, 2330, 2343,
-     2196, 1150, 1714, 1293, 3411, 1150, 2346, 1329, 1329, 1329,
-     1334, 1334, 1334, 2204, 2204, 2204, 2358, 2358, 2358, 1150,
-     2359, 1150, 3407, 2360, 1713, 1331, 1150, 1712, 1336, 1150,
-     2205, 3412, 1353, 1353, 1353, 1361, 1361, 1361, 2215, 2215,
-     2215, 2217, 2217, 2217, 3408, 2218, 3415, 1150, 2219, 2344,
-     1355, 3409, 3413, 1363, 3414, 1150, 2216, 1373, 1373, 1373,
-
-     3416, 2356, 2355, 2222, 2222, 2222, 3417, 2223, 3419, 1150,
-     2224, 2228, 2228, 2228, 3433, 1375, 2377, 2377, 2377, 3447,
-     2378, 1150, 1150, 2379, 1394, 1394, 1394, 1150, 2229, 2231,
-     2231, 2231, 2381, 2381, 2381, 1711, 1150, 2370, 2369, 2233,
-     2233, 2233, 1396, 2382, 2382, 2382, 3476, 3476, 3476, 1150,
-     2372, 3476, 3476, 3476, 3476, 3476, 3476, 1406, 1406, 1406,
-     2383, 1150, 1150, 3476, 2241, 2241, 2241, 3410, 3476, 3420,
-     3429, 3476, 2390, 2390, 2390, 1408, 2391, 1710, 1703, 2392,
-     1150, 2242, 2394, 2394, 2394, 2246, 2246, 2246, 2380, 2398,
-     2398, 2398, 2250, 2250, 2250, 3421, 2251, 2384, 3418, 2252,
-
-     2395, 1150, 1700, 2247, 2253, 2253, 2253, 2399, 3422, 3426,
-     2400, 2400, 2400, 2386, 2401, 2385, 1150, 2402, 1458, 1458,
-     1458, 2254, 2387, 2256, 2256, 2256, 3427, 2257, 1150, 1150,
-     2258, 2260, 2260, 2260, 3428, 1150, 1460, 2405, 2405, 2405,
-     1698, 2406, 3440, 1150, 2407, 1468, 1468, 1468, 2261, 2267,
-     2267, 2267, 1150, 2269, 2269, 2269, 1150, 2413, 2413, 2413,
-     3434, 2414, 3431, 1470, 2415, 3423, 3424, 2268, 1150, 2404,
-     2270, 1486, 1486, 1486, 2427, 2427, 2427, 2285, 2285, 2285,
-     3473, 2286, 2430, 2431, 2287, 2432, 3430, 2435, 2436, 1488,
-     2437, 3441, 1150, 2433, 1150, 3465, 2409, 1694, 2438, 1690,
-
-     2434, 2288, 2288, 2288, 1150, 2439, 2440, 2440, 2440, 2441,
-     2441, 2441, 2293, 2293, 2293, 2294, 2294, 2294, 1689, 1687,
-     2426, 2296, 2296, 2296, 2445, 2445, 2445, 2447, 2447, 2447,
-     2448, 2448, 2448, 2301, 2301, 2301, 2302, 2302, 2302, 2305,
-     2305, 2305, 2451, 2451, 2451, 2309, 2309, 2309, 2310, 2310,
-     2310, 2312, 2312, 2312, 2313, 2313, 2313, 2458, 2458, 2458,
-     2460, 2460, 2460, 1221, 1221, 1221, 2462, 2462, 2462, 2321,
-     2321, 2321, 1150, 2322, 1150, 2459, 2323, 1230, 1230, 1230,
-     1150, 1223, 1150, 2463, 1240, 1240, 1240, 1248, 1248, 1248,
-     2327, 2327, 2327, 1150, 2328, 1232, 3449, 2329, 2467, 2467,
-
-     2467, 1150, 1242, 3450, 1150, 1250, 2335, 2335, 2335, 3437,
-     2336, 1150, 3448, 2337, 3463, 1150, 2468, 2474, 2474, 2474,
-     3432, 2465, 2342, 2342, 2342, 2482, 2482, 2482, 2464, 2461,
-     3438, 2479, 2479, 2479, 2475, 2480, 3442, 1150, 2481, 2343,
-     2345, 2345, 2345, 2483, 2491, 2491, 2491, 1150, 2466, 1329,
-     1329, 1329, 2493, 2493, 2493, 2495, 2495, 2495, 2346, 2358,
-     2358, 2358, 3435, 2359, 1686, 1150, 2360, 1331, 1685, 3464,
-     2494, 1150, 2496, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 2505, 2505, 2505, 1353, 1353, 1353, 1150, 1150,
-     3476, 3466, 1150, 3476, 3436, 1150, 3476, 1683, 1150, 2506,
-
-     1150, 2497, 3445, 1355, 1361, 1361, 1361, 1150, 3446, 2492,
-     2509, 2509, 2509, 1373, 1373, 1373, 2515, 2515, 2515, 2377,
-     2377, 2377, 1363, 2378, 1681, 3453, 2379, 2510, 2498, 3454,
-     2504, 1375, 1394, 1394, 1394, 3443, 3455, 2499, 2381, 2381,
-     2381, 2382, 2382, 2382, 3444, 2507, 1150, 2517, 2517, 2517,
-     1396, 2518, 1150, 3459, 2519, 2520, 2520, 2520, 2383, 3476,
-     3476, 3476, 1673, 1150, 2511, 3476, 3476, 3476, 2508, 2524,
-     2524, 2524, 2521, 2526, 2526, 2526, 3476, 2527, 2527, 2527,
-     1150, 1150, 3476, 3476, 3476, 3476, 1670, 2525, 2390, 2390,
-     2390, 2516, 2391, 3451, 2528, 2392, 2394, 2394, 2394, 3452,
-
-     3476, 2398, 2398, 2398, 2400, 2400, 2400, 1661, 2401, 3460,
-     2522, 2402, 1659, 1658, 2395, 3457, 2523, 1656, 3461, 2399,
-     2533, 2533, 2533, 2405, 2405, 2405, 1655, 2406, 1150, 1654,
-     2407, 1651, 1468, 1468, 1468, 2413, 2413, 2413, 2534, 2414,
-     1150, 1650, 2415, 1486, 1486, 1486, 2427, 2427, 2427, 2529,
-     1470, 2440, 2440, 2440, 2441, 2441, 2441, 2567, 2567, 2567,
-     1150, 1488, 1648, 3458, 1150, 2445, 2445, 2445, 2447, 2447,
-     2447, 2448, 2448, 2448, 2451, 2451, 2451, 3462, 2536, 2573,
-     2573, 2573, 2458, 2458, 2458, 2460, 2460, 2460, 2577, 2577,
-     2577, 1646, 2462, 2462, 2462, 2579, 2579, 2579, 1150, 2580,
-
-     2459, 3456, 2581, 1150, 2549, 1645, 2578, 1643, 2550, 2463,
-     2582, 2582, 2582, 1240, 1240, 1240, 1248, 1248, 1248, 2467,
-     2467, 2467, 2474, 2474, 2474, 2591, 2591, 2591, 2583, 2592,
-     3467, 1242, 2593, 1150, 1250, 3468, 1642, 2468, 1150, 2475,
-     2595, 2595, 2595, 2479, 2479, 2479, 1150, 2480, 1638, 1637,
-     2481, 2482, 2482, 2482, 2606, 2606, 2606, 2596, 2491, 2491,
-     2491, 1329, 1329, 1329, 2493, 2493, 2493, 1636, 1150, 2483,
-     3471, 2607, 2495, 2495, 2495, 1635, 3473, 2584, 3472, 1331,
-     1625, 3469, 2494, 2585, 2609, 2609, 2609, 1150, 2610, 2496,
-     1623, 2611, 2617, 2617, 2617, 2505, 2505, 2505, 2619, 2619,
-
-     2619, 1621, 2620, 1620, 1619, 2621, 2622, 2622, 2622, 2618,
-     1618, 1611, 2506, 1361, 1361, 1361, 3470, 1610, 2608, 2509,
-     2509, 2509, 1608, 1607, 2623, 2625, 2625, 2625, 1606, 2626,
-     1603, 1363, 2627, 2628, 2628, 2628, 2510, 2632, 2632, 2632,
-     2515, 2515, 2515, 2634, 2634, 2634, 2517, 2517, 2517, 1602,
-     2518, 2629, 1594, 2519, 2633, 2520, 2520, 2520, 2636, 2636,
-     2636, 2635, 2637, 1593, 1592, 2638, 2639, 2639, 2639, 2641,
-     2641, 2641, 2521, 1591, 2624, 2524, 2524, 2524, 2526, 2526,
-     2526, 1590, 1589, 2640, 1588, 1587, 2642, 2527, 2527, 2527,
-     2643, 2643, 2643, 2525, 2644, 1586, 1580, 2645, 3476, 3476,
-
-     3476, 2533, 2533, 2533, 2528, 1468, 1468, 1468, 1486, 1486,
-     1486, 2567, 2567, 2567, 1579, 3476, 2682, 2682, 2682, 2534,
-     2573, 2573, 2573, 1470, 1578, 1577, 1488, 2689, 2689, 2689,
-     2577, 2577, 2577, 2579, 2579, 2579, 1575, 2580, 1574, 1573,
-     2581, 2582, 2582, 2582, 2690, 1240, 1240, 1240, 2578, 1248,
-     1248, 1248, 1572, 2646, 1557, 2696, 2696, 2696, 1556, 2583,
-     2716, 2716, 2716, 1242, 2595, 2595, 2595, 1250, 2664, 1551,
-     1550, 2651, 2697, 2591, 2591, 2591, 1548, 2592, 2717, 1547,
-     2593, 2596, 2700, 2700, 2700, 1545, 2701, 1541, 1540, 2702,
-     2711, 2711, 2711, 2606, 2606, 2606, 2713, 2713, 2713, 1536,
-
-     2714, 1535, 1534, 2715, 1533, 1532, 2691, 2712, 1531, 1530,
-     2607, 1529, 2609, 2609, 2609, 2692, 2610, 1528, 1526, 2611,
-     2617, 2617, 2617, 2721, 2721, 2721, 1525, 2722, 1524, 1523,
-     2723, 2619, 2619, 2619, 1522, 2620, 1520, 2618, 2621, 2622,
-     2622, 2622, 1361, 1361, 1361, 2625, 2625, 2625, 1519, 2626,
-     1518, 1517, 2627, 2628, 2628, 2628, 1514, 2623, 1513, 1512,
-     1363, 2732, 2732, 2732, 2632, 2632, 2632, 1511, 2734, 2734,
-     2734, 2629, 2735, 1510, 1509, 2736, 1508, 1507, 2733, 1505,
-     1504, 2633, 2634, 2634, 2634, 2636, 2636, 2636, 1503, 2637,
-     1502, 1501, 2638, 2639, 2639, 2639, 2641, 2641, 2641, 1500,
-
-     2635, 2737, 2737, 2737, 2730, 2738, 1499, 1496, 2739, 1495,
-     2640, 1494, 1493, 2642, 2740, 2740, 2740, 1492, 2741, 1491,
-     1150, 2742, 2643, 2643, 2643, 1485, 2644, 1484, 1483, 2645,
-     3476, 3476, 3476, 2750, 2750, 2750, 2752, 2752, 2752, 1468,
-     1468, 1468, 2757, 2757, 2757, 1478, 1477, 3476, 1473, 1467,
-     2751, 1466, 1462, 2753, 2758, 2758, 2758, 1470, 1486, 1486,
-     1486, 2787, 2787, 2787, 2682, 2682, 2682, 2791, 2791, 2791,
-     1457, 2759, 2689, 2689, 2689, 1453, 1488, 2794, 2794, 2794,
-     1452, 2795, 1444, 1430, 2796, 1240, 1240, 1240, 1429, 2690,
-     1428, 2749, 1425, 1248, 1248, 1248, 2801, 2801, 2801, 2696,
-
-     2696, 2696, 1419, 1242, 1414, 2803, 2803, 2803, 1410, 2804,
-     2756, 1250, 2805, 2802, 1405, 1404, 2697, 1403, 2770, 2806,
-     2806, 2806, 2700, 2700, 2700, 1402, 2701, 1401, 1400, 2702,
-     2816, 2816, 2816, 2711, 2711, 2711, 2807, 1399, 2819, 2819,
-     2819, 1398, 2820, 1393, 2798, 2821, 1392, 2817, 1387, 1386,
-     2712, 1380, 2797, 2713, 2713, 2713, 1377, 2714, 1372, 1371,
-     2715, 2716, 2716, 2716, 2823, 2823, 2823, 2721, 2721, 2721,
-     1366, 2722, 1365, 1360, 2723, 1349, 2818, 1344, 1343, 2717,
-     1342, 2824, 2832, 2832, 2832, 2732, 2732, 2732, 2835, 2835,
-     2835, 1338, 2836, 1333, 1322, 2837, 1321, 2734, 2734, 2734,
-
-     2833, 2735, 2733, 1315, 2736, 2737, 2737, 2737, 1314, 2738,
-     1313, 1309, 2739, 2740, 2740, 2740, 1308, 2741, 1307, 1302,
-     2742, 3476, 3476, 3476, 2750, 2750, 2750, 2851, 2851, 2851,
-     1290, 2852, 1289, 1288, 2853, 2752, 2752, 2752, 3476, 1287,
-     1286, 2751, 2854, 2854, 2854, 1285, 2855, 1284, 1283, 2856,
-     1282, 1281, 2753, 2857, 2857, 2857, 2859, 2859, 2859, 1468,
-     1468, 1468, 2757, 2757, 2757, 2758, 2758, 2758, 1275, 1268,
-     2858, 1229, 1225, 2860, 1486, 1486, 1486, 1470, 2876, 2876,
-     2876, 2850, 2759, 2862, 2862, 2862, 1220, 2863, 1219, 1207,
-     2864, 1206, 1488, 1205, 1204, 2877, 1708, 2787, 2787, 2787,
-
-     2891, 2891, 2891, 2791, 2791, 2791, 2894, 2894, 2894, 2794,
-     2794, 2794, 1203, 2795, 1202, 1201, 2796, 1240, 1240, 1240,
-     1200, 2861, 2901, 2901, 2901, 2873, 2801, 2801, 2801, 2905,
-     2905, 2905, 1199, 2906, 1198, 1242, 2907, 2803, 2803, 2803,
-     2902, 2804, 1197, 2802, 2805, 2806, 2806, 2806, 2908, 2908,
-     2908, 1196, 2909, 1195, 1194, 2910, 2816, 2816, 2816, 2919,
-     2919, 2919, 2807, 2920, 1191, 1190, 2921, 2819, 2819, 2819,
-     1189, 2820, 1188, 2817, 2821, 2823, 2823, 2823, 2924, 2924,
-     2924, 1187, 2925, 2900, 1186, 2926, 2832, 2832, 2832, 2835,
-     2835, 2835, 2824, 2836, 1185, 1184, 2837, 2947, 2947, 2947,
-
-     1183, 2851, 2851, 2851, 2833, 2852, 1180, 1179, 2853, 2854,
-     2854, 2854, 1178, 2855, 2948, 1177, 2856, 2857, 2857, 2857,
-     2953, 2953, 2953, 1176, 2954, 1175, 1174, 2955, 2859, 2859,
-     2859, 2956, 2956, 2956, 2858, 2957, 1173, 1172, 2958, 1468,
-     1468, 1468, 2862, 2862, 2862, 2860, 2863, 1171, 1164, 2864,
-     1486, 1486, 1486, 2970, 2970, 2970, 1160, 1470, 2876, 2876,
-     2876, 1159, 2972, 2972, 2972, 1158, 2973, 1157, 1488, 2974,
-     2971, 1708, 2983, 2983, 2983, 2877, 1708, 2891, 2891, 2891,
-     1708, 2984, 2984, 2984, 2985, 2985, 2985, 2894, 2894, 2894,
-     2959, 2986, 2986, 2986, 1240, 1240, 1240, 1156, 1153, 2968,
-
-     2901, 2901, 2901, 2905, 2905, 2905, 1151, 2906, 1150, 1148,
-     2907, 1146, 1242, 2908, 2908, 2908, 1145, 2909, 2902, 1144,
-     2910, 2994, 2994, 2994, 2919, 2919, 2919, 1143, 2920, 1142,
-     1139, 2921, 3004, 3004, 3004, 2924, 2924, 2924, 2995, 2925,
-     1136, 1134, 2926, 1132, 1131, 2991, 3006, 3006, 3006, 3005,
-     2947, 2947, 2947, 3025, 3025, 3025, 1128, 3026, 1127, 1125,
-     3027, 1122, 1121, 3007, 2953, 2953, 2953, 2948, 2954, 1120,
-     1116, 2955, 2956, 2956, 2956, 1115, 2957, 1113, 1112, 2958,
-     3032, 3032, 3032, 1486, 1486, 1486, 2970, 2970, 2970, 3042,
-     3042, 3042, 1111, 3043, 1110, 1108, 3044, 1107, 3033, 1106,
-
-     1105, 1488, 1104, 2971, 1708, 1103, 1100, 1708, 2972, 2972,
-     2972, 1099, 2973, 1097, 1094, 2974, 2983, 2983, 2983, 2984,
-     2984, 2984, 2985, 2985, 2985, 1093, 1708, 2986, 2986, 2986,
-     3057, 3057, 3057, 3061, 3061, 3061, 1091, 3062, 1090, 1089,
-     3063, 1088, 2994, 2994, 2994, 3064, 3064, 3064, 3058, 3040,
-     1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 2995,
-     1087, 1706, 3065, 3004, 3004, 3004, 1706, 1706, 1706, 1708,
-     1706, 3071, 3071, 3071, 1083, 3072, 1081, 1080, 3073, 1079,
-     3005, 3074, 3074, 3074, 1077, 3075, 1076, 1075, 3076, 3006,
-     3006, 3006, 3032, 3032, 3032, 1706, 1706, 1706, 1706, 1706,
-
-     1706, 1706, 1706, 1706, 1706, 1706, 3007, 1072, 1706, 1071,
-     3033, 1070, 1069, 1706, 1706, 1706, 1708, 1706, 3025, 3025,
-     3025, 1067, 3026, 1066, 1065, 3027, 3104, 3104, 3104, 3042,
-     3042, 3042, 1063, 3043, 1062, 1061, 3044, 1059, 1056, 3057,
-     3057, 3057, 1706, 1706, 3105, 1052, 1051, 1708, 1706, 1706,
-     1706, 1706, 1706, 3112, 1706, 1706, 1706, 3058, 1049, 1706,
-     3064, 3064, 3064, 1048, 1706, 1706, 1706, 1708, 1706, 3061,
-     3061, 3061, 1047, 3062, 1044, 1043, 3063, 3065, 3131, 3131,
-     3131, 1042, 3132, 1040, 1039, 3133, 3104, 3104, 3104, 3158,
-     3158, 3158, 1033, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
-
-     1706, 1706, 1706, 3112, 3105, 1030, 1706, 1708, 1709, 1028,
-     1027, 1706, 1706, 1706, 1708, 1706, 3071, 3071, 3071, 1026,
-     3072, 1021, 1020, 3073, 3074, 3074, 3074, 1018, 3075, 1017,
-     1013, 3076, 3167, 3167, 3167, 3169, 3169, 3169, 1011, 1010,
-     1706, 1706, 1009, 3131, 3131, 3131, 1008, 3132, 1007, 3168,
-     3133, 1006, 3170, 3179, 3179, 3179, 3187, 3187, 3187, 3195,
-     3195, 3195, 3158, 3158, 3158, 3167, 3167, 3167, 1005, 1004,
-     3180, 1003, 1002, 3188, 3203, 3203, 3203, 1150, 3204, 1001,
-     1708, 3205, 3168, 3169, 3169, 3169, 3206, 3206, 3206,  998,
-     3207,  995,  994, 3208, 3179, 3179, 3179, 3217, 3217, 3217,
-
-     3170, 3218,  993,  991, 3219, 3187, 3187, 3187, 3226, 3226,
-     3226, 3180, 3227, 1911,  990, 3228, 3195, 3195, 3195, 3203,
-     3203, 3203, 3188, 3204,  989,  988, 3205,  987, 3206, 3206,
-     3206,  982, 3207,  980, 1150, 3208, 3217, 3217, 3217,  979,
-     3218,  978,  976, 3219, 3226, 3226, 3226,  975, 3227,  974,
-      973, 3228,  971, 3235, 3356, 3356, 3356, 3356, 3356, 3356,
-      968, 3365,  967,  965, 3366, 3474, 3474, 3474, 3474, 3474,
-     3474,  964, 1150,  963,  961, 1150,  960,  959,  958,  955,
-      954,  953,  950, 3475,  949,  948, 3475,  248,  248,  248,
+     1795, 1795, 1795, 3017, 1796, 1788, 3020, 1797, 1772, 1293,
+
+     3021, 3027, 1300, 3028, 1600, 1798, 1798, 1798, 1604, 1604,
+     1604, 1802, 1802, 1802, 3029, 1803, 3002, 3030, 1804, 3031,
+     1806, 1806, 1806, 1799, 3038, 1605, 1316, 1316, 1316, 3039,
+     1612, 1612, 1612, 1329, 1329, 1329, 1794, 1807, 1812, 1812,
+     1812, 3040, 1813, 3041, 1318, 1814, 1793, 1613, 1615, 1615,
+     1615, 1331, 1816, 1816, 1816, 3042, 1817, 3043, 3044, 1818,
+     1334, 1334, 1334, 3045, 3046, 1616, 1345, 1345, 1345, 1353,
+     1353, 1353, 1827, 1827, 1827, 1745, 1745, 1745, 1336, 1361,
+     1361, 1361, 3047, 3048, 1347, 2408, 2409, 1355, 2410, 1828,
+     3049, 3050, 1809, 1627, 1627, 1627, 2411, 1363, 3051, 1815,
+
+     1830, 1830, 1830, 2412, 1831, 3052, 3053, 1832, 3054, 3055,
+     1628, 1367, 1367, 1367, 1631, 1631, 1631, 3056, 1819, 3057,
+     1835, 1835, 1835, 1824, 1836, 3058, 1826, 1837, 3059, 1369,
+     1829, 1632, 1373, 1373, 1373, 1841, 1841, 1841, 1639, 1639,
+     1639, 3060, 1640, 3061, 3062, 1641, 1845, 1845, 1845, 3063,
+     1375, 3064, 1842, 3069, 1388, 1388, 1388, 1394, 1394, 1394,
+     1652, 1652, 1652, 1846, 3072, 1150, 1856, 1856, 1856, 3077,
+     1857, 1834, 1390, 1858, 3074, 1396, 3069, 1653, 1406, 1406,
+     1406, 1864, 1864, 1864, 1415, 1415, 1415, 1662, 1662, 1662,
+     3070, 1663, 3078, 1839, 1664, 3075, 1408, 3082, 1865, 1665,
+
+     1665, 1665, 1417, 1868, 1868, 1868, 3083, 1869, 3076, 3084,
+     1870, 3067, 3085, 1667, 1667, 1667, 1666, 1668, 1848, 3086,
+     1669, 3087, 3088, 1851, 1671, 1671, 1671, 1862, 1872, 1872,
+     1872, 3095, 1873, 3096, 3089, 1874, 1431, 1431, 1431, 3097,
+     3102, 1672, 3103, 1675, 1675, 1675, 1866, 1676, 3104, 3105,
+     1677, 1678, 1678, 1678, 1433, 1679, 3106, 3107, 1680, 1440,
+     1440, 1440, 1448, 1448, 1448, 1458, 1458, 1458, 1886, 1886,
+     1886, 1691, 1691, 1691, 1888, 1888, 1888, 1442, 1889, 3108,
+     1450, 1890, 3109, 1460, 3110, 1887, 1876, 3111, 1692, 1468,
+     1468, 1468, 1695, 1695, 1695, 1893, 1893, 1893, 3112, 1894,
+
+     3113, 3114, 1895, 1479, 1479, 1479, 3090, 1470, 1150, 1696,
+     1701, 1701, 1701, 1900, 1900, 1900, 3117, 1901, 3091, 3117,
+     1902, 1481, 1903, 1903, 1903, 1878, 3120, 1702, 1880, 1884,
+     1486, 1486, 1486, 1707, 1707, 1707, 1746, 1746, 1746, 1904,
+     1939, 1939, 1939, 1942, 1942, 1942, 1708, 1709, 1488, 3115,
+     3121, 1708, 1898, 1891, 1927, 1927, 1927, 1939, 1939, 1939,
+     1944, 1944, 1944, 1946, 1946, 1946, 3437, 3437, 3437, 1215,
+     1215, 1215, 3124, 1757, 1757, 1757, 3125, 1945, 3132, 1905,
+     1947, 3122, 3098, 3437, 1907, 2413, 2414, 1217, 2415, 1943,
+     1758, 1951, 1951, 1951, 3099, 1952, 2416, 3133, 1953, 3123,
+
+     3134, 1908, 3137, 2417, 1940, 1221, 1221, 1221, 1230, 1230,
+     1230, 1958, 1958, 1958, 1960, 1960, 1960, 3100, 1940, 3138,
+     3139, 1928, 3144, 1223, 3147, 3150, 1232, 3151, 1959, 3101,
+     1948, 1961, 1240, 1240, 1240, 3069, 1949, 1248, 1248, 1248,
+     1964, 1964, 1964, 3437, 3437, 3437, 1769, 1769, 1769, 3070,
+     1242, 1970, 1970, 1970, 3152, 1250, 1957, 1965, 3153, 3069,
+     3437, 3154, 3155, 1770, 1954, 1967, 1967, 1967, 1971, 1968,
+     3072, 3117, 1969, 1264, 1264, 1264, 1774, 1774, 1774, 1974,
+     1974, 1974, 3157, 1975, 3135, 3117, 1976, 1977, 1977, 1977,
+     3079, 1266, 3158, 1775, 1982, 1982, 1982, 1962, 1787, 1787,
+
+     1787, 1966, 1963, 3136, 1978, 1778, 1778, 1778, 3080, 1779,
+     3159, 1983, 1780, 3160, 3161, 1788, 1987, 1987, 1987, 3126,
+     1988, 3081, 3162, 1989, 1991, 1991, 1991, 1291, 1291, 1291,
+     1298, 1298, 1298, 1972, 3127, 1795, 1795, 1795, 3142, 1796,
+     3163, 1992, 1797, 3170, 3171, 1293, 3172, 3145, 1300, 1798,
+     1798, 1798, 1802, 1802, 1802, 3173, 1803, 3143, 3174, 1804,
+     1999, 1999, 1999, 1806, 1806, 1806, 3146, 1799, 2001, 2001,
+     2001, 3175, 2002, 3176, 3177, 2003, 3181, 2000, 3182, 3183,
+     1807, 2005, 2005, 2005, 3184, 1996, 2007, 2007, 2007, 3185,
+     1812, 1812, 1812, 1995, 1813, 3186, 3190, 1814, 3191, 2006,
+
+     1329, 1329, 1329, 1816, 1816, 1816, 3192, 1817, 3193, 3194,
+     1818, 1334, 1334, 1334, 2015, 2015, 2015, 3195, 1331, 1353,
+     1353, 1353, 1827, 1827, 1827, 3197, 2019, 2019, 2019, 1336,
+     2020, 3198, 2016, 2021, 1361, 1361, 1361, 1355, 3199, 1828,
+     1830, 1830, 1830, 3200, 1831, 3201, 2009, 1832, 1367, 1367,
+     1367, 3202, 1363, 1835, 1835, 1835, 3203, 1836, 3208, 3209,
+     1837, 3210, 2025, 2025, 2025, 2018, 1369, 1373, 1373, 1373,
+     1841, 1841, 1841, 2029, 2029, 2029, 3211, 2030, 2010, 2026,
+     2031, 2032, 2032, 2032, 3204, 1375, 3212, 1842, 1845, 1845,
+     1845, 3213, 2022, 2035, 2035, 2035, 3205, 2036, 2033, 3214,
+
+     2037, 2039, 2039, 2039, 3215, 1846, 1394, 1394, 1394, 1856,
+     1856, 1856, 3216, 1857, 2024, 3217, 1858, 3218, 3219, 2040,
+     1406, 1406, 1406, 3220, 1396, 1864, 1864, 1864, 2053, 2053,
+     2053, 2027, 2054, 3221, 3206, 2055, 3222, 3223, 1408, 2056,
+     2056, 2056, 1865, 1868, 1868, 1868, 3207, 1869, 3225, 3226,
+     1870, 3227, 1872, 1872, 1872, 1150, 1873, 2057, 2043, 1874,
+     1431, 1431, 1431, 1440, 1440, 1440, 1448, 1448, 1448, 3228,
+     3229, 2051, 2066, 2066, 2066, 3437, 3437, 3437, 1433, 3230,
+     3224, 1442, 3231, 3232, 1450, 2069, 2069, 2069, 3233, 2067,
+     3234, 3235, 3437, 1458, 1458, 1458, 1886, 1886, 1886, 2073,
+
+     2073, 2073, 2070, 2074, 3236, 3237, 2075, 3238, 1888, 1888,
+     1888, 1460, 1889, 1887, 2063, 1890, 3239, 2065, 1468, 1468,
+     1468, 2061, 1893, 1893, 1893, 3240, 1894, 3241, 3242, 1895,
+     1479, 1479, 1479, 1903, 1903, 1903, 1470, 2097, 2097, 2097,
+     2071, 2068, 1900, 1900, 1900, 3243, 1901, 3244, 1481, 1902,
+     1904, 2090, 2090, 2090, 2098, 2091, 3245, 3246, 2092, 1486,
+     1486, 1486, 2106, 2106, 2106, 2076, 1922, 1922, 1922, 2114,
+     2114, 2114, 1927, 1927, 1927, 3247, 3248, 1488, 2115, 2115,
+     2115, 2080, 1930, 1930, 1930, 1939, 1939, 1939, 2126, 2126,
+     2126, 1942, 1942, 1942, 1944, 1944, 1944, 2129, 2129, 2129,
+
+     3250, 2130, 1150, 3251, 2131, 1946, 1946, 1946, 3252, 3253,
+     2093, 1945, 2132, 2132, 2132, 3254, 2133, 3255, 3256, 2134,
+     3257, 3249, 1947, 1215, 1215, 1215, 1951, 1951, 1951, 3258,
+     1952, 3259, 3260, 1953, 1221, 1221, 1221, 2140, 2140, 2140,
+     3261, 1217, 1230, 1230, 1230, 1958, 1958, 1958, 3262, 2143,
+     2143, 2143, 1223, 2144, 2141, 3263, 2145, 1960, 1960, 1960,
+     1232, 3264, 1959, 2146, 2146, 2146, 3265, 2147, 3266, 3267,
+     2148, 1964, 1964, 1964, 1961, 1240, 1240, 1240, 1248, 1248,
+     1248, 2154, 2154, 2154, 3268, 2138, 3269, 3270, 1965, 2136,
+     2151, 2151, 2151, 1242, 2152, 3271, 1250, 2153, 2155, 3273,
+
+     1967, 1967, 1967, 2142, 1968, 3274, 3275, 1969, 1970, 1970,
+     1970, 2156, 2156, 2156, 3276, 2157, 3277, 3278, 2158, 1264,
+     1264, 1264, 1974, 1974, 1974, 1971, 1975, 3279, 3280, 1976,
+     1977, 1977, 1977, 1150, 2161, 2161, 2161, 1266, 2162, 3281,
+     2149, 2163, 3282, 2150, 1982, 1982, 1982, 1978, 2167, 2167,
+     2167, 3283, 2168, 3272, 3284, 2169, 2170, 2170, 2170, 3285,
+     3286, 1983, 1987, 1987, 1987, 3287, 1988, 3288, 3289, 1989,
+     2159, 3290, 3291, 2171, 1991, 1991, 1991, 2175, 2175, 2175,
+     3292, 2176, 3294, 3295, 2177, 1291, 1291, 1291, 1298, 1298,
+     1298, 1992, 1999, 1999, 1999, 2184, 2184, 2184, 1150, 2185,
+
+     3296, 3297, 2186, 1293, 3293, 3298, 1300, 3299, 3300, 2000,
+     2001, 2001, 2001, 3301, 2002, 3302, 3303, 2003, 3304, 2005,
+     2005, 2005, 2007, 2007, 2007, 1329, 1329, 1329, 1334, 1334,
+     1334, 2192, 2192, 2192, 3305, 3306, 2180, 2006, 2015, 2015,
+     2015, 2181, 3307, 1331, 1150, 3309, 1336, 3310, 2193, 1353,
+     1353, 1353, 3311, 2019, 2019, 2019, 2016, 2020, 3308, 3312,
+     2021, 1361, 1361, 1361, 2201, 2201, 2201, 1355, 2025, 2025,
+     2025, 1373, 1373, 1373, 2032, 2032, 2032, 2194, 2190, 1363,
+     3313, 3314, 2202, 2189, 3315, 2026, 2203, 2203, 2203, 1375,
+     2204, 2033, 3316, 2205, 3318, 2029, 2029, 2029, 2198, 2030,
+
+     3319, 3320, 2031, 3321, 2208, 2208, 2208, 2199, 2209, 3322,
+     3323, 2210, 2035, 2035, 2035, 3324, 2036, 3325, 2206, 2037,
+     2039, 2039, 2039, 2214, 2214, 2214, 1394, 1394, 1394, 2217,
+     2217, 2217, 2219, 2219, 2219, 1406, 1406, 1406, 2040, 3328,
+     2215, 2053, 2053, 2053, 1396, 2054, 3329, 3330, 2055, 2056,
+     2056, 2056, 3331, 1408, 2227, 2227, 2227, 1431, 1431, 1431,
+     2232, 2232, 2232, 1448, 1448, 1448, 3332, 2057, 2066, 2066,
+     2066, 2228, 2236, 2236, 2236, 1433, 2237, 3333, 2233, 2238,
+     1722, 1450, 2239, 2239, 2239, 2067, 3344, 2216, 2069, 2069,
+     2069, 2242, 2242, 2242, 1150, 2243, 1150, 1150, 2244, 2240,
+
+     2224, 1458, 1458, 1458, 1150, 2070, 2246, 2246, 2246, 1150,
+     2073, 2073, 2073, 1150, 2074, 1150, 2230, 2075, 1719, 1460,
+     1468, 1468, 1468, 2247, 2253, 2253, 2253, 2235, 2241, 2255,
+     2255, 2255, 2090, 2090, 2090, 1718, 2091, 3352, 1470, 2092,
+     3334, 3340, 2254, 1486, 1486, 1486, 2256, 2097, 2097, 2097,
+     3345, 3335, 2248, 3341, 2245, 2271, 2271, 2271, 1150, 2272,
+     3348, 1488, 2273, 1717, 2098, 2274, 2274, 2274, 2279, 2279,
+     2279, 1150, 1150, 2249, 2280, 2280, 2280, 2106, 2106, 2106,
+     2282, 2282, 2282, 2287, 2287, 2287, 2114, 2114, 2114, 2267,
+     2115, 2115, 2115, 2288, 2288, 2288, 2291, 2291, 2291, 2295,
+
+     2295, 2295, 2296, 2296, 2296, 2298, 2298, 2298, 2126, 2126,
+     2126, 2299, 2299, 2299, 2129, 2129, 2129, 3346, 2130, 3336,
+     3337, 2131, 2132, 2132, 2132, 1150, 2133, 1150, 1150, 2134,
+     1215, 1215, 1215, 1221, 1221, 1221, 2140, 2140, 2140, 2289,
+     2307, 2307, 2307, 1150, 2308, 1150, 3342, 2309, 1217, 1150,
+     1150, 1223, 1150, 2141, 1230, 1230, 1230, 2300, 2143, 2143,
+     2143, 3347, 2144, 1150, 3350, 2145, 2146, 2146, 2146, 1150,
+     2147, 3368, 1232, 2148, 1240, 1240, 1240, 1248, 1248, 1248,
+     3354, 2303, 2151, 2151, 2151, 1150, 2152, 3355, 1150, 2153,
+     1716, 3338, 1242, 2305, 2311, 1250, 1150, 3339, 2154, 2154,
+
+     2154, 2313, 2313, 2313, 3353, 2314, 1150, 1715, 2315, 1264,
+     1264, 1264, 1150, 2312, 2310, 2155, 2156, 2156, 2156, 1150,
+     2157, 3362, 3351, 2158, 2161, 2161, 2161, 1266, 2162, 3374,
+     1150, 2163, 2167, 2167, 2167, 3349, 2168, 3363, 3360, 2169,
+     2170, 2170, 2170, 2321, 2321, 2321, 1150, 2322, 1150, 3358,
+     2323, 2175, 2175, 2175, 1150, 2176, 3359, 2171, 2177, 2328,
+     2328, 2328, 1291, 1291, 1291, 2331, 2331, 2331, 1150, 3343,
+     2184, 2184, 2184, 1150, 2185, 2316, 2329, 2186, 1150, 1714,
+     1293, 3375, 1150, 2332, 1329, 1329, 1329, 1334, 1334, 1334,
+     2192, 2192, 2192, 2340, 2340, 2340, 3380, 2341, 1150, 1150,
+
+     2342, 1713, 1331, 3364, 1150, 1336, 1712, 2193, 1150, 1353,
+     1353, 1353, 1361, 1361, 1361, 2201, 2201, 2201, 2203, 2203,
+     2203, 1150, 2204, 1711, 3356, 2205, 2330, 1355, 3357, 1150,
+     1363, 3361, 3366, 2202, 1373, 1373, 1373, 3376, 2338, 2337,
+     2208, 2208, 2208, 3365, 2209, 3400, 1150, 2210, 2214, 2214,
+     2214, 3394, 1375, 2355, 2355, 2355, 3372, 2356, 1150, 1150,
+     2357, 1394, 1394, 1394, 1150, 2215, 2217, 2217, 2217, 2359,
+     2359, 2359, 3369, 1150, 2348, 2347, 2219, 2219, 2219, 1396,
+     2360, 2360, 2360, 3437, 3437, 3437, 1150, 2350, 3437, 3437,
+     3437, 3437, 3437, 3437, 1406, 1406, 1406, 2361, 3367, 1710,
+
+     3437, 2227, 2227, 2227, 3370, 3437, 3377, 1150, 3437, 2368,
+     2368, 2368, 1408, 2369, 3401, 1150, 2370, 1150, 2228, 2372,
+     2372, 2372, 2232, 2232, 2232, 2358, 2376, 2376, 2376, 2236,
+     2236, 2236, 3371, 2237, 2362, 1150, 2238, 2373, 1703, 1700,
+     2233, 2239, 2239, 2239, 2377, 1150, 3386, 2378, 2378, 2378,
+     2364, 2379, 2363, 3382, 2380, 1458, 1458, 1458, 2240, 2365,
+     2242, 2242, 2242, 1150, 2243, 1150, 1150, 2244, 2246, 2246,
+     2246, 1150, 3378, 1460, 2383, 2383, 2383, 1698, 2384, 1150,
+     3373, 2385, 1468, 1468, 1468, 2247, 2253, 2253, 2253, 3395,
+     2255, 2255, 2255, 1150, 2391, 2391, 2391, 1150, 2392, 1150,
+
+     1470, 2393, 3379, 3384, 2254, 3381, 2382, 2256, 1486, 1486,
+     1486, 2405, 2405, 2405, 2271, 2271, 2271, 3383, 2272, 1150,
+     1150, 2273, 2274, 2274, 2274, 3392, 1488, 3390, 3387, 1150,
+     2418, 2418, 2418, 2387, 2419, 2419, 2419, 2279, 2279, 2279,
+     2280, 2280, 2280, 2282, 2282, 2282, 2423, 2423, 2423, 2425,
+     2425, 2425, 2426, 2426, 2426, 3402, 3385, 2404, 2287, 2287,
+     2287, 2288, 2288, 2288, 2291, 2291, 2291, 2429, 2429, 2429,
+     2295, 2295, 2295, 2296, 2296, 2296, 2298, 2298, 2298, 2299,
+     2299, 2299, 2436, 2436, 2436, 2438, 2438, 2438, 1221, 1221,
+     1221, 2440, 2440, 2440, 2307, 2307, 2307, 1150, 2308, 3410,
+
+     2437, 2309, 1230, 1230, 1230, 1150, 1223, 1150, 2441, 1240,
+     1240, 1240, 1248, 1248, 1248, 2313, 2313, 2313, 1150, 2314,
+     1232, 3411, 2315, 2445, 2445, 2445, 1150, 1242, 3388, 1150,
+     1250, 2321, 2321, 2321, 3398, 2322, 3389, 1150, 2323, 3391,
+     1150, 2446, 2452, 2452, 2452, 1150, 2443, 2328, 2328, 2328,
+     2460, 2460, 2460, 2442, 2439, 3399, 2457, 2457, 2457, 2453,
+     2458, 1150, 1150, 2459, 2329, 2331, 2331, 2331, 2461, 2465,
+     2465, 2465, 3393, 2444, 1329, 1329, 1329, 2467, 2467, 2467,
+     2469, 2469, 2469, 2332, 2340, 2340, 2340, 3396, 2341, 1694,
+     1150, 2342, 1331, 1690, 3408, 2468, 3403, 2470, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 2475, 2475, 2475,
+     1353, 1353, 1353, 1150, 1150, 3437, 1689, 1150, 3437, 3434,
+     1687, 3437, 1686, 1150, 2476, 1150, 2471, 3406, 1355, 1361,
+     1361, 1361, 1150, 1150, 2466, 2479, 2479, 2479, 1373, 1373,
+     1373, 2485, 2485, 2485, 2355, 2355, 2355, 1363, 2356, 1685,
+     1150, 2357, 2480, 2472, 3407, 2474, 1375, 1394, 1394, 1394,
+     3397, 3412, 2473, 2359, 2359, 2359, 2360, 2360, 2360, 3404,
+     2477, 3405, 2487, 2487, 2487, 1396, 2488, 1150, 3420, 2489,
+     2490, 2490, 2490, 2361, 3437, 3437, 3437, 3414, 1150, 2481,
+     3437, 3437, 3437, 2478, 2494, 2494, 2494, 2491, 2496, 2496,
+
+     2496, 3437, 2497, 2497, 2497, 1150, 1150, 3437, 3437, 3437,
+     3437, 1683, 2495, 2368, 2368, 2368, 2486, 2369, 1150, 2498,
+     2370, 2372, 2372, 2372, 3413, 3437, 2376, 2376, 2376, 2378,
+     2378, 2378, 1681, 2379, 3421, 2492, 2380, 3409, 1673, 2373,
+     1670, 2493, 3426, 3415, 2377, 2503, 2503, 2503, 2383, 2383,
+     2383, 1150, 2384, 3418, 1661, 2385, 1659, 1468, 1468, 1468,
+     2391, 2391, 2391, 2504, 2392, 1150, 1658, 2393, 1486, 1486,
+     1486, 2405, 2405, 2405, 2499, 1470, 2418, 2418, 2418, 2419,
+     2419, 2419, 2537, 2537, 2537, 1150, 1488, 1150, 1150, 1150,
+     2423, 2423, 2423, 2425, 2425, 2425, 2426, 2426, 2426, 2429,
+
+     2429, 2429, 3422, 2506, 2543, 2543, 2543, 2436, 2436, 2436,
+     2438, 2438, 2438, 2547, 2547, 2547, 1656, 2440, 2440, 2440,
+     2549, 2549, 2549, 3419, 2550, 2437, 3416, 2551, 3417, 2519,
+     1655, 2548, 1654, 2520, 2441, 2552, 2552, 2552, 1240, 1240,
+     1240, 1248, 1248, 1248, 2445, 2445, 2445, 2452, 2452, 2452,
+     2561, 2561, 2561, 2553, 2562, 1150, 1242, 2563, 1651, 1250,
+     3434, 1150, 2446, 1150, 2453, 2565, 2565, 2565, 2457, 2457,
+     2457, 1150, 2458, 1150, 1150, 2459, 2460, 2460, 2460, 2574,
+     2574, 2574, 2566, 2465, 2465, 2465, 1329, 1329, 1329, 2467,
+     2467, 2467, 3423, 3424, 2461, 3425, 2575, 2469, 2469, 2469,
+
+     1150, 1650, 2554, 3427, 1331, 3428, 3429, 2468, 2555, 2577,
+     2577, 2577, 1150, 2578, 2470, 1150, 2579, 2583, 2583, 2583,
+     2475, 2475, 2475, 2585, 2585, 2585, 1150, 2586, 1648, 1646,
+     2587, 2588, 2588, 2588, 2584, 1645, 1643, 2476, 1361, 1361,
+     1361, 1642, 1638, 2576, 2479, 2479, 2479, 3432, 3430, 2589,
+     2591, 2591, 2591, 1637, 2592, 1636, 1363, 2593, 2594, 2594,
+     2594, 2480, 2598, 2598, 2598, 2485, 2485, 2485, 2600, 2600,
+     2600, 2487, 2487, 2487, 3431, 2488, 2595, 1150, 2489, 2599,
+     2490, 2490, 2490, 2602, 2602, 2602, 2601, 2603, 1635, 1625,
+     2604, 2605, 2605, 2605, 2607, 2607, 2607, 2491, 1623, 2590,
+
+     2494, 2494, 2494, 2496, 2496, 2496, 1621, 1620, 2606, 3433,
+     1619, 2608, 2497, 2497, 2497, 2609, 2609, 2609, 2495, 2610,
+     1618, 1611, 2611, 3437, 3437, 3437, 2503, 2503, 2503, 2498,
+     1468, 1468, 1468, 1486, 1486, 1486, 2537, 2537, 2537, 1610,
+     3437, 2648, 2648, 2648, 2504, 2543, 2543, 2543, 1470, 1608,
+     1607, 1488, 2655, 2655, 2655, 2547, 2547, 2547, 2549, 2549,
+     2549, 1606, 2550, 1603, 1602, 2551, 2552, 2552, 2552, 2656,
+     1240, 1240, 1240, 2548, 1248, 1248, 1248, 1594, 2612, 1593,
+     2662, 2662, 2662, 1592, 2553, 2682, 2682, 2682, 1242, 2565,
+     2565, 2565, 1250, 2630, 1591, 1590, 2617, 2663, 2561, 2561,
+
+     2561, 1589, 2562, 2683, 1588, 2563, 2566, 2666, 2666, 2666,
+     1587, 2667, 1586, 1580, 2668, 2677, 2677, 2677, 2574, 2574,
+     2574, 2679, 2679, 2679, 1579, 2680, 1578, 1577, 2681, 1575,
+     1574, 2657, 2678, 1573, 1572, 2575, 1557, 2577, 2577, 2577,
+     2658, 2578, 1556, 1551, 2579, 2583, 2583, 2583, 2687, 2687,
+     2687, 1550, 2688, 1548, 1547, 2689, 2585, 2585, 2585, 1545,
+     2586, 1541, 2584, 2587, 2588, 2588, 2588, 1361, 1361, 1361,
+     2591, 2591, 2591, 1540, 2592, 1536, 1535, 2593, 2594, 2594,
+     2594, 1534, 2589, 1533, 1532, 1363, 2698, 2698, 2698, 2598,
+     2598, 2598, 1531, 2700, 2700, 2700, 2595, 2701, 1530, 1529,
+
+     2702, 1528, 1526, 2699, 1525, 1524, 2599, 2600, 2600, 2600,
+     2602, 2602, 2602, 1523, 2603, 1522, 1520, 2604, 2605, 2605,
+     2605, 2607, 2607, 2607, 1519, 2601, 2703, 2703, 2703, 2696,
+     2704, 1518, 1517, 2705, 1514, 2606, 1513, 1512, 2608, 2706,
+     2706, 2706, 1511, 2707, 1510, 1509, 2708, 2609, 2609, 2609,
+     1508, 2610, 1507, 1505, 2611, 3437, 3437, 3437, 2716, 2716,
+     2716, 2718, 2718, 2718, 1468, 1468, 1468, 2723, 2723, 2723,
+     1504, 1503, 3437, 1502, 1501, 2717, 1500, 1499, 2719, 2724,
+     2724, 2724, 1470, 1486, 1486, 1486, 2753, 2753, 2753, 2648,
+     2648, 2648, 2757, 2757, 2757, 1496, 2725, 2655, 2655, 2655,
+
+     1495, 1488, 2760, 2760, 2760, 1494, 2761, 1493, 1492, 2762,
+     1240, 1240, 1240, 1491, 2656, 1150, 2715, 1485, 1248, 1248,
+     1248, 2767, 2767, 2767, 2662, 2662, 2662, 1484, 1242, 1483,
+     2769, 2769, 2769, 1478, 2770, 2722, 1250, 2771, 2768, 1477,
+     1473, 2663, 1467, 2736, 2772, 2772, 2772, 2666, 2666, 2666,
+     1466, 2667, 1462, 1457, 2668, 2677, 2677, 2677, 2783, 2783,
+     2783, 2773, 2784, 1453, 1452, 2785, 2679, 2679, 2679, 2764,
+     2680, 1444, 2678, 2681, 2682, 2682, 2682, 2763, 2787, 2787,
+     2787, 2687, 2687, 2687, 1430, 2688, 1429, 1428, 2689, 2796,
+     2796, 2796, 2683, 1425, 1419, 2788, 2698, 2698, 2698, 2799,
+
+     2799, 2799, 1414, 2800, 1410, 1405, 2801, 2797, 2700, 2700,
+     2700, 1404, 2701, 2699, 1403, 2702, 2703, 2703, 2703, 1402,
+     2704, 1401, 1400, 2705, 2706, 2706, 2706, 1399, 2707, 1398,
+     1393, 2708, 3437, 3437, 3437, 2716, 2716, 2716, 2815, 2815,
+     2815, 1392, 2816, 1387, 1386, 2817, 2718, 2718, 2718, 3437,
+     1380, 1377, 2717, 2818, 2818, 2818, 1372, 2819, 1371, 1366,
+     2820, 1365, 1360, 2719, 2821, 2821, 2821, 2823, 2823, 2823,
+     1468, 1468, 1468, 2723, 2723, 2723, 2724, 2724, 2724, 1349,
+     1344, 2822, 1343, 1342, 2824, 1486, 1486, 1486, 1470, 2840,
+     2840, 2840, 2814, 2725, 2826, 2826, 2826, 1338, 2827, 1333,
+
+     1322, 2828, 1321, 1488, 1315, 1314, 2841, 1708, 2753, 2753,
+     2753, 2855, 2855, 2855, 2757, 2757, 2757, 2858, 2858, 2858,
+     2760, 2760, 2760, 1313, 2761, 1309, 1308, 2762, 1240, 1240,
+     1240, 1307, 2825, 2865, 2865, 2865, 2837, 2767, 2767, 2767,
+     2869, 2869, 2869, 1302, 2870, 1290, 1242, 2871, 2769, 2769,
+     2769, 2866, 2770, 1289, 2768, 2771, 2772, 2772, 2772, 2872,
+     2872, 2872, 1288, 2873, 1287, 1286, 2874, 2783, 2783, 2783,
+     1285, 2784, 1284, 2773, 2785, 2787, 2787, 2787, 2885, 2885,
+     2885, 1283, 2886, 1282, 1281, 2887, 2796, 2796, 2796, 2799,
+     2799, 2799, 2788, 2800, 2864, 1275, 2801, 2908, 2908, 2908,
+
+     1268, 2815, 2815, 2815, 2797, 2816, 1229, 1225, 2817, 2818,
+     2818, 2818, 1220, 2819, 2909, 1219, 2820, 2821, 2821, 2821,
+     2914, 2914, 2914, 1207, 2915, 1206, 1205, 2916, 2823, 2823,
+     2823, 2917, 2917, 2917, 2822, 2918, 1204, 1203, 2919, 1468,
+     1468, 1468, 2826, 2826, 2826, 2824, 2827, 1202, 1201, 2828,
+     1486, 1486, 1486, 2931, 2931, 2931, 1200, 1470, 2840, 2840,
+     2840, 1199, 2933, 2933, 2933, 1198, 2934, 1197, 1488, 2935,
+     2932, 1708, 2944, 2944, 2944, 2841, 1708, 2855, 2855, 2855,
+     1708, 2945, 2945, 2945, 2946, 2946, 2946, 2858, 2858, 2858,
+     2920, 2947, 2947, 2947, 1240, 1240, 1240, 1196, 1195, 2929,
+
+     2865, 2865, 2865, 2869, 2869, 2869, 1194, 2870, 1191, 1190,
+     2871, 1189, 1242, 2872, 2872, 2872, 1188, 2873, 2866, 1187,
+     2874, 2955, 2955, 2955, 2965, 2965, 2965, 2885, 2885, 2885,
+     1186, 2886, 1185, 1184, 2887, 2967, 2967, 2967, 2956, 1183,
+     1180, 2966, 2908, 2908, 2908, 2952, 2986, 2986, 2986, 1179,
+     2987, 1178, 2968, 2988, 2914, 2914, 2914, 1177, 2915, 2909,
+     1176, 2916, 2917, 2917, 2917, 1175, 2918, 1174, 1173, 2919,
+     2993, 2993, 2993, 1486, 1486, 1486, 2931, 2931, 2931, 3003,
+     3003, 3003, 1172, 3004, 1171, 1164, 3005, 1160, 2994, 1159,
+     1158, 1488, 1157, 2932, 1708, 1156, 1153, 1708, 2933, 2933,
+
+     2933, 1151, 2934, 1150, 1148, 2935, 2944, 2944, 2944, 2945,
+     2945, 2945, 2946, 2946, 2946, 1146, 1708, 2947, 2947, 2947,
+     3018, 3018, 3018, 3022, 3022, 3022, 1145, 3023, 1144, 1143,
+     3024, 1142, 2955, 2955, 2955, 3025, 3025, 3025, 3019, 3001,
+     1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 2956,
+     1139, 1706, 3026, 2965, 2965, 2965, 1706, 1706, 1706, 1708,
+     1706, 3032, 3032, 3032, 1136, 3033, 1134, 1132, 3034, 1131,
+     2966, 3035, 3035, 3035, 1128, 3036, 1127, 1125, 3037, 2967,
+     2967, 2967, 2993, 2993, 2993, 1706, 1706, 1706, 1706, 1706,
+     1706, 1706, 1706, 1706, 1706, 1706, 2968, 1122, 1706, 1121,
+
+     2994, 1120, 1116, 1706, 1706, 1706, 1708, 1706, 2986, 2986,
+     2986, 1115, 2987, 1113, 1112, 2988, 3065, 3065, 3065, 3003,
+     3003, 3003, 1111, 3004, 1110, 1108, 3005, 1107, 1106, 3018,
+     3018, 3018, 1706, 1706, 3066, 1105, 1104, 1708, 1706, 1706,
+     1706, 1706, 1706, 3073, 1706, 1706, 1706, 3019, 1103, 1706,
+     3025, 3025, 3025, 1100, 1706, 1706, 1706, 1708, 1706, 3022,
+     3022, 3022, 1099, 3023, 1097, 1094, 3024, 3026, 3092, 3092,
+     3092, 1093, 3093, 1091, 1090, 3094, 3065, 3065, 3065, 3119,
+     3119, 3119, 1089, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
+     1706, 1706, 1706, 3073, 3066, 1088, 1706, 1708, 1709, 1087,
+
+     1083, 1706, 1706, 1706, 1708, 1706, 3032, 3032, 3032, 1081,
+     3033, 1080, 1079, 3034, 3035, 3035, 3035, 1077, 3036, 1076,
+     1075, 3037, 3128, 3128, 3128, 3130, 3130, 3130, 1072, 1071,
+     1706, 1706, 1070, 3092, 3092, 3092, 1069, 3093, 1067, 3129,
+     3094, 1066, 3131, 3140, 3140, 3140, 3148, 3148, 3148, 3156,
+     3156, 3156, 3119, 3119, 3119, 3128, 3128, 3128, 1065, 1063,
+     3141, 1062, 1061, 3149, 3164, 3164, 3164, 1150, 3165, 1059,
+     1708, 3166, 3129, 3130, 3130, 3130, 3167, 3167, 3167, 1056,
+     3168, 1052, 1051, 3169, 3140, 3140, 3140, 3178, 3178, 3178,
+     3131, 3179, 1049, 1048, 3180, 3148, 3148, 3148, 3187, 3187,
+
+     3187, 3141, 3188, 1907, 1047, 3189, 3156, 3156, 3156, 3164,
+     3164, 3164, 3149, 3165, 1044, 1043, 3166, 1042, 3167, 3167,
+     3167, 1040, 3168, 1039, 1150, 3169, 3178, 3178, 3178, 1033,
+     3179, 1030, 1028, 3180, 3187, 3187, 3187, 1027, 3188, 1026,
+     1021, 3189, 1020, 3196, 3317, 3317, 3317, 3317, 3317, 3317,
+     1018, 3326, 1017, 1013, 3327, 3435, 3435, 3435, 3435, 3435,
+     3435, 1011, 1150, 1010, 1009, 1150, 1008, 1007, 1006, 1005,
+     1004, 1003, 1002, 3436, 1001,  998, 3436,  248,  248,  248,
       248,  248,  248,  248,  248,  248,  249,  249,  249,  249,
-
       249,  249,  249,  249,  249,  254,  254,  254,  254,  254,
+
       254,  254,  254,  254,  257,  257,  257,  257,  257,  257,
       257,  257,  257,  260,  260,  260,  260,  260,  260,  260,
       260,  260,  263,  263,  263,  263,  263,  263,  263,  263,
@@ -2691,8 +2667,8 @@ static yyconst flex_int16_t yy_nxt[12534] =
       294,  294,  294,  294,  294,  294,  294,  300,  300,  300,
       300,  300,  300,  300,  300,  300,  308,  308,  308,  308,
       308,  308,  308,  308,  308,  312,  312,  312,  312,  312,
-
       312,  312,  312,  312,  318,  318,  318,  318,  318,  318,
+
       318,  318,  318,  324,  324,  324,  324,  324,  324,  324,
       324,  324,  330,  330,  330,  330,  330,  330,  330,  330,
       330,  336,  336,  336,  336,  336,  336,  336,  336,  336,
@@ -2702,8 +2678,8 @@ static yyconst flex_int16_t yy_nxt[12534] =
       364,  364,  364,  364,  364,  364,  382,  382,  382,  382,
       382,  382,  382,  382,  382,  389,  389,  389,  389,  389,
       389,  389,  389,  389,  393,  393,  393,  393,  393,  393,
-
       393,  393,  393,  400,  400,  400,  400,  400,  400,  400,
+
       400,  400,  404,  404,  404,  404,  404,  404,  404,  404,
       404,  410,  410,  410,  410,  410,  410,  410,  410,  410,
       418,  418,  418,  418,  418,  418,  418,  418,  418,  426,
@@ -2713,8 +2689,8 @@ static yyconst flex_int16_t yy_nxt[12534] =
       442,  442,  442,  442,  442,  450,  450,  450,  450,  450,
       450,  450,  450,  450,  457,  457,  457,  457,  457,  457,
       457,  457,  457,  464,  464,  464,  464,  464,  464,  464,
-
       464,  464,  469,  469,  469,  469,  469,  469,  469,  469,
+
       469,  475,  475,  475,  475,  475,  475,  475,  475,  475,
       480,  480,  480,  480,  480,  480,  480,  480,  480,  486,
       486,  486,  486,  486,  486,  486,  486,  486,  491,  491,
@@ -2724,8 +2700,8 @@ static yyconst flex_int16_t yy_nxt[12534] =
       508,  508,  508,  508,  517,  517,  517,  517,  517,  517,
       517,  517,  517,  524,  524,  524,  524,  524,  524,  524,
       524,  524,  528,  528,  528,  528,  528,  528,  528,  528,
-
       528,  539,  539,  539,  539,  539,  539,  539,  539,  539,
+
       547,  547,  547,  547,  547,  547,  547,  547,  547,  555,
       555,  555,  555,  555,  555,  555,  555,  555,  560,  560,
       560,  560,  560,  560,  560,  560,  560,  566,  566,  566,
@@ -2735,388 +2711,388 @@ static yyconst flex_int16_t yy_nxt[12534] =
       585,  585,  585,  592,  592,  592,  592,  592,  592,  592,
       592,  592,  597,  597,  597,  597,  597,  597,  597,  597,
       597,  603,  603,  603,  603,  603,  603,  603,  603,  603,
-
       610,  610,  610,  610,  610,  610,  610,  610,  610,  617,
+
       617,  617,  617,  617,  617,  617,  617,  617,  624,  624,
       624,  624,  624,  624,  624,  624,  624,  632,  632,  632,
       632,  632,  632,  632,  632,  632,  263,  263,  263,  263,
       263,  263,  263,  263,  263,  643,  643,  643,  643,  643,
       643,  643,  643,  643,  649,  649,  649,  649,  649,  649,
-      649,  649,  649,  668,  668,  668,  947,  942,  940,  668,
-      704,  704,  704,  939,  931,  930,  704,  712,  712,  712,
-      929,  928,  922,  712,  716,  716,  716,  921,  920,  918,
-      716,  722,  722,  722,  915,  914,  913,  722,  728,  728,
-
-      728,  912,  907,  904,  728,  733,  733,  733,  906,  901,
-      900,  733,  743,  743,  743,  899,  897,  896,  743,  762,
-      762,  762,  893,  892,  891,  762,  766,  766,  766,  889,
-      888,  886,  766,  770,  770,  770,  885,  884,  883,  770,
-      780,  780,  780,  881,  880,  879,  780,  786,  786,  786,
-      878,  877,  876,  786,  791,  791,  791,  874,  872,  871,
-      791,  799,  799,  799,  869,  865,  863,  799,  804,  804,
-      804,  859,  855,  854,  804,  809,  809,  809,  852,  850,
-      849,  809,  814,  814,  814,  847,  846,  844,  814,  819,
-      819,  819,  843,  842,  841,  819,  830,  830,  830,  840,
-
-      838,  837,  830,  839,  839,  839,  831,  829,  824,  839,
-      848,  848,  848,  823,  822,  821,  848,  853,  853,  853,
-      820,  818,  816,  853,  864,  864,  864,  815,  813,  811,
-      864,  870,  870,  870,  810,  808,  806,  870,  875,  875,
-      875,  805,  803,  801,  875,  882,  882,  882,  800,  798,
-      797,  882,  890,  890,  890,  794,  793,  792,  890,  898,
-      898,  898,  790, 3476,  787,  898,  903,  903,  903,  903,
-      903,  903,  903,  785,  903,  668,  668,  668,  783,  782,
-      781,  668,  919,  779,  778,  774,  919,  704,  704,  704,
-      773,  772,  771,  704,  962,  769,  767,  765,  962,  712,
-
-      712,  712,  764,  763,  761,  712,  966,  760,  759,  752,
-      966,  716,  716,  716,  748,  747,  744,  716,  972,  742,
-      738,  737,  972,  722,  722,  722,  736,  735,  734,  722,
-      977,  732,  730,  729,  977,  728,  728,  728,  727,  725,
-      724,  728,  981,  723,  721,  719,  981,  733,  733,  733,
-      718,  717,  715,  733,  992,  713,  711,  706,  992,  743,
-      743,  743,  705,  703, 3476,  743, 1012,  685,  670,  669,
-     1012,  762,  762,  762,  667,  666,  660,  762, 1016,  659,
-      660,  659, 1016,  766,  766,  766,  658,  657, 3476,  766,
-     1019, 3476, 3476, 3476, 1019,  770,  770,  770, 3476, 3476,
-
-     3476,  770, 1029, 3476, 3476, 3476, 1029,  780,  780,  780,
-     3476, 3476, 3476,  780, 1038, 3476, 3476, 3476, 1038,  786,
-      786,  786, 3476, 3476, 3476,  786, 1041, 3476, 3476, 3476,
-     1041,  791,  791,  791, 3476, 3476, 3476,  791, 1050, 3476,
-     3476, 3476, 1050,  799,  799,  799, 3476, 3476, 3476,  799,
-     1055, 3476, 3476, 3476, 1055,  804,  804,  804, 3476, 3476,
-     3476,  804, 1060, 3476, 3476, 3476, 1060,  809,  809,  809,
-     3476, 3476, 3476,  809, 1064, 3476, 3476, 3476, 1064,  814,
-      814,  814, 3476, 3476, 3476,  814, 1068, 3476, 3476, 3476,
-     1068,  819,  819,  819, 3476, 3476, 3476,  819, 1078, 3476,
-
-     3476, 3476, 1078,  830,  830,  830, 3476, 3476, 3476,  830,
-     1082, 3476, 3476, 3476, 1082,  839,  839,  839, 3476, 3476,
-     3476,  839, 1092, 3476, 3476, 3476, 1092,  848,  848,  848,
-     3476, 3476, 3476,  848, 1098, 3476, 3476, 3476, 1098,  853,
-      853,  853, 3476, 3476, 3476,  853, 1109, 3476, 3476, 3476,
-     1109,  864,  864,  864, 3476, 3476, 3476,  864, 1114, 3476,
-     3476, 3476, 1114,  870,  870,  870, 3476, 3476, 3476,  870,
-     1119, 3476, 3476, 3476, 1119,  875,  875,  875, 3476, 3476,
-     3476,  875, 1126, 3476, 3476, 3476, 1126,  882,  882,  882,
-     3476, 3476, 3476,  882, 1133, 3476, 3476, 3476, 1133,  890,
-
-      890,  890, 3476, 3476, 3476,  890, 1141, 3476, 3476, 3476,
-     1141,  898,  898,  898, 3476, 3476, 3476,  898, 1147, 3476,
-     3476, 3476, 1147, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
-     1149, 1149, 1155, 3476, 3476, 3476, 3476, 1155,  668,  668,
-      668, 3476, 3476, 3476,  668, 1166, 1166, 1166, 1166, 3476,
-     3476, 1166, 1166,  704,  704,  704,  704, 3476,  704, 3476,
-      704, 1216, 1216, 1216, 1216, 3476, 3476, 1216, 1216,  712,
-      712,  712, 3476, 3476, 3476,  712, 1222, 1222, 1222, 1222,
-     3476, 3476, 1222, 1222,  716,  716,  716, 3476, 3476, 3476,
-      716, 1231, 1231, 1231, 1231, 3476, 3476, 1231, 1231,  722,
-
-      722,  722,  722, 3476,  722, 3476,  722, 1241, 1241, 1241,
-     1241, 3476, 3476, 1241, 1241,  728,  728,  728,  728, 3476,
-      728, 3476,  728, 1249, 1249, 1249, 1249, 3476, 3476, 1249,
-     1249,  733,  733,  733,  733, 3476,  733, 3476,  733, 1265,
-     1265, 1265, 1265, 3476, 3476, 1265, 1265,  743,  743,  743,
-     3476, 3476, 3476,  743, 1292, 1292, 1292, 1292, 3476, 3476,
-     1292, 1292, 1299, 1299, 1299, 1299, 3476, 3476, 1299, 1299,
-      766,  766,  766, 3476, 3476, 3476,  766, 1304, 1304, 1304,
-     1304, 3476, 3476, 1304, 1304,  770,  770,  770, 3476, 3476,
-     3476,  770, 1317, 1317, 1317, 1317, 3476, 3476, 1317, 1317,
-
-      780,  780,  780, 3476, 3476, 3476,  780, 1330, 1330, 1330,
-     1330, 3476, 3476, 1330, 1330,  786,  786,  786, 3476, 3476,
-     3476,  786, 1335, 1335, 1335, 1335, 3476, 3476, 1335, 1335,
-      791,  791,  791, 3476, 3476, 3476,  791, 1346, 1346, 1346,
-     1346, 3476, 3476, 1346, 1346,  799,  799,  799, 3476, 3476,
-     3476,  799, 1354, 1354, 1354, 1354, 3476, 3476, 1354, 1354,
-      804,  804,  804, 3476, 3476, 3476,  804, 1362, 1362, 1362,
-     1362, 3476, 3476, 1362, 1362,  809,  809,  809, 3476, 3476,
-     3476,  809, 1368, 1368, 1368, 1368, 3476, 3476, 1368, 1368,
-      814,  814,  814, 3476, 3476, 3476,  814, 1374, 1374, 1374,
-
-     1374, 3476, 3476, 1374, 1374,  819,  819,  819, 3476, 3476,
-     3476,  819, 1389, 1389, 1389, 1389, 3476, 3476, 1389, 1389,
-      830,  830,  830, 3476, 3476, 3476,  830, 1395, 1395, 1395,
-     1395, 3476, 3476, 1395, 1395,  839,  839,  839, 3476, 3476,
-     3476,  839, 1407, 1407, 1407, 1407, 3476, 3476, 1407, 1407,
-      848,  848,  848, 3476, 3476, 3476,  848, 1416, 1416, 1416,
-     1416, 3476, 3476, 1416, 1416,  853,  853,  853, 3476, 3476,
-     3476,  853, 1432, 1432, 1432, 1432, 3476, 3476, 1432, 1432,
-      864,  864,  864,  864, 3476,  864, 3476,  864, 1441, 1441,
-     1441, 1441, 3476, 3476, 1441, 1441,  870,  870,  870, 3476,
-
-     3476, 3476,  870, 1449, 1449, 1449, 1449, 3476, 3476, 1449,
-     1449,  875,  875,  875, 3476, 3476, 3476,  875, 1459, 1459,
-     1459, 1459, 3476, 3476, 1459, 1459,  882,  882,  882, 3476,
-     3476, 3476,  882, 1469, 1469, 1469, 1469, 3476, 3476, 1469,
-     1469,  890,  890,  890, 3476, 3476, 3476,  890, 1480, 1480,
-     1480, 1480, 3476, 3476, 1480, 1480,  898,  898,  898, 3476,
-     3476, 3476,  898, 1487, 1487, 1487, 1487, 3476, 3476, 1487,
+      649,  649,  649,  668,  668,  668,  995,  994,  993,  668,
+      704,  704,  704,  991,  990,  989,  704,  712,  712,  712,
+      988,  987,  982,  712,  716,  716,  716,  980,  979,  978,
+      716,  722,  722,  722,  976,  975,  974,  722,  728,  728,
+      728,  973,  971,  968,  728,  733,  733,  733,  967,  965,
+
+      964,  733,  743,  743,  743,  963,  961,  960,  743,  762,
+      762,  762,  959,  958,  955,  762,  766,  766,  766,  954,
+      953,  950,  766,  770,  770,  770,  949,  948,  947,  770,
+      780,  780,  780,  942,  940,  939,  780,  786,  786,  786,
+      931,  930,  929,  786,  791,  791,  791,  928,  922,  921,
+      791,  799,  799,  799,  920,  918,  915,  799,  804,  804,
+      804,  914,  913,  912,  804,  809,  809,  809,  907,  904,
+      906,  809,  814,  814,  814,  901,  900,  899,  814,  819,
+      819,  819,  897,  896,  893,  819,  830,  830,  830,  892,
+      891,  889,  830,  839,  839,  839,  888,  886,  885,  839,
+
+      848,  848,  848,  884,  883,  881,  848,  853,  853,  853,
+      880,  879,  878,  853,  864,  864,  864,  877,  876,  874,
+      864,  870,  870,  870,  872,  871,  869,  870,  875,  875,
+      875,  865,  863,  859,  875,  882,  882,  882,  855,  854,
+      852,  882,  890,  890,  890,  850,  849,  847,  890,  898,
+      898,  898,  846,  844,  843,  898,  903,  903,  903,  903,
+      903,  903,  903,  842,  903,  668,  668,  668,  841,  840,
+      838,  668,  919,  837,  831,  829,  919,  704,  704,  704,
+      824,  823,  822,  704,  962,  821,  820,  818,  962,  712,
+      712,  712,  816,  815,  813,  712,  966,  811,  810,  808,
+
+      966,  716,  716,  716,  806,  805,  803,  716,  972,  801,
+      800,  798,  972,  722,  722,  722,  797,  794,  793,  722,
+      977,  792,  790, 3437,  977,  728,  728,  728,  787,  785,
+      783,  728,  981,  782,  781,  779,  981,  733,  733,  733,
+      778,  774,  773,  733,  992,  772,  771,  769,  992,  743,
+      743,  743,  767,  765,  764,  743, 1012,  763,  761,  760,
+     1012,  762,  762,  762,  759,  752,  748,  762, 1016,  747,
+      744,  742, 1016,  766,  766,  766,  738,  737,  736,  766,
+     1019,  735,  734,  732, 1019,  770,  770,  770,  730,  729,
+      727,  770, 1029,  725,  724,  723, 1029,  780,  780,  780,
+
+      721,  719,  718,  780, 1038,  717,  715,  713, 1038,  786,
+      786,  786,  711,  706,  705,  786, 1041,  703, 3437,  685,
+     1041,  791,  791,  791,  670,  669,  667,  791, 1050,  666,
+      660,  659, 1050,  799,  799,  799,  660,  659,  658,  799,
+     1055,  657, 3437, 3437, 1055,  804,  804,  804, 3437, 3437,
+     3437,  804, 1060, 3437, 3437, 3437, 1060,  809,  809,  809,
+     3437, 3437, 3437,  809, 1064, 3437, 3437, 3437, 1064,  814,
+      814,  814, 3437, 3437, 3437,  814, 1068, 3437, 3437, 3437,
+     1068,  819,  819,  819, 3437, 3437, 3437,  819, 1078, 3437,
+     3437, 3437, 1078,  830,  830,  830, 3437, 3437, 3437,  830,
+
+     1082, 3437, 3437, 3437, 1082,  839,  839,  839, 3437, 3437,
+     3437,  839, 1092, 3437, 3437, 3437, 1092,  848,  848,  848,
+     3437, 3437, 3437,  848, 1098, 3437, 3437, 3437, 1098,  853,
+      853,  853, 3437, 3437, 3437,  853, 1109, 3437, 3437, 3437,
+     1109,  864,  864,  864, 3437, 3437, 3437,  864, 1114, 3437,
+     3437, 3437, 1114,  870,  870,  870, 3437, 3437, 3437,  870,
+     1119, 3437, 3437, 3437, 1119,  875,  875,  875, 3437, 3437,
+     3437,  875, 1126, 3437, 3437, 3437, 1126,  882,  882,  882,
+     3437, 3437, 3437,  882, 1133, 3437, 3437, 3437, 1133,  890,
+      890,  890, 3437, 3437, 3437,  890, 1141, 3437, 3437, 3437,
+
+     1141,  898,  898,  898, 3437, 3437, 3437,  898, 1147, 3437,
+     3437, 3437, 1147, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+     1149, 1149, 1155, 3437, 3437, 3437, 3437, 1155,  668,  668,
+      668, 3437, 3437, 3437,  668, 1166, 1166, 1166, 1166, 3437,
+     3437, 1166, 1166,  704,  704,  704,  704, 3437,  704, 3437,
+      704, 1216, 1216, 1216, 1216, 3437, 3437, 1216, 1216,  712,
+      712,  712, 3437, 3437, 3437,  712, 1222, 1222, 1222, 1222,
+     3437, 3437, 1222, 1222,  716,  716,  716, 3437, 3437, 3437,
+      716, 1231, 1231, 1231, 1231, 3437, 3437, 1231, 1231,  722,
+      722,  722,  722, 3437,  722, 3437,  722, 1241, 1241, 1241,
+
+     1241, 3437, 3437, 1241, 1241,  728,  728,  728,  728, 3437,
+      728, 3437,  728, 1249, 1249, 1249, 1249, 3437, 3437, 1249,
+     1249,  733,  733,  733,  733, 3437,  733, 3437,  733, 1265,
+     1265, 1265, 1265, 3437, 3437, 1265, 1265,  743,  743,  743,
+     3437, 3437, 3437,  743, 1292, 1292, 1292, 1292, 3437, 3437,
+     1292, 1292, 1299, 1299, 1299, 1299, 3437, 3437, 1299, 1299,
+      766,  766,  766, 3437, 3437, 3437,  766, 1304, 1304, 1304,
+     1304, 3437, 3437, 1304, 1304,  770,  770,  770, 3437, 3437,
+     3437,  770, 1317, 1317, 1317, 1317, 3437, 3437, 1317, 1317,
+      780,  780,  780, 3437, 3437, 3437,  780, 1330, 1330, 1330,
+
+     1330, 3437, 3437, 1330, 1330,  786,  786,  786, 3437, 3437,
+     3437,  786, 1335, 1335, 1335, 1335, 3437, 3437, 1335, 1335,
+      791,  791,  791, 3437, 3437, 3437,  791, 1346, 1346, 1346,
+     1346, 3437, 3437, 1346, 1346,  799,  799,  799, 3437, 3437,
+     3437,  799, 1354, 1354, 1354, 1354, 3437, 3437, 1354, 1354,
+      804,  804,  804, 3437, 3437, 3437,  804, 1362, 1362, 1362,
+     1362, 3437, 3437, 1362, 1362,  809,  809,  809, 3437, 3437,
+     3437,  809, 1368, 1368, 1368, 1368, 3437, 3437, 1368, 1368,
+      814,  814,  814, 3437, 3437, 3437,  814, 1374, 1374, 1374,
+     1374, 3437, 3437, 1374, 1374,  819,  819,  819, 3437, 3437,
+
+     3437,  819, 1389, 1389, 1389, 1389, 3437, 3437, 1389, 1389,
+      830,  830,  830, 3437, 3437, 3437,  830, 1395, 1395, 1395,
+     1395, 3437, 3437, 1395, 1395,  839,  839,  839, 3437, 3437,
+     3437,  839, 1407, 1407, 1407, 1407, 3437, 3437, 1407, 1407,
+      848,  848,  848, 3437, 3437, 3437,  848, 1416, 1416, 1416,
+     1416, 3437, 3437, 1416, 1416,  853,  853,  853, 3437, 3437,
+     3437,  853, 1432, 1432, 1432, 1432, 3437, 3437, 1432, 1432,
+      864,  864,  864,  864, 3437,  864, 3437,  864, 1441, 1441,
+     1441, 1441, 3437, 3437, 1441, 1441,  870,  870,  870, 3437,
+     3437, 3437,  870, 1449, 1449, 1449, 1449, 3437, 3437, 1449,
+
+     1449,  875,  875,  875, 3437, 3437, 3437,  875, 1459, 1459,
+     1459, 1459, 3437, 3437, 1459, 1459,  882,  882,  882, 3437,
+     3437, 3437,  882, 1469, 1469, 1469, 1469, 3437, 3437, 1469,
+     1469,  890,  890,  890, 3437, 3437, 3437,  890, 1480, 1480,
+     1480, 1480, 3437, 3437, 1480, 1480,  898,  898,  898, 3437,
+     3437, 3437,  898, 1487, 1487, 1487, 1487, 3437, 3437, 1487,
      1487, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
-     1155, 3476, 1155, 3476, 3476, 1155,  668,  668,  668, 3476,
-     3476, 3476,  668, 1166, 1166, 1166, 1166, 3476, 3476, 1166,
-
-     1166,  704,  704,  704, 3476, 3476, 3476,  704, 1216, 1216,
-     1216, 1216, 3476, 3476, 1216, 1216,  712,  712,  712, 3476,
-     3476, 3476,  712, 1222, 1222, 1222, 1222, 3476, 3476, 1222,
-     1222,  716,  716,  716, 3476, 3476, 3476,  716, 1231, 1231,
-     1231, 1231, 3476, 3476, 1231, 1231,  722,  722,  722, 3476,
-     3476, 3476,  722, 1241, 1241, 1241, 1241, 3476, 3476, 1241,
-     1241, 1249, 1249, 1249, 1249, 3476, 3476, 1249, 1249,  733,
-      733,  733, 3476, 3476, 3476,  733, 1265, 1265, 1265, 1265,
-     3476, 3476, 1265, 1265,  743,  743,  743, 3476, 3476, 3476,
-      743, 1292, 1292, 1292, 1292, 3476, 3476, 1292, 1292, 1299,
-
-     1299, 1299, 1299, 3476, 3476, 1299, 1299,  766,  766,  766,
-      766, 3476,  766, 3476,  766, 1304, 1304, 1304, 1304, 3476,
-     3476, 1304, 1304,  770,  770,  770, 3476, 3476, 3476,  770,
-     1317, 1317, 1317, 1317, 3476, 3476, 1317, 1317,  780,  780,
-      780,  780, 3476,  780, 3476,  780, 1330, 1330, 1330, 1330,
-     3476, 3476, 1330, 1330,  786,  786,  786,  786, 3476,  786,
-     3476,  786, 1335, 1335, 1335, 1335, 3476, 3476, 1335, 1335,
-      791,  791,  791, 3476, 3476, 3476,  791, 1346, 1346, 1346,
-     1346, 3476, 3476, 1346, 1346,  799,  799,  799, 3476, 3476,
-     3476,  799, 1354, 1354, 1354, 1354, 3476, 3476, 1354, 1354,
-
-      804,  804,  804, 3476, 3476, 3476,  804, 1362, 1362, 1362,
-     1362, 3476, 3476, 1362, 1362,  809,  809,  809,  809, 3476,
-      809, 3476,  809, 1368, 1368, 1368, 1368, 3476, 3476, 1368,
-     1368,  814,  814,  814,  814, 3476,  814, 3476,  814, 1374,
-     1374, 1374, 1374, 3476, 3476, 1374, 1374,  819,  819,  819,
-     3476, 3476, 3476,  819, 1389, 1389, 1389, 1389, 3476, 3476,
-     1389, 1389,  830,  830,  830, 3476, 3476, 3476,  830, 1395,
-     1395, 1395, 1395, 3476, 3476, 1395, 1395,  839,  839,  839,
-     3476, 3476, 3476,  839, 1407, 1407, 1407, 1407, 3476, 3476,
-     1407, 1407,  848,  848,  848, 3476, 3476, 3476,  848, 1416,
-
-     1416, 1416, 1416, 3476, 3476, 1416, 1416,  853,  853,  853,
-     3476, 3476, 3476,  853, 1432, 1432, 1432, 1432, 3476, 3476,
-     1432, 1432,  864,  864,  864, 3476, 3476, 3476,  864, 1441,
-     1441, 1441, 1441, 3476, 3476, 1441, 1441,  870,  870,  870,
-     3476, 3476, 3476,  870, 1449, 1449, 1449, 1449, 3476, 3476,
-     1449, 1449,  875,  875,  875, 3476, 3476, 3476,  875, 1459,
-     1459, 1459, 1459, 3476, 3476, 1459, 1459,  882,  882,  882,
-     3476, 3476, 3476,  882, 1469, 1469, 1469, 1469, 3476, 3476,
-     1469, 1469,  890,  890,  890,  890, 3476,  890, 3476,  890,
-     1480, 1480, 1480, 1480, 3476, 3476, 1480, 1480,  898,  898,
-
-      898, 3476, 3476, 3476,  898, 1487, 1487, 1487, 1487, 3476,
-     3476, 1487, 1487, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+     1155, 3437, 1155, 3437, 3437, 1155,  668,  668,  668, 3437,
+     3437, 3437,  668, 1166, 1166, 1166, 1166, 3437, 3437, 1166,
+     1166,  704,  704,  704, 3437, 3437, 3437,  704, 1216, 1216,
+
+     1216, 1216, 3437, 3437, 1216, 1216,  712,  712,  712, 3437,
+     3437, 3437,  712, 1222, 1222, 1222, 1222, 3437, 3437, 1222,
+     1222,  716,  716,  716, 3437, 3437, 3437,  716, 1231, 1231,
+     1231, 1231, 3437, 3437, 1231, 1231,  722,  722,  722, 3437,
+     3437, 3437,  722, 1241, 1241, 1241, 1241, 3437, 3437, 1241,
+     1241, 1249, 1249, 1249, 1249, 3437, 3437, 1249, 1249,  733,
+      733,  733, 3437, 3437, 3437,  733, 1265, 1265, 1265, 1265,
+     3437, 3437, 1265, 1265,  743,  743,  743, 3437, 3437, 3437,
+      743, 1292, 1292, 1292, 1292, 3437, 3437, 1292, 1292, 1299,
+     1299, 1299, 1299, 3437, 3437, 1299, 1299,  766,  766,  766,
+
+      766, 3437,  766, 3437,  766, 1304, 1304, 1304, 1304, 3437,
+     3437, 1304, 1304,  770,  770,  770, 3437, 3437, 3437,  770,
+     1317, 1317, 1317, 1317, 3437, 3437, 1317, 1317,  780,  780,
+      780,  780, 3437,  780, 3437,  780, 1330, 1330, 1330, 1330,
+     3437, 3437, 1330, 1330,  786,  786,  786,  786, 3437,  786,
+     3437,  786, 1335, 1335, 1335, 1335, 3437, 3437, 1335, 1335,
+      791,  791,  791, 3437, 3437, 3437,  791, 1346, 1346, 1346,
+     1346, 3437, 3437, 1346, 1346,  799,  799,  799, 3437, 3437,
+     3437,  799, 1354, 1354, 1354, 1354, 3437, 3437, 1354, 1354,
+      804,  804,  804, 3437, 3437, 3437,  804, 1362, 1362, 1362,
+
+     1362, 3437, 3437, 1362, 1362,  809,  809,  809,  809, 3437,
+      809, 3437,  809, 1368, 1368, 1368, 1368, 3437, 3437, 1368,
+     1368,  814,  814,  814,  814, 3437,  814, 3437,  814, 1374,
+     1374, 1374, 1374, 3437, 3437, 1374, 1374,  819,  819,  819,
+     3437, 3437, 3437,  819, 1389, 1389, 1389, 1389, 3437, 3437,
+     1389, 1389,  830,  830,  830, 3437, 3437, 3437,  830, 1395,
+     1395, 1395, 1395, 3437, 3437, 1395, 1395,  839,  839,  839,
+     3437, 3437, 3437,  839, 1407, 1407, 1407, 1407, 3437, 3437,
+     1407, 1407,  848,  848,  848, 3437, 3437, 3437,  848, 1416,
+     1416, 1416, 1416, 3437, 3437, 1416, 1416,  853,  853,  853,
+
+     3437, 3437, 3437,  853, 1432, 1432, 1432, 1432, 3437, 3437,
+     1432, 1432,  864,  864,  864, 3437, 3437, 3437,  864, 1441,
+     1441, 1441, 1441, 3437, 3437, 1441, 1441,  870,  870,  870,
+     3437, 3437, 3437,  870, 1449, 1449, 1449, 1449, 3437, 3437,
+     1449, 1449,  875,  875,  875, 3437, 3437, 3437,  875, 1459,
+     1459, 1459, 1459, 3437, 3437, 1459, 1459,  882,  882,  882,
+     3437, 3437, 3437,  882, 1469, 1469, 1469, 1469, 3437, 3437,
+     1469, 1469,  890,  890,  890,  890, 3437,  890, 3437,  890,
+     1480, 1480, 1480, 1480, 3437, 3437, 1480, 1480,  898,  898,
+      898, 3437, 3437, 3437,  898, 1487, 1487, 1487, 1487, 3437,
+
+     3437, 1487, 1487, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
      1149, 1149, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
-     1706,  668,  668,  668, 3476, 3476, 3476,  668,  704,  704,
-      704, 3476, 3476, 3476,  704, 1216, 1216, 1216, 1216, 3476,
-     3476, 1216, 1216,  712,  712,  712,  712, 3476,  712, 3476,
-      712, 1222, 1222, 1222, 1222, 3476, 3476, 1222, 1222,  716,
-      716,  716, 3476, 3476, 3476,  716, 1231, 1231, 1231, 1231,
-     3476, 3476, 1231, 1231,  722,  722,  722, 3476, 3476, 3476,
-      722, 1241, 1241, 1241, 1241, 3476, 3476, 1241, 1241, 1249,
-
-     1249, 1249, 1249, 3476, 3476, 1249, 1249,  733,  733,  733,
-     3476, 3476, 3476,  733, 1265, 1265, 1265, 1265, 3476, 3476,
-     1265, 1265,  743,  743,  743, 3476, 3476, 3476,  743, 1292,
-     1292, 1292, 1292, 3476, 3476, 1292, 1292, 1299, 1299, 1299,
-     1299, 3476, 3476, 1299, 1299, 1304, 1304, 1304, 1304, 3476,
-     3476, 1304, 1304,  770,  770,  770, 3476, 3476, 3476,  770,
-     1317, 1317, 1317, 1317, 3476, 3476, 1317, 1317, 1330, 1330,
-     1330, 1330, 3476, 3476, 1330, 1330, 1335, 1335, 1335, 1335,
-     3476, 3476, 1335, 1335,  791,  791,  791, 3476, 3476, 3476,
-      791, 1346, 1346, 1346, 1346, 3476, 3476, 1346, 1346,  799,
-
-      799,  799, 3476, 3476, 3476,  799, 1354, 1354, 1354, 1354,
-     3476, 3476, 1354, 1354,  804,  804,  804,  804, 3476,  804,
-     3476,  804, 1362, 1362, 1362, 1362, 3476, 3476, 1362, 1362,
-      809,  809,  809, 3476, 3476, 3476,  809, 1368, 1368, 1368,
-     1368, 3476, 3476, 1368, 1368,  814,  814,  814, 3476, 3476,
-     3476,  814, 1374, 1374, 1374, 1374, 3476, 3476, 1374, 1374,
-      819,  819,  819, 3476, 3476, 3476,  819, 1389, 1389, 1389,
-     1389, 3476, 3476, 1389, 1389,  830,  830,  830, 3476, 3476,
-     3476,  830, 1395, 1395, 1395, 1395, 3476, 3476, 1395, 1395,
-      839,  839,  839, 3476, 3476, 3476,  839, 1407, 1407, 1407,
-
-     1407, 3476, 3476, 1407, 1407,  848,  848,  848,  848, 3476,
-      848, 3476,  848, 1416, 1416, 1416, 1416, 3476, 3476, 1416,
-     1416,  853,  853,  853, 3476, 3476, 3476,  853, 1432, 1432,
-     1432, 1432, 3476, 3476, 1432, 1432,  864,  864,  864, 3476,
-     3476, 3476,  864, 1441, 1441, 1441, 1441, 3476, 3476, 1441,
-     1441,  870,  870,  870, 3476, 3476, 3476,  870, 1449, 1449,
-     1449, 1449, 3476, 3476, 1449, 1449,  875,  875,  875, 3476,
-     3476, 3476,  875, 1459, 1459, 1459, 1459, 3476, 3476, 1459,
-     1459,  882,  882,  882, 3476, 3476, 3476,  882, 1469, 1469,
-     1469, 1469, 3476, 3476, 1469, 1469,  890,  890,  890, 3476,
-
-     3476, 3476,  890, 1480, 1480, 1480, 1480, 3476, 3476, 1480,
-     1480,  898,  898,  898, 3476, 3476, 3476,  898, 1487, 1487,
-     1487, 1487, 3476, 3476, 1487, 1487, 1149, 1149, 1149, 1149,
+     1706,  668,  668,  668, 3437, 3437, 3437,  668,  704,  704,
+      704, 3437, 3437, 3437,  704, 1216, 1216, 1216, 1216, 3437,
+     3437, 1216, 1216,  712,  712,  712,  712, 3437,  712, 3437,
+      712, 1222, 1222, 1222, 1222, 3437, 3437, 1222, 1222,  716,
+      716,  716, 3437, 3437, 3437,  716, 1231, 1231, 1231, 1231,
+     3437, 3437, 1231, 1231,  722,  722,  722, 3437, 3437, 3437,
+      722, 1241, 1241, 1241, 1241, 3437, 3437, 1241, 1241, 1249,
+     1249, 1249, 1249, 3437, 3437, 1249, 1249,  733,  733,  733,
+
+     3437, 3437, 3437,  733, 1265, 1265, 1265, 1265, 3437, 3437,
+     1265, 1265,  743,  743,  743, 3437, 3437, 3437,  743, 1292,
+     1292, 1292, 1292, 3437, 3437, 1292, 1292, 1299, 1299, 1299,
+     1299, 3437, 3437, 1299, 1299, 1304, 1304, 1304, 1304, 3437,
+     3437, 1304, 1304,  770,  770,  770, 3437, 3437, 3437,  770,
+     1317, 1317, 1317, 1317, 3437, 3437, 1317, 1317, 1330, 1330,
+     1330, 1330, 3437, 3437, 1330, 1330, 1335, 1335, 1335, 1335,
+     3437, 3437, 1335, 1335,  791,  791,  791, 3437, 3437, 3437,
+      791, 1346, 1346, 1346, 1346, 3437, 3437, 1346, 1346,  799,
+      799,  799, 3437, 3437, 3437,  799, 1354, 1354, 1354, 1354,
+
+     3437, 3437, 1354, 1354,  804,  804,  804,  804, 3437,  804,
+     3437,  804, 1362, 1362, 1362, 1362, 3437, 3437, 1362, 1362,
+      809,  809,  809, 3437, 3437, 3437,  809, 1368, 1368, 1368,
+     1368, 3437, 3437, 1368, 1368,  814,  814,  814, 3437, 3437,
+     3437,  814, 1374, 1374, 1374, 1374, 3437, 3437, 1374, 1374,
+      819,  819,  819, 3437, 3437, 3437,  819, 1389, 1389, 1389,
+     1389, 3437, 3437, 1389, 1389,  830,  830,  830, 3437, 3437,
+     3437,  830, 1395, 1395, 1395, 1395, 3437, 3437, 1395, 1395,
+      839,  839,  839, 3437, 3437, 3437,  839, 1407, 1407, 1407,
+     1407, 3437, 3437, 1407, 1407,  848,  848,  848,  848, 3437,
+
+      848, 3437,  848, 1416, 1416, 1416, 1416, 3437, 3437, 1416,
+     1416,  853,  853,  853, 3437, 3437, 3437,  853, 1432, 1432,
+     1432, 1432, 3437, 3437, 1432, 1432,  864,  864,  864, 3437,
+     3437, 3437,  864, 1441, 1441, 1441, 1441, 3437, 3437, 1441,
+     1441,  870,  870,  870, 3437, 3437, 3437,  870, 1449, 1449,
+     1449, 1449, 3437, 3437, 1449, 1449,  875,  875,  875, 3437,
+     3437, 3437,  875, 1459, 1459, 1459, 1459, 3437, 3437, 1459,
+     1459,  882,  882,  882, 3437, 3437, 3437,  882, 1469, 1469,
+     1469, 1469, 3437, 3437, 1469, 1469,  890,  890,  890, 3437,
+     3437, 3437,  890, 1480, 1480, 1480, 1480, 3437, 3437, 1480,
+
+     1480,  898,  898,  898, 3437, 3437, 3437,  898, 1487, 1487,
+     1487, 1487, 3437, 3437, 1487, 1487, 1149, 1149, 1149, 1149,
      1149, 1149, 1149, 1149, 1149, 1706, 1706, 1706, 1706, 1706,
-     1706, 1706, 1706, 1706,  668,  668,  668, 3476, 3476, 3476,
-      668,  704,  704,  704,  704, 3476,  704, 3476,  704, 1216,
-     1216, 1216, 1216, 3476, 3476, 1216, 1216, 1222, 1222, 1222,
-     1222, 3476, 3476, 1222, 1222,  716,  716,  716, 3476, 3476,
-     3476,  716, 1231, 1231, 1231, 1231, 3476, 3476, 1231, 1231,
-      722,  722,  722,  722, 3476,  722, 3476,  722, 1241, 1241,
-
-     1241, 1241, 3476, 3476, 1241, 1241, 1249, 1249, 1249, 1249,
-     3476, 3476, 1249, 1249,  733,  733,  733,  733, 3476,  733,
-     3476,  733, 1265, 1265, 1265, 1265, 3476, 3476, 1265, 1265,
-      743,  743,  743, 3476, 3476, 3476,  743, 1292, 1292, 1292,
-     1292, 3476, 3476, 1292, 1292, 1299, 1299, 1299, 1299, 3476,
-     3476, 1299, 1299,  770,  770,  770, 3476, 3476, 3476,  770,
-     1317, 1317, 1317, 1317, 3476, 3476, 1317, 1317, 1330, 1330,
-     1330, 1330, 3476, 3476, 1330, 1330, 1335, 1335, 1335, 1335,
-     3476, 3476, 1335, 1335,  791,  791,  791, 3476, 3476, 3476,
-      791, 1346, 1346, 1346, 1346, 3476, 3476, 1346, 1346,  799,
-
-      799,  799, 3476, 3476, 3476,  799, 1354, 1354, 1354, 1354,
-     3476, 3476, 1354, 1354, 1362, 1362, 1362, 1362, 3476, 3476,
-     1362, 1362,  809,  809,  809, 3476, 3476, 3476,  809, 1368,
-     1368, 1368, 1368, 3476, 3476, 1368, 1368,  814,  814,  814,
-      814, 3476,  814, 3476,  814, 1374, 1374, 1374, 1374, 3476,
-     3476, 1374, 1374,  819,  819,  819, 3476, 3476, 3476,  819,
-     1389, 1389, 1389, 1389, 3476, 3476, 1389, 1389,  830,  830,
-      830, 3476, 3476, 3476,  830, 1395, 1395, 1395, 1395, 3476,
-     3476, 1395, 1395,  839,  839,  839, 3476, 3476, 3476,  839,
-     1407, 1407, 1407, 1407, 3476, 3476, 1407, 1407, 1416, 1416,
-
-     1416, 1416, 3476, 3476, 1416, 1416,  853,  853,  853, 3476,
-     3476, 3476,  853, 1432, 1432, 1432, 1432, 3476, 3476, 1432,
-     1432,  864,  864,  864, 3476, 3476, 3476,  864, 1441, 1441,
-     1441, 1441, 3476, 3476, 1441, 1441,  870,  870,  870, 3476,
-     3476, 3476,  870, 1449, 1449, 1449, 1449, 3476, 3476, 1449,
-     1449,  875,  875,  875,  875, 3476,  875, 3476,  875, 1459,
-     1459, 1459, 1459, 3476, 3476, 1459, 1459,  882,  882,  882,
-     3476, 3476, 3476,  882, 1469, 1469, 1469, 1469, 3476, 3476,
-     1469, 1469,  890,  890,  890, 3476, 3476, 3476,  890, 1480,
-     1480, 1480, 1480, 3476, 3476, 1480, 1480,  898,  898,  898,
-
-     3476, 3476, 3476,  898, 1487, 1487, 1487, 1487, 3476, 3476,
+     1706, 1706, 1706, 1706,  668,  668,  668, 3437, 3437, 3437,
+      668,  704,  704,  704,  704, 3437,  704, 3437,  704, 1216,
+     1216, 1216, 1216, 3437, 3437, 1216, 1216, 1222, 1222, 1222,
+     1222, 3437, 3437, 1222, 1222,  716,  716,  716, 3437, 3437,
+     3437,  716, 1231, 1231, 1231, 1231, 3437, 3437, 1231, 1231,
+      722,  722,  722,  722, 3437,  722, 3437,  722, 1241, 1241,
+     1241, 1241, 3437, 3437, 1241, 1241, 1249, 1249, 1249, 1249,
+
+     3437, 3437, 1249, 1249,  733,  733,  733,  733, 3437,  733,
+     3437,  733, 1265, 1265, 1265, 1265, 3437, 3437, 1265, 1265,
+      743,  743,  743, 3437, 3437, 3437,  743, 1292, 1292, 1292,
+     1292, 3437, 3437, 1292, 1292, 1299, 1299, 1299, 1299, 3437,
+     3437, 1299, 1299,  770,  770,  770, 3437, 3437, 3437,  770,
+     1317, 1317, 1317, 1317, 3437, 3437, 1317, 1317, 1330, 1330,
+     1330, 1330, 3437, 3437, 1330, 1330, 1335, 1335, 1335, 1335,
+     3437, 3437, 1335, 1335,  791,  791,  791, 3437, 3437, 3437,
+      791, 1346, 1346, 1346, 1346, 3437, 3437, 1346, 1346,  799,
+      799,  799, 3437, 3437, 3437,  799, 1354, 1354, 1354, 1354,
+
+     3437, 3437, 1354, 1354, 1362, 1362, 1362, 1362, 3437, 3437,
+     1362, 1362,  809,  809,  809, 3437, 3437, 3437,  809, 1368,
+     1368, 1368, 1368, 3437, 3437, 1368, 1368,  814,  814,  814,
+      814, 3437,  814, 3437,  814, 1374, 1374, 1374, 1374, 3437,
+     3437, 1374, 1374,  819,  819,  819, 3437, 3437, 3437,  819,
+     1389, 1389, 1389, 1389, 3437, 3437, 1389, 1389,  830,  830,
+      830, 3437, 3437, 3437,  830, 1395, 1395, 1395, 1395, 3437,
+     3437, 1395, 1395,  839,  839,  839, 3437, 3437, 3437,  839,
+     1407, 1407, 1407, 1407, 3437, 3437, 1407, 1407, 1416, 1416,
+     1416, 1416, 3437, 3437, 1416, 1416,  853,  853,  853, 3437,
+
+     3437, 3437,  853, 1432, 1432, 1432, 1432, 3437, 3437, 1432,
+     1432,  864,  864,  864, 3437, 3437, 3437,  864, 1441, 1441,
+     1441, 1441, 3437, 3437, 1441, 1441,  870,  870,  870, 3437,
+     3437, 3437,  870, 1449, 1449, 1449, 1449, 3437, 3437, 1449,
+     1449,  875,  875,  875,  875, 3437,  875, 3437,  875, 1459,
+     1459, 1459, 1459, 3437, 3437, 1459, 1459,  882,  882,  882,
+     3437, 3437, 3437,  882, 1469, 1469, 1469, 1469, 3437, 3437,
+     1469, 1469,  890,  890,  890, 3437, 3437, 3437,  890, 1480,
+     1480, 1480, 1480, 3437, 3437, 1480, 1480,  898,  898,  898,
+     3437, 3437, 3437,  898, 1487, 1487, 1487, 1487, 3437, 3437,
+
      1487, 1487, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
      1149, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
-      668,  668,  668,  668, 3476,  668, 3476,  668,  704,  704,
-      704, 3476, 3476, 3476,  704, 1216, 1216, 1216, 1216, 3476,
-     3476, 1216, 1216, 1222, 1222, 1222, 1222, 3476, 3476, 1222,
-     1222,  716,  716,  716, 3476, 3476, 3476,  716, 1231, 1231,
-     1231, 1231, 3476, 3476, 1231, 1231, 1241, 1241, 1241, 1241,
-     3476, 3476, 1241, 1241, 1249, 1249, 1249, 1249, 3476, 3476,
-     1249, 1249,  733,  733,  733,  733, 3476,  733, 3476,  733,
-
-     1265, 1265, 1265, 1265, 3476, 3476, 1265, 1265,  743,  743,
-      743, 3476, 3476, 3476,  743, 1292, 1292, 1292, 1292, 3476,
-     3476, 1292, 1292, 1299, 1299, 1299, 1299, 3476, 3476, 1299,
-     1299,  770,  770,  770, 3476, 3476, 3476,  770, 1330, 1330,
-     1330, 1330, 3476, 3476, 1330, 1330, 1335, 1335, 1335, 1335,
-     3476, 3476, 1335, 1335,  791,  791,  791, 3476, 3476, 3476,
-      791,  799,  799,  799, 3476, 3476, 3476,  799, 1354, 1354,
-     1354, 1354, 3476, 3476, 1354, 1354, 1362, 1362, 1362, 1362,
-     3476, 3476, 1362, 1362,  809,  809,  809, 3476, 3476, 3476,
-      809, 1368, 1368, 1368, 1368, 3476, 3476, 1368, 1368, 1374,
-
-     1374, 1374, 1374, 3476, 3476, 1374, 1374,  819,  819,  819,
-     3476, 3476, 3476,  819,  830,  830,  830,  830, 3476,  830,
-     3476,  830, 1395, 1395, 1395, 1395, 3476, 3476, 1395, 1395,
-      839,  839,  839, 3476, 3476, 3476,  839, 1407, 1407, 1407,
-     1407, 3476, 3476, 1407, 1407,  853,  853,  853, 3476, 3476,
-     3476,  853, 1432, 1432, 1432, 1432, 3476, 3476, 1432, 1432,
-      864,  864,  864, 3476, 3476, 3476,  864, 1441, 1441, 1441,
-     1441, 3476, 3476, 1441, 1441,  870,  870,  870, 3476, 3476,
-     3476,  870, 1449, 1449, 1449, 1449, 3476, 3476, 1449, 1449,
-      875,  875,  875,  875, 3476,  875, 3476,  875, 1459, 1459,
-
-     1459, 1459, 3476, 3476, 1459, 1459,  882,  882,  882,  882,
-     3476,  882, 3476,  882, 1469, 1469, 1469, 1469, 3476, 3476,
-     1469, 1469,  890,  890,  890, 3476, 3476, 3476,  890, 1480,
-     1480, 1480, 1480, 3476, 3476, 1480, 1480,  898,  898,  898,
-      898, 3476,  898, 3476,  898, 1487, 1487, 1487, 1487, 3476,
-     3476, 1487, 1487, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+      668,  668,  668,  668, 3437,  668, 3437,  668,  704,  704,
+      704, 3437, 3437, 3437,  704, 1216, 1216, 1216, 1216, 3437,
+     3437, 1216, 1216, 1222, 1222, 1222, 1222, 3437, 3437, 1222,
+     1222,  716,  716,  716, 3437, 3437, 3437,  716, 1231, 1231,
+     1231, 1231, 3437, 3437, 1231, 1231, 1241, 1241, 1241, 1241,
+     3437, 3437, 1241, 1241, 1249, 1249, 1249, 1249, 3437, 3437,
+     1249, 1249,  733,  733,  733,  733, 3437,  733, 3437,  733,
+     1265, 1265, 1265, 1265, 3437, 3437, 1265, 1265,  743,  743,
+
+      743, 3437, 3437, 3437,  743, 1292, 1292, 1292, 1292, 3437,
+     3437, 1292, 1292, 1299, 1299, 1299, 1299, 3437, 3437, 1299,
+     1299,  770,  770,  770, 3437, 3437, 3437,  770, 1330, 1330,
+     1330, 1330, 3437, 3437, 1330, 1330, 1335, 1335, 1335, 1335,
+     3437, 3437, 1335, 1335,  791,  791,  791, 3437, 3437, 3437,
+      791,  799,  799,  799, 3437, 3437, 3437,  799, 1354, 1354,
+     1354, 1354, 3437, 3437, 1354, 1354, 1362, 1362, 1362, 1362,
+     3437, 3437, 1362, 1362,  809,  809,  809, 3437, 3437, 3437,
+      809, 1368, 1368, 1368, 1368, 3437, 3437, 1368, 1368, 1374,
+     1374, 1374, 1374, 3437, 3437, 1374, 1374,  819,  819,  819,
+
+     3437, 3437, 3437,  819,  830,  830,  830,  830, 3437,  830,
+     3437,  830, 1395, 1395, 1395, 1395, 3437, 3437, 1395, 1395,
+      839,  839,  839, 3437, 3437, 3437,  839, 1407, 1407, 1407,
+     1407, 3437, 3437, 1407, 1407,  853,  853,  853, 3437, 3437,
+     3437,  853, 1432, 1432, 1432, 1432, 3437, 3437, 1432, 1432,
+      864,  864,  864, 3437, 3437, 3437,  864, 1441, 1441, 1441,
+     1441, 3437, 3437, 1441, 1441,  870,  870,  870, 3437, 3437,
+     3437,  870, 1449, 1449, 1449, 1449, 3437, 3437, 1449, 1449,
+      875,  875,  875,  875, 3437,  875, 3437,  875, 1459, 1459,
+     1459, 1459, 3437, 3437, 1459, 1459,  882,  882,  882,  882,
+
+     3437,  882, 3437,  882, 1469, 1469, 1469, 1469, 3437, 3437,
+     1469, 1469,  890,  890,  890, 3437, 3437, 3437,  890, 1480,
+     1480, 1480, 1480, 3437, 3437, 1480, 1480,  898,  898,  898,
+      898, 3437,  898, 3437,  898, 1487, 1487, 1487, 1487, 3437,
+     3437, 1487, 1487, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
      1149, 1149, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
-     1706,  704,  704,  704, 3476, 3476, 3476,  704, 1216, 1216,
-     1216, 1216, 3476, 3476, 1216, 1216, 1222, 1222, 1222, 1222,
-     3476, 3476, 1222, 1222,  716,  716,  716, 3476, 3476, 3476,
-
-      716, 1231, 1231, 1231, 1231, 3476, 3476, 1231, 1231, 1241,
-     1241, 1241, 1241, 3476, 3476, 1241, 1241, 1249, 1249, 1249,
-     1249, 3476, 3476, 1249, 1249, 1265, 1265, 1265, 1265, 3476,
-     3476, 1265, 1265,  743,  743,  743, 3476, 3476, 3476,  743,
-     1292, 1292, 1292, 1292, 3476, 3476, 1292, 1292, 1299, 1299,
-     1299, 1299, 3476, 3476, 1299, 1299,  770,  770,  770, 3476,
-     3476, 3476,  770, 1330, 1330, 1330, 1330, 3476, 3476, 1330,
-     1330, 1335, 1335, 1335, 1335, 3476, 3476, 1335, 1335,  791,
-      791,  791, 3476, 3476, 3476,  791,  799,  799,  799, 3476,
-     3476, 3476,  799, 1354, 1354, 1354, 1354, 3476, 3476, 1354,
-
-     1354, 1362, 1362, 1362, 1362, 3476, 3476, 1362, 1362,  809,
-      809,  809, 3476, 3476, 3476,  809, 1374, 1374, 1374, 1374,
-     3476, 3476, 1374, 1374,  819,  819,  819, 3476, 3476, 3476,
-      819, 1395, 1395, 1395, 1395, 3476, 3476, 1395, 1395,  839,
-      839,  839,  839, 3476,  839, 3476,  839, 1407, 1407, 1407,
-     1407, 3476, 3476, 1407, 1407,  853,  853,  853, 3476, 3476,
-     3476,  853, 1432, 1432, 1432, 1432, 3476, 3476, 1432, 1432,
-      864,  864,  864, 3476, 3476, 3476,  864,  870,  870,  870,
-     3476, 3476, 3476,  870, 1449, 1449, 1449, 1449, 3476, 3476,
-     1449, 1449,  875,  875,  875, 3476, 3476, 3476,  875, 1459,
-
-     1459, 1459, 1459, 3476, 3476, 1459, 1459,  882,  882,  882,
-     3476, 3476, 3476,  882, 1469, 1469, 1469, 1469, 3476, 3476,
-     1469, 1469,  890,  890,  890, 3476, 3476, 3476,  890, 1487,
-     1487, 1487, 1487, 3476, 3476, 1487, 1487, 1149, 1149, 1149,
+     1706,  704,  704,  704, 3437, 3437, 3437,  704, 1216, 1216,
+     1216, 1216, 3437, 3437, 1216, 1216, 1222, 1222, 1222, 1222,
+     3437, 3437, 1222, 1222,  716,  716,  716, 3437, 3437, 3437,
+      716, 1231, 1231, 1231, 1231, 3437, 3437, 1231, 1231, 1241,
+
+     1241, 1241, 1241, 3437, 3437, 1241, 1241, 1249, 1249, 1249,
+     1249, 3437, 3437, 1249, 1249, 1265, 1265, 1265, 1265, 3437,
+     3437, 1265, 1265,  743,  743,  743, 3437, 3437, 3437,  743,
+     1292, 1292, 1292, 1292, 3437, 3437, 1292, 1292, 1299, 1299,
+     1299, 1299, 3437, 3437, 1299, 1299,  770,  770,  770, 3437,
+     3437, 3437,  770, 1330, 1330, 1330, 1330, 3437, 3437, 1330,
+     1330, 1335, 1335, 1335, 1335, 3437, 3437, 1335, 1335,  791,
+      791,  791, 3437, 3437, 3437,  791,  799,  799,  799, 3437,
+     3437, 3437,  799, 1354, 1354, 1354, 1354, 3437, 3437, 1354,
+     1354, 1362, 1362, 1362, 1362, 3437, 3437, 1362, 1362,  809,
+
+      809,  809, 3437, 3437, 3437,  809, 1374, 1374, 1374, 1374,
+     3437, 3437, 1374, 1374,  819,  819,  819, 3437, 3437, 3437,
+      819, 1395, 1395, 1395, 1395, 3437, 3437, 1395, 1395,  839,
+      839,  839,  839, 3437,  839, 3437,  839, 1407, 1407, 1407,
+     1407, 3437, 3437, 1407, 1407,  853,  853,  853, 3437, 3437,
+     3437,  853, 1432, 1432, 1432, 1432, 3437, 3437, 1432, 1432,
+      864,  864,  864, 3437, 3437, 3437,  864,  870,  870,  870,
+     3437, 3437, 3437,  870, 1449, 1449, 1449, 1449, 3437, 3437,
+     1449, 1449,  875,  875,  875, 3437, 3437, 3437,  875, 1459,
+     1459, 1459, 1459, 3437, 3437, 1459, 1459,  882,  882,  882,
+
+     3437, 3437, 3437,  882, 1469, 1469, 1469, 1469, 3437, 3437,
+     1469, 1469,  890,  890,  890, 3437, 3437, 3437,  890, 1487,
+     1487, 1487, 1487, 3437, 3437, 1487, 1487, 1149, 1149, 1149,
      1149, 1149, 1149, 1149, 1149, 1149, 1706, 1706, 1706, 1706,
-     1706, 1706, 1706, 1706, 1706,  704,  704,  704, 3476, 3476,
-     3476,  704, 1216, 1216, 1216, 1216, 3476, 3476, 1216, 1216,
-     1222, 1222, 1222, 1222, 3476, 3476, 1222, 1222,  716,  716,
-      716,  716, 3476,  716, 3476,  716, 1231, 1231, 1231, 1231,
-     3476, 3476, 1231, 1231, 1241, 1241, 1241, 1241, 3476, 3476,
-
-     1241, 1241, 1249, 1249, 1249, 1249, 3476, 3476, 1249, 1249,
-     1265, 1265, 1265, 1265, 3476, 3476, 1265, 1265,  743,  743,
-      743, 3476, 3476, 3476,  743, 1292, 1292, 1292, 1292, 3476,
-     3476, 1292, 1292,  770,  770,  770, 3476, 3476, 3476,  770,
-     1330, 1330, 1330, 1330, 3476, 3476, 1330, 1330, 1335, 1335,
-     1335, 1335, 3476, 3476, 1335, 1335,  791,  791,  791,  791,
-     3476,  791, 3476,  791,  799,  799,  799,  799, 3476,  799,
-     3476,  799, 1354, 1354, 1354, 1354, 3476, 3476, 1354, 1354,
-     1362, 1362, 1362, 1362, 3476, 3476, 1362, 1362,  809,  809,
-      809,  809, 3476,  809, 3476,  809, 1374, 1374, 1374, 1374,
-
-     3476, 3476, 1374, 1374,  819,  819,  819, 3476, 3476, 3476,
-      819, 1395, 1395, 1395, 1395, 3476, 3476, 1395, 1395,  839,
-      839,  839,  839, 3476,  839, 3476,  839, 1407, 1407, 1407,
-     1407, 3476, 3476, 1407, 1407,  853,  853,  853,  853, 3476,
-      853, 3476,  853,  864,  864,  864, 3476, 3476, 3476,  864,
-      870,  870,  870, 3476, 3476, 3476,  870,  875,  875,  875,
-     3476, 3476, 3476,  875, 1459, 1459, 1459, 1459, 3476, 3476,
-     1459, 1459,  882,  882,  882, 3476, 3476, 3476,  882, 1469,
-     1469, 1469, 1469, 3476, 3476, 1469, 1469,  890,  890,  890,
-     3476, 3476, 3476,  890, 1487, 1487, 1487, 1487, 3476, 3476,
-
+     1706, 1706, 1706, 1706, 1706,  704,  704,  704, 3437, 3437,
+     3437,  704, 1216, 1216, 1216, 1216, 3437, 3437, 1216, 1216,
+     1222, 1222, 1222, 1222, 3437, 3437, 1222, 1222,  716,  716,
+      716,  716, 3437,  716, 3437,  716, 1231, 1231, 1231, 1231,
+     3437, 3437, 1231, 1231, 1241, 1241, 1241, 1241, 3437, 3437,
+     1241, 1241, 1249, 1249, 1249, 1249, 3437, 3437, 1249, 1249,
+
+     1265, 1265, 1265, 1265, 3437, 3437, 1265, 1265,  743,  743,
+      743, 3437, 3437, 3437,  743, 1292, 1292, 1292, 1292, 3437,
+     3437, 1292, 1292,  770,  770,  770, 3437, 3437, 3437,  770,
+     1330, 1330, 1330, 1330, 3437, 3437, 1330, 1330, 1335, 1335,
+     1335, 1335, 3437, 3437, 1335, 1335,  791,  791,  791,  791,
+     3437,  791, 3437,  791,  799,  799,  799,  799, 3437,  799,
+     3437,  799, 1354, 1354, 1354, 1354, 3437, 3437, 1354, 1354,
+     1362, 1362, 1362, 1362, 3437, 3437, 1362, 1362,  809,  809,
+      809,  809, 3437,  809, 3437,  809, 1374, 1374, 1374, 1374,
+     3437, 3437, 1374, 1374,  819,  819,  819, 3437, 3437, 3437,
+
+      819, 1395, 1395, 1395, 1395, 3437, 3437, 1395, 1395,  839,
+      839,  839,  839, 3437,  839, 3437,  839, 1407, 1407, 1407,
+     1407, 3437, 3437, 1407, 1407,  853,  853,  853,  853, 3437,
+      853, 3437,  853,  864,  864,  864, 3437, 3437, 3437,  864,
+      870,  870,  870, 3437, 3437, 3437,  870,  875,  875,  875,
+     3437, 3437, 3437,  875, 1459, 1459, 1459, 1459, 3437, 3437,
+     1459, 1459,  882,  882,  882, 3437, 3437, 3437,  882, 1469,
+     1469, 1469, 1469, 3437, 3437, 1469, 1469,  890,  890,  890,
+     3437, 3437, 3437,  890, 1487, 1487, 1487, 1487, 3437, 3437,
      1487, 1487, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
+
      1149, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706, 1706,
-      704,  704,  704, 3476, 3476, 3476,  704, 1222, 1222, 1222,
-     1222, 3476, 3476, 1222, 1222, 1231, 1231, 1231, 1231, 3476,
-     3476, 1231, 1231, 1241, 1241, 1241, 1241, 3476, 3476, 1241,
-     1241, 1249, 1249, 1249, 1249, 3476, 3476, 1249, 1249,  743,
-      743,  743, 3476, 3476, 3476,  743,  770,  770,  770, 3476,
-     3476, 3476,  770, 1330, 1330, 1330, 1330, 3476, 3476, 1330,
-     1330,  791,  791,  791, 3476, 3476, 3476,  791, 1354, 1354,
-     1354, 1354, 3476, 3476, 1354, 1354, 1362, 1362, 1362, 1362,
-
-     3476, 3476, 1362, 1362, 3045, 3045, 3045, 3045, 3045, 3045,
-     3045, 3045, 3045, 3046, 3046, 3046, 3046, 3046, 3046, 3046,
-     3046, 3046, 3107, 3107, 3107, 3107, 3107, 3107, 3107, 3107,
-     3107, 3110, 3110, 3110, 3110, 3110, 3110, 3110, 3110, 3110,
-     3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3155, 3157,
-     3157, 3157, 3157, 3157, 3157, 3157, 3157, 3157,  247, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476
+      704,  704,  704, 3437, 3437, 3437,  704, 1222, 1222, 1222,
+     1222, 3437, 3437, 1222, 1222, 1231, 1231, 1231, 1231, 3437,
+     3437, 1231, 1231, 1241, 1241, 1241, 1241, 3437, 3437, 1241,
+     1241, 1249, 1249, 1249, 1249, 3437, 3437, 1249, 1249,  743,
+      743,  743, 3437, 3437, 3437,  743,  770,  770,  770, 3437,
+     3437, 3437,  770, 1330, 1330, 1330, 1330, 3437, 3437, 1330,
+     1330,  791,  791,  791, 3437, 3437, 3437,  791, 1354, 1354,
+     1354, 1354, 3437, 3437, 1354, 1354, 1362, 1362, 1362, 1362,
+     3437, 3437, 1362, 1362, 3006, 3006, 3006, 3006, 3006, 3006,
+
+     3006, 3006, 3006, 3007, 3007, 3007, 3007, 3007, 3007, 3007,
+     3007, 3007, 3068, 3068, 3068, 3068, 3068, 3068, 3068, 3068,
+     3068, 3071, 3071, 3071, 3071, 3071, 3071, 3071, 3071, 3071,
+     3116, 3116, 3116, 3116, 3116, 3116, 3116, 3116, 3116, 3118,
+     3118, 3118, 3118, 3118, 3118, 3118, 3118, 3118,  247, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437
     } ;
 
-static yyconst flex_int16_t yy_chk[12534] =
+static yyconst flex_int16_t yy_chk[12424] =
     {   0,
         0,    3,    3,    3,    4,    4,    4,    5,    5,    5,
         6,    6,    6,    7,    7,    7,   11,    3,    9,   12,
@@ -3283,1224 +3259,1212 @@ static yyconst flex_int16_t yy_chk[12534] =
       165,  888,  644,  166,  688, 1603,  167,  688,  108,  108,
       168,  108,  530,  108,  530,  561,  561,  561,  644,  108,
 
-      564,  564,  564,  575,  575,  575,  108, 1606, 1610,  108,
+      564,  564,  564,  575,  575,  575,  108, 1606, 1608,  108,
       117,  117,  117,  117,  117,  117,  117,  117,  117,  117,
       117,  117,  117,  117,  117,  587,  117,  117,  117,  117,
       117,  169,  169,  169,  170,  170,  170,  171,  171,  171,
-      835,  172,  172,  172,  173,  173,  173,  169, 1611, 1618,
+      835,  172,  172,  172,  173,  173,  173,  169, 1610, 1611,
       170,  576,  685,  171,  835,  117,  117,  172,  576,  685,
       173,  117,  578,  578,  578,  685,  117,  576,  586,  586,
-      586, 1619, 1620,  587,  590,  590,  590,  587,  117,  118,
+      586, 1618, 1619,  587,  590,  590,  590,  587,  117,  118,
       118,  118,  118,  118,  118,  118,  118,  118,  118,  118,
-      118,  118,  118,  118, 1623,  118,  118,  118,  118,  118,
+      118,  118,  118,  118, 1620,  118,  118,  118,  118,  118,
 
-      174,  174,  174,  175,  175,  175,  176,  176,  176, 1629,
-      177,  177,  177,  178,  178,  178,  174, 1633, 1635,  175,
-      599,  693,  176, 1637,  118,  118,  177,  599,  693,  178,
+      174,  174,  174,  175,  175,  175,  176,  176,  176, 1621,
+      177,  177,  177,  178,  178,  178,  174, 1623, 1629,  175,
+      599,  693,  176, 1633,  118,  118,  177,  599,  693,  178,
       118,  598,  598,  598,  693,  118,  599,  601,  601,  601,
-      611,  611,  611,  615,  615,  615, 1638,  118,  121,  121,
+      611,  611,  611,  615,  615,  615, 1635,  118,  121,  121,
       121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
-      121,  121,  121, 1643,  121,  121,  121,  121,  121,  179,
+      121,  121,  121, 1637,  121,  121,  121,  121,  121,  179,
       179,  179,  180,  180,  180,  181,  181,  181,  833,  182,
-      182,  182,  183,  183,  183,  179,  836, 1645,  180,  833,
-     1646,  181,  833,  121,  121,  182, 1648,  836,  183, 1649,
+      182,  182,  183,  183,  183,  179,  836, 1638,  180,  833,
+     1643,  181,  833,  121,  121,  182, 1645,  836,  183, 1646,
 
       836,  121,  122,  122,  122,  122,  122,  122,  122,  122,
-      122,  122,  122,  122,  122,  122,  122, 1650,  122,  122,
+      122,  122,  122,  122,  122,  122,  122, 1648,  122,  122,
       122,  122,  122,  184,  184,  184,  187,  187,  187,  188,
-      188,  188, 1651,  189,  189,  189,  190,  190,  190,  184,
-     1152, 1191,  187, 1654, 1152,  188, 1655,  122,  122,  189,
-     1656, 1658,  190, 1661, 1191,  122,  131,  131,  131,  131,
+      188,  188, 1649,  189,  189,  189,  190,  190,  190,  184,
+     1152, 1191,  187, 1650, 1152,  188, 1651,  122,  122,  189,
+     1654, 1655,  190, 1656, 1191,  122,  131,  131,  131,  131,
       131,  131,  131,  131,  131,  131,  131,  131,  131,  131,
-      131, 1670,  131,  131,  131,  131,  131,  191,  191,  191,
-      192,  192,  192,  193,  193,  193, 1673,  194,  194,  194,
-      197,  197,  197,  191,  905, 1681,  192,  638, 1399,  193,
+      131, 1658,  131,  131,  131,  131,  131,  191,  191,  191,
+      192,  192,  192,  193,  193,  193, 1661,  194,  194,  194,
+      197,  197,  197,  191,  905, 1670,  192,  638, 1399,  193,
 
-     1683,  131,  131,  194,  638,  131,  197,  625,  625,  625,
-      905, 1399,  131,  638, 1685,  131,  630,  630,  630,  641,
+     1673,  131,  131,  194,  638,  131,  197,  625,  625,  625,
+      905, 1399,  131,  638, 1681,  131,  630,  630,  630,  641,
       641,  641,  131,  132,  132,  132,  132,  132,  132,  132,
-      132,  132,  132,  132,  132,  132,  132,  132, 1686,  132,
+      132,  132,  132,  132,  132,  132,  132,  132, 1683,  132,
       132,  132,  132,  132,  198,  198,  198,  201,  201,  201,
-      202,  202,  202, 1687,  205,  205,  205,  206,  206,  206,
-      198, 1689, 1694,  201,  651, 1697,  202, 1698,  132,  132,
-      205,  651,  132,  206,  650,  650,  650, 1700, 1706,  132,
-      651, 1709,  132,  652,  652,  652,  661,  661,  661,  132,
+      202,  202,  202, 1685,  205,  205,  205,  206,  206,  206,
+      198, 1686, 1687,  201,  651, 1689,  202, 1694,  132,  132,
+      205,  651,  132,  206,  650,  650,  650, 1697, 1698,  132,
+      651, 1700,  132,  652,  652,  652,  661,  661,  661,  132,
       141,  141,  141,  141,  141,  141,  141,  141,  141,  141,
 
-      141,  141,  141,  141,  141, 1712,  141,  141,  141,  141,
+      141,  141,  141,  141,  141, 1706,  141,  141,  141,  141,
       141,  207,  207,  207,  208,  208,  208,  209,  209,  209,
-     1713,  210,  210,  210,  211,  211,  211,  207, 1714, 1715,
-      208,  699, 1716,  209, 1717,  141,  141,  210,  699, 1718,
-      211,  141, 1719, 1721,  699,  661,  141,  142,  142,  142,
+     1709,  210,  210,  210,  211,  211,  211,  207, 1712, 1713,
+      208,  699, 1714,  209, 1715,  141,  141,  210,  699, 1716,
+      211,  141, 1717, 1718,  699,  661,  141,  142,  142,  142,
       142,  142,  142,  142,  142,  142,  142,  142,  142,  142,
-      142,  142, 1722,  142,  142,  142,  142,  142,  212,  212,
-      212,  215,  215,  215,  216,  216,  216, 1724,  219,  219,
-      219,  220,  220,  220,  212, 1725, 1727,  215,  834,  837,
-      216, 1729,  142,  142,  219,  834,  837,  220,  142, 1730,
+      142,  142, 1719,  142,  142,  142,  142,  142,  212,  212,
+      212,  215,  215,  215,  216,  216,  216, 1721,  219,  219,
+      219,  220,  220,  220,  212, 1722, 1724,  215,  834,  837,
+      216, 1725,  142,  142,  219,  834,  837,  220,  142, 1727,
 
-     1732,  834,  837,  142,  145,  145,  145,  145,  145,  145,
-      145,  145,  145,  145,  145,  145,  145,  145,  145, 1734,
+     1729,  834,  837,  142,  145,  145,  145,  145,  145,  145,
+      145,  145,  145,  145,  145,  145,  145,  145,  145, 1730,
       145,  145,  145,  145,  145,  221,  221,  221,  222,  222,
-      222,  223,  223,  223, 1737,  224,  224,  224,  225,  225,
-      225,  221,  995, 1738,  222, 1705, 1739,  223, 1740,  145,
-      145,  224,  995, 1741,  225,  226,  226,  226, 1743,  995,
-      145,  908,  908,  908, 1744,  908, 1169, 1169, 1169, 1748,
-     1705,  226, 1756,  145,  146,  146,  146,  146,  146,  146,
-      146,  146,  146,  146,  146,  146,  146,  146,  146, 1760,
+      222,  223,  223,  223, 1732,  224,  224,  224,  225,  225,
+      225,  221,  995, 1734,  222, 1705, 1737,  223, 1738,  145,
+      145,  224,  995, 1739,  225,  226,  226,  226, 1740,  995,
+      145,  908,  908,  908, 1741,  908, 1169, 1169, 1169, 1743,
+     1705,  226, 1744,  145,  146,  146,  146,  146,  146,  146,
+      146,  146,  146,  146,  146,  146,  146,  146,  146, 1748,
       146,  146,  146,  146,  146,  229,  229,  229,  230,  230,
 
-      230,  231,  231,  231, 1761,  232,  232,  232,  233,  233,
-      233,  229, 1773, 1777,  230, 1781, 1782,  231, 1784,  146,
-      146,  232, 1785, 1786,  233,  234,  234,  234, 1789, 1791,
-      146,  917,  917,  917, 1792,  917, 1800, 1801,  917, 1810,
-     1813,  234, 1822,  146,  149,  149,  149,  149,  149,  149,
-      149,  149,  149,  149,  149,  149,  149,  149,  149, 1823,
+      230,  231,  231,  231, 1756,  232,  232,  232,  233,  233,
+      233,  229, 1760, 1761,  230, 1773, 1777,  231, 1781,  146,
+      146,  232, 1782, 1784,  233,  234,  234,  234, 1785, 1786,
+      146,  917,  917,  917, 1789,  917, 1791, 1792,  917, 1800,
+     1801,  234, 1808,  146,  149,  149,  149,  149,  149,  149,
+      149,  149,  149,  149,  149,  149,  149,  149,  149, 1811,
       149,  149,  149,  149,  149,  235,  235,  235,  236,  236,
-      236, 1824,  243,  243,  243, 1827, 1829,  244,  244,  244,
-     1837,  235,  239,  239,  236, 1844, 1848,  239,  243,  149,
-      149,  240,  240,  244,  287, 1851,  240,  239, 1853,  444,
+      236, 1820,  243,  243,  243, 1821, 1822,  244,  244,  244,
+     1823,  235,  239,  239,  236, 1825, 1833,  239,  243,  149,
+      149,  240,  240,  244,  287, 1840,  240,  239, 1844,  444,
 
-      921,  921,  921, 1854,  287,  149,  240, 1856, 1857,  444,
+      921,  921,  921, 1847,  287,  149,  240, 1849, 1850,  444,
       149,  150,  150,  150,  150,  150,  150,  150,  150,  150,
       150,  150,  150,  150,  150,  150,  239,  150,  150,  150,
-      150,  150,  287, 1858, 1859,  240, 1863, 1864,  444, 1865,
-     1867,  669,  669,  669,  444, 1871,  287, 1875,  287, 1879,
+      150,  150,  287, 1852, 1853,  240, 1854, 1855,  444, 1859,
+     1860,  669,  669,  669,  444, 1861,  287, 1863,  287, 1867,
       287,  444,  718,  718,  718,  444,  150,  150,  669,  734,
-      734,  734, 1881, 1883,  921,  942,  942,  942, 1889,  718,
-     1896, 1900,  150,  955,  955,  955,  734,  150,  153,  153,
+      734,  734, 1871, 1875,  921,  942,  942,  942, 1877,  718,
+     1879, 1885,  150,  955,  955,  955,  734,  150,  153,  153,
       153,  153,  153,  153,  153,  153,  153,  153,  153,  153,
-      153,  153,  153, 1901,  153,  153,  153,  153,  153,  735,
+      153,  153,  153, 1892,  153,  153,  153,  153,  153,  735,
 
       735,  735,  746,  746,  746,  748,  748,  748,  763,  763,
-      763,  773,  773,  773, 1903, 1915,  735, 1910, 1916,  746,
-     1905, 1917,  748,  153,  153,  763, 1905, 1919,  773,  942,
-     1905,  970,  970,  970, 1910,  970, 1905,  955,  970,  153,
-     1911, 1043, 1043, 1043, 1920,  153,  154,  154,  154,  154,
+      763,  773,  773,  773, 1896, 1897,  735, 1899, 1911,  746,
+     1901, 1912,  748,  153,  153,  763, 1901, 1906,  773,  942,
+     1901,  970,  970,  970, 1913,  970, 1901,  955,  970,  153,
+     1907, 1043, 1043, 1043, 1906,  153,  154,  154,  154,  154,
       154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
-      154, 1912,  154,  154,  154,  154,  154,  782,  782,  782,
+      154, 1908,  154,  154,  154,  154,  154,  782,  782,  782,
       783,  783,  783,  793,  793,  793,  801,  801,  801,  805,
-      805,  805, 1911, 1922,  782, 1923, 1918,  783, 1924, 1925,
-      793,  154,  154,  801, 1912, 1927,  805,  984,  984,  984,
+      805,  805, 1907, 1915,  782, 1916, 1914,  783, 1918, 1919,
+      793,  154,  154,  801, 1908, 1920,  805,  984,  984,  984,
 
-     1928,  984, 1918, 1929,  984, 1043, 1933,  154, 1177, 1177,
-     1177, 1935, 1936,  154,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157, 1937,
+     1921,  984, 1914, 1923,  984, 1043, 1924,  154, 1177, 1177,
+     1177, 1925, 1929,  154,  157,  157,  157,  157,  157,  157,
+      157,  157,  157,  157,  157,  157,  157,  157,  157, 1931,
       157,  157,  157,  157,  157,  823,  823,  823,  849,  849,
-      849,  855,  855,  855,  872,  872,  872, 1939,  878,  878,
-      878, 1940,  823, 1941, 1942,  849, 1938, 1945,  855,  157,
-      157,  872,  157,  157,  157,  878, 1947,  986,  986,  986,
-      157,  986, 1938,  157,  986, 1192, 1192, 1192, 1952, 1954,
+      849,  855,  855,  855,  872,  872,  872, 1932,  878,  878,
+      878, 1933,  823, 1935, 1936,  849, 1934, 1937,  855,  157,
+      157,  872,  157,  157,  157,  878, 1938,  986,  986,  986,
+      157,  986, 1934,  157,  986, 1192, 1192, 1192, 1941, 1943,
       157,  158,  158,  158,  158,  158,  158,  158,  158,  158,
-      158,  158,  158,  158,  158,  158, 1959,  158,  158,  158,
+      158,  158,  158,  158,  158,  158, 1948,  158,  158,  158,
 
       158,  158,  884,  884,  884,  892,  892,  892,  916,  916,
-      916,  958,  958,  958,  919,  919,  919, 1977, 1983,  884,
-     1984, 1985,  892, 1989, 1990,  916,  158,  158,  958,  158,
-      158,  158,  919, 1994,  997,  997,  997,  158,  997, 1997,
-      158,  997, 1198, 1198, 1198, 1998, 2001,  158,  163,  163,
+      916,  958,  958,  958,  919,  919,  919, 1950, 1955,  884,
+     1973, 1979,  892, 1980, 1981,  916,  158,  158,  958,  158,
+      158,  158,  919, 1985,  997,  997,  997,  158,  997, 1986,
+      158,  997, 1198, 1198, 1198, 1990, 1993,  158,  163,  163,
       163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
-      163,  163,  163, 2002,  163,  163,  163,  163,  163,  920,
-      920,  920,  960,  960,  960, 2009, 2010,  962,  962,  962,
-      961,  961,  961,  959,  959,  959, 2011,  920, 2015,  960,
-      966,  966,  966,  163,  163,  962, 2018,  961, 2020, 2022,
+      163,  163,  163, 1994,  163,  163,  163,  163,  163,  920,
+      920,  920,  960,  960,  960, 1997, 1998,  962,  962,  962,
+      961,  961,  961,  959,  959,  959, 2004,  920, 2008,  960,
+      966,  966,  966,  163,  163,  962, 2011,  961, 2013, 2014,
 
-      959, 2023, 2024, 1000, 1000, 1000,  920, 1000,  966, 2027,
+      959, 2017, 2023, 1000, 1000, 1000,  920, 1000,  966, 2028,
      1000, 1506, 1506, 1506, 1513, 1513, 1513,  163,  164,  164,
       164,  164,  164,  164,  164,  164,  164,  164,  164,  164,
       164,  164,  164,  959,  164,  164,  164,  164,  164,  961,
-      963,  963,  963,  969,  969,  969, 2033, 2038,  959,  967,
-      967,  967,  972,  972,  972,  974,  974,  974,  963, 2044,
-      969, 2048, 2051,  164,  164, 2055, 2057,  967, 2058, 2059,
-      972, 2060,  974, 2062, 1015, 1015, 1015,  963, 1015, 2068,
-     2070, 1015, 1507, 1507, 1507, 2072, 2074,  164,  185,  185,
+      963,  963,  963,  969,  969,  969, 2034, 2038,  959,  967,
+      967,  967,  972,  972,  972,  974,  974,  974,  963, 2041,
+      969, 2045, 2047,  164,  164, 2048, 2049,  967, 2050, 2052,
+      972, 2058,  974, 2060, 1015, 1015, 1015,  963, 1015, 2062,
+     2064, 1015, 1507, 1507, 1507, 2077, 2078,  164,  185,  185,
       185,  185,  185,  185,  185,  185,  185,  185,  185,  185,
 
-      185,  185,  185, 2087,  185,  185,  185,  185,  185,  976,
-      976,  976, 2088,  967,  977,  977,  977,  978,  978,  978,
-      975,  975,  975,  979,  979,  979,  976, 2089, 1507,  973,
-      973,  973,  977,  185,  185,  978, 2092,  975, 2093, 2095,
-      979,  185, 2096,  185, 2097, 2099,  185,  973, 2110, 2111,
+      185,  185,  185, 2079,  185,  185,  185,  185,  185,  976,
+      976,  976, 2082,  967,  977,  977,  977,  978,  978,  978,
+      975,  975,  975,  979,  979,  979,  976, 2083, 1507,  973,
+      973,  973,  977,  185,  185,  978, 2084,  975, 2085, 2086,
+      979,  185, 2087,  185, 2084, 2089,  185,  973, 2100, 2101,
       185, 1516, 1516, 1516,  185,  186,  186,  186,  186,  186,
       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
       975,  186,  186,  186,  186,  186,  973,  980,  980,  980,
-      981,  981,  981, 2112, 2094,  975, 2113, 2104,  978,  982,
-      982,  982, 2094, 2104,  980,  983,  983,  983,  981, 2117,
-
-      186,  186,  985,  985,  985, 2119, 2105,  982,  186, 2120,
-      186, 2121,  983,  186, 1521, 1521, 1521,  186, 2122,  985,
-     2127,  186,  195,  195,  195,  195,  195,  195,  195,  195,
-      195,  195,  195,  195,  195,  195,  195, 2105,  195,  195,
-      195,  195,  195, 2106,  987,  987,  987,  992,  992,  992,
-     1527, 1527, 1527, 2129, 2130,  988,  988,  988, 2098, 2131,
-      982,  987,  989,  989,  989,  992, 2098,  195,  195,  990,
-      990,  990,  988,  991,  991,  991, 2134, 2138,  195,  989,
-     1025, 1025, 1025, 2145, 1025, 2147,  990, 1025, 2149, 2106,
+      981,  981,  981, 2102, 2088,  975, 2103, 2094,  978,  982,
+      982,  982, 2088, 2094,  980,  983,  983,  983,  981, 2107,
+
+      186,  186,  985,  985,  985, 2109, 2095,  982,  186, 2110,
+      186, 2111,  983,  186, 1521, 1521, 1521,  186, 2112,  985,
+     2096,  186,  195,  195,  195,  195,  195,  195,  195,  195,
+      195,  195,  195,  195,  195,  195,  195, 2095,  195,  195,
+      195,  195,  195, 2117,  987,  987,  987,  992,  992,  992,
+     1527, 1527, 1527, 2119, 2120,  988,  988,  988, 2121, 2124,
+      982,  987,  989,  989,  989,  992, 2096,  195,  195,  990,
+      990,  990,  988,  991,  991,  991, 2128, 2135,  195,  989,
+     1025, 1025, 1025, 2137, 1025, 2139,  990, 1025, 2160, 2164,
       991,  195,  196,  196,  196,  196,  196,  196,  196,  196,
 
       196,  196,  196,  196,  196,  196,  196,  988,  196,  196,
-      196,  196,  196,  993,  993,  993, 2170,  989, 2174, 2175,
-      990, 2176,  996,  996,  996,  991,  999,  999,  999, 2182,
-     2183,  993, 1001, 1001, 1001, 2184, 2188,  196,  196,  996,
-     1012, 1012, 1012,  999, 1509, 1509, 1509, 2192,  196, 1001,
-     1035, 1035, 1035, 2193, 1035, 2199, 2200, 1035, 1012, 2203,
+      196,  196,  196,  993,  993,  993, 2165,  989, 2166, 2172,
+      990, 2173,  996,  996,  996,  991,  999,  999,  999, 2174,
+     2178,  993, 1001, 1001, 1001, 2182, 2183,  196,  196,  996,
+     1012, 1012, 1012,  999, 1509, 1509, 1509, 2187,  196, 1001,
+     1035, 1035, 1035, 2188, 1035, 2191, 2194, 1035, 1012, 2195,
       993,  196,  199,  199,  199,  199,  199,  199,  199,  199,
-      199,  199,  199,  199,  199,  199,  199, 2206,  199,  199,
-      199,  199,  199, 1014, 1014, 1014, 1013, 1013, 1013, 2207,
+      199,  199,  199,  199,  199,  199,  199, 2196,  199,  199,
+      199,  199,  199, 1014, 1014, 1014, 1013, 1013, 1013, 2197,
      1509, 1016, 1016, 1016, 1017, 1017, 1017, 1019, 1019, 1019,
 
-     1014, 1020, 1020, 1020, 1013, 2197, 2198,  199,  199, 1016,
-     2210, 2211, 1017, 2197, 2198, 1019,  199, 2214,  199, 1020,
-     2221, 2225,  199, 1531, 1531, 1531, 2226,  199,  199,  200,
+     1014, 1020, 1020, 1020, 1013, 2200, 2207,  199,  199, 1016,
+     2211, 2212, 1017, 2213, 2225, 1019,  199, 2226,  199, 1020,
+     2229, 2231,  199, 1531, 1531, 1531, 2234,  199,  199,  200,
       200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
       200,  200,  200,  200, 1013,  200,  200,  200,  200,  200,
-     1024, 1024, 1024, 2208, 2209, 1017, 2227, 2239, 1029, 1029,
-     1029, 2208, 2209, 1020, 1030, 1030, 1030, 1024, 2240, 1034,
-     1034, 1034, 2243, 2245,  200,  200, 1029, 1037, 1037, 1037,
-     2248, 1037, 1030,  200, 1037,  200, 1034, 2255, 2262,  200,
+     1024, 1024, 1024, 2241, 2248, 1017, 2250, 2251, 1029, 1029,
+     1029, 2252, 2257, 1020, 1030, 1030, 1030, 1024, 2258, 1034,
+     1034, 1034, 2259, 2260,  200,  200, 1029, 1037, 1037, 1037,
+     2261, 1037, 1030,  200, 1037,  200, 1034, 2262, 2263,  200,
      1720, 1720, 1720, 2264,  200,  200,  203,  203,  203,  203,
 
       203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
       203, 2265,  203,  203,  203,  203,  203, 1036, 1036, 1036,
-     1038, 1038, 1038, 1906, 2266, 1030, 1039, 1039, 1039, 1906,
-     1041, 1041, 1041, 1906, 1036, 1042, 1042, 1042, 1038, 1906,
-     2271,  203,  203, 2272, 1039, 2273, 2274,  203, 1041, 2275,
-     1046, 1046, 1046, 1042, 1046, 2276, 2277, 1046, 2278, 1528,
+     1038, 1038, 1038, 1902, 2266, 1030, 1039, 1039, 1039, 1902,
+     1041, 1041, 1041, 1902, 1036, 1042, 1042, 1042, 1038, 1902,
+     2277,  203,  203, 2278, 1039, 2281, 2284,  203, 1041, 2270,
+     1046, 1046, 1046, 1042, 1046, 2289, 2290, 1046, 2293, 1528,
      1528, 1528,  203,  204,  204,  204,  204,  204,  204,  204,
-      204,  204,  204,  204,  204,  204,  204,  204, 2279,  204,
+      204,  204,  204,  204,  204,  204,  204,  204, 2269,  204,
       204,  204,  204,  204, 1045, 1045, 1045, 1039, 1050, 1050,
-     1050, 2280, 1055, 1055, 1055, 1042, 2291, 1051, 1051, 1051,
+     1050, 2294, 1055, 1055, 1055, 1042, 2270, 1051, 1051, 1051,
 
-     2292, 1045, 1053, 1053, 1053, 1528, 1050, 2295,  204,  204,
+     2297, 1045, 1053, 1053, 1053, 1528, 1050, 2300,  204,  204,
      1055, 1057, 1057, 1057,  204, 1051, 1054, 1054, 1054, 1053,
-     1054, 2298, 2303, 1054, 1530, 1530, 1530, 2304, 1057,  204,
+     1054, 2269, 2301, 1054, 1530, 1530, 1530, 2302, 1057,  204,
       213,  213,  213,  213,  213,  213,  213,  213,  213,  213,
-      213,  213,  213,  213,  213, 2307,  213,  213,  213,  213,
-      213, 2308, 1051, 1056, 1056, 1056, 1058, 1058, 1058, 2283,
-     1058, 2311, 2314, 1058, 1060, 1060, 1060, 1061, 1061, 1061,
+      213,  213,  213,  213,  213, 2317,  213,  213,  213,  213,
+      213, 2318, 1051, 1056, 1056, 1056, 1058, 1058, 1058, 2319,
+     1058, 2325, 2326, 1058, 1060, 1060, 1060, 1061, 1061, 1061,
      1530, 1056, 1723, 1723, 1723,  213,  213, 1074, 1074, 1074,
-      213, 1074, 1060, 2315, 1074, 1061,  213,  214,  214,  214,
+      213, 1074, 1060, 2327, 1074, 1061,  213,  214,  214,  214,
       214,  214,  214,  214,  214,  214,  214,  214,  214,  214,
 
-      214,  214, 2283,  214,  214,  214,  214,  214, 1056, 1064,
-     1064, 1064, 1065, 1065, 1065, 2316, 1068, 1068, 1068, 2331,
-     1069, 1069, 1069, 1073, 1073, 1073, 2332, 1064, 1061, 2333,
-     1065, 2334,  214,  214, 1068, 2339, 2284,  214, 1069, 2340,
-     1073, 2334, 2341,  214,  217,  217,  217,  217,  217,  217,
-      217,  217,  217,  217,  217,  217,  217,  217,  217, 2347,
+      214,  214, 2333,  214,  214,  214,  214,  214, 1056, 1064,
+     1064, 1064, 1065, 1065, 1065, 2334, 1068, 1068, 1068, 2320,
+     1069, 1069, 1069, 1073, 1073, 1073, 2335, 1064, 1061, 2320,
+     1065, 2351,  214,  214, 1068, 2352, 2353,  214, 1069, 2374,
+     1073, 2375, 2381,  214,  217,  217,  217,  217,  217,  217,
+      217,  217,  217,  217,  217,  217,  217,  217,  217, 2386,
       217,  217,  217,  217,  217, 1075, 1075, 1075, 1078, 1078,
-     1078, 2348, 2349, 1065, 2350, 1082, 1082, 1082, 1083, 1083,
-     1083, 2351, 1075, 2284, 2352, 1069, 1078, 2353, 2363,  217,
-      217, 2364,  217, 1082,  217, 2365, 1083, 1096, 1096, 1096,
+     1078, 2388, 2389, 1065, 2394, 1082, 1082, 1082, 1083, 1083,
+     1083, 2395, 1075, 2396, 2397, 1069, 1078, 2398, 2399,  217,
+      217, 2400,  217, 1082,  217, 2401, 1083, 1096, 1096, 1096,
 
-      217, 1096, 2366, 2373, 1096, 1726, 1726, 1726, 1547, 1547,
+      217, 1096, 2402, 2403, 1096, 1726, 1726, 1726, 1547, 1547,
      1547,  217,  218,  218,  218,  218,  218,  218,  218,  218,
-      218,  218,  218,  218,  218,  218,  218, 2374,  218,  218,
+      218,  218,  218,  218,  218,  218,  218, 2408,  218,  218,
       218,  218,  218, 1095, 1095, 1095, 1083, 1092, 1092, 1092,
-     2375, 1093, 1093, 1093, 2396, 1098, 1098, 1098, 2397, 2403,
-     1095, 1079, 1079, 1079, 1547, 1092, 2408,  218,  218, 1093,
-      218, 2410,  218, 1098, 1728, 1728, 1728, 2411,  218, 1079,
-     1102, 1102, 1102, 2416, 1102, 2417, 2418, 1102, 2419,  218,
+     2409, 1093, 1093, 1093, 2406, 1098, 1098, 1098, 2411, 2412,
+     1095, 1079, 1079, 1079, 1547, 1092, 2413,  218,  218, 1093,
+      218, 2414,  218, 1098, 1728, 1728, 1728, 2407,  218, 1079,
+     1102, 1102, 1102, 2416, 1102, 2417, 2406, 1102, 2420,  218,
       227,  227,  227,  227,  227,  227,  227,  227,  227,  227,
-      227,  227,  227,  227,  227, 2420,  227,  227,  227,  227,
+      227,  227,  227,  227,  227, 2421,  227,  227,  227,  227,
 
-      227, 2421, 1079, 2422, 2423, 1093, 1099, 1099, 1099, 2424,
-     1101, 1101, 1101, 2425, 1103, 1103, 1103, 1105, 1105, 1105,
-     1109, 1109, 1109, 2430, 1099,  227,  227, 1101, 2431, 2433,
-      227, 1103, 2434, 2435, 1105, 2436,  227, 2428, 1109, 2438,
-      227, 1731, 1731, 1731, 2429, 2439,  227,  228,  228,  228,
+      227, 2424, 1079, 2427, 2407, 1093, 1099, 1099, 1099, 2428,
+     1101, 1101, 1101, 2430, 1103, 1103, 1103, 1105, 1105, 1105,
+     1109, 1109, 1109, 2410, 1099,  227,  227, 1101, 2415, 2431,
+      227, 1103, 2410, 2433, 1105, 2434,  227, 2415, 1109, 2435,
+      227, 1731, 1731, 1731, 2447, 2448,  227,  228,  228,  228,
       228,  228,  228,  228,  228,  228,  228,  228,  228,  228,
-      228,  228, 2442,  228,  228,  228,  228,  228, 2443, 2428,
+      228,  228, 2449,  228,  228,  228,  228,  228, 2450, 2451,
      1099, 1111, 1111, 1111, 1112, 1112, 1112, 1113, 1113, 1113,
-     2432, 2429, 1110, 1110, 1110, 1117, 1117, 1117, 1111, 2432,
-     2437, 1112,  228,  228, 1113, 2446, 2449,  228, 2450, 2437,
+     2454, 2456, 1110, 1110, 1110, 1117, 1117, 1117, 1111, 2462,
+     2463, 1112,  228,  228, 1113, 2471, 2458,  228, 2472, 2459,
 
-     1110, 2452, 1117,  228, 1118, 1118, 1118,  228, 1118, 2453,
-     2455, 1118, 2456,  228,  237,  237,  237,  237,  237,  237,
+     1110, 2473, 1117,  228, 1118, 1118, 1118,  228, 1118, 2458,
+     2482, 1118, 2459,  228,  237,  237,  237,  237,  237,  237,
       237,  237,  237,  237,  237,  237,  237,  237,  237, 1110,
-      237,  237,  237,  237,  237, 2457, 1113, 1114, 1114, 1114,
+      237,  237,  237,  237,  237, 2483, 1113, 1114, 1114, 1114,
      1115, 1115, 1115, 1119, 1119, 1119, 1120, 1120, 1120, 1123,
-     1123, 1123, 1129, 1129, 1129, 1114, 2469, 2470, 1115,  237,
-      237, 1119, 2471, 2472, 1120, 2473, 1123,  237, 2476, 1129,
+     1123, 1123, 1129, 1129, 1129, 1114, 2500, 2501, 1115,  237,
+      237, 1119, 2502, 2505, 1120, 2507, 1123,  237, 2508, 1129,
       237, 1733, 1733, 1733, 1736, 1736, 1736,  237,  238,  238,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
-      238,  238,  238, 2478,  238,  238,  238,  238,  238, 2484,
-
-     2480, 1115, 1124, 1124, 1124, 2485, 1124, 1120, 2481, 1124,
-     1126, 1126, 1126, 2480, 1127, 1127, 1127, 2486, 1130, 1130,
-     1130, 2481, 1130,  238,  238, 1130, 2488, 2497, 1126, 2498,
-     2499,  238, 1127, 2500,  238, 1733, 1735, 1735, 1735, 2502,
-     2512,  238,  241,  241,  241,  241,  241,  241,  241,  241,
-      241,  241,  241,  241,  241,  241,  241, 2513,  241,  241,
+      238,  238,  238, 2509,  238,  238,  238,  238,  238, 2510,
+
+     2511, 1115, 1124, 1124, 1124, 2512, 1124, 1120, 2513, 1124,
+     1126, 1126, 1126, 2514, 1127, 1127, 1127, 2515, 1130, 1130,
+     1130, 2516, 1130,  238,  238, 1130, 2517, 2518, 1126, 2523,
+     2524,  238, 1127, 2525,  238, 1733, 1735, 1735, 1735, 2526,
+     2521,  238,  241,  241,  241,  241,  241,  241,  241,  241,
+      241,  241,  241,  241,  241,  241,  241, 2527,  241,  241,
       241,  241,  241, 1133, 1133, 1133, 1134, 1134, 1134, 1137,
-     1137, 1137, 1138, 1138, 1138, 2530, 1138, 2531, 2532, 1138,
-     1127, 1133, 1735, 2535, 1134, 2537, 1137,  241,  241, 1141,
-     1141, 1141, 2538, 2539,  241, 1161, 1161, 1161, 2540, 1161,
+     1137, 1137, 1138, 1138, 1138, 2528, 1138, 2521, 2529, 1138,
+     1127, 1133, 1735, 2530, 1134, 2520, 1137,  241,  241, 1141,
+     1141, 1141, 2531, 2532,  241, 1161, 1161, 1161, 2533, 1161,
 
-      241, 2541, 1161, 1742, 1742, 1742, 2542, 1141, 2543,  241,
+      241, 2534, 1161, 1742, 1742, 1742, 2535, 1141, 2536,  241,
       242,  242,  242,  242,  242,  242,  242,  242,  242,  242,
-      242,  242,  242,  242,  242, 2544,  242,  242,  242,  242,
-      242, 2545, 1134, 1142, 1142, 1142, 1147, 1147, 1147, 1148,
+      242,  242,  242,  242,  242, 2520,  242,  242,  242,  242,
+      242, 2539, 1134, 1142, 1142, 1142, 1147, 1147, 1147, 1148,
      1148, 1148, 1165, 1165, 1165, 1166, 1166, 1166, 1168, 1168,
-     1168, 1142, 2546, 2547, 1147,  242,  242, 1148, 2548, 2553,
-     1165, 2554,  242, 1166, 2555, 2551, 1168, 2556,  242, 1208,
-     1208, 1208, 1209, 1209, 1209, 2557, 1209,  242,  284, 1209,
-     2558, 1212, 1212, 1212, 2559,  284, 1208, 2560, 2561, 1213,
-     1213, 1213, 2550, 1213,  284,  284, 1213, 1142, 1212, 1215,
-
-     1215, 1215, 2551, 1148, 1234, 1234, 1234, 1216, 1216, 1216,
-     1238, 1238, 1238, 1218, 1218, 1218, 2562, 1215, 1221, 1221,
-     1221, 1234,  284,  284,  284, 1216, 2563, 1238,  284,  284,
-      284, 1218, 2550,  284,  284, 2564, 1221,  284, 2552,  284,
+     1168, 1142, 2540, 2541, 1147,  242,  242, 1148, 2542, 2522,
+     1165, 2544,  242, 1166, 2545, 2556, 1168, 2557,  242, 1208,
+     1208, 1208, 1209, 1209, 1209, 2558, 1209,  242,  284, 1209,
+     2560, 1212, 1212, 1212, 2564,  284, 1208, 2567, 2569, 1213,
+     1213, 1213, 2571, 1213,  284,  284, 1213, 1142, 1212, 1215,
+
+     1215, 1215, 2522, 1148, 1234, 1234, 1234, 1216, 1216, 1216,
+     1238, 1238, 1238, 1218, 1218, 1218, 2572, 1215, 1221, 1221,
+     1221, 1234,  284,  284,  284, 1216, 2580, 1238,  284,  284,
+      284, 1218, 2581,  284,  284, 2582, 1221,  284, 2596,  284,
       284,  284,  286, 1222, 1222, 1222, 1224, 1224, 1224, 1226,
-     1226, 1226, 2565, 1226, 2566, 2569, 1226, 2570,  286,  286,
-     2571, 1222, 2572, 2574, 1224, 1230, 1230, 1230, 1244, 1244,
+     1226, 1226, 2568, 1226, 2615, 2616, 1226, 2620,  286,  286,
+     2621, 1222, 2622, 2568, 1224, 1230, 1230, 1230, 1244, 1244,
      1244, 1231, 1231, 1231, 1246, 1246, 1246, 1218, 1233, 1233,
-     1233, 2552, 2575, 1230, 2586, 1244,  286,  286,  286, 1231,
-     2587, 1246,  286,  286,  286, 2588, 1233,  286,  286, 1224,
-
-     2590,  286, 2594,  286,  286,  286, 1235, 1235, 1235, 2597,
-     1235, 2599, 2601, 1235, 1239, 1239, 1239, 2602, 1239, 2612,
-     2613, 1239, 1240, 1240, 1240, 2614, 2598, 1233, 1241, 1241,
-     1241, 1243, 1243, 1243, 1245, 1245, 1245, 2598, 1245, 2630,
-     1240, 1245, 2649, 1247, 1247, 1247, 1241, 1247, 2650, 1243,
+     1233, 2623, 2624, 1230, 2570, 1244,  286,  286,  286, 1231,
+     2625, 1246,  286,  286,  286, 2570, 1233,  286,  286, 1224,
+
+     2626,  286, 2627,  286,  286,  286, 1235, 1235, 1235, 2586,
+     1235, 2628, 2629, 1235, 1239, 1239, 1239, 2634, 1239, 2586,
+     2635, 1239, 1240, 1240, 1240, 2586, 2632, 1233, 1241, 1241,
+     1241, 1243, 1243, 1243, 1245, 1245, 1245, 2631, 1245, 2633,
+     1240, 1245, 2636, 1247, 1247, 1247, 1241, 1247, 2637, 1243,
      1247, 1248, 1248, 1248, 1249, 1249, 1249, 1251, 1251, 1251,
-     1252, 1252, 1252, 2600, 1252, 2654, 2655, 1252, 2656, 1248,
-     2657, 2658, 1249, 2659, 2600, 1251, 1255, 1255, 1255, 2660,
-     1255, 2661, 2662, 1255, 1258, 1258, 1258, 1259, 1259, 1259,
-     2663, 1259, 2668, 1243, 1259, 1264, 1264, 1264, 1265, 1265,
-
-     1265, 1258, 1267, 1267, 1267, 1272, 1272, 1272, 2669, 1272,
-     2670, 2665, 1272, 1264, 2671, 2672, 1265, 2644, 2666, 1251,
-     1267, 1275, 1275, 1275, 1276, 1276, 1276, 2644, 1276, 2673,
-     2644, 1276, 1279, 1279, 1279, 1280, 1280, 1280, 1275, 1280,
-     2665, 2674, 1280, 1291, 1291, 1291, 1292, 1292, 1292, 1279,
-     1267, 1294, 1294, 1294, 2675, 1295, 1295, 1295, 2676, 1295,
-     2666, 1291, 1295, 2677, 1292, 1298, 1298, 1298, 2678, 1294,
+     1252, 1252, 1252, 2587, 1252, 2638, 2631, 1252, 2632, 1248,
+     2639, 2640, 1249, 2587, 2641, 1251, 1255, 1255, 1255, 2587,
+     1255, 2633, 2642, 1255, 1258, 1258, 1258, 1259, 1259, 1259,
+     2643, 1259, 2644, 1243, 1259, 1264, 1264, 1264, 1265, 1265,
+
+     1265, 1258, 1267, 1267, 1267, 1272, 1272, 1272, 2645, 1272,
+     2646, 2649, 1272, 1264, 2650, 2651, 1265, 2610, 2653, 1251,
+     1267, 1275, 1275, 1275, 1276, 1276, 1276, 2610, 1276, 2654,
+     2610, 1276, 1279, 1279, 1279, 1280, 1280, 1280, 1275, 1280,
+     2659, 2660, 1280, 1291, 1291, 1291, 1292, 1292, 1292, 1279,
+     1267, 1294, 1294, 1294, 2665, 1295, 1295, 1295, 2669, 1295,
+     2670, 1291, 1295, 2671, 1292, 1298, 1298, 1298, 2672, 1294,
      1299, 1299, 1299, 1301, 1301, 1301, 1302, 1302, 1302, 1303,
-     1303, 1303, 2679, 1298, 1304, 1304, 1304, 2680, 1299, 2667,
-     2683, 1301, 2684, 1302, 1306, 1306, 1306, 1303, 1309, 1309,
+     1303, 1303, 2673, 1298, 1304, 1304, 1304, 2674, 1299, 2675,
+     2676, 1301, 2684, 1302, 1306, 1306, 1306, 1303, 1309, 1309,
 
-     1309, 2620, 1304, 1310, 1310, 1310, 2685, 1310, 2687, 2688,
-     1310, 2620, 1306, 2693, 2694, 1309, 2699, 2620, 1294, 1316,
+     1309, 2611, 1304, 1310, 1310, 1310, 2686, 1310, 2690, 2691,
+     1310, 2611, 1306, 2692, 2611, 1309, 2693, 2694, 1294, 1316,
      1316, 1316, 1317, 1317, 1317, 1319, 1319, 1319, 1322, 1322,
-     1322, 2667, 2703, 1301, 1323, 1323, 1323, 1316, 1323, 2645,
-     1317, 1323, 2704, 1319, 2705, 1322, 1326, 1326, 1326, 2645,
-     1326, 2706, 2645, 1326, 1329, 1329, 1329, 1330, 1330, 1330,
-     2707, 1306, 1332, 1332, 1332, 1333, 1333, 1333, 1334, 1334,
-     1334, 2708, 1329, 2709, 2718, 1330, 1335, 1335, 1335, 2720,
-     1332, 2724, 1333, 1337, 1337, 1337, 1334, 1345, 1345, 1345,
-     1319, 1339, 1339, 1339, 1335, 1339, 2725, 2726, 1339, 2727,
-
-     2728, 1337, 1346, 1346, 1346, 1345, 1348, 1348, 1348, 1350,
-     1350, 1350, 2729, 1350, 2731, 2621, 1350, 1353, 1353, 1353,
-     1346, 1354, 1354, 1354, 1348, 2621, 2743, 1332, 1356, 1356,
-     1356, 2621, 1337, 2744, 2746, 1353, 1357, 1357, 1357, 1354,
-     1357, 2747, 2760, 1357, 2761, 2762, 1356, 1361, 1361, 1361,
+     1322, 2695, 2697, 1301, 1323, 1323, 1323, 1316, 1323, 2704,
+     1317, 1323, 2709, 1319, 2710, 1322, 1326, 1326, 1326, 2712,
+     1326, 2713, 2704, 1326, 1329, 1329, 1329, 1330, 1330, 1330,
+     2705, 1306, 1332, 1332, 1332, 1333, 1333, 1333, 1334, 1334,
+     1334, 2726, 1329, 2705, 2727, 1330, 1335, 1335, 1335, 2728,
+     1332, 2729, 1333, 1337, 1337, 1337, 1334, 1345, 1345, 1345,
+     1319, 1339, 1339, 1339, 1335, 1339, 2731, 2732, 1339, 2711,
+
+     2733, 1337, 1346, 1346, 1346, 1345, 1348, 1348, 1348, 1350,
+     1350, 1350, 2711, 1350, 2734, 2740, 1350, 1353, 1353, 1353,
+     1346, 1354, 1354, 1354, 1348, 2741, 2737, 1332, 1356, 1356,
+     1356, 2714, 1337, 2742, 2738, 1353, 1357, 1357, 1357, 1354,
+     1357, 2743, 2744, 1357, 2714, 2745, 1356, 1361, 1361, 1361,
      1362, 1362, 1362, 1364, 1364, 1364, 1365, 1365, 1365, 1366,
-     1366, 1366, 1367, 1367, 1367, 1361, 1348, 2763, 1362, 2765,
-     2766, 1364, 2767, 1365, 2738, 2768, 1366, 1368, 1368, 1368,
-     1367, 1370, 1370, 1370, 1371, 1371, 1371, 2738, 1356, 2739,
-     1372, 1372, 1372, 2772, 2774, 1368, 1373, 1373, 1373, 1370,
+     1366, 1366, 1367, 1367, 1367, 1361, 1348, 2746, 1362, 2738,
+     2747, 1364, 2748, 1365, 2737, 2749, 1366, 1368, 1368, 1368,
+     1367, 1370, 1370, 1370, 1371, 1371, 1371, 2750, 1356, 2751,
+     1372, 1372, 1372, 2752, 2755, 1368, 1373, 1373, 1373, 1370,
 
-     2775, 1371, 2739, 1364, 2776, 2777, 1366, 1372, 1374, 1374,
+     2756, 1371, 2759, 1364, 2765, 2766, 1366, 1372, 1374, 1374,
      1374, 1376, 1376, 1376, 1373, 1381, 1381, 1381, 1372, 1381,
-     2745, 2771, 1381, 1384, 1384, 1384, 1374, 2778, 2772, 1376,
-     1385, 1385, 1385, 2745, 1385, 2779, 2780, 1385, 2781, 2782,
-     1384, 1388, 1388, 1388, 1389, 1389, 1389, 2748, 1370, 1391,
-     1391, 1391, 1394, 1394, 1394, 1395, 1395, 1395, 2783, 1388,
-     2748, 2784, 1389, 1397, 1397, 1397, 2785, 1391, 2786, 2771,
-     1394, 2789, 2790, 1395, 1402, 1402, 1402, 1376, 1406, 1406,
-     1406, 1397, 2793, 1407, 1407, 1407, 1409, 1409, 1409, 2799,
-     2800, 1402, 2795, 1415, 1415, 1415, 1406, 1416, 1416, 1416,
-
-     1391, 1407, 2795, 2796, 1409, 1411, 1411, 1411, 2808, 1411,
-     1397, 1415, 1411, 2796, 2809, 1416, 1418, 1418, 1418, 1420,
-     1420, 1420, 2810, 1420, 2811, 2812, 1420, 1423, 1423, 1423,
-     2813, 1424, 1424, 1424, 1418, 1424, 2814, 2815, 1424, 1425,
-     1425, 1425, 2818, 2822, 1423, 2825, 2826, 1409, 1426, 1426,
-     1426, 1427, 1427, 1427, 2827, 1427, 1425, 2828, 1427, 1429,
+     2774, 2775, 1381, 1384, 1384, 1384, 1374, 2776, 2761, 1376,
+     1385, 1385, 1385, 2777, 1385, 2778, 2779, 1385, 2761, 2780,
+     1384, 1388, 1388, 1388, 1389, 1389, 1389, 2781, 1370, 1391,
+     1391, 1391, 1394, 1394, 1394, 1395, 1395, 1395, 2762, 1388,
+     2782, 2786, 1389, 1397, 1397, 1397, 2789, 1391, 2762, 2790,
+     1394, 2791, 2792, 1395, 1402, 1402, 1402, 1376, 1406, 1406,
+     1406, 1397, 2793, 1407, 1407, 1407, 1409, 1409, 1409, 2794,
+     2795, 1402, 2798, 1415, 1415, 1415, 1406, 1416, 1416, 1416,
+
+     1391, 1407, 2802, 2803, 1409, 1411, 1411, 1411, 2804, 1411,
+     1397, 1415, 1411, 2805, 2806, 1416, 1418, 1418, 1418, 1420,
+     1420, 1420, 2807, 1420, 2808, 2809, 1420, 1423, 1423, 1423,
+     2810, 1424, 1424, 1424, 1418, 1424, 2811, 2812, 1424, 1425,
+     1425, 1425, 2813, 2829, 1423, 2830, 2831, 1409, 1426, 1426,
+     1426, 1427, 1427, 1427, 2832, 1427, 1425, 2833, 1427, 1429,
      1429, 1429, 1431, 1431, 1431, 1426, 1432, 1432, 1432, 1434,
-     1434, 1434, 1435, 1435, 1435, 2829, 1429, 1418, 2830, 2831,
-     1431, 1436, 1436, 1436, 1432, 1436, 2834, 1434, 1436, 1435,
-     1437, 1437, 1437, 1438, 1438, 1438, 2838, 1438, 2839, 2840,
+     1434, 1434, 1435, 1435, 1435, 2834, 1429, 1418, 2835, 2836,
+     1431, 1436, 1436, 1436, 1432, 1436, 2816, 1434, 1436, 1435,
+     1437, 1437, 1437, 1438, 1438, 1438, 2816, 1438, 2842, 2843,
 
      1438, 1440, 1440, 1440, 1441, 1441, 1441, 1437, 1443, 1443,
-     1443, 1445, 1445, 1445, 2841, 1445, 2842, 2843, 1445, 1440,
-     2844, 2845, 1441, 1448, 1448, 1448, 1443, 2846, 2847, 1434,
-     1449, 1449, 1449, 1451, 1451, 1451, 1454, 1454, 1454, 2848,
-     1454, 1448, 2849, 1454, 1458, 1458, 1458, 2865, 1449, 2866,
-     2867, 1451, 1459, 1459, 1459, 1461, 1461, 1461, 2868, 1463,
-     1463, 1463, 1458, 1463, 2852, 2869, 1463, 1467, 1467, 1467,
-     1459, 2870, 2853, 1461, 2852, 1443, 1468, 1468, 1468, 1469,
-     1469, 1469, 2853, 2871, 1467, 1471, 1471, 1471, 1473, 1473,
-     1473, 1474, 1474, 1474, 1468, 1474, 2872, 1469, 1474, 2878,
-
-     1451, 2879, 2874, 1471, 2880, 1473, 1477, 1477, 1477, 1479,
-     1479, 1479, 1480, 1480, 1480, 2883, 1461, 1482, 1482, 1482,
-     1484, 1484, 1484, 1477, 1486, 1486, 1486, 1479, 2884, 2885,
-     1480, 1487, 1487, 1487, 2886, 1482, 2874, 1484, 1489, 1489,
-     1489, 2889, 1486, 1491, 1491, 1491, 1471, 2896, 2897, 1487,
-     1497, 1497, 1497, 1537, 1537, 1537, 1489, 1537, 2898, 2899,
-     1537, 1491, 1491, 2903, 1482, 2904, 2912, 1477, 1497, 1542,
-     1542, 1542, 2913, 1542, 2914, 2915, 1542, 1546, 1546, 1546,
-     1548, 1548, 1548, 2916, 2917, 1489, 1549, 1549, 1549, 1552,
-     1552, 1552, 1553, 1553, 1553, 1546, 1553, 1548, 2918, 1553,
-
-     2922, 1558, 1558, 1558, 1549, 1558, 2928, 1552, 1558, 1561,
-     1561, 1561, 1562, 1562, 1562, 2929, 1562, 2931, 2932, 1562,
-     2934, 1565, 1565, 1565, 2935, 1565, 2936, 1561, 1565, 1568,
-     1568, 1568, 1569, 1569, 1569, 2937, 1569, 2938, 1546, 1569,
+     1443, 1445, 1445, 1445, 2844, 1445, 2838, 2817, 1445, 1440,
+     2847, 2848, 1441, 1448, 1448, 1448, 1443, 2817, 2849, 1434,
+     1449, 1449, 1449, 1451, 1451, 1451, 1454, 1454, 1454, 2850,
+     1454, 1448, 2853, 1454, 1458, 1458, 1458, 2860, 1449, 2861,
+     2838, 1451, 1459, 1459, 1459, 1461, 1461, 1461, 2862, 1463,
+     1463, 1463, 1458, 1463, 2863, 2867, 1463, 1467, 1467, 1467,
+     1459, 2868, 2876, 1461, 2877, 1443, 1468, 1468, 1468, 1469,
+     1469, 1469, 2878, 2879, 1467, 1471, 1471, 1471, 1473, 1473,
+     1473, 1474, 1474, 1474, 1468, 1474, 2880, 1469, 1474, 2881,
+
+     1451, 2882, 2883, 1471, 2889, 1473, 1477, 1477, 1477, 1479,
+     1479, 1479, 1480, 1480, 1480, 2890, 1461, 1482, 1482, 1482,
+     1484, 1484, 1484, 1477, 1486, 1486, 1486, 1479, 2892, 2893,
+     1480, 1487, 1487, 1487, 2895, 1482, 2896, 1484, 1489, 1489,
+     1489, 2897, 1486, 1491, 1491, 1491, 1471, 2898, 2899, 1487,
+     1497, 1497, 1497, 1537, 1537, 1537, 1489, 1537, 2900, 2901,
+     1537, 1491, 1491, 2902, 1482, 2903, 2904, 1477, 1497, 1542,
+     1542, 1542, 2905, 1542, 2906, 2907, 1542, 1546, 1546, 1546,
+     1548, 1548, 1548, 2910, 2911, 1489, 1549, 1549, 1549, 1552,
+     1552, 1552, 1553, 1553, 1553, 1546, 1553, 1548, 2912, 1553,
+
+     2913, 1558, 1558, 1558, 1549, 1558, 2921, 1552, 1558, 1561,
+     1561, 1561, 1562, 1562, 1562, 2922, 1562, 2924, 2925, 1562,
+     2926, 1565, 1565, 1565, 2928, 1565, 2936, 1561, 1565, 1568,
+     1568, 1568, 1569, 1569, 1569, 2937, 1569, 2939, 1546, 1569,
      1574, 1574, 1574, 1576, 1576, 1576, 1552, 1568, 1578, 1578,
-     1578, 2939, 2940, 1549, 2941, 2942, 1561, 1574, 1581, 1581,
-     1581, 1576, 1582, 1582, 1582, 1578, 1582, 2943, 2944, 1582,
-     1583, 1583, 1583, 2945, 1583, 1581, 1568, 1583, 1592, 1592,
+     1578, 2940, 2941, 1549, 2943, 2948, 1561, 1574, 1581, 1581,
+     1581, 1576, 1582, 1582, 1582, 1578, 1582, 2949, 2950, 1582,
+     1583, 1583, 1583, 2930, 1583, 1581, 1568, 1583, 1592, 1592,
      1592, 1597, 1597, 1597, 1598, 1598, 1598, 1599, 1599, 1599,
-     1600, 1600, 1600, 2946, 1600, 1592, 2949, 1600, 1576, 1597,
-
-     2950, 2951, 1598, 2952, 1599, 1601, 1601, 1601, 1604, 1604,
-     1604, 1605, 1605, 1605, 2960, 1605, 2961, 2963, 1605, 2964,
-     1607, 1607, 1607, 1601, 2965, 1604, 1608, 1608, 1608, 1609,
-     1609, 1609, 1612, 1612, 1612, 2967, 1598, 1607, 1613, 1613,
-     1613, 2975, 1613, 1608, 2976, 1613, 1597, 1609, 2978, 1612,
-     1614, 1614, 1614, 1615, 1615, 1615, 1616, 1616, 1616, 2979,
-     1616, 2980, 2982, 1616, 1617, 1617, 1617, 2969, 1614, 2987,
-     1615, 2988, 1608, 1621, 1621, 1621, 1622, 1622, 1622, 1624,
-     1624, 1624, 1617, 1625, 1625, 1625, 1626, 1626, 1626, 2989,
-     1621, 1627, 1627, 1627, 1622, 1609, 2990, 1624, 2992, 2993,
-
-     1625, 1631, 1631, 1631, 1626, 1628, 1628, 1628, 1627, 1628,
-     2969, 2997, 1628, 1630, 1630, 1630, 1614, 2999, 1631, 1621,
-     3000, 3002, 1617, 1632, 1632, 1632, 3003, 1632, 3008, 3009,
-     1632, 1630, 3010, 1622, 3011, 3012, 1624, 1626, 1634, 1634,
-     1634, 1636, 1636, 1636, 1639, 1639, 1639, 3013, 1639, 3014,
-     3015, 1639, 1642, 1642, 1642, 3016, 1634, 3017, 1636, 1644,
-     1644, 1644, 1647, 1647, 1647, 1652, 1652, 1652, 3018, 1642,
-     1657, 1657, 1657, 1630, 1653, 1653, 1653, 1644, 1653, 3019,
-     1647, 1653, 1652, 1659, 1659, 1659, 3020, 3021, 1657, 1660,
-     1660, 1660, 3022, 3023, 1662, 1662, 1662, 3024, 1662, 1634,
-
-     1659, 1662, 3028, 1665, 1665, 1665, 3029, 1660, 1666, 1666,
-     1666, 3030, 1666, 3031, 3034, 1666, 1671, 1671, 1671, 1657,
-     1665, 3035, 3036, 1644, 3037, 1667, 1667, 1667, 1647, 1667,
-     3038, 3039, 1667, 1671, 1672, 1672, 1672, 3044, 1672, 3041,
-     3048, 1672, 1674, 1674, 1674, 1675, 1675, 1675, 3044, 1675,
-     3049, 1660, 1675, 3051, 1678, 1678, 1678, 3052, 1678, 3054,
-     1674, 1678, 1682, 1682, 1682, 1684, 1684, 1684, 1688, 1688,
-     1688, 1690, 1690, 1690, 1691, 1691, 1691, 1692, 1692, 1692,
-     1682, 1692, 3056, 1684, 1692, 3041, 1688, 3059, 1690, 3060,
-     3043, 1691, 1674, 1693, 1693, 1693, 1695, 1695, 1695, 1696,
-
-     1696, 1696, 3062, 1696, 3043, 3066, 1696, 1699, 1699, 1699,
-     3063, 1693, 3068, 1695, 3062, 3070, 1701, 1701, 1701, 1702,
-     1702, 1702, 3063, 1702, 3081, 1699, 1702, 3083, 1682, 3085,
-     3086, 1684, 1688, 1701, 1703, 1703, 1703, 1704, 1704, 1704,
-     1707, 1707, 1707, 1745, 1745, 1745, 1746, 1746, 1746, 3089,
-     3090, 1703, 1747, 1747, 1747, 1704, 1699, 1693, 1707, 1749,
-     1749, 1749, 1750, 1750, 1750, 1751, 1751, 1751, 1752, 1752,
-     1752, 1753, 1753, 1753, 3093, 1754, 1754, 1754, 1755, 1755,
-     1755, 1757, 1757, 1757, 3095, 1752, 1704, 3075, 1753, 3097,
-     3099, 1707, 1754, 1758, 1758, 1758, 1755, 1758, 1757, 3075,
-
-     1758, 1759, 1759, 1759, 3100, 1749, 3076, 3102, 1707, 1762,
-     1762, 1762, 3103, 1763, 1763, 1763, 1747, 3109, 3076, 1759,
-     1764, 1764, 1764, 1765, 1765, 1765, 1750, 1762, 3111, 1751,
-     1763, 1766, 1766, 1766, 1767, 1767, 1767, 1764, 3106, 1754,
-     3114, 1765, 1768, 1768, 1768, 1755, 1769, 1769, 1769, 1766,
-     3115, 1767, 3108, 3108, 1770, 1770, 1770, 1762, 1770, 1768,
-     1759, 1770, 3107, 1769, 1771, 1771, 1771, 1772, 1772, 1772,
-     1774, 1774, 1774, 1775, 1775, 1775, 3107, 1775, 3110, 3106,
-     1775, 1771, 1776, 1776, 1776, 1772, 3119, 1774, 1765, 3110,
-     1778, 1778, 1778, 3120, 1778, 3050, 1766, 1778, 3128, 1776,
-
-     1768, 1783, 1783, 1783, 1787, 1787, 1787, 1788, 1788, 1788,
-     3121, 1788, 3127, 3050, 1788, 1790, 1790, 1790, 1783, 3116,
-     3129, 1787, 1793, 1793, 1793, 3121, 3050, 1772, 1794, 1794,
-     1794, 3127, 1790, 3130, 1795, 1795, 1795, 3116, 1795, 3129,
-     1793, 1795, 1798, 1798, 1798, 3134, 1794, 1802, 1802, 1802,
-     3135, 1802, 3138, 3140, 1802, 1805, 1805, 1805, 3137, 3142,
-     1798, 1806, 1806, 1806, 1807, 1807, 1807, 3139, 1807, 3143,
-     3144, 1807, 1805, 1808, 1808, 1808, 3145, 3137, 1806, 3047,
-     1809, 1809, 1809, 1794, 1809, 3146, 3139, 1809, 1793, 3147,
-     1808, 1811, 1811, 1811, 1812, 1812, 1812, 1814, 1814, 1814,
-
-     3047, 1814, 3155, 3156, 1814, 1817, 1817, 1817, 3157, 1811,
-     1818, 1818, 1818, 3047, 1818, 3159, 3160, 1818, 1821, 1821,
-     1821, 3162, 3163, 1817, 1825, 1825, 1825, 1826, 1826, 1826,
-     3164, 1826, 3166, 3171, 1826, 3172, 1821, 1828, 1828, 1828,
-     3173, 1825, 1830, 1830, 1830, 1831, 1831, 1831, 1833, 1833,
-     1833, 1817, 1832, 1832, 1832, 1828, 1832, 3174, 3175, 1832,
-     1830, 3176, 1831, 1834, 1834, 1834, 1833, 1834, 3177, 3178,
-     1834, 1838, 1838, 1838, 1839, 1839, 1839, 3181, 1839, 3182,
-     3183, 1839, 1842, 1842, 1842, 1821, 3184, 3185, 1830, 1838,
-     1843, 1843, 1843, 1845, 1845, 1845, 1846, 1846, 1846, 1842,
-
-     1846, 3186, 3189, 1846, 3190, 3191, 1833, 3192, 1843, 3193,
-     1845, 1847, 1847, 1847, 1849, 1849, 1849, 1850, 1850, 1850,
-     3194, 1850, 3196, 3197, 1850, 1852, 1852, 1852, 1847, 3198,
-     3199, 1849, 1855, 1855, 1855, 3200, 3201, 1838, 1860, 1860,
-     1860, 3202, 1860, 1852, 3209, 1860, 1866, 1866, 1866, 3207,
-     1855, 1868, 1868, 1868, 1843, 1869, 1869, 1869, 3210, 1869,
-     3208, 3207, 1869, 3211, 1866, 1870, 1870, 1870, 1868, 1872,
-     1872, 1872, 3208, 1872, 3212, 3213, 1872, 3214, 1876, 1876,
-     1876, 3220, 1876, 1870, 1855, 1876, 1880, 1880, 1880, 1882,
-     1882, 1882, 1884, 1884, 1884, 3221, 3222, 1866, 1885, 1885,
-
-     1885, 1886, 1886, 1886, 1880, 3223, 3224, 1882, 3225, 3229,
-     1884, 1887, 1887, 1887, 3230, 1885, 3232, 3234, 1886, 1888,
-     1888, 1888, 1890, 1890, 1890, 1891, 1891, 1891, 1887, 1891,
-     3237, 3238, 1891, 3239, 1892, 1892, 1892, 1888, 1892, 1890,
-     1882, 1892, 3240, 1884, 1895, 1895, 1895, 1880, 1897, 1897,
-     1897, 3241, 1897, 3242, 3243, 1897, 1902, 1902, 1902, 1907,
-     1907, 1907, 1895, 1914, 1914, 1914, 1888, 1886, 1904, 1904,
-     1904, 3244, 1904, 3245, 1902, 1904, 1907, 1908, 1908, 1908,
-     1914, 1908, 3246, 3247, 1908, 1909, 1909, 1909, 1921, 1921,
-     1921, 1895, 1926, 1926, 1926, 1930, 1930, 1930, 1931, 1931,
-
-     1931, 3235, 3248, 1909, 1932, 1932, 1932, 1902, 1934, 1934,
-     1934, 1943, 1943, 1943, 1944, 1944, 1944, 1946, 1946, 1946,
-     1948, 1948, 1948, 1949, 1949, 1949, 3235, 1949, 3249, 3250,
-     1949, 1950, 1950, 1950, 3251, 3252, 1909, 1948, 1951, 1951,
-     1951, 3253, 1951, 3254, 3255, 1951, 3256, 3257, 1950, 1953,
-     1953, 1953, 1955, 1955, 1955, 3258, 1955, 3261, 3262, 1955,
-     1958, 1958, 1958, 1960, 1960, 1960, 3264, 1953, 1961, 1961,
-     1961, 1962, 1962, 1962, 3265, 1963, 1963, 1963, 1958, 1963,
-     1960, 3266, 1963, 1964, 1964, 1964, 1961, 3267, 1962, 1965,
-     1965, 1965, 3268, 1965, 3263, 3269, 1965, 1968, 1968, 1968,
-
-     1964, 1966, 1966, 1966, 1967, 1967, 1967, 1970, 1970, 1970,
-     3270, 1958, 3271, 3263, 1968, 1953, 1969, 1969, 1969, 1966,
-     1969, 3272, 1967, 1969, 1970, 3273, 1971, 1971, 1971, 1961,
-     1971, 3274, 3275, 1971, 1974, 1974, 1974, 1975, 1975, 1975,
-     3276, 1975, 3277, 3278, 1975, 1976, 1976, 1976, 1978, 1978,
-     1978, 1974, 1978, 3279, 3280, 1978, 1981, 1981, 1981, 3281,
-     1982, 1982, 1982, 1976, 1982, 3282, 1966, 1982, 3283, 1967,
-     1986, 1986, 1986, 1981, 1987, 1987, 1987, 3284, 1987, 3285,
-     3289, 1987, 1988, 1988, 1988, 3291, 3288, 1986, 1991, 1991,
-     1991, 3292, 1991, 3294, 3295, 1991, 1976, 3296, 3297, 1988,
-
-     1995, 1995, 1995, 1996, 1996, 1996, 3288, 1996, 3298, 3299,
-     1996, 1999, 1999, 1999, 2000, 2000, 2000, 1995, 2003, 2003,
-     2003, 2004, 2004, 2004, 3300, 2004, 3301, 3302, 2004, 1999,
-     3303, 3304, 2000, 3305, 3306, 2003, 2005, 2005, 2005, 3307,
-     2005, 3308, 3309, 2005, 2008, 2008, 2008, 3310, 2008, 3312,
-     3314, 2008, 2012, 2012, 2012, 2014, 2014, 2014, 2016, 2016,
-     2016, 3316, 1999, 2017, 2017, 2017, 3317, 2000, 3311, 3318,
-     2012, 2019, 2019, 2019, 3311, 3319, 2016, 3320, 2021, 2021,
-     2021, 2017, 2021, 3321, 3323, 2021, 3324, 3326, 2019, 2025,
-     2025, 2025, 2028, 2028, 2028, 2029, 2029, 2029, 3327, 2029,
-
-     3329, 3330, 2029, 2032, 2032, 2032, 3335, 2025, 3336, 3337,
-     2028, 3338, 3340, 2017, 3332, 3342, 2016, 2019, 2034, 2034,
-     2034, 2032, 2035, 2035, 2035, 2036, 2036, 2036, 3332, 2036,
-     3344, 3346, 2036, 2037, 2037, 2037, 2034, 3348, 3349, 2035,
-     3350, 2028, 3351, 2039, 2039, 2039, 3352, 2039, 3353, 2032,
-     2039, 2037, 2042, 2042, 2042, 2043, 2043, 2043, 3354, 2043,
-     3355, 3357, 2043, 2045, 2045, 2045, 3359, 2045, 3361, 2042,
-     2045, 2049, 2049, 2049, 2052, 2052, 2052, 2053, 2053, 2053,
-     2037, 2054, 2054, 2054, 2056, 2056, 2056, 3362, 3363, 2049,
-     3364, 2052, 2061, 2061, 2061, 2053, 2063, 2063, 2063, 3397,
-
-     2063, 3365, 1508, 2063, 2066, 2066, 2066, 2069, 2069, 2069,
-     2061, 2071, 2071, 2071, 2073, 2073, 2073, 2075, 2075, 2075,
-     3373, 3374, 2066, 3366, 2069, 2076, 2076, 2076, 3387, 2071,
-     3379, 3397, 2073, 3377, 3379, 2075, 3375, 3365, 2053, 2077,
-     2077, 2077, 2076, 2077, 3376, 3381, 2077, 2078, 2078, 2078,
-     2079, 2079, 2079, 3381, 2080, 2080, 2080, 2061, 2080, 3366,
-     3385, 2080, 3378, 3388, 2078, 3387, 3386, 2079, 3373, 3374,
-     2071, 2081, 2081, 2081, 2082, 2082, 2082, 3377, 2083, 2083,
-     2083, 2075, 2083, 1505, 3375, 2083, 2086, 2086, 2086, 2081,
-     3423, 2082, 3376, 2078, 2090, 2090, 2090, 2091, 2091, 2091,
-
-     3388, 2100, 2100, 2100, 2086, 2100, 3378, 3385, 2100, 2103,
-     2103, 2103, 2090, 3386, 2091, 2107, 2107, 2107, 3382, 3423,
-     2082, 2108, 2108, 2108, 2081, 2108, 3382, 2103, 2108, 2109,
-     2109, 2109, 2107, 2114, 2114, 2114, 2115, 2115, 2115, 2086,
-     2116, 2116, 2116, 2118, 2118, 2118, 2123, 2123, 2123, 2124,
-     2124, 2124, 2125, 2125, 2125, 2103, 2126, 2126, 2126, 2128,
-     2128, 2128, 2132, 2132, 2132, 2133, 2133, 2133, 2135, 2135,
-     2135, 2136, 2136, 2136, 2137, 2137, 2137, 2139, 2139, 2139,
-     3383, 2139, 3384, 3389, 2139, 2142, 2142, 2142, 3383, 2142,
-     3384, 3390, 2142, 2146, 2146, 2146, 2148, 2148, 2148, 2150,
-
-     2150, 2150, 2126, 2151, 2151, 2151, 3395, 2151, 3380, 1504,
-     2151, 2146, 3380, 3391, 2148, 3392, 2150, 2152, 2152, 2152,
-     2137, 2153, 2153, 2153, 3389, 2153, 1503, 3398, 2153, 2156,
-     2156, 2156, 3390, 2156, 3401, 2152, 2156, 2159, 2159, 2159,
-     2160, 2160, 2160, 3395, 2146, 2161, 2161, 2161, 3391, 2161,
-     3392, 3399, 2161, 1502, 3393, 2159, 2148, 2159, 2160, 3398,
-     3399, 2164, 2164, 2164, 2165, 2165, 2165, 3403, 2165, 3401,
-     3437, 2165, 2169, 2169, 2169, 3396, 2160, 2152, 2164, 2166,
-     2166, 2166, 3402, 2166, 3400, 3394, 2166, 2171, 2171, 2171,
-     2169, 2171, 1501, 3400, 2171, 2177, 2177, 2177, 3404, 2177,
-
-     3393, 3403, 2177, 2180, 2180, 2180, 2181, 2181, 2181, 3409,
-     2181, 3437, 3396, 2181, 2185, 2185, 2185, 3402, 2185, 3405,
-     2180, 2185, 2189, 2189, 2189, 2190, 2190, 2190, 2191, 2191,
-     2191, 3394, 3404, 2194, 2194, 2194, 3410, 2194, 2169, 2189,
-     2194, 3406, 1500, 2190, 3409, 3407, 2191, 2201, 2201, 2201,
-     2202, 2202, 2202, 2204, 2204, 2204, 2205, 2205, 2205, 3411,
-     2205, 3412, 3405, 2205, 1499, 2201, 3417, 1496, 2202, 3415,
-     2204, 3410, 2212, 2212, 2212, 2213, 2213, 2213, 2215, 2215,
-     2215, 2217, 2217, 2217, 3406, 2217, 3413, 3445, 2217, 2190,
-     2212, 3407, 3411, 2213, 3412, 3413, 2215, 2220, 2220, 2220,
-
-     3414, 2202, 2201, 2222, 2222, 2222, 3415, 2222, 3417, 3414,
-     2222, 2228, 2228, 2228, 3431, 2220, 2229, 2229, 2229, 3445,
-     2229, 3408, 3431, 2229, 2230, 2230, 2230, 3418, 2228, 2231,
-     2231, 2231, 2232, 2232, 2232, 1495, 3427, 2213, 2212, 2233,
-     2233, 2233, 2230, 2234, 2234, 2234, 2235, 2235, 2235, 3419,
-     2220, 2236, 2236, 2236, 2237, 2237, 2237, 2238, 2238, 2238,
-     2234, 3416, 3420, 2235, 2241, 2241, 2241, 3408, 2236, 3418,
-     3427, 2237, 2242, 2242, 2242, 2238, 2242, 1494, 1485, 2242,
-     3424, 2241, 2244, 2244, 2244, 2246, 2246, 2246, 2230, 2249,
-     2249, 2249, 2250, 2250, 2250, 3419, 2250, 2235, 3416, 2250,
-
-     2244, 3438, 1483, 2246, 2253, 2253, 2253, 2249, 3420, 3424,
-     2254, 2254, 2254, 2237, 2254, 2236, 3429, 2254, 2259, 2259,
-     2259, 2253, 2238, 2256, 2256, 2256, 3425, 2256, 3421, 3422,
-     2256, 2260, 2260, 2260, 3426, 3425, 2259, 2261, 2261, 2261,
-     1478, 2261, 3438, 3426, 2261, 2263, 2263, 2263, 2260, 2267,
-     2267, 2267, 3428, 2269, 2269, 2269, 3439, 2270, 2270, 2270,
-     3432, 2270, 3429, 2263, 2270, 3421, 3422, 2267, 3432, 2259,
-     2269, 2281, 2281, 2281, 2282, 2282, 2282, 2285, 2285, 2285,
-     3471, 2285, 2286, 2286, 2285, 2286, 3428, 2287, 2287, 2281,
-     2287, 3439, 2282, 2286, 3471, 3463, 2263, 1472, 2287, 1466,
-
-     2286, 2288, 2288, 2288, 3463, 2287, 2289, 2289, 2289, 2290,
-     2290, 2290, 2293, 2293, 2293, 2294, 2294, 2294, 1462, 1457,
-     2281, 2296, 2296, 2296, 2297, 2297, 2297, 2299, 2299, 2299,
-     2300, 2300, 2300, 2301, 2301, 2301, 2302, 2302, 2302, 2305,
-     2305, 2305, 2306, 2306, 2306, 2309, 2309, 2309, 2310, 2310,
-     2310, 2312, 2312, 2312, 2313, 2313, 2313, 2317, 2317, 2317,
-     2318, 2318, 2318, 2319, 2319, 2319, 2320, 2320, 2320, 2321,
-     2321, 2321, 3435, 2321, 3430, 2317, 2321, 2324, 2324, 2324,
-     3446, 2319, 3461, 2320, 2325, 2325, 2325, 2326, 2326, 2326,
-     2327, 2327, 2327, 3436, 2327, 2324, 3447, 2327, 2330, 2330,
-
-     2330, 3440, 2325, 3448, 3447, 2326, 2335, 2335, 2335, 3435,
-     2335, 3448, 3446, 2335, 3461, 3433, 2330, 2338, 2338, 2338,
-     3430, 2325, 2342, 2342, 2342, 2344, 2344, 2344, 2324, 2319,
-     3436, 2343, 2343, 2343, 2338, 2343, 3440, 3462, 2343, 2342,
-     2345, 2345, 2345, 2344, 2354, 2354, 2354, 3434, 2326, 2355,
-     2355, 2355, 2356, 2356, 2356, 2357, 2357, 2357, 2345, 2358,
-     2358, 2358, 3433, 2358, 1453, 3443, 2358, 2355, 1452, 3462,
-     2356, 3444, 2357, 2361, 2361, 2361, 2362, 2362, 2362, 2367,
-     2367, 2367, 2368, 2368, 2368, 2369, 2369, 2369, 3451, 3441,
-     2361, 3464, 3452, 2362, 3434, 3453, 2367, 1444, 3442, 2368,
-
-     3464, 2357, 3443, 2369, 2370, 2370, 2370, 3457, 3444, 2355,
-     2371, 2371, 2371, 2372, 2372, 2372, 2376, 2376, 2376, 2377,
-     2377, 2377, 2370, 2377, 1439, 3451, 2377, 2371, 2361, 3452,
-     2367, 2372, 2380, 2380, 2380, 3441, 3453, 2362, 2381, 2381,
-     2381, 2382, 2382, 2382, 3442, 2369, 3449, 2383, 2383, 2383,
-     2380, 2383, 3450, 3457, 2383, 2384, 2384, 2384, 2382, 2385,
-     2385, 2385, 1430, 3458, 2372, 2386, 2386, 2386, 2370, 2387,
-     2387, 2387, 2384, 2388, 2388, 2388, 2385, 2389, 2389, 2389,
-     3455, 3459, 2386, 2393, 2393, 2393, 1428, 2387, 2390, 2390,
-     2390, 2380, 2390, 3449, 2389, 2390, 2394, 2394, 2394, 3450,
-
-     2393, 2398, 2398, 2398, 2400, 2400, 2400, 1419, 2400, 3458,
-     2385, 2400, 1414, 1410, 2394, 3455, 2386, 1405, 3459, 2398,
-     2404, 2404, 2404, 2405, 2405, 2405, 1404, 2405, 3456, 1403,
-     2405, 1401, 2409, 2409, 2409, 2413, 2413, 2413, 2404, 2413,
-     3460, 1400, 2413, 2426, 2426, 2426, 2427, 2427, 2427, 2393,
-     2409, 2440, 2440, 2440, 2441, 2441, 2441, 2444, 2444, 2444,
-     3454, 2426, 1398, 3456, 2427, 2445, 2445, 2445, 2447, 2447,
-     2447, 2448, 2448, 2448, 2451, 2451, 2451, 3460, 2409, 2454,
-     2454, 2454, 2458, 2458, 2458, 2460, 2460, 2460, 2461, 2461,
-     2461, 1393, 2462, 2462, 2462, 2463, 2463, 2463, 3465, 2463,
-
-     2458, 3454, 2463, 3466, 2426, 1392, 2461, 1387, 2427, 2462,
-     2464, 2464, 2464, 2465, 2465, 2465, 2466, 2466, 2466, 2467,
-     2467, 2467, 2474, 2474, 2474, 2475, 2475, 2475, 2464, 2475,
-     3465, 2465, 2475, 3467, 2466, 3466, 1386, 2467, 3469, 2474,
-     2477, 2477, 2477, 2479, 2479, 2479, 3470, 2479, 1380, 1379,
-     2479, 2482, 2482, 2482, 2490, 2490, 2490, 2477, 2491, 2491,
-     2491, 2492, 2492, 2492, 2493, 2493, 2493, 1378, 3468, 2482,
-     3469, 2490, 2495, 2495, 2495, 1377, 3472, 2465, 3470, 2492,
-     1360, 3467, 2493, 2466, 2496, 2496, 2496, 3472, 2496, 2495,
-     1349, 2496, 2504, 2504, 2504, 2505, 2505, 2505, 2506, 2506,
-
-     2506, 1344, 2506, 1343, 1342, 2506, 2507, 2507, 2507, 2504,
-     1338, 1321, 2505, 2508, 2508, 2508, 3468, 1320, 2492, 2509,
-     2509, 2509, 1315, 1314, 2507, 2510, 2510, 2510, 1313, 2510,
-     1308, 2508, 2510, 2511, 2511, 2511, 2509, 2514, 2514, 2514,
-     2515, 2515, 2515, 2516, 2516, 2516, 2517, 2517, 2517, 1307,
-     2517, 2511, 1289, 2517, 2514, 2520, 2520, 2520, 2521, 2521,
-     2521, 2516, 2521, 1288, 1287, 2521, 2522, 2522, 2522, 2523,
-     2523, 2523, 2520, 1286, 2508, 2524, 2524, 2524, 2526, 2526,
-     2526, 1285, 1284, 2522, 1283, 1282, 2523, 2527, 2527, 2527,
-     2528, 2528, 2528, 2524, 2528, 1281, 1271, 2528, 2529, 2529,
-
-     2529, 2533, 2533, 2533, 2527, 2536, 2536, 2536, 2549, 2549,
-     2549, 2567, 2567, 2567, 1270, 2529, 2568, 2568, 2568, 2533,
-     2573, 2573, 2573, 2536, 1269, 1268, 2549, 2576, 2576, 2576,
-     2577, 2577, 2577, 2579, 2579, 2579, 1263, 2579, 1262, 1261,
-     2579, 2582, 2582, 2582, 2576, 2584, 2584, 2584, 2577, 2585,
-     2585, 2585, 1260, 2529, 1237, 2589, 2589, 2589, 1236, 2582,
-     2608, 2608, 2608, 2584, 2595, 2595, 2595, 2585, 2549, 1229,
-     1225, 2536, 2589, 2591, 2591, 2591, 1220, 2591, 2608, 1219,
-     2591, 2595, 2596, 2596, 2596, 1214, 2596, 1211, 1210, 2596,
-     2603, 2603, 2603, 2606, 2606, 2606, 2607, 2607, 2607, 1207,
-
-     2607, 1206, 1205, 2607, 1204, 1203, 2584, 2603, 1202, 1201,
-     2606, 1200, 2609, 2609, 2609, 2585, 2609, 1199, 1197, 2609,
-     2617, 2617, 2617, 2618, 2618, 2618, 1196, 2618, 1195, 1194,
-     2618, 2619, 2619, 2619, 1193, 2619, 1190, 2617, 2619, 2622,
-     2622, 2622, 2624, 2624, 2624, 2625, 2625, 2625, 1189, 2625,
-     1188, 1187, 2625, 2628, 2628, 2628, 1185, 2622, 1184, 1183,
-     2624, 2631, 2631, 2631, 2632, 2632, 2632, 1182, 2633, 2633,
-     2633, 2628, 2633, 1181, 1180, 2633, 1179, 1178, 2631, 1176,
-     1175, 2632, 2634, 2634, 2634, 2636, 2636, 2636, 1174, 2636,
-     1173, 1172, 2636, 2639, 2639, 2639, 2641, 2641, 2641, 1171,
-
-     2634, 2640, 2640, 2640, 2624, 2640, 1170, 1164, 2640, 1160,
-     2639, 1157, 1156, 2641, 2642, 2642, 2642, 1155, 2642, 1153,
-     1149, 2642, 2643, 2643, 2643, 1146, 2643, 1145, 1144, 2643,
-     2646, 2646, 2646, 2647, 2647, 2647, 2648, 2648, 2648, 2651,
-     2651, 2651, 2652, 2652, 2652, 1140, 1139, 2646, 1136, 1132,
-     2647, 1131, 1128, 2648, 2653, 2653, 2653, 2651, 2664, 2664,
-     2664, 2681, 2681, 2681, 2682, 2682, 2682, 2686, 2686, 2686,
-     1125, 2653, 2689, 2689, 2689, 1122, 2664, 2690, 2690, 2690,
-     1121, 2690, 1116, 1108, 2690, 2691, 2691, 2691, 1107, 2689,
-     1106, 2646, 1104, 2692, 2692, 2692, 2695, 2695, 2695, 2696,
-
-     2696, 2696, 1100, 2691, 1097, 2697, 2697, 2697, 1094, 2697,
-     2651, 2692, 2697, 2695, 1091, 1090, 2696, 1089, 2664, 2698,
-     2698, 2698, 2700, 2700, 2700, 1088, 2700, 1087, 1086, 2700,
-     2710, 2710, 2710, 2711, 2711, 2711, 2698, 1085, 2712, 2712,
-     2712, 1084, 2712, 1081, 2692, 2712, 1080, 2710, 1077, 1076,
-     2711, 1072, 2691, 2713, 2713, 2713, 1070, 2713, 1067, 1066,
-     2713, 2716, 2716, 2716, 2719, 2719, 2719, 2721, 2721, 2721,
-     1063, 2721, 1062, 1059, 2721, 1052, 2710, 1049, 1048, 2716,
-     1047, 2719, 2730, 2730, 2730, 2732, 2732, 2732, 2733, 2733,
-     2733, 1044, 2733, 1040, 1033, 2733, 1032, 2734, 2734, 2734,
-
-     2730, 2734, 2732, 1028, 2734, 2737, 2737, 2737, 1027, 2737,
-     1026, 1023, 2737, 2740, 2740, 2740, 1022, 2740, 1021, 1018,
-     2740, 2749, 2749, 2749, 2750, 2750, 2750, 2751, 2751, 2751,
-     1011, 2751, 1010, 1009, 2751, 2752, 2752, 2752, 2749, 1008,
-     1007, 2750, 2753, 2753, 2753, 1006, 2753, 1005, 1004, 2753,
-     1003, 1002, 2752, 2754, 2754, 2754, 2755, 2755, 2755, 2756,
-     2756, 2756, 2757, 2757, 2757, 2758, 2758, 2758,  998,  994,
-     2754,  971,  968, 2755, 2770, 2770, 2770, 2756, 2773, 2773,
-     2773, 2749, 2758, 2759, 2759, 2759,  965, 2759,  964,  957,
-     2759,  956, 2770,  954,  953, 2773, 2773, 2787, 2787, 2787,
-
-     2788, 2788, 2788, 2791, 2791, 2791, 2792, 2792, 2792, 2794,
-     2794, 2794,  952, 2794,  951,  950, 2794, 2797, 2797, 2797,
-      949, 2756, 2798, 2798, 2798, 2770, 2801, 2801, 2801, 2802,
-     2802, 2802,  948, 2802,  947, 2797, 2802, 2803, 2803, 2803,
-     2798, 2803,  946, 2801, 2803, 2806, 2806, 2806, 2807, 2807,
-     2807,  945, 2807,  944,  943, 2807, 2816, 2816, 2816, 2817,
-     2817, 2817, 2806, 2817,  941,  940, 2817, 2819, 2819, 2819,
-      939, 2819,  938, 2816, 2819, 2823, 2823, 2823, 2824, 2824,
-     2824,  937, 2824, 2797,  936, 2824, 2832, 2832, 2832, 2835,
-     2835, 2835, 2823, 2835,  935,  934, 2835, 2850, 2850, 2850,
-
-      933, 2851, 2851, 2851, 2832, 2851,  931,  930, 2851, 2854,
-     2854, 2854,  929, 2854, 2850,  928, 2854, 2857, 2857, 2857,
-     2858, 2858, 2858,  927, 2858,  926,  925, 2858, 2859, 2859,
-     2859, 2860, 2860, 2860, 2857, 2860,  924,  923, 2860, 2861,
-     2861, 2861, 2862, 2862, 2862, 2859, 2862,  922,  918, 2862,
-     2873, 2873, 2873, 2875, 2875, 2875,  914, 2861, 2876, 2876,
-     2876,  913, 2877, 2877, 2877,  912, 2877,  911, 2873, 2877,
-     2875, 2875, 2890, 2890, 2890, 2876, 2876, 2891, 2891, 2891,
-     2877, 2892, 2892, 2892, 2893, 2893, 2893, 2894, 2894, 2894,
-     2861, 2895, 2895, 2895, 2900, 2900, 2900,  910,  906, 2873,
-
-     2901, 2901, 2901, 2905, 2905, 2905,  904, 2905,  903,  902,
-     2905,  901, 2900, 2908, 2908, 2908,  900, 2908, 2901,  899,
-     2908, 2911, 2911, 2911, 2919, 2919, 2919,  896, 2919,  895,
-      893, 2919, 2923, 2923, 2923, 2924, 2924, 2924, 2911, 2924,
-      891,  887, 2924,  886,  885, 2900, 2927, 2927, 2927, 2923,
-     2947, 2947, 2947, 2948, 2948, 2948,  883, 2948,  880,  879,
-     2948,  877,  876, 2927, 2953, 2953, 2953, 2947, 2953,  873,
-      871, 2953, 2956, 2956, 2956,  868, 2956,  867,  866, 2956,
-     2959, 2959, 2959, 2968, 2968, 2968, 2970, 2970, 2970, 2971,
-     2971, 2971,  865, 2971,  862,  861, 2971,  860, 2959,  859,
-
-      858, 2968,  857, 2970, 2970,  856,  854, 2971, 2972, 2972,
-     2972,  851, 2972,  850,  846, 2972, 2983, 2983, 2983, 2984,
-     2984, 2984, 2985, 2985, 2985,  845, 2972, 2986, 2986, 2986,
-     2991, 2991, 2991, 2995, 2995, 2995,  844, 2995,  843,  842,
-     2995,  841, 2994, 2994, 2994, 2996, 2996, 2996, 2991, 2968,
-     2973, 2973, 2973, 2973, 2973, 2973, 2973, 2973, 2973, 2994,
-      840, 2973, 2996, 3004, 3004, 3004, 2973, 2973, 2973, 2973,
-     2973, 3005, 3005, 3005,  832, 3005,  831,  828, 3005,  827,
-     3004, 3007, 3007, 3007,  826, 3007,  825,  824, 3007, 3006,
-     3006, 3006, 3032, 3032, 3032, 2973, 2973, 2974, 2974, 2974,
-
-     2974, 2974, 2974, 2974, 2974, 2974, 3006,  822, 2974,  821,
-     3032,  820,  817, 2974, 2974, 2974, 2974, 2974, 3025, 3025,
-     3025,  816, 3025,  815,  812, 3025, 3040, 3040, 3040, 3042,
-     3042, 3042,  811, 3042,  810,  807, 3042,  806,  802, 3057,
-     3057, 3057, 2974, 2974, 3040,  800,  797, 3042, 3045, 3045,
-     3045, 3045, 3045, 3045, 3045, 3045, 3045, 3057,  796, 3045,
-     3064, 3064, 3064,  795, 3045, 3045, 3045, 3045, 3045, 3061,
-     3061, 3061,  794, 3061,  792,  789, 3061, 3064, 3065, 3065,
-     3065,  788, 3065,  787,  784, 3065, 3104, 3104, 3104, 3112,
-     3112, 3112,  781, 3045, 3045, 3046, 3046, 3046, 3046, 3046,
-
-     3046, 3046, 3046, 3046, 3104,  777, 3046, 3112, 3112,  776,
-      775, 3046, 3046, 3046, 3046, 3046, 3071, 3071, 3071,  774,
-     3071,  771,  768, 3071, 3074, 3074, 3074,  767, 3074,  764,
-      760, 3074, 3125, 3125, 3125, 3126, 3126, 3126,  759,  758,
-     3046, 3046,  757, 3131, 3131, 3131,  756, 3131,  755, 3125,
-     3131,  754, 3126, 3136, 3136, 3136, 3141, 3141, 3141, 3154,
-     3154, 3154, 3158, 3158, 3158, 3167, 3167, 3167,  753,  752,
-     3136,  751,  750, 3141, 3168, 3168, 3168, 3154, 3168,  749,
-     3158, 3168, 3167, 3169, 3169, 3169, 3170, 3170, 3170,  747,
-     3170,  745,  744, 3170, 3179, 3179, 3179, 3180, 3180, 3180,
-
-     3169, 3180,  741,  740, 3180, 3187, 3187, 3187, 3188, 3188,
-     3188, 3179, 3188, 3158,  739, 3188, 3195, 3195, 3195, 3203,
-     3203, 3203, 3187, 3203,  738,  737, 3203,  736, 3206, 3206,
-     3206,  731, 3206,  730, 3195, 3206, 3217, 3217, 3217,  729,
-     3217,  726,  725, 3217, 3226, 3226, 3226,  724, 3226,  723,
-      720, 3226,  719, 3195, 3347, 3347, 3347, 3356, 3356, 3356,
-      717, 3356,  714,  713, 3356, 3473, 3473, 3473, 3474, 3474,
-     3474,  710, 3347,  709,  708, 3356,  707,  706,  705,  697,
-      696,  695,  692, 3473,  691,  690, 3474, 3477, 3477, 3477,
-     3477, 3477, 3477, 3477, 3477, 3477, 3478, 3478, 3478, 3478,
-
-     3478, 3478, 3478, 3478, 3478, 3479, 3479, 3479, 3479, 3479,
-     3479, 3479, 3479, 3479, 3480, 3480, 3480, 3480, 3480, 3480,
-     3480, 3480, 3480, 3481, 3481, 3481, 3481, 3481, 3481, 3481,
-     3481, 3481, 3482, 3482, 3482, 3482, 3482, 3482, 3482, 3482,
-     3482, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
-     3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3485,
-     3485, 3485, 3485, 3485, 3485, 3485, 3485, 3485, 3486, 3486,
-     3486, 3486, 3486, 3486, 3486, 3486, 3486, 3487, 3487, 3487,
-     3487, 3487, 3487, 3487, 3487, 3487, 3488, 3488, 3488, 3488,
-     3488, 3488, 3488, 3488, 3488, 3489, 3489, 3489, 3489, 3489,
-
-     3489, 3489, 3489, 3489, 3490, 3490, 3490, 3490, 3490, 3490,
-     3490, 3490, 3490, 3491, 3491, 3491, 3491, 3491, 3491, 3491,
-     3491, 3491, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
-     3492, 3493, 3493, 3493, 3493, 3493, 3493, 3493, 3493, 3493,
-     3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3495,
-     3495, 3495, 3495, 3495, 3495, 3495, 3495, 3495, 3496, 3496,
-     3496, 3496, 3496, 3496, 3496, 3496, 3496, 3497, 3497, 3497,
-     3497, 3497, 3497, 3497, 3497, 3497, 3498, 3498, 3498, 3498,
-     3498, 3498, 3498, 3498, 3498, 3499, 3499, 3499, 3499, 3499,
-     3499, 3499, 3499, 3499, 3500, 3500, 3500, 3500, 3500, 3500,
-
-     3500, 3500, 3500, 3501, 3501, 3501, 3501, 3501, 3501, 3501,
-     3501, 3501, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502,
-     3502, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503,
-     3504, 3504, 3504, 3504, 3504, 3504, 3504, 3504, 3504, 3505,
-     3505, 3505, 3505, 3505, 3505, 3505, 3505, 3505, 3506, 3506,
-     3506, 3506, 3506, 3506, 3506, 3506, 3506, 3507, 3507, 3507,
-     3507, 3507, 3507, 3507, 3507, 3507, 3508, 3508, 3508, 3508,
-     3508, 3508, 3508, 3508, 3508, 3509, 3509, 3509, 3509, 3509,
-     3509, 3509, 3509, 3509, 3510, 3510, 3510, 3510, 3510, 3510,
-     3510, 3510, 3510, 3511, 3511, 3511, 3511, 3511, 3511, 3511,
-
-     3511, 3511, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512,
-     3512, 3513, 3513, 3513, 3513, 3513, 3513, 3513, 3513, 3513,
-     3514, 3514, 3514, 3514, 3514, 3514, 3514, 3514, 3514, 3515,
-     3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3516, 3516,
-     3516, 3516, 3516, 3516, 3516, 3516, 3516, 3517, 3517, 3517,
-     3517, 3517, 3517, 3517, 3517, 3517, 3518, 3518, 3518, 3518,
-     3518, 3518, 3518, 3518, 3518, 3519, 3519, 3519, 3519, 3519,
-     3519, 3519, 3519, 3519, 3520, 3520, 3520, 3520, 3520, 3520,
-     3520, 3520, 3520, 3521, 3521, 3521, 3521, 3521, 3521, 3521,
-     3521, 3521, 3522, 3522, 3522, 3522, 3522, 3522, 3522, 3522,
-
-     3522, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523,
-     3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3525,
-     3525, 3525, 3525, 3525, 3525, 3525, 3525, 3525, 3526, 3526,
-     3526, 3526, 3526, 3526, 3526, 3526, 3526, 3527, 3527, 3527,
-     3527, 3527, 3527, 3527, 3527, 3527, 3528, 3528, 3528, 3528,
-     3528, 3528, 3528, 3528, 3528, 3529, 3529, 3529, 3529, 3529,
-     3529, 3529, 3529, 3529, 3530, 3530, 3530, 3530, 3530, 3530,
-     3530, 3530, 3530, 3531, 3531, 3531, 3531, 3531, 3531, 3531,
-     3531, 3531, 3532, 3532, 3532, 3532, 3532, 3532, 3532, 3532,
-     3532, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533, 3533,
-
-     3534, 3534, 3534, 3534, 3534, 3534, 3534, 3534, 3534, 3535,
-     3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3536, 3536,
-     3536, 3536, 3536, 3536, 3536, 3536, 3536, 3537, 3537, 3537,
-     3537, 3537, 3537, 3537, 3537, 3537, 3538, 3538, 3538, 3538,
-     3538, 3538, 3538, 3538, 3538, 3539, 3539, 3539, 3539, 3539,
-     3539, 3539, 3539, 3539, 3540, 3540, 3540, 3540, 3540, 3540,
-     3540, 3540, 3540, 3541, 3541, 3541,  689,  686,  684, 3541,
-     3542, 3542, 3542,  683,  679,  678, 3542, 3543, 3543, 3543,
-      677,  676,  673, 3543, 3544, 3544, 3544,  672,  671,  670,
-     3544, 3545, 3545, 3545,  666,  665,  664, 3545, 3546, 3546,
-
-     3546,  663,  657,  656, 3546, 3547, 3547, 3547,  654,  648,
-      647, 3547, 3548, 3548, 3548,  646,  642,  639, 3548, 3549,
-     3549, 3549,  637,  636,  635, 3549, 3550, 3550, 3550,  631,
-      627,  623, 3550, 3551, 3551, 3551,  622,  621,  620, 3551,
-     3552, 3552, 3552,  616,  612,  609, 3552, 3553, 3553, 3553,
-      608,  607,  606, 3553, 3554, 3554, 3554,  602,  596,  595,
-     3554, 3555, 3555, 3555,  591,  583,  579, 3555, 3556, 3556,
-     3556,  572,  570,  569, 3556, 3557, 3557, 3557,  565,  559,
-      558, 3557, 3558, 3558, 3558,  554,  550,  546, 3558, 3559,
-     3559, 3559,  545,  544,  543, 3559, 3560, 3560, 3560,  542,
-
-      538,  534, 3560, 3561, 3561, 3561,  527,  523,  515, 3561,
-     3562, 3562, 3562,  514,  513,  512, 3562, 3563, 3563, 3563,
-      511,  507,  501, 3563, 3564, 3564, 3564,  500,  496,  490,
-     3564, 3565, 3565, 3565,  489,  485,  479, 3565, 3566, 3566,
-     3566,  478,  474,  468, 3566, 3567, 3567, 3567,  467,  463,
-      459, 3567, 3568, 3568, 3568,  455,  454,  453, 3568, 3569,
-     3569, 3569,  449,  445,  441, 3569, 3570, 3570, 3570, 3570,
-     3570, 3570, 3570,  437, 3570, 3571, 3571, 3571,  431,  430,
-      429, 3571, 3572,  425,  421,  416, 3572, 3573, 3573, 3573,
-      415,  414,  413, 3573, 3574,  409,  403,  399, 3574, 3575,
-
-     3575, 3575,  395,  392,  388, 3575, 3576,  384,  381,  378,
-     3576, 3577, 3577, 3577,  376,  375,  373, 3577, 3578,  369,
-      362,  361, 3578, 3579, 3579, 3579,  360,  359,  358, 3579,
-     3580,  354,  347,  346, 3580, 3581, 3581, 3581,  342,  335,
-      334, 3581, 3582,  333,  329,  323, 3582, 3583, 3583, 3583,
-      322,  321,  317, 3583, 3584,  311,  307,  298, 3584, 3585,
-     3585, 3585,  297,  293,  289, 3585, 3586,  285,  281,  280,
-     3586, 3587, 3587, 3587,  276,  273,  272, 3587, 3588,  271,
-      265,  264, 3588, 3589, 3589, 3589,  262,  259,  247, 3589,
-     3590,    0,    0,    0, 3590, 3591, 3591, 3591,    0,    0,
-
-        0, 3591, 3592,    0,    0,    0, 3592, 3593, 3593, 3593,
-        0,    0,    0, 3593, 3594,    0,    0,    0, 3594, 3595,
-     3595, 3595,    0,    0,    0, 3595, 3596,    0,    0,    0,
-     3596, 3597, 3597, 3597,    0,    0,    0, 3597, 3598,    0,
-        0,    0, 3598, 3599, 3599, 3599,    0,    0,    0, 3599,
-     3600,    0,    0,    0, 3600, 3601, 3601, 3601,    0,    0,
-        0, 3601, 3602,    0,    0,    0, 3602, 3603, 3603, 3603,
-        0,    0,    0, 3603, 3604,    0,    0,    0, 3604, 3605,
-     3605, 3605,    0,    0,    0, 3605, 3606,    0,    0,    0,
-     3606, 3607, 3607, 3607,    0,    0,    0, 3607, 3608,    0,
-
-        0,    0, 3608, 3609, 3609, 3609,    0,    0,    0, 3609,
-     3610,    0,    0,    0, 3610, 3611, 3611, 3611,    0,    0,
-        0, 3611, 3612,    0,    0,    0, 3612, 3613, 3613, 3613,
-        0,    0,    0, 3613, 3614,    0,    0,    0, 3614, 3615,
-     3615, 3615,    0,    0,    0, 3615, 3616,    0,    0,    0,
-     3616, 3617, 3617, 3617,    0,    0,    0, 3617, 3618,    0,
-        0,    0, 3618, 3619, 3619, 3619,    0,    0,    0, 3619,
-     3620,    0,    0,    0, 3620, 3621, 3621, 3621,    0,    0,
-        0, 3621, 3622,    0,    0,    0, 3622, 3623, 3623, 3623,
-        0,    0,    0, 3623, 3624,    0,    0,    0, 3624, 3625,
-
-     3625, 3625,    0,    0,    0, 3625, 3626,    0,    0,    0,
-     3626, 3627, 3627, 3627,    0,    0,    0, 3627, 3628,    0,
-        0,    0, 3628, 3629, 3629, 3629, 3629, 3629, 3629, 3629,
-     3629, 3629, 3630,    0,    0,    0,    0, 3630, 3631, 3631,
-     3631,    0,    0,    0, 3631, 3632, 3632, 3632, 3632,    0,
-        0, 3632, 3632, 3633, 3633, 3633, 3633,    0, 3633,    0,
-     3633, 3634, 3634, 3634, 3634,    0,    0, 3634, 3634, 3635,
-     3635, 3635,    0,    0,    0, 3635, 3636, 3636, 3636, 3636,
-        0,    0, 3636, 3636, 3637, 3637, 3637,    0,    0,    0,
-     3637, 3638, 3638, 3638, 3638,    0,    0, 3638, 3638, 3639,
-
-     3639, 3639, 3639,    0, 3639,    0, 3639, 3640, 3640, 3640,
-     3640,    0,    0, 3640, 3640, 3641, 3641, 3641, 3641,    0,
-     3641,    0, 3641, 3642, 3642, 3642, 3642,    0,    0, 3642,
-     3642, 3643, 3643, 3643, 3643,    0, 3643,    0, 3643, 3644,
-     3644, 3644, 3644,    0,    0, 3644, 3644, 3645, 3645, 3645,
-        0,    0,    0, 3645, 3646, 3646, 3646, 3646,    0,    0,
-     3646, 3646, 3647, 3647, 3647, 3647,    0,    0, 3647, 3647,
-     3648, 3648, 3648,    0,    0,    0, 3648, 3649, 3649, 3649,
-     3649,    0,    0, 3649, 3649, 3650, 3650, 3650,    0,    0,
-        0, 3650, 3651, 3651, 3651, 3651,    0,    0, 3651, 3651,
-
-     3652, 3652, 3652,    0,    0,    0, 3652, 3653, 3653, 3653,
-     3653,    0,    0, 3653, 3653, 3654, 3654, 3654,    0,    0,
-        0, 3654, 3655, 3655, 3655, 3655,    0,    0, 3655, 3655,
-     3656, 3656, 3656,    0,    0,    0, 3656, 3657, 3657, 3657,
-     3657,    0,    0, 3657, 3657, 3658, 3658, 3658,    0,    0,
-        0, 3658, 3659, 3659, 3659, 3659,    0,    0, 3659, 3659,
-     3660, 3660, 3660,    0,    0,    0, 3660, 3661, 3661, 3661,
-     3661,    0,    0, 3661, 3661, 3662, 3662, 3662,    0,    0,
-        0, 3662, 3663, 3663, 3663, 3663,    0,    0, 3663, 3663,
-     3664, 3664, 3664,    0,    0,    0, 3664, 3665, 3665, 3665,
-
-     3665,    0,    0, 3665, 3665, 3666, 3666, 3666,    0,    0,
-        0, 3666, 3667, 3667, 3667, 3667,    0,    0, 3667, 3667,
-     3668, 3668, 3668,    0,    0,    0, 3668, 3669, 3669, 3669,
-     3669,    0,    0, 3669, 3669, 3670, 3670, 3670,    0,    0,
-        0, 3670, 3671, 3671, 3671, 3671,    0,    0, 3671, 3671,
-     3672, 3672, 3672,    0,    0,    0, 3672, 3673, 3673, 3673,
-     3673,    0,    0, 3673, 3673, 3674, 3674, 3674,    0,    0,
-        0, 3674, 3675, 3675, 3675, 3675,    0,    0, 3675, 3675,
-     3676, 3676, 3676, 3676,    0, 3676,    0, 3676, 3677, 3677,
-     3677, 3677,    0,    0, 3677, 3677, 3678, 3678, 3678,    0,
-
-        0,    0, 3678, 3679, 3679, 3679, 3679,    0,    0, 3679,
-     3679, 3680, 3680, 3680,    0,    0,    0, 3680, 3681, 3681,
-     3681, 3681,    0,    0, 3681, 3681, 3682, 3682, 3682,    0,
-        0,    0, 3682, 3683, 3683, 3683, 3683,    0,    0, 3683,
-     3683, 3684, 3684, 3684,    0,    0,    0, 3684, 3685, 3685,
-     3685, 3685,    0,    0, 3685, 3685, 3686, 3686, 3686,    0,
-        0,    0, 3686, 3687, 3687, 3687, 3687,    0,    0, 3687,
-     3687, 3688, 3688, 3688, 3688, 3688, 3688, 3688, 3688, 3688,
-     3689,    0, 3689,    0,    0, 3689, 3690, 3690, 3690,    0,
-        0,    0, 3690, 3691, 3691, 3691, 3691,    0,    0, 3691,
-
-     3691, 3692, 3692, 3692,    0,    0,    0, 3692, 3693, 3693,
-     3693, 3693,    0,    0, 3693, 3693, 3694, 3694, 3694,    0,
-        0,    0, 3694, 3695, 3695, 3695, 3695,    0,    0, 3695,
-     3695, 3696, 3696, 3696,    0,    0,    0, 3696, 3697, 3697,
-     3697, 3697,    0,    0, 3697, 3697, 3698, 3698, 3698,    0,
-        0,    0, 3698, 3699, 3699, 3699, 3699,    0,    0, 3699,
-     3699, 3700, 3700, 3700, 3700,    0,    0, 3700, 3700, 3701,
-     3701, 3701,    0,    0,    0, 3701, 3702, 3702, 3702, 3702,
-        0,    0, 3702, 3702, 3703, 3703, 3703,    0,    0,    0,
-     3703, 3704, 3704, 3704, 3704,    0,    0, 3704, 3704, 3705,
-
-     3705, 3705, 3705,    0,    0, 3705, 3705, 3706, 3706, 3706,
-     3706,    0, 3706,    0, 3706, 3707, 3707, 3707, 3707,    0,
-        0, 3707, 3707, 3708, 3708, 3708,    0,    0,    0, 3708,
-     3709, 3709, 3709, 3709,    0,    0, 3709, 3709, 3710, 3710,
-     3710, 3710,    0, 3710,    0, 3710, 3711, 3711, 3711, 3711,
-        0,    0, 3711, 3711, 3712, 3712, 3712, 3712,    0, 3712,
-        0, 3712, 3713, 3713, 3713, 3713,    0,    0, 3713, 3713,
-     3714, 3714, 3714,    0,    0,    0, 3714, 3715, 3715, 3715,
-     3715,    0,    0, 3715, 3715, 3716, 3716, 3716,    0,    0,
-        0, 3716, 3717, 3717, 3717, 3717,    0,    0, 3717, 3717,
-
-     3718, 3718, 3718,    0,    0,    0, 3718, 3719, 3719, 3719,
-     3719,    0,    0, 3719, 3719, 3720, 3720, 3720, 3720,    0,
-     3720,    0, 3720, 3721, 3721, 3721, 3721,    0,    0, 3721,
-     3721, 3722, 3722, 3722, 3722,    0, 3722,    0, 3722, 3723,
-     3723, 3723, 3723,    0,    0, 3723, 3723, 3724, 3724, 3724,
-        0,    0,    0, 3724, 3725, 3725, 3725, 3725,    0,    0,
-     3725, 3725, 3726, 3726, 3726,    0,    0,    0, 3726, 3727,
-     3727, 3727, 3727,    0,    0, 3727, 3727, 3728, 3728, 3728,
-        0,    0,    0, 3728, 3729, 3729, 3729, 3729,    0,    0,
-     3729, 3729, 3730, 3730, 3730,    0,    0,    0, 3730, 3731,
-
-     3731, 3731, 3731,    0,    0, 3731, 3731, 3732, 3732, 3732,
-        0,    0,    0, 3732, 3733, 3733, 3733, 3733,    0,    0,
-     3733, 3733, 3734, 3734, 3734,    0,    0,    0, 3734, 3735,
-     3735, 3735, 3735,    0,    0, 3735, 3735, 3736, 3736, 3736,
-        0,    0,    0, 3736, 3737, 3737, 3737, 3737,    0,    0,
-     3737, 3737, 3738, 3738, 3738,    0,    0,    0, 3738, 3739,
-     3739, 3739, 3739,    0,    0, 3739, 3739, 3740, 3740, 3740,
-        0,    0,    0, 3740, 3741, 3741, 3741, 3741,    0,    0,
-     3741, 3741, 3742, 3742, 3742, 3742,    0, 3742,    0, 3742,
-     3743, 3743, 3743, 3743,    0,    0, 3743, 3743, 3744, 3744,
-
-     3744,    0,    0,    0, 3744, 3745, 3745, 3745, 3745,    0,
-        0, 3745, 3745, 3746, 3746, 3746, 3746, 3746, 3746, 3746,
-     3746, 3746, 3747, 3747, 3747, 3747, 3747, 3747, 3747, 3747,
-     3747, 3748, 3748, 3748,    0,    0,    0, 3748, 3749, 3749,
-     3749,    0,    0,    0, 3749, 3750, 3750, 3750, 3750,    0,
-        0, 3750, 3750, 3751, 3751, 3751, 3751,    0, 3751,    0,
-     3751, 3752, 3752, 3752, 3752,    0,    0, 3752, 3752, 3753,
-     3753, 3753,    0,    0,    0, 3753, 3754, 3754, 3754, 3754,
-        0,    0, 3754, 3754, 3755, 3755, 3755,    0,    0,    0,
-     3755, 3756, 3756, 3756, 3756,    0,    0, 3756, 3756, 3757,
-
-     3757, 3757, 3757,    0,    0, 3757, 3757, 3758, 3758, 3758,
-        0,    0,    0, 3758, 3759, 3759, 3759, 3759,    0,    0,
-     3759, 3759, 3760, 3760, 3760,    0,    0,    0, 3760, 3761,
-     3761, 3761, 3761,    0,    0, 3761, 3761, 3762, 3762, 3762,
-     3762,    0,    0, 3762, 3762, 3763, 3763, 3763, 3763,    0,
-        0, 3763, 3763, 3764, 3764, 3764,    0,    0,    0, 3764,
-     3765, 3765, 3765, 3765,    0,    0, 3765, 3765, 3766, 3766,
-     3766, 3766,    0,    0, 3766, 3766, 3767, 3767, 3767, 3767,
-        0,    0, 3767, 3767, 3768, 3768, 3768,    0,    0,    0,
-     3768, 3769, 3769, 3769, 3769,    0,    0, 3769, 3769, 3770,
-
-     3770, 3770,    0,    0,    0, 3770, 3771, 3771, 3771, 3771,
+     1600, 1600, 1600, 2951, 1600, 1592, 2953, 1600, 1576, 1597,
+
+     2954, 2958, 1598, 2960, 1599, 1601, 1601, 1601, 1604, 1604,
+     1604, 1605, 1605, 1605, 2961, 1605, 2930, 2963, 1605, 2964,
+     1607, 1607, 1607, 1601, 2969, 1604, 1609, 1609, 1609, 2970,
+     1612, 1612, 1612, 1614, 1614, 1614, 1598, 1607, 1613, 1613,
+     1613, 2971, 1613, 2972, 1609, 1613, 1597, 1612, 1615, 1615,
+     1615, 1614, 1616, 1616, 1616, 2973, 1616, 2974, 2975, 1616,
+     1617, 1617, 1617, 2976, 2977, 1615, 1622, 1622, 1622, 1624,
+     1624, 1624, 1625, 1625, 1625, 1745, 1745, 1745, 1617, 1626,
+     1626, 1626, 2978, 2979, 1622, 2272, 2272, 1624, 2272, 1625,
+     2980, 2981, 1609, 1627, 1627, 1627, 2272, 1626, 2982, 1614,
+
+     1628, 1628, 1628, 2272, 1628, 2983, 2984, 1628, 2985, 2989,
+     1627, 1630, 1630, 1630, 1631, 1631, 1631, 2990, 1617, 2991,
+     1632, 1632, 1632, 1622, 1632, 2992, 1624, 1632, 2995, 1630,
+     1626, 1631, 1634, 1634, 1634, 1636, 1636, 1636, 1639, 1639,
+     1639, 2996, 1639, 2997, 2998, 1639, 1642, 1642, 1642, 2999,
+     1634, 3000, 1636, 3005, 1644, 1644, 1644, 1647, 1647, 1647,
+     1652, 1652, 1652, 1642, 3005, 3002, 1653, 1653, 1653, 3009,
+     1653, 1630, 1644, 1653, 3008, 1647, 3004, 1652, 1657, 1657,
+     1657, 1659, 1659, 1659, 1660, 1660, 1660, 1662, 1662, 1662,
+     3004, 1662, 3010, 1634, 1662, 3008, 1657, 3012, 1659, 1665,
+
+     1665, 1665, 1660, 1666, 1666, 1666, 3013, 1666, 3008, 3015,
+     1666, 3002, 3017, 1667, 1667, 1667, 1665, 1667, 1644, 3020,
+     1667, 3021, 3023, 1647, 1671, 1671, 1671, 1657, 1672, 1672,
+     1672, 3027, 1672, 3029, 3023, 1672, 1674, 1674, 1674, 3031,
+     3042, 1671, 3044, 1675, 1675, 1675, 1660, 1675, 3046, 3047,
+     1675, 1678, 1678, 1678, 1674, 1678, 3050, 3051, 1678, 1682,
+     1682, 1682, 1684, 1684, 1684, 1688, 1688, 1688, 1690, 1690,
+     1690, 1691, 1691, 1691, 1692, 1692, 1692, 1682, 1692, 3054,
+     1684, 1692, 3056, 1688, 3058, 1690, 1674, 3060, 1691, 1693,
+     1693, 1693, 1695, 1695, 1695, 1696, 1696, 1696, 3061, 1696,
+
+     3063, 3064, 1696, 1699, 1699, 1699, 3024, 1693, 3067, 1695,
+     1701, 1701, 1701, 1702, 1702, 1702, 3070, 1702, 3024, 3072,
+     1702, 1699, 1703, 1703, 1703, 1682, 3075, 1701, 1684, 1688,
+     1704, 1704, 1704, 1707, 1707, 1707, 1746, 1746, 1746, 1703,
+     1747, 1747, 1747, 1749, 1749, 1749, 3069, 3069, 1704, 3067,
+     3076, 1707, 1699, 1693, 1750, 1750, 1750, 1751, 1751, 1751,
+     1752, 1752, 1752, 1753, 1753, 1753, 1754, 1754, 1754, 1755,
+     1755, 1755, 3080, 1757, 1757, 1757, 3081, 1752, 3088, 1704,
+     1753, 3077, 3036, 1754, 1707, 2273, 2273, 1755, 2273, 1749,
+     1757, 1758, 1758, 1758, 3036, 1758, 2273, 3088, 1758, 3077,
+
+     3089, 1707, 3091, 2273, 1747, 1759, 1759, 1759, 1762, 1762,
+     1762, 1763, 1763, 1763, 1764, 1764, 1764, 3037, 1750, 3095,
+     3096, 1751, 3099, 1759, 3101, 3103, 1762, 3104, 1763, 3037,
+     1754, 1764, 1765, 1765, 1765, 3068, 1755, 1766, 1766, 1766,
+     1767, 1767, 1767, 1768, 1768, 1768, 1769, 1769, 1769, 3068,
+     1765, 1771, 1771, 1771, 3105, 1766, 1762, 1767, 3106, 3071,
+     1768, 3107, 3108, 1769, 1759, 1770, 1770, 1770, 1771, 1770,
+     3071, 3116, 1770, 1772, 1772, 1772, 1774, 1774, 1774, 1775,
+     1775, 1775, 3117, 1775, 3090, 3118, 1775, 1776, 1776, 1776,
+     3011, 1772, 3120, 1774, 1783, 1783, 1783, 1765, 1787, 1787,
+
+     1787, 1768, 1766, 3090, 1776, 1778, 1778, 1778, 3011, 1778,
+     3121, 1783, 1778, 3123, 3124, 1787, 1788, 1788, 1788, 3082,
+     1788, 3011, 3125, 1788, 1790, 1790, 1790, 1793, 1793, 1793,
+     1794, 1794, 1794, 1772, 3082, 1795, 1795, 1795, 3098, 1795,
+     3127, 1790, 1795, 3132, 3133, 1793, 3134, 3100, 1794, 1798,
+     1798, 1798, 1802, 1802, 1802, 3135, 1802, 3098, 3136, 1802,
+     1805, 1805, 1805, 1806, 1806, 1806, 3100, 1798, 1807, 1807,
+     1807, 3137, 1807, 3138, 3139, 1807, 3142, 1805, 3143, 3144,
+     1806, 1809, 1809, 1809, 3145, 1794, 1810, 1810, 1810, 3146,
+     1812, 1812, 1812, 1793, 1812, 3147, 3150, 1812, 3151, 1809,
+
+     1815, 1815, 1815, 1816, 1816, 1816, 3152, 1816, 3153, 3154,
+     1816, 1819, 1819, 1819, 1824, 1824, 1824, 3155, 1815, 1826,
+     1826, 1826, 1827, 1827, 1827, 3157, 1828, 1828, 1828, 1819,
+     1828, 3158, 1824, 1828, 1829, 1829, 1829, 1826, 3159, 1827,
+     1830, 1830, 1830, 3160, 1830, 3161, 1815, 1830, 1834, 1834,
+     1834, 3162, 1829, 1835, 1835, 1835, 3163, 1835, 3170, 3171,
+     1835, 3172, 1838, 1838, 1838, 1826, 1834, 1839, 1839, 1839,
+     1841, 1841, 1841, 1842, 1842, 1842, 3173, 1842, 1819, 1838,
+     1842, 1843, 1843, 1843, 3168, 1839, 3174, 1841, 1845, 1845,
+     1845, 3175, 1829, 1846, 1846, 1846, 3168, 1846, 1843, 3181,
+
+     1846, 1848, 1848, 1848, 3182, 1845, 1851, 1851, 1851, 1856,
+     1856, 1856, 3183, 1856, 1834, 3184, 1856, 3185, 3186, 1848,
+     1862, 1862, 1862, 3190, 1851, 1864, 1864, 1864, 1865, 1865,
+     1865, 1839, 1865, 3191, 3169, 1865, 3193, 3195, 1862, 1866,
+     1866, 1866, 1864, 1868, 1868, 1868, 3169, 1868, 3198, 3199,
+     1868, 3200, 1872, 1872, 1872, 3196, 1872, 1866, 1851, 1872,
+     1876, 1876, 1876, 1878, 1878, 1878, 1880, 1880, 1880, 3201,
+     3202, 1862, 1881, 1881, 1881, 1882, 1882, 1882, 1876, 3203,
+     3196, 1878, 3204, 3205, 1880, 1883, 1883, 1883, 3206, 1881,
+     3207, 3208, 1882, 1884, 1884, 1884, 1886, 1886, 1886, 1887,
+
+     1887, 1887, 1883, 1887, 3209, 3210, 1887, 3211, 1888, 1888,
+     1888, 1884, 1888, 1886, 1878, 1888, 3212, 1880, 1891, 1891,
+     1891, 1876, 1893, 1893, 1893, 3213, 1893, 3214, 3215, 1893,
+     1898, 1898, 1898, 1903, 1903, 1903, 1891, 1910, 1910, 1910,
+     1884, 1882, 1900, 1900, 1900, 3216, 1900, 3217, 1898, 1900,
+     1903, 1904, 1904, 1904, 1910, 1904, 3218, 3219, 1904, 1905,
+     1905, 1905, 1917, 1917, 1917, 1891, 1922, 1922, 1922, 1926,
+     1926, 1926, 1927, 1927, 1927, 3222, 3223, 1905, 1928, 1928,
+     1928, 1898, 1930, 1930, 1930, 1939, 1939, 1939, 1940, 1940,
+     1940, 1942, 1942, 1942, 1944, 1944, 1944, 1945, 1945, 1945,
+
+     3225, 1945, 3224, 3226, 1945, 1946, 1946, 1946, 3227, 3228,
+     1905, 1944, 1947, 1947, 1947, 3229, 1947, 3230, 3231, 1947,
+     3232, 3224, 1946, 1949, 1949, 1949, 1951, 1951, 1951, 3233,
+     1951, 3234, 3235, 1951, 1954, 1954, 1954, 1956, 1956, 1956,
+     3236, 1949, 1957, 1957, 1957, 1958, 1958, 1958, 3237, 1959,
+     1959, 1959, 1954, 1959, 1956, 3238, 1959, 1960, 1960, 1960,
+     1957, 3239, 1958, 1961, 1961, 1961, 3240, 1961, 3241, 3242,
+     1961, 1964, 1964, 1964, 1960, 1962, 1962, 1962, 1963, 1963,
+     1963, 1966, 1966, 1966, 3243, 1954, 3244, 3245, 1964, 1949,
+     1965, 1965, 1965, 1962, 1965, 3246, 1963, 1965, 1966, 3250,
+
+     1967, 1967, 1967, 1957, 1967, 3252, 3253, 1967, 1970, 1970,
+     1970, 1971, 1971, 1971, 3255, 1971, 3256, 3257, 1971, 1972,
+     1972, 1972, 1974, 1974, 1974, 1970, 1974, 3258, 3259, 1974,
+     1977, 1977, 1977, 3249, 1978, 1978, 1978, 1972, 1978, 3260,
+     1962, 1978, 3261, 1963, 1982, 1982, 1982, 1977, 1983, 1983,
+     1983, 3262, 1983, 3249, 3263, 1983, 1984, 1984, 1984, 3264,
+     3265, 1982, 1987, 1987, 1987, 3266, 1987, 3267, 3268, 1987,
+     1972, 3269, 3270, 1984, 1991, 1991, 1991, 1992, 1992, 1992,
+     3271, 1992, 3273, 3275, 1992, 1995, 1995, 1995, 1996, 1996,
+     1996, 1991, 1999, 1999, 1999, 2000, 2000, 2000, 3272, 2000,
+
+     3277, 3278, 2000, 1995, 3272, 3279, 1996, 3280, 3281, 1999,
+     2001, 2001, 2001, 3282, 2001, 3284, 3285, 2001, 3287, 2005,
+     2005, 2005, 2007, 2007, 2007, 2009, 2009, 2009, 2010, 2010,
+     2010, 2012, 2012, 2012, 3288, 3290, 1995, 2005, 2015, 2015,
+     2015, 1996, 3291, 2009, 3293, 3296, 2010, 3297, 2012, 2018,
+     2018, 2018, 3298, 2019, 2019, 2019, 2015, 2019, 3293, 3299,
+     2019, 2022, 2022, 2022, 2024, 2024, 2024, 2018, 2025, 2025,
+     2025, 2027, 2027, 2027, 2032, 2032, 2032, 2012, 2010, 2022,
+     3301, 3303, 2024, 2009, 3305, 2025, 2026, 2026, 2026, 2027,
+     2026, 2032, 3307, 2026, 3309, 2029, 2029, 2029, 2018, 2029,
+
+     3310, 3311, 2029, 3312, 2033, 2033, 2033, 2022, 2033, 3313,
+     3314, 2033, 2035, 2035, 2035, 3315, 2035, 3316, 2027, 2035,
+     2039, 2039, 2039, 2042, 2042, 2042, 2043, 2043, 2043, 2044,
+     2044, 2044, 2046, 2046, 2046, 2051, 2051, 2051, 2039, 3318,
+     2042, 2053, 2053, 2053, 2043, 2053, 3320, 3322, 2053, 2056,
+     2056, 2056, 3323, 2051, 2059, 2059, 2059, 2061, 2061, 2061,
+     2063, 2063, 2063, 2065, 2065, 2065, 3324, 2056, 2066, 2066,
+     2066, 2059, 2067, 2067, 2067, 2061, 2067, 3325, 2063, 2067,
+     1508, 2065, 2068, 2068, 2068, 2066, 3342, 2043, 2069, 2069,
+     2069, 2070, 2070, 2070, 3342, 2070, 3350, 3338, 2070, 2068,
+
+     2051, 2071, 2071, 2071, 3326, 2069, 2072, 2072, 2072, 3339,
+     2073, 2073, 2073, 3346, 2073, 3327, 2061, 2073, 1505, 2071,
+     2076, 2076, 2076, 2072, 2080, 2080, 2080, 2065, 2068, 2081,
+     2081, 2081, 2090, 2090, 2090, 1504, 2090, 3350, 2076, 2090,
+     3326, 3338, 2080, 2093, 2093, 2093, 2081, 2097, 2097, 2097,
+     3343, 3327, 2072, 3339, 2071, 2098, 2098, 2098, 3343, 2098,
+     3346, 2093, 2098, 1503, 2097, 2099, 2099, 2099, 2104, 2104,
+     2104, 3334, 3335, 2076, 2105, 2105, 2105, 2106, 2106, 2106,
+     2108, 2108, 2108, 2113, 2113, 2113, 2114, 2114, 2114, 2093,
+     2115, 2115, 2115, 2116, 2116, 2116, 2118, 2118, 2118, 2122,
+
+     2122, 2122, 2123, 2123, 2123, 2125, 2125, 2125, 2126, 2126,
+     2126, 2127, 2127, 2127, 2129, 2129, 2129, 3344, 2129, 3334,
+     3335, 2129, 2132, 2132, 2132, 3344, 2132, 3348, 3366, 2132,
+     2136, 2136, 2136, 2138, 2138, 2138, 2140, 2140, 2140, 2116,
+     2141, 2141, 2141, 3336, 2141, 3352, 3340, 2141, 2136, 3337,
+     3340, 2138, 3353, 2140, 2142, 2142, 2142, 2127, 2143, 2143,
+     2143, 3345, 2143, 3351, 3348, 2143, 2146, 2146, 2146, 3345,
+     2146, 3366, 2142, 2146, 2149, 2149, 2149, 2150, 2150, 2150,
+     3352, 2136, 2151, 2151, 2151, 3349, 2151, 3353, 3347, 2151,
+     1502, 3336, 2149, 2138, 2149, 2150, 3372, 3337, 2154, 2154,
+
+     2154, 2155, 2155, 2155, 3351, 2155, 3358, 1501, 2155, 2159,
+     2159, 2159, 3356, 2150, 2142, 2154, 2156, 2156, 2156, 3357,
+     2156, 3360, 3349, 2156, 2161, 2161, 2161, 2159, 2161, 3372,
+     3360, 2161, 2167, 2167, 2167, 3347, 2167, 3361, 3358, 2167,
+     2170, 2170, 2170, 2171, 2171, 2171, 3361, 2171, 3373, 3356,
+     2171, 2175, 2175, 2175, 3378, 2175, 3357, 2170, 2175, 2179,
+     2179, 2179, 2180, 2180, 2180, 2181, 2181, 2181, 3362, 3341,
+     2184, 2184, 2184, 3341, 2184, 2159, 2179, 2184, 3354, 1500,
+     2180, 3373, 3355, 2181, 2189, 2189, 2189, 2190, 2190, 2190,
+     2192, 2192, 2192, 2193, 2193, 2193, 3378, 2193, 3364, 3359,
+
+     2193, 1499, 2189, 3362, 3398, 2190, 1496, 2192, 3363, 2198,
+     2198, 2198, 2199, 2199, 2199, 2201, 2201, 2201, 2203, 2203,
+     2203, 3370, 2203, 1495, 3354, 2203, 2180, 2198, 3355, 3367,
+     2199, 3359, 3364, 2201, 2206, 2206, 2206, 3374, 2190, 2189,
+     2208, 2208, 2208, 3363, 2208, 3398, 3374, 2208, 2214, 2214,
+     2214, 3392, 2206, 2215, 2215, 2215, 3370, 2215, 3368, 3392,
+     2215, 2216, 2216, 2216, 3365, 2214, 2217, 2217, 2217, 2218,
+     2218, 2218, 3367, 3399, 2199, 2198, 2219, 2219, 2219, 2216,
+     2220, 2220, 2220, 2221, 2221, 2221, 3369, 2206, 2222, 2222,
+     2222, 2223, 2223, 2223, 2224, 2224, 2224, 2220, 3365, 1494,
+
+     2221, 2227, 2227, 2227, 3368, 2222, 3375, 3380, 2223, 2228,
+     2228, 2228, 2224, 2228, 3399, 3375, 2228, 3384, 2227, 2230,
+     2230, 2230, 2232, 2232, 2232, 2216, 2235, 2235, 2235, 2236,
+     2236, 2236, 3369, 2236, 2221, 3376, 2236, 2230, 1485, 1483,
+     2232, 2239, 2239, 2239, 2235, 3371, 3384, 2240, 2240, 2240,
+     2223, 2240, 2222, 3380, 2240, 2245, 2245, 2245, 2239, 2224,
+     2242, 2242, 2242, 3379, 2242, 3377, 3382, 2242, 2246, 2246,
+     2246, 3381, 3376, 2245, 2247, 2247, 2247, 1478, 2247, 3390,
+     3371, 2247, 2249, 2249, 2249, 2246, 2253, 2253, 2253, 3393,
+     2255, 2255, 2255, 3388, 2256, 2256, 2256, 3393, 2256, 3385,
+
+     2249, 2256, 3377, 3382, 2253, 3379, 2245, 2255, 2267, 2267,
+     2267, 2268, 2268, 2268, 2271, 2271, 2271, 3381, 2271, 3383,
+     3400, 2271, 2274, 2274, 2274, 3390, 2267, 3388, 3385, 2268,
+     2275, 2275, 2275, 2249, 2276, 2276, 2276, 2279, 2279, 2279,
+     2280, 2280, 2280, 2282, 2282, 2282, 2283, 2283, 2283, 2285,
+     2285, 2285, 2286, 2286, 2286, 3400, 3383, 2267, 2287, 2287,
+     2287, 2288, 2288, 2288, 2291, 2291, 2291, 2292, 2292, 2292,
+     2295, 2295, 2295, 2296, 2296, 2296, 2298, 2298, 2298, 2299,
+     2299, 2299, 2303, 2303, 2303, 2304, 2304, 2304, 2305, 2305,
+     2305, 2306, 2306, 2306, 2307, 2307, 2307, 3396, 2307, 3408,
+
+     2303, 2307, 2310, 2310, 2310, 3389, 2305, 3408, 2306, 2311,
+     2311, 2311, 2312, 2312, 2312, 2313, 2313, 2313, 3397, 2313,
+     2310, 3409, 2313, 2316, 2316, 2316, 3391, 2311, 3386, 3409,
+     2312, 2321, 2321, 2321, 3396, 2321, 3387, 3386, 2321, 3389,
+     3394, 2316, 2324, 2324, 2324, 3387, 2311, 2328, 2328, 2328,
+     2330, 2330, 2330, 2310, 2305, 3397, 2329, 2329, 2329, 2324,
+     2329, 3401, 3406, 2329, 2328, 2331, 2331, 2331, 2330, 2336,
+     2336, 2336, 3391, 2312, 2337, 2337, 2337, 2338, 2338, 2338,
+     2339, 2339, 2339, 2331, 2340, 2340, 2340, 3394, 2340, 1472,
+     3404, 2340, 2337, 1466, 3406, 2338, 3401, 2339, 2343, 2343,
+
+     2343, 2344, 2344, 2344, 2345, 2345, 2345, 2346, 2346, 2346,
+     2347, 2347, 2347, 3395, 3410, 2343, 1462, 3405, 2344, 3432,
+     1457, 2345, 1453, 3402, 2346, 3403, 2339, 3404, 2347, 2348,
+     2348, 2348, 3418, 3432, 2337, 2349, 2349, 2349, 2350, 2350,
+     2350, 2354, 2354, 2354, 2355, 2355, 2355, 2348, 2355, 1452,
+     3412, 2355, 2349, 2343, 3405, 2345, 2350, 2358, 2358, 2358,
+     3395, 3410, 2344, 2359, 2359, 2359, 2360, 2360, 2360, 3402,
+     2347, 3403, 2361, 2361, 2361, 2358, 2361, 3411, 3418, 2361,
+     2362, 2362, 2362, 2360, 2363, 2363, 2363, 3412, 3419, 2350,
+     2364, 2364, 2364, 2348, 2365, 2365, 2365, 2362, 2366, 2366,
+
+     2366, 2363, 2367, 2367, 2367, 3407, 3413, 2364, 2371, 2371,
+     2371, 1444, 2365, 2368, 2368, 2368, 2358, 2368, 3416, 2367,
+     2368, 2372, 2372, 2372, 3411, 2371, 2376, 2376, 2376, 2378,
+     2378, 2378, 1439, 2378, 3419, 2363, 2378, 3407, 1430, 2372,
+     1428, 2364, 3424, 3413, 2376, 2382, 2382, 2382, 2383, 2383,
+     2383, 3424, 2383, 3416, 1419, 2383, 1414, 2387, 2387, 2387,
+     2391, 2391, 2391, 2382, 2391, 3420, 1410, 2391, 2404, 2404,
+     2404, 2405, 2405, 2405, 2371, 2387, 2418, 2418, 2418, 2419,
+     2419, 2419, 2422, 2422, 2422, 3414, 2404, 3415, 3417, 2405,
+     2423, 2423, 2423, 2425, 2425, 2425, 2426, 2426, 2426, 2429,
+
+     2429, 2429, 3420, 2387, 2432, 2432, 2432, 2436, 2436, 2436,
+     2438, 2438, 2438, 2439, 2439, 2439, 1405, 2440, 2440, 2440,
+     2441, 2441, 2441, 3417, 2441, 2436, 3414, 2441, 3415, 2404,
+     1404, 2439, 1403, 2405, 2440, 2442, 2442, 2442, 2443, 2443,
+     2443, 2444, 2444, 2444, 2445, 2445, 2445, 2452, 2452, 2452,
+     2453, 2453, 2453, 2442, 2453, 3421, 2443, 2453, 1401, 2444,
+     3433, 3422, 2445, 3423, 2452, 2455, 2455, 2455, 2457, 2457,
+     2457, 3433, 2457, 3426, 3427, 2457, 2460, 2460, 2460, 2464,
+     2464, 2464, 2455, 2465, 2465, 2465, 2466, 2466, 2466, 2467,
+     2467, 2467, 3421, 3422, 2460, 3423, 2464, 2469, 2469, 2469,
+
+     3428, 1400, 2443, 3425, 2466, 3426, 3427, 2467, 2444, 2470,
+     2470, 2470, 3425, 2470, 2469, 3430, 2470, 2474, 2474, 2474,
+     2475, 2475, 2475, 2476, 2476, 2476, 3429, 2476, 1398, 1393,
+     2476, 2477, 2477, 2477, 2474, 1392, 1387, 2475, 2478, 2478,
+     2478, 1386, 1380, 2466, 2479, 2479, 2479, 3430, 3428, 2477,
+     2480, 2480, 2480, 1379, 2480, 1378, 2478, 2480, 2481, 2481,
+     2481, 2479, 2484, 2484, 2484, 2485, 2485, 2485, 2486, 2486,
+     2486, 2487, 2487, 2487, 3429, 2487, 2481, 3431, 2487, 2484,
+     2490, 2490, 2490, 2491, 2491, 2491, 2486, 2491, 1377, 1360,
+     2491, 2492, 2492, 2492, 2493, 2493, 2493, 2490, 1349, 2478,
+
+     2494, 2494, 2494, 2496, 2496, 2496, 1344, 1343, 2492, 3431,
+     1342, 2493, 2497, 2497, 2497, 2498, 2498, 2498, 2494, 2498,
+     1338, 1321, 2498, 2499, 2499, 2499, 2503, 2503, 2503, 2497,
+     2506, 2506, 2506, 2519, 2519, 2519, 2537, 2537, 2537, 1320,
+     2499, 2538, 2538, 2538, 2503, 2543, 2543, 2543, 2506, 1315,
+     1314, 2519, 2546, 2546, 2546, 2547, 2547, 2547, 2549, 2549,
+     2549, 1313, 2549, 1308, 1307, 2549, 2552, 2552, 2552, 2546,
+     2554, 2554, 2554, 2547, 2555, 2555, 2555, 1289, 2499, 1288,
+     2559, 2559, 2559, 1287, 2552, 2576, 2576, 2576, 2554, 2565,
+     2565, 2565, 2555, 2519, 1286, 1285, 2506, 2559, 2561, 2561,
+
+     2561, 1284, 2561, 2576, 1283, 2561, 2565, 2566, 2566, 2566,
+     1282, 2566, 1281, 1271, 2566, 2573, 2573, 2573, 2574, 2574,
+     2574, 2575, 2575, 2575, 1270, 2575, 1269, 1268, 2575, 1263,
+     1262, 2554, 2573, 1261, 1260, 2574, 1237, 2577, 2577, 2577,
+     2555, 2577, 1236, 1229, 2577, 2583, 2583, 2583, 2584, 2584,
+     2584, 1225, 2584, 1220, 1219, 2584, 2585, 2585, 2585, 1214,
+     2585, 1211, 2583, 2585, 2588, 2588, 2588, 2590, 2590, 2590,
+     2591, 2591, 2591, 1210, 2591, 1207, 1206, 2591, 2594, 2594,
+     2594, 1205, 2588, 1204, 1203, 2590, 2597, 2597, 2597, 2598,
+     2598, 2598, 1202, 2599, 2599, 2599, 2594, 2599, 1201, 1200,
+
+     2599, 1199, 1197, 2597, 1196, 1195, 2598, 2600, 2600, 2600,
+     2602, 2602, 2602, 1194, 2602, 1193, 1190, 2602, 2605, 2605,
+     2605, 2607, 2607, 2607, 1189, 2600, 2606, 2606, 2606, 2590,
+     2606, 1188, 1187, 2606, 1185, 2605, 1184, 1183, 2607, 2608,
+     2608, 2608, 1182, 2608, 1181, 1180, 2608, 2609, 2609, 2609,
+     1179, 2609, 1178, 1176, 2609, 2612, 2612, 2612, 2613, 2613,
+     2613, 2614, 2614, 2614, 2617, 2617, 2617, 2618, 2618, 2618,
+     1175, 1174, 2612, 1173, 1172, 2613, 1171, 1170, 2614, 2619,
+     2619, 2619, 2617, 2630, 2630, 2630, 2647, 2647, 2647, 2648,
+     2648, 2648, 2652, 2652, 2652, 1164, 2619, 2655, 2655, 2655,
+
+     1160, 2630, 2656, 2656, 2656, 1157, 2656, 1156, 1155, 2656,
+     2657, 2657, 2657, 1153, 2655, 1149, 2612, 1146, 2658, 2658,
+     2658, 2661, 2661, 2661, 2662, 2662, 2662, 1145, 2657, 1144,
+     2663, 2663, 2663, 1140, 2663, 2617, 2658, 2663, 2661, 1139,
+     1136, 2662, 1132, 2630, 2664, 2664, 2664, 2666, 2666, 2666,
+     1131, 2666, 1128, 1125, 2666, 2677, 2677, 2677, 2678, 2678,
+     2678, 2664, 2678, 1122, 1121, 2678, 2679, 2679, 2679, 2658,
+     2679, 1116, 2677, 2679, 2682, 2682, 2682, 2657, 2685, 2685,
+     2685, 2687, 2687, 2687, 1108, 2687, 1107, 1106, 2687, 2696,
+     2696, 2696, 2682, 1104, 1100, 2685, 2698, 2698, 2698, 2699,
+
+     2699, 2699, 1097, 2699, 1094, 1091, 2699, 2696, 2700, 2700,
+     2700, 1090, 2700, 2698, 1089, 2700, 2703, 2703, 2703, 1088,
+     2703, 1087, 1086, 2703, 2706, 2706, 2706, 1085, 2706, 1084,
+     1081, 2706, 2715, 2715, 2715, 2716, 2716, 2716, 2717, 2717,
+     2717, 1080, 2717, 1077, 1076, 2717, 2718, 2718, 2718, 2715,
+     1072, 1070, 2716, 2719, 2719, 2719, 1067, 2719, 1066, 1063,
+     2719, 1062, 1059, 2718, 2720, 2720, 2720, 2721, 2721, 2721,
+     2722, 2722, 2722, 2723, 2723, 2723, 2724, 2724, 2724, 1052,
+     1049, 2720, 1048, 1047, 2721, 2736, 2736, 2736, 2722, 2739,
+     2739, 2739, 2715, 2724, 2725, 2725, 2725, 1044, 2725, 1040,
+
+     1033, 2725, 1032, 2736, 1028, 1027, 2739, 2739, 2753, 2753,
+     2753, 2754, 2754, 2754, 2757, 2757, 2757, 2758, 2758, 2758,
+     2760, 2760, 2760, 1026, 2760, 1023, 1022, 2760, 2763, 2763,
+     2763, 1021, 2722, 2764, 2764, 2764, 2736, 2767, 2767, 2767,
+     2768, 2768, 2768, 1018, 2768, 1011, 2763, 2768, 2769, 2769,
+     2769, 2764, 2769, 1010, 2767, 2769, 2772, 2772, 2772, 2773,
+     2773, 2773, 1009, 2773, 1008, 1007, 2773, 2783, 2783, 2783,
+     1006, 2783, 1005, 2772, 2783, 2787, 2787, 2787, 2788, 2788,
+     2788, 1004, 2788, 1003, 1002, 2788, 2796, 2796, 2796, 2799,
+     2799, 2799, 2787, 2799, 2763,  998, 2799, 2814, 2814, 2814,
+
+      994, 2815, 2815, 2815, 2796, 2815,  971,  968, 2815, 2818,
+     2818, 2818,  965, 2818, 2814,  964, 2818, 2821, 2821, 2821,
+     2822, 2822, 2822,  957, 2822,  956,  954, 2822, 2823, 2823,
+     2823, 2824, 2824, 2824, 2821, 2824,  953,  952, 2824, 2825,
+     2825, 2825, 2826, 2826, 2826, 2823, 2826,  951,  950, 2826,
+     2837, 2837, 2837, 2839, 2839, 2839,  949, 2825, 2840, 2840,
+     2840,  948, 2841, 2841, 2841,  947, 2841,  946, 2837, 2841,
+     2839, 2839, 2854, 2854, 2854, 2840, 2840, 2855, 2855, 2855,
+     2841, 2856, 2856, 2856, 2857, 2857, 2857, 2858, 2858, 2858,
+     2825, 2859, 2859, 2859, 2864, 2864, 2864,  945,  944, 2837,
+
+     2865, 2865, 2865, 2869, 2869, 2869,  943, 2869,  941,  940,
+     2869,  939, 2864, 2872, 2872, 2872,  938, 2872, 2865,  937,
+     2872, 2875, 2875, 2875, 2884, 2884, 2884, 2885, 2885, 2885,
+      936, 2885,  935,  934, 2885, 2888, 2888, 2888, 2875,  933,
+      931, 2884, 2908, 2908, 2908, 2864, 2909, 2909, 2909,  930,
+     2909,  929, 2888, 2909, 2914, 2914, 2914,  928, 2914, 2908,
+      927, 2914, 2917, 2917, 2917,  926, 2917,  925,  924, 2917,
+     2920, 2920, 2920, 2929, 2929, 2929, 2931, 2931, 2931, 2932,
+     2932, 2932,  923, 2932,  922,  918, 2932,  914, 2920,  913,
+      912, 2929,  911, 2931, 2931,  910,  906, 2932, 2933, 2933,
+
+     2933,  904, 2933,  903,  902, 2933, 2944, 2944, 2944, 2945,
+     2945, 2945, 2946, 2946, 2946,  901, 2933, 2947, 2947, 2947,
+     2952, 2952, 2952, 2956, 2956, 2956,  900, 2956,  899,  896,
+     2956,  895, 2955, 2955, 2955, 2957, 2957, 2957, 2952, 2929,
+     2934, 2934, 2934, 2934, 2934, 2934, 2934, 2934, 2934, 2955,
+      893, 2934, 2957, 2965, 2965, 2965, 2934, 2934, 2934, 2934,
+     2934, 2966, 2966, 2966,  891, 2966,  887,  886, 2966,  885,
+     2965, 2968, 2968, 2968,  883, 2968,  880,  879, 2968, 2967,
+     2967, 2967, 2993, 2993, 2993, 2934, 2934, 2935, 2935, 2935,
+     2935, 2935, 2935, 2935, 2935, 2935, 2967,  877, 2935,  876,
+
+     2993,  873,  871, 2935, 2935, 2935, 2935, 2935, 2986, 2986,
+     2986,  868, 2986,  867,  866, 2986, 3001, 3001, 3001, 3003,
+     3003, 3003,  865, 3003,  862,  861, 3003,  860,  859, 3018,
+     3018, 3018, 2935, 2935, 3001,  858,  857, 3003, 3006, 3006,
+     3006, 3006, 3006, 3006, 3006, 3006, 3006, 3018,  856, 3006,
+     3025, 3025, 3025,  854, 3006, 3006, 3006, 3006, 3006, 3022,
+     3022, 3022,  851, 3022,  850,  846, 3022, 3025, 3026, 3026,
+     3026,  845, 3026,  844,  843, 3026, 3065, 3065, 3065, 3073,
+     3073, 3073,  842, 3006, 3006, 3007, 3007, 3007, 3007, 3007,
+     3007, 3007, 3007, 3007, 3065,  841, 3007, 3073, 3073,  840,
+
+      832, 3007, 3007, 3007, 3007, 3007, 3032, 3032, 3032,  831,
+     3032,  828,  827, 3032, 3035, 3035, 3035,  826, 3035,  825,
+      824, 3035, 3086, 3086, 3086, 3087, 3087, 3087,  822,  821,
+     3007, 3007,  820, 3092, 3092, 3092,  817, 3092,  816, 3086,
+     3092,  815, 3087, 3097, 3097, 3097, 3102, 3102, 3102, 3115,
+     3115, 3115, 3119, 3119, 3119, 3128, 3128, 3128,  812,  811,
+     3097,  810,  807, 3102, 3129, 3129, 3129, 3115, 3129,  806,
+     3119, 3129, 3128, 3130, 3130, 3130, 3131, 3131, 3131,  802,
+     3131,  800,  797, 3131, 3140, 3140, 3140, 3141, 3141, 3141,
+     3130, 3141,  796,  795, 3141, 3148, 3148, 3148, 3149, 3149,
+
+     3149, 3140, 3149, 3119,  794, 3149, 3156, 3156, 3156, 3164,
+     3164, 3164, 3148, 3164,  792,  789, 3164,  788, 3167, 3167,
+     3167,  787, 3167,  784, 3156, 3167, 3178, 3178, 3178,  781,
+     3178,  777,  776, 3178, 3187, 3187, 3187,  775, 3187,  774,
+      771, 3187,  768, 3156, 3308, 3308, 3308, 3317, 3317, 3317,
+      767, 3317,  764,  760, 3317, 3434, 3434, 3434, 3435, 3435,
+     3435,  759, 3308,  758,  757, 3317,  756,  755,  754,  753,
+      752,  751,  750, 3434,  749,  747, 3435, 3438, 3438, 3438,
+     3438, 3438, 3438, 3438, 3438, 3438, 3439, 3439, 3439, 3439,
+     3439, 3439, 3439, 3439, 3439, 3440, 3440, 3440, 3440, 3440,
+
+     3440, 3440, 3440, 3440, 3441, 3441, 3441, 3441, 3441, 3441,
+     3441, 3441, 3441, 3442, 3442, 3442, 3442, 3442, 3442, 3442,
+     3442, 3442, 3443, 3443, 3443, 3443, 3443, 3443, 3443, 3443,
+     3443, 3444, 3444, 3444, 3444, 3444, 3444, 3444, 3444, 3444,
+     3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3445, 3446,
+     3446, 3446, 3446, 3446, 3446, 3446, 3446, 3446, 3447, 3447,
+     3447, 3447, 3447, 3447, 3447, 3447, 3447, 3448, 3448, 3448,
+     3448, 3448, 3448, 3448, 3448, 3448, 3449, 3449, 3449, 3449,
+     3449, 3449, 3449, 3449, 3449, 3450, 3450, 3450, 3450, 3450,
+     3450, 3450, 3450, 3450, 3451, 3451, 3451, 3451, 3451, 3451,
+
+     3451, 3451, 3451, 3452, 3452, 3452, 3452, 3452, 3452, 3452,
+     3452, 3452, 3453, 3453, 3453, 3453, 3453, 3453, 3453, 3453,
+     3453, 3454, 3454, 3454, 3454, 3454, 3454, 3454, 3454, 3454,
+     3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3455, 3456,
+     3456, 3456, 3456, 3456, 3456, 3456, 3456, 3456, 3457, 3457,
+     3457, 3457, 3457, 3457, 3457, 3457, 3457, 3458, 3458, 3458,
+     3458, 3458, 3458, 3458, 3458, 3458, 3459, 3459, 3459, 3459,
+     3459, 3459, 3459, 3459, 3459, 3460, 3460, 3460, 3460, 3460,
+     3460, 3460, 3460, 3460, 3461, 3461, 3461, 3461, 3461, 3461,
+     3461, 3461, 3461, 3462, 3462, 3462, 3462, 3462, 3462, 3462,
+
+     3462, 3462, 3463, 3463, 3463, 3463, 3463, 3463, 3463, 3463,
+     3463, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464, 3464,
+     3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3465, 3466,
+     3466, 3466, 3466, 3466, 3466, 3466, 3466, 3466, 3467, 3467,
+     3467, 3467, 3467, 3467, 3467, 3467, 3467, 3468, 3468, 3468,
+     3468, 3468, 3468, 3468, 3468, 3468, 3469, 3469, 3469, 3469,
+     3469, 3469, 3469, 3469, 3469, 3470, 3470, 3470, 3470, 3470,
+     3470, 3470, 3470, 3470, 3471, 3471, 3471, 3471, 3471, 3471,
+     3471, 3471, 3471, 3472, 3472, 3472, 3472, 3472, 3472, 3472,
+     3472, 3472, 3473, 3473, 3473, 3473, 3473, 3473, 3473, 3473,
+
+     3473, 3474, 3474, 3474, 3474, 3474, 3474, 3474, 3474, 3474,
+     3475, 3475, 3475, 3475, 3475, 3475, 3475, 3475, 3475, 3476,
+     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3477, 3477,
+     3477, 3477, 3477, 3477, 3477, 3477, 3477, 3478, 3478, 3478,
+     3478, 3478, 3478, 3478, 3478, 3478, 3479, 3479, 3479, 3479,
+     3479, 3479, 3479, 3479, 3479, 3480, 3480, 3480, 3480, 3480,
+     3480, 3480, 3480, 3480, 3481, 3481, 3481, 3481, 3481, 3481,
+     3481, 3481, 3481, 3482, 3482, 3482, 3482, 3482, 3482, 3482,
+     3482, 3482, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
+     3483, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484,
+
+     3485, 3485, 3485, 3485, 3485, 3485, 3485, 3485, 3485, 3486,
+     3486, 3486, 3486, 3486, 3486, 3486, 3486, 3486, 3487, 3487,
+     3487, 3487, 3487, 3487, 3487, 3487, 3487, 3488, 3488, 3488,
+     3488, 3488, 3488, 3488, 3488, 3488, 3489, 3489, 3489, 3489,
+     3489, 3489, 3489, 3489, 3489, 3490, 3490, 3490, 3490, 3490,
+     3490, 3490, 3490, 3490, 3491, 3491, 3491, 3491, 3491, 3491,
+     3491, 3491, 3491, 3492, 3492, 3492, 3492, 3492, 3492, 3492,
+     3492, 3492, 3493, 3493, 3493, 3493, 3493, 3493, 3493, 3493,
+     3493, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494,
+     3495, 3495, 3495, 3495, 3495, 3495, 3495, 3495, 3495, 3496,
+
+     3496, 3496, 3496, 3496, 3496, 3496, 3496, 3496, 3497, 3497,
+     3497, 3497, 3497, 3497, 3497, 3497, 3497, 3498, 3498, 3498,
+     3498, 3498, 3498, 3498, 3498, 3498, 3499, 3499, 3499, 3499,
+     3499, 3499, 3499, 3499, 3499, 3500, 3500, 3500, 3500, 3500,
+     3500, 3500, 3500, 3500, 3501, 3501, 3501, 3501, 3501, 3501,
+     3501, 3501, 3501, 3502, 3502, 3502,  745,  744,  741, 3502,
+     3503, 3503, 3503,  740,  739,  738, 3503, 3504, 3504, 3504,
+      737,  736,  731, 3504, 3505, 3505, 3505,  730,  729,  726,
+     3505, 3506, 3506, 3506,  725,  724,  723, 3506, 3507, 3507,
+     3507,  720,  719,  717, 3507, 3508, 3508, 3508,  714,  713,
+
+      710, 3508, 3509, 3509, 3509,  709,  708,  707, 3509, 3510,
+     3510, 3510,  706,  705,  697, 3510, 3511, 3511, 3511,  696,
+      695,  692, 3511, 3512, 3512, 3512,  691,  690,  689, 3512,
+     3513, 3513, 3513,  686,  684,  683, 3513, 3514, 3514, 3514,
+      679,  678,  677, 3514, 3515, 3515, 3515,  676,  673,  672,
+     3515, 3516, 3516, 3516,  671,  670,  666, 3516, 3517, 3517,
+     3517,  665,  664,  663, 3517, 3518, 3518, 3518,  657,  656,
+      654, 3518, 3519, 3519, 3519,  648,  647,  646, 3519, 3520,
+     3520, 3520,  642,  639,  637, 3520, 3521, 3521, 3521,  636,
+      635,  631, 3521, 3522, 3522, 3522,  627,  623,  622, 3522,
+
+     3523, 3523, 3523,  621,  620,  616, 3523, 3524, 3524, 3524,
+      612,  609,  608, 3524, 3525, 3525, 3525,  607,  606,  602,
+     3525, 3526, 3526, 3526,  596,  595,  591, 3526, 3527, 3527,
+     3527,  583,  579,  572, 3527, 3528, 3528, 3528,  570,  569,
+      565, 3528, 3529, 3529, 3529,  559,  558,  554, 3529, 3530,
+     3530, 3530,  550,  546,  545, 3530, 3531, 3531, 3531, 3531,
+     3531, 3531, 3531,  544, 3531, 3532, 3532, 3532,  543,  542,
+      538, 3532, 3533,  534,  527,  523, 3533, 3534, 3534, 3534,
+      515,  514,  513, 3534, 3535,  512,  511,  507, 3535, 3536,
+     3536, 3536,  501,  500,  496, 3536, 3537,  490,  489,  485,
+
+     3537, 3538, 3538, 3538,  479,  478,  474, 3538, 3539,  468,
+      467,  463, 3539, 3540, 3540, 3540,  459,  455,  454, 3540,
+     3541,  453,  449,  445, 3541, 3542, 3542, 3542,  441,  437,
+      431, 3542, 3543,  430,  429,  425, 3543, 3544, 3544, 3544,
+      421,  416,  415, 3544, 3545,  414,  413,  409, 3545, 3546,
+     3546, 3546,  403,  399,  395, 3546, 3547,  392,  388,  384,
+     3547, 3548, 3548, 3548,  381,  378,  376, 3548, 3549,  375,
+      373,  369, 3549, 3550, 3550, 3550,  362,  361,  360, 3550,
+     3551,  359,  358,  354, 3551, 3552, 3552, 3552,  347,  346,
+      342, 3552, 3553,  335,  334,  333, 3553, 3554, 3554, 3554,
+
+      329,  323,  322, 3554, 3555,  321,  317,  311, 3555, 3556,
+     3556, 3556,  307,  298,  297, 3556, 3557,  293,  289,  285,
+     3557, 3558, 3558, 3558,  281,  280,  276, 3558, 3559,  273,
+      272,  271, 3559, 3560, 3560, 3560,  265,  264,  262, 3560,
+     3561,  259,  247,    0, 3561, 3562, 3562, 3562,    0,    0,
+        0, 3562, 3563,    0,    0,    0, 3563, 3564, 3564, 3564,
+        0,    0,    0, 3564, 3565,    0,    0,    0, 3565, 3566,
+     3566, 3566,    0,    0,    0, 3566, 3567,    0,    0,    0,
+     3567, 3568, 3568, 3568,    0,    0,    0, 3568, 3569,    0,
+        0,    0, 3569, 3570, 3570, 3570,    0,    0,    0, 3570,
+
+     3571,    0,    0,    0, 3571, 3572, 3572, 3572,    0,    0,
+        0, 3572, 3573,    0,    0,    0, 3573, 3574, 3574, 3574,
+        0,    0,    0, 3574, 3575,    0,    0,    0, 3575, 3576,
+     3576, 3576,    0,    0,    0, 3576, 3577,    0,    0,    0,
+     3577, 3578, 3578, 3578,    0,    0,    0, 3578, 3579,    0,
+        0,    0, 3579, 3580, 3580, 3580,    0,    0,    0, 3580,
+     3581,    0,    0,    0, 3581, 3582, 3582, 3582,    0,    0,
+        0, 3582, 3583,    0,    0,    0, 3583, 3584, 3584, 3584,
+        0,    0,    0, 3584, 3585,    0,    0,    0, 3585, 3586,
+     3586, 3586,    0,    0,    0, 3586, 3587,    0,    0,    0,
+
+     3587, 3588, 3588, 3588,    0,    0,    0, 3588, 3589,    0,
+        0,    0, 3589, 3590, 3590, 3590, 3590, 3590, 3590, 3590,
+     3590, 3590, 3591,    0,    0,    0,    0, 3591, 3592, 3592,
+     3592,    0,    0,    0, 3592, 3593, 3593, 3593, 3593,    0,
+        0, 3593, 3593, 3594, 3594, 3594, 3594,    0, 3594,    0,
+     3594, 3595, 3595, 3595, 3595,    0,    0, 3595, 3595, 3596,
+     3596, 3596,    0,    0,    0, 3596, 3597, 3597, 3597, 3597,
+        0,    0, 3597, 3597, 3598, 3598, 3598,    0,    0,    0,
+     3598, 3599, 3599, 3599, 3599,    0,    0, 3599, 3599, 3600,
+     3600, 3600, 3600,    0, 3600,    0, 3600, 3601, 3601, 3601,
+
+     3601,    0,    0, 3601, 3601, 3602, 3602, 3602, 3602,    0,
+     3602,    0, 3602, 3603, 3603, 3603, 3603,    0,    0, 3603,
+     3603, 3604, 3604, 3604, 3604,    0, 3604,    0, 3604, 3605,
+     3605, 3605, 3605,    0,    0, 3605, 3605, 3606, 3606, 3606,
+        0,    0,    0, 3606, 3607, 3607, 3607, 3607,    0,    0,
+     3607, 3607, 3608, 3608, 3608, 3608,    0,    0, 3608, 3608,
+     3609, 3609, 3609,    0,    0,    0, 3609, 3610, 3610, 3610,
+     3610,    0,    0, 3610, 3610, 3611, 3611, 3611,    0,    0,
+        0, 3611, 3612, 3612, 3612, 3612,    0,    0, 3612, 3612,
+     3613, 3613, 3613,    0,    0,    0, 3613, 3614, 3614, 3614,
+
+     3614,    0,    0, 3614, 3614, 3615, 3615, 3615,    0,    0,
+        0, 3615, 3616, 3616, 3616, 3616,    0,    0, 3616, 3616,
+     3617, 3617, 3617,    0,    0,    0, 3617, 3618, 3618, 3618,
+     3618,    0,    0, 3618, 3618, 3619, 3619, 3619,    0,    0,
+        0, 3619, 3620, 3620, 3620, 3620,    0,    0, 3620, 3620,
+     3621, 3621, 3621,    0,    0,    0, 3621, 3622, 3622, 3622,
+     3622,    0,    0, 3622, 3622, 3623, 3623, 3623,    0,    0,
+        0, 3623, 3624, 3624, 3624, 3624,    0,    0, 3624, 3624,
+     3625, 3625, 3625,    0,    0,    0, 3625, 3626, 3626, 3626,
+     3626,    0,    0, 3626, 3626, 3627, 3627, 3627,    0,    0,
+
+        0, 3627, 3628, 3628, 3628, 3628,    0,    0, 3628, 3628,
+     3629, 3629, 3629,    0,    0,    0, 3629, 3630, 3630, 3630,
+     3630,    0,    0, 3630, 3630, 3631, 3631, 3631,    0,    0,
+        0, 3631, 3632, 3632, 3632, 3632,    0,    0, 3632, 3632,
+     3633, 3633, 3633,    0,    0,    0, 3633, 3634, 3634, 3634,
+     3634,    0,    0, 3634, 3634, 3635, 3635, 3635,    0,    0,
+        0, 3635, 3636, 3636, 3636, 3636,    0,    0, 3636, 3636,
+     3637, 3637, 3637, 3637,    0, 3637,    0, 3637, 3638, 3638,
+     3638, 3638,    0,    0, 3638, 3638, 3639, 3639, 3639,    0,
+        0,    0, 3639, 3640, 3640, 3640, 3640,    0,    0, 3640,
+
+     3640, 3641, 3641, 3641,    0,    0,    0, 3641, 3642, 3642,
+     3642, 3642,    0,    0, 3642, 3642, 3643, 3643, 3643,    0,
+        0,    0, 3643, 3644, 3644, 3644, 3644,    0,    0, 3644,
+     3644, 3645, 3645, 3645,    0,    0,    0, 3645, 3646, 3646,
+     3646, 3646,    0,    0, 3646, 3646, 3647, 3647, 3647,    0,
+        0,    0, 3647, 3648, 3648, 3648, 3648,    0,    0, 3648,
+     3648, 3649, 3649, 3649, 3649, 3649, 3649, 3649, 3649, 3649,
+     3650,    0, 3650,    0,    0, 3650, 3651, 3651, 3651,    0,
+        0,    0, 3651, 3652, 3652, 3652, 3652,    0,    0, 3652,
+     3652, 3653, 3653, 3653,    0,    0,    0, 3653, 3654, 3654,
+
+     3654, 3654,    0,    0, 3654, 3654, 3655, 3655, 3655,    0,
+        0,    0, 3655, 3656, 3656, 3656, 3656,    0,    0, 3656,
+     3656, 3657, 3657, 3657,    0,    0,    0, 3657, 3658, 3658,
+     3658, 3658,    0,    0, 3658, 3658, 3659, 3659, 3659,    0,
+        0,    0, 3659, 3660, 3660, 3660, 3660,    0,    0, 3660,
+     3660, 3661, 3661, 3661, 3661,    0,    0, 3661, 3661, 3662,
+     3662, 3662,    0,    0,    0, 3662, 3663, 3663, 3663, 3663,
+        0,    0, 3663, 3663, 3664, 3664, 3664,    0,    0,    0,
+     3664, 3665, 3665, 3665, 3665,    0,    0, 3665, 3665, 3666,
+     3666, 3666, 3666,    0,    0, 3666, 3666, 3667, 3667, 3667,
+
+     3667,    0, 3667,    0, 3667, 3668, 3668, 3668, 3668,    0,
+        0, 3668, 3668, 3669, 3669, 3669,    0,    0,    0, 3669,
+     3670, 3670, 3670, 3670,    0,    0, 3670, 3670, 3671, 3671,
+     3671, 3671,    0, 3671,    0, 3671, 3672, 3672, 3672, 3672,
+        0,    0, 3672, 3672, 3673, 3673, 3673, 3673,    0, 3673,
+        0, 3673, 3674, 3674, 3674, 3674,    0,    0, 3674, 3674,
+     3675, 3675, 3675,    0,    0,    0, 3675, 3676, 3676, 3676,
+     3676,    0,    0, 3676, 3676, 3677, 3677, 3677,    0,    0,
+        0, 3677, 3678, 3678, 3678, 3678,    0,    0, 3678, 3678,
+     3679, 3679, 3679,    0,    0,    0, 3679, 3680, 3680, 3680,
+
+     3680,    0,    0, 3680, 3680, 3681, 3681, 3681, 3681,    0,
+     3681,    0, 3681, 3682, 3682, 3682, 3682,    0,    0, 3682,
+     3682, 3683, 3683, 3683, 3683,    0, 3683,    0, 3683, 3684,
+     3684, 3684, 3684,    0,    0, 3684, 3684, 3685, 3685, 3685,
+        0,    0,    0, 3685, 3686, 3686, 3686, 3686,    0,    0,
+     3686, 3686, 3687, 3687, 3687,    0,    0,    0, 3687, 3688,
+     3688, 3688, 3688,    0,    0, 3688, 3688, 3689, 3689, 3689,
+        0,    0,    0, 3689, 3690, 3690, 3690, 3690,    0,    0,
+     3690, 3690, 3691, 3691, 3691,    0,    0,    0, 3691, 3692,
+     3692, 3692, 3692,    0,    0, 3692, 3692, 3693, 3693, 3693,
+
+        0,    0,    0, 3693, 3694, 3694, 3694, 3694,    0,    0,
+     3694, 3694, 3695, 3695, 3695,    0,    0,    0, 3695, 3696,
+     3696, 3696, 3696,    0,    0, 3696, 3696, 3697, 3697, 3697,
+        0,    0,    0, 3697, 3698, 3698, 3698, 3698,    0,    0,
+     3698, 3698, 3699, 3699, 3699,    0,    0,    0, 3699, 3700,
+     3700, 3700, 3700,    0,    0, 3700, 3700, 3701, 3701, 3701,
+        0,    0,    0, 3701, 3702, 3702, 3702, 3702,    0,    0,
+     3702, 3702, 3703, 3703, 3703, 3703,    0, 3703,    0, 3703,
+     3704, 3704, 3704, 3704,    0,    0, 3704, 3704, 3705, 3705,
+     3705,    0,    0,    0, 3705, 3706, 3706, 3706, 3706,    0,
+
+        0, 3706, 3706, 3707, 3707, 3707, 3707, 3707, 3707, 3707,
+     3707, 3707, 3708, 3708, 3708, 3708, 3708, 3708, 3708, 3708,
+     3708, 3709, 3709, 3709,    0,    0,    0, 3709, 3710, 3710,
+     3710,    0,    0,    0, 3710, 3711, 3711, 3711, 3711,    0,
+        0, 3711, 3711, 3712, 3712, 3712, 3712,    0, 3712,    0,
+     3712, 3713, 3713, 3713, 3713,    0,    0, 3713, 3713, 3714,
+     3714, 3714,    0,    0,    0, 3714, 3715, 3715, 3715, 3715,
+        0,    0, 3715, 3715, 3716, 3716, 3716,    0,    0,    0,
+     3716, 3717, 3717, 3717, 3717,    0,    0, 3717, 3717, 3718,
+     3718, 3718, 3718,    0,    0, 3718, 3718, 3719, 3719, 3719,
+
+        0,    0,    0, 3719, 3720, 3720, 3720, 3720,    0,    0,
+     3720, 3720, 3721, 3721, 3721,    0,    0,    0, 3721, 3722,
+     3722, 3722, 3722,    0,    0, 3722, 3722, 3723, 3723, 3723,
+     3723,    0,    0, 3723, 3723, 3724, 3724, 3724, 3724,    0,
+        0, 3724, 3724, 3725, 3725, 3725,    0,    0,    0, 3725,
+     3726, 3726, 3726, 3726,    0,    0, 3726, 3726, 3727, 3727,
+     3727, 3727,    0,    0, 3727, 3727, 3728, 3728, 3728, 3728,
+        0,    0, 3728, 3728, 3729, 3729, 3729,    0,    0,    0,
+     3729, 3730, 3730, 3730, 3730,    0,    0, 3730, 3730, 3731,
+     3731, 3731,    0,    0,    0, 3731, 3732, 3732, 3732, 3732,
+
+        0,    0, 3732, 3732, 3733, 3733, 3733, 3733,    0, 3733,
+        0, 3733, 3734, 3734, 3734, 3734,    0,    0, 3734, 3734,
+     3735, 3735, 3735,    0,    0,    0, 3735, 3736, 3736, 3736,
+     3736,    0,    0, 3736, 3736, 3737, 3737, 3737,    0,    0,
+        0, 3737, 3738, 3738, 3738, 3738,    0,    0, 3738, 3738,
+     3739, 3739, 3739,    0,    0,    0, 3739, 3740, 3740, 3740,
+     3740,    0,    0, 3740, 3740, 3741, 3741, 3741,    0,    0,
+        0, 3741, 3742, 3742, 3742, 3742,    0,    0, 3742, 3742,
+     3743, 3743, 3743,    0,    0,    0, 3743, 3744, 3744, 3744,
+     3744,    0,    0, 3744, 3744, 3745, 3745, 3745, 3745,    0,
+
+     3745,    0, 3745, 3746, 3746, 3746, 3746,    0,    0, 3746,
+     3746, 3747, 3747, 3747,    0,    0,    0, 3747, 3748, 3748,
+     3748, 3748,    0,    0, 3748, 3748, 3749, 3749, 3749,    0,
+        0,    0, 3749, 3750, 3750, 3750, 3750,    0,    0, 3750,
+     3750, 3751, 3751, 3751,    0,    0,    0, 3751, 3752, 3752,
+     3752, 3752,    0,    0, 3752, 3752, 3753, 3753, 3753,    0,
+        0,    0, 3753, 3754, 3754, 3754, 3754,    0,    0, 3754,
+     3754, 3755, 3755, 3755,    0,    0,    0, 3755, 3756, 3756,
+     3756, 3756,    0,    0, 3756, 3756, 3757, 3757, 3757,    0,
+        0,    0, 3757, 3758, 3758, 3758, 3758,    0,    0, 3758,
+
+     3758, 3759, 3759, 3759,    0,    0,    0, 3759, 3760, 3760,
+     3760, 3760,    0,    0, 3760, 3760, 3761, 3761, 3761, 3761,
+     3761, 3761, 3761, 3761, 3761, 3762, 3762, 3762, 3762, 3762,
+     3762, 3762, 3762, 3762, 3763, 3763, 3763,    0,    0,    0,
+     3763, 3764, 3764, 3764, 3764,    0, 3764,    0, 3764, 3765,
+     3765, 3765, 3765,    0,    0, 3765, 3765, 3766, 3766, 3766,
+     3766,    0,    0, 3766, 3766, 3767, 3767, 3767,    0,    0,
+        0, 3767, 3768, 3768, 3768, 3768,    0,    0, 3768, 3768,
+     3769, 3769, 3769, 3769,    0, 3769,    0, 3769, 3770, 3770,
+     3770, 3770,    0,    0, 3770, 3770, 3771, 3771, 3771, 3771,
+
         0,    0, 3771, 3771, 3772, 3772, 3772, 3772,    0, 3772,
         0, 3772, 3773, 3773, 3773, 3773,    0,    0, 3773, 3773,
      3774, 3774, 3774,    0,    0,    0, 3774, 3775, 3775, 3775,
-     3775,    0,    0, 3775, 3775, 3776, 3776, 3776,    0,    0,
-        0, 3776, 3777, 3777, 3777, 3777,    0,    0, 3777, 3777,
-     3778, 3778, 3778,    0,    0,    0, 3778, 3779, 3779, 3779,
-     3779,    0,    0, 3779, 3779, 3780, 3780, 3780,    0,    0,
-        0, 3780, 3781, 3781, 3781, 3781,    0,    0, 3781, 3781,
-     3782, 3782, 3782,    0,    0,    0, 3782, 3783, 3783, 3783,
-
-     3783,    0,    0, 3783, 3783, 3784, 3784, 3784, 3784,    0,
-     3784,    0, 3784, 3785, 3785, 3785, 3785,    0,    0, 3785,
-     3785, 3786, 3786, 3786,    0,    0,    0, 3786, 3787, 3787,
-     3787, 3787,    0,    0, 3787, 3787, 3788, 3788, 3788,    0,
-        0,    0, 3788, 3789, 3789, 3789, 3789,    0,    0, 3789,
-     3789, 3790, 3790, 3790,    0,    0,    0, 3790, 3791, 3791,
-     3791, 3791,    0,    0, 3791, 3791, 3792, 3792, 3792,    0,
-        0,    0, 3792, 3793, 3793, 3793, 3793,    0,    0, 3793,
-     3793, 3794, 3794, 3794,    0,    0,    0, 3794, 3795, 3795,
-     3795, 3795,    0,    0, 3795, 3795, 3796, 3796, 3796,    0,
-
-        0,    0, 3796, 3797, 3797, 3797, 3797,    0,    0, 3797,
-     3797, 3798, 3798, 3798,    0,    0,    0, 3798, 3799, 3799,
-     3799, 3799,    0,    0, 3799, 3799, 3800, 3800, 3800, 3800,
-     3800, 3800, 3800, 3800, 3800, 3801, 3801, 3801, 3801, 3801,
-     3801, 3801, 3801, 3801, 3802, 3802, 3802,    0,    0,    0,
+     3775,    0,    0, 3775, 3775, 3776, 3776, 3776, 3776,    0,
+        0, 3776, 3776, 3777, 3777, 3777,    0,    0,    0, 3777,
+     3778, 3778, 3778, 3778,    0,    0, 3778, 3778, 3779, 3779,
+     3779, 3779,    0,    0, 3779, 3779, 3780, 3780, 3780, 3780,
+        0,    0, 3780, 3780, 3781, 3781, 3781,    0,    0,    0,
+     3781, 3782, 3782, 3782, 3782,    0,    0, 3782, 3782, 3783,
+     3783, 3783,    0,    0,    0, 3783, 3784, 3784, 3784, 3784,
+
+        0,    0, 3784, 3784, 3785, 3785, 3785, 3785,    0,    0,
+     3785, 3785, 3786, 3786, 3786,    0,    0,    0, 3786, 3787,
+     3787, 3787, 3787,    0,    0, 3787, 3787, 3788, 3788, 3788,
+     3788,    0, 3788,    0, 3788, 3789, 3789, 3789, 3789,    0,
+        0, 3789, 3789, 3790, 3790, 3790,    0,    0,    0, 3790,
+     3791, 3791, 3791, 3791,    0,    0, 3791, 3791, 3792, 3792,
+     3792,    0,    0,    0, 3792, 3793, 3793, 3793, 3793,    0,
+        0, 3793, 3793, 3794, 3794, 3794,    0,    0,    0, 3794,
+     3795, 3795, 3795, 3795,    0,    0, 3795, 3795, 3796, 3796,
+     3796, 3796,    0,    0, 3796, 3796, 3797, 3797, 3797,    0,
+
+        0,    0, 3797, 3798, 3798, 3798, 3798,    0,    0, 3798,
+     3798, 3799, 3799, 3799,    0,    0,    0, 3799, 3800, 3800,
+     3800, 3800,    0,    0, 3800, 3800, 3801, 3801, 3801,    0,
+        0,    0, 3801, 3802, 3802, 3802, 3802,    0,    0, 3802,
      3802, 3803, 3803, 3803, 3803,    0, 3803,    0, 3803, 3804,
      3804, 3804, 3804,    0,    0, 3804, 3804, 3805, 3805, 3805,
-     3805,    0,    0, 3805, 3805, 3806, 3806, 3806,    0,    0,
-        0, 3806, 3807, 3807, 3807, 3807,    0,    0, 3807, 3807,
-     3808, 3808, 3808, 3808,    0, 3808,    0, 3808, 3809, 3809,
-
-     3809, 3809,    0,    0, 3809, 3809, 3810, 3810, 3810, 3810,
-        0,    0, 3810, 3810, 3811, 3811, 3811, 3811,    0, 3811,
-        0, 3811, 3812, 3812, 3812, 3812,    0,    0, 3812, 3812,
-     3813, 3813, 3813,    0,    0,    0, 3813, 3814, 3814, 3814,
-     3814,    0,    0, 3814, 3814, 3815, 3815, 3815, 3815,    0,
-        0, 3815, 3815, 3816, 3816, 3816,    0,    0,    0, 3816,
-     3817, 3817, 3817, 3817,    0,    0, 3817, 3817, 3818, 3818,
+        0,    0,    0, 3805, 3806, 3806, 3806, 3806,    0,    0,
+     3806, 3806, 3807, 3807, 3807,    0,    0,    0, 3807, 3808,
+     3808, 3808, 3808,    0,    0, 3808, 3808, 3809, 3809, 3809,
+        0,    0,    0, 3809, 3810, 3810, 3810, 3810,    0,    0,
+
+     3810, 3810, 3811, 3811, 3811, 3811, 3811, 3811, 3811, 3811,
+     3811, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812, 3812,
+     3813, 3813, 3813, 3813,    0, 3813,    0, 3813, 3814, 3814,
+     3814,    0,    0,    0, 3814, 3815, 3815, 3815, 3815,    0,
+        0, 3815, 3815, 3816, 3816, 3816, 3816,    0,    0, 3816,
+     3816, 3817, 3817, 3817,    0,    0,    0, 3817, 3818, 3818,
      3818, 3818,    0,    0, 3818, 3818, 3819, 3819, 3819, 3819,
-        0,    0, 3819, 3819, 3820, 3820, 3820,    0,    0,    0,
-     3820, 3821, 3821, 3821, 3821,    0,    0, 3821, 3821, 3822,
-
-     3822, 3822,    0,    0,    0, 3822, 3823, 3823, 3823, 3823,
-        0,    0, 3823, 3823, 3824, 3824, 3824, 3824,    0,    0,
-     3824, 3824, 3825, 3825, 3825,    0,    0,    0, 3825, 3826,
-     3826, 3826, 3826,    0,    0, 3826, 3826, 3827, 3827, 3827,
-     3827,    0, 3827,    0, 3827, 3828, 3828, 3828, 3828,    0,
-        0, 3828, 3828, 3829, 3829, 3829,    0,    0,    0, 3829,
-     3830, 3830, 3830, 3830,    0,    0, 3830, 3830, 3831, 3831,
-     3831,    0,    0,    0, 3831, 3832, 3832, 3832, 3832,    0,
-        0, 3832, 3832, 3833, 3833, 3833,    0,    0,    0, 3833,
-     3834, 3834, 3834, 3834,    0,    0, 3834, 3834, 3835, 3835,
-
-     3835, 3835,    0,    0, 3835, 3835, 3836, 3836, 3836,    0,
-        0,    0, 3836, 3837, 3837, 3837, 3837,    0,    0, 3837,
-     3837, 3838, 3838, 3838,    0,    0,    0, 3838, 3839, 3839,
-     3839, 3839,    0,    0, 3839, 3839, 3840, 3840, 3840,    0,
-        0,    0, 3840, 3841, 3841, 3841, 3841,    0,    0, 3841,
-     3841, 3842, 3842, 3842, 3842,    0, 3842,    0, 3842, 3843,
-     3843, 3843, 3843,    0,    0, 3843, 3843, 3844, 3844, 3844,
-        0,    0,    0, 3844, 3845, 3845, 3845, 3845,    0,    0,
-     3845, 3845, 3846, 3846, 3846,    0,    0,    0, 3846, 3847,
-     3847, 3847, 3847,    0,    0, 3847, 3847, 3848, 3848, 3848,
-
-        0,    0,    0, 3848, 3849, 3849, 3849, 3849,    0,    0,
-     3849, 3849, 3850, 3850, 3850, 3850, 3850, 3850, 3850, 3850,
-     3850, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851, 3851,
-     3852, 3852, 3852, 3852,    0, 3852,    0, 3852, 3853, 3853,
-     3853,    0,    0,    0, 3853, 3854, 3854, 3854, 3854,    0,
-        0, 3854, 3854, 3855, 3855, 3855, 3855,    0,    0, 3855,
-     3855, 3856, 3856, 3856,    0,    0,    0, 3856, 3857, 3857,
-     3857, 3857,    0,    0, 3857, 3857, 3858, 3858, 3858, 3858,
-        0,    0, 3858, 3858, 3859, 3859, 3859, 3859,    0,    0,
-     3859, 3859, 3860, 3860, 3860, 3860,    0, 3860,    0, 3860,
-
-     3861, 3861, 3861, 3861,    0,    0, 3861, 3861, 3862, 3862,
-     3862,    0,    0,    0, 3862, 3863, 3863, 3863, 3863,    0,
-        0, 3863, 3863, 3864, 3864, 3864, 3864,    0,    0, 3864,
-     3864, 3865, 3865, 3865,    0,    0,    0, 3865, 3866, 3866,
-     3866, 3866,    0,    0, 3866, 3866, 3867, 3867, 3867, 3867,
-        0,    0, 3867, 3867, 3868, 3868, 3868,    0,    0,    0,
-     3868, 3869, 3869, 3869,    0,    0,    0, 3869, 3870, 3870,
-     3870, 3870,    0,    0, 3870, 3870, 3871, 3871, 3871, 3871,
-        0,    0, 3871, 3871, 3872, 3872, 3872,    0,    0,    0,
-     3872, 3873, 3873, 3873, 3873,    0,    0, 3873, 3873, 3874,
-
-     3874, 3874, 3874,    0,    0, 3874, 3874, 3875, 3875, 3875,
-        0,    0,    0, 3875, 3876, 3876, 3876, 3876,    0, 3876,
-        0, 3876, 3877, 3877, 3877, 3877,    0,    0, 3877, 3877,
-     3878, 3878, 3878,    0,    0,    0, 3878, 3879, 3879, 3879,
-     3879,    0,    0, 3879, 3879, 3880, 3880, 3880,    0,    0,
-        0, 3880, 3881, 3881, 3881, 3881,    0,    0, 3881, 3881,
-     3882, 3882, 3882,    0,    0,    0, 3882, 3883, 3883, 3883,
-     3883,    0,    0, 3883, 3883, 3884, 3884, 3884,    0,    0,
-        0, 3884, 3885, 3885, 3885, 3885,    0,    0, 3885, 3885,
-     3886, 3886, 3886, 3886,    0, 3886,    0, 3886, 3887, 3887,
-
-     3887, 3887,    0,    0, 3887, 3887, 3888, 3888, 3888, 3888,
-        0, 3888,    0, 3888, 3889, 3889, 3889, 3889,    0,    0,
+        0,    0, 3819, 3819, 3820, 3820, 3820, 3820,    0,    0,
+     3820, 3820, 3821, 3821, 3821, 3821,    0, 3821,    0, 3821,
+     3822, 3822, 3822, 3822,    0,    0, 3822, 3822, 3823, 3823,
+
+     3823,    0,    0,    0, 3823, 3824, 3824, 3824, 3824,    0,
+        0, 3824, 3824, 3825, 3825, 3825, 3825,    0,    0, 3825,
+     3825, 3826, 3826, 3826,    0,    0,    0, 3826, 3827, 3827,
+     3827, 3827,    0,    0, 3827, 3827, 3828, 3828, 3828, 3828,
+        0,    0, 3828, 3828, 3829, 3829, 3829,    0,    0,    0,
+     3829, 3830, 3830, 3830,    0,    0,    0, 3830, 3831, 3831,
+     3831, 3831,    0,    0, 3831, 3831, 3832, 3832, 3832, 3832,
+        0,    0, 3832, 3832, 3833, 3833, 3833,    0,    0,    0,
+     3833, 3834, 3834, 3834, 3834,    0,    0, 3834, 3834, 3835,
+     3835, 3835, 3835,    0,    0, 3835, 3835, 3836, 3836, 3836,
+
+        0,    0,    0, 3836, 3837, 3837, 3837, 3837,    0, 3837,
+        0, 3837, 3838, 3838, 3838, 3838,    0,    0, 3838, 3838,
+     3839, 3839, 3839,    0,    0,    0, 3839, 3840, 3840, 3840,
+     3840,    0,    0, 3840, 3840, 3841, 3841, 3841,    0,    0,
+        0, 3841, 3842, 3842, 3842, 3842,    0,    0, 3842, 3842,
+     3843, 3843, 3843,    0,    0,    0, 3843, 3844, 3844, 3844,
+     3844,    0,    0, 3844, 3844, 3845, 3845, 3845,    0,    0,
+        0, 3845, 3846, 3846, 3846, 3846,    0,    0, 3846, 3846,
+     3847, 3847, 3847, 3847,    0, 3847,    0, 3847, 3848, 3848,
+     3848, 3848,    0,    0, 3848, 3848, 3849, 3849, 3849, 3849,
+
+        0, 3849,    0, 3849, 3850, 3850, 3850, 3850,    0,    0,
+     3850, 3850, 3851, 3851, 3851,    0,    0,    0, 3851, 3852,
+     3852, 3852, 3852,    0,    0, 3852, 3852, 3853, 3853, 3853,
+     3853,    0, 3853,    0, 3853, 3854, 3854, 3854, 3854,    0,
+        0, 3854, 3854, 3855, 3855, 3855, 3855, 3855, 3855, 3855,
+     3855, 3855, 3856, 3856, 3856, 3856, 3856, 3856, 3856, 3856,
+     3856, 3857, 3857, 3857,    0,    0,    0, 3857, 3858, 3858,
+     3858, 3858,    0,    0, 3858, 3858, 3859, 3859, 3859, 3859,
+        0,    0, 3859, 3859, 3860, 3860, 3860,    0,    0,    0,
+     3860, 3861, 3861, 3861, 3861,    0,    0, 3861, 3861, 3862,
+
+     3862, 3862, 3862,    0,    0, 3862, 3862, 3863, 3863, 3863,
+     3863,    0,    0, 3863, 3863, 3864, 3864, 3864, 3864,    0,
+        0, 3864, 3864, 3865, 3865, 3865,    0,    0,    0, 3865,
+     3866, 3866, 3866, 3866,    0,    0, 3866, 3866, 3867, 3867,
+     3867, 3867,    0,    0, 3867, 3867, 3868, 3868, 3868,    0,
+        0,    0, 3868, 3869, 3869, 3869, 3869,    0,    0, 3869,
+     3869, 3870, 3870, 3870, 3870,    0,    0, 3870, 3870, 3871,
+     3871, 3871,    0,    0,    0, 3871, 3872, 3872, 3872,    0,
+        0,    0, 3872, 3873, 3873, 3873, 3873,    0,    0, 3873,
+     3873, 3874, 3874, 3874, 3874,    0,    0, 3874, 3874, 3875,
+
+     3875, 3875,    0,    0,    0, 3875, 3876, 3876, 3876, 3876,
+        0,    0, 3876, 3876, 3877, 3877, 3877,    0,    0,    0,
+     3877, 3878, 3878, 3878, 3878,    0,    0, 3878, 3878, 3879,
+     3879, 3879, 3879,    0, 3879,    0, 3879, 3880, 3880, 3880,
+     3880,    0,    0, 3880, 3880, 3881, 3881, 3881,    0,    0,
+        0, 3881, 3882, 3882, 3882, 3882,    0,    0, 3882, 3882,
+     3883, 3883, 3883,    0,    0,    0, 3883, 3884, 3884, 3884,
+        0,    0,    0, 3884, 3885, 3885, 3885, 3885,    0,    0,
+     3885, 3885, 3886, 3886, 3886,    0,    0,    0, 3886, 3887,
+     3887, 3887, 3887,    0,    0, 3887, 3887, 3888, 3888, 3888,
+
+        0,    0,    0, 3888, 3889, 3889, 3889, 3889,    0,    0,
      3889, 3889, 3890, 3890, 3890,    0,    0,    0, 3890, 3891,
      3891, 3891, 3891,    0,    0, 3891, 3891, 3892, 3892, 3892,
-     3892,    0, 3892,    0, 3892, 3893, 3893, 3893, 3893,    0,
-        0, 3893, 3893, 3894, 3894, 3894, 3894, 3894, 3894, 3894,
-     3894, 3894, 3895, 3895, 3895, 3895, 3895, 3895, 3895, 3895,
-     3895, 3896, 3896, 3896,    0,    0,    0, 3896, 3897, 3897,
-     3897, 3897,    0,    0, 3897, 3897, 3898, 3898, 3898, 3898,
-        0,    0, 3898, 3898, 3899, 3899, 3899,    0,    0,    0,
-
-     3899, 3900, 3900, 3900, 3900,    0,    0, 3900, 3900, 3901,
-     3901, 3901, 3901,    0,    0, 3901, 3901, 3902, 3902, 3902,
-     3902,    0,    0, 3902, 3902, 3903, 3903, 3903, 3903,    0,
+     3892, 3892, 3892, 3892, 3892, 3892, 3893, 3893, 3893, 3893,
+     3893, 3893, 3893, 3893, 3893, 3894, 3894, 3894,    0,    0,
+        0, 3894, 3895, 3895, 3895, 3895,    0,    0, 3895, 3895,
+     3896, 3896, 3896, 3896,    0,    0, 3896, 3896, 3897, 3897,
+     3897, 3897,    0, 3897,    0, 3897, 3898, 3898, 3898, 3898,
+        0,    0, 3898, 3898, 3899, 3899, 3899, 3899,    0,    0,
+     3899, 3899, 3900, 3900, 3900, 3900,    0,    0, 3900, 3900,
+
+     3901, 3901, 3901, 3901,    0,    0, 3901, 3901, 3902, 3902,
+     3902,    0,    0,    0, 3902, 3903, 3903, 3903, 3903,    0,
         0, 3903, 3903, 3904, 3904, 3904,    0,    0,    0, 3904,
      3905, 3905, 3905, 3905,    0,    0, 3905, 3905, 3906, 3906,
-     3906, 3906,    0,    0, 3906, 3906, 3907, 3907, 3907,    0,
-        0,    0, 3907, 3908, 3908, 3908, 3908,    0,    0, 3908,
-     3908, 3909, 3909, 3909, 3909,    0,    0, 3909, 3909, 3910,
-     3910, 3910,    0,    0,    0, 3910, 3911, 3911, 3911,    0,
-        0,    0, 3911, 3912, 3912, 3912, 3912,    0,    0, 3912,
-
-     3912, 3913, 3913, 3913, 3913,    0,    0, 3913, 3913, 3914,
-     3914, 3914,    0,    0,    0, 3914, 3915, 3915, 3915, 3915,
-        0,    0, 3915, 3915, 3916, 3916, 3916,    0,    0,    0,
-     3916, 3917, 3917, 3917, 3917,    0,    0, 3917, 3917, 3918,
-     3918, 3918, 3918,    0, 3918,    0, 3918, 3919, 3919, 3919,
-     3919,    0,    0, 3919, 3919, 3920, 3920, 3920,    0,    0,
-        0, 3920, 3921, 3921, 3921, 3921,    0,    0, 3921, 3921,
-     3922, 3922, 3922,    0,    0,    0, 3922, 3923, 3923, 3923,
-        0,    0,    0, 3923, 3924, 3924, 3924, 3924,    0,    0,
-     3924, 3924, 3925, 3925, 3925,    0,    0,    0, 3925, 3926,
-
-     3926, 3926, 3926,    0,    0, 3926, 3926, 3927, 3927, 3927,
-        0,    0,    0, 3927, 3928, 3928, 3928, 3928,    0,    0,
-     3928, 3928, 3929, 3929, 3929,    0,    0,    0, 3929, 3930,
-     3930, 3930, 3930,    0,    0, 3930, 3930, 3931, 3931, 3931,
-     3931, 3931, 3931, 3931, 3931, 3931, 3932, 3932, 3932, 3932,
-     3932, 3932, 3932, 3932, 3932, 3933, 3933, 3933,    0,    0,
-        0, 3933, 3934, 3934, 3934, 3934,    0,    0, 3934, 3934,
-     3935, 3935, 3935, 3935,    0,    0, 3935, 3935, 3936, 3936,
-     3936, 3936,    0, 3936,    0, 3936, 3937, 3937, 3937, 3937,
-        0,    0, 3937, 3937, 3938, 3938, 3938, 3938,    0,    0,
-
-     3938, 3938, 3939, 3939, 3939, 3939,    0,    0, 3939, 3939,
-     3940, 3940, 3940, 3940,    0,    0, 3940, 3940, 3941, 3941,
-     3941,    0,    0,    0, 3941, 3942, 3942, 3942, 3942,    0,
-        0, 3942, 3942, 3943, 3943, 3943,    0,    0,    0, 3943,
-     3944, 3944, 3944, 3944,    0,    0, 3944, 3944, 3945, 3945,
-     3945, 3945,    0,    0, 3945, 3945, 3946, 3946, 3946, 3946,
-        0, 3946,    0, 3946, 3947, 3947, 3947, 3947,    0, 3947,
-        0, 3947, 3948, 3948, 3948, 3948,    0,    0, 3948, 3948,
-     3949, 3949, 3949, 3949,    0,    0, 3949, 3949, 3950, 3950,
-     3950, 3950,    0, 3950,    0, 3950, 3951, 3951, 3951, 3951,
-
-        0,    0, 3951, 3951, 3952, 3952, 3952,    0,    0,    0,
-     3952, 3953, 3953, 3953, 3953,    0,    0, 3953, 3953, 3954,
-     3954, 3954, 3954,    0, 3954,    0, 3954, 3955, 3955, 3955,
-     3955,    0,    0, 3955, 3955, 3956, 3956, 3956, 3956,    0,
-     3956,    0, 3956, 3957, 3957, 3957,    0,    0,    0, 3957,
-     3958, 3958, 3958,    0,    0,    0, 3958, 3959, 3959, 3959,
-        0,    0,    0, 3959, 3960, 3960, 3960, 3960,    0,    0,
-     3960, 3960, 3961, 3961, 3961,    0,    0,    0, 3961, 3962,
-     3962, 3962, 3962,    0,    0, 3962, 3962, 3963, 3963, 3963,
-        0,    0,    0, 3963, 3964, 3964, 3964, 3964,    0,    0,
-
-     3964, 3964, 3965, 3965, 3965, 3965, 3965, 3965, 3965, 3965,
-     3965, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966, 3966,
-     3967, 3967, 3967,    0,    0,    0, 3967, 3968, 3968, 3968,
-     3968,    0,    0, 3968, 3968, 3969, 3969, 3969, 3969,    0,
-        0, 3969, 3969, 3970, 3970, 3970, 3970,    0,    0, 3970,
-     3970, 3971, 3971, 3971, 3971,    0,    0, 3971, 3971, 3972,
-     3972, 3972,    0,    0,    0, 3972, 3973, 3973, 3973,    0,
-        0,    0, 3973, 3974, 3974, 3974, 3974,    0,    0, 3974,
-     3974, 3975, 3975, 3975,    0,    0,    0, 3975, 3976, 3976,
-     3976, 3976,    0,    0, 3976, 3976, 3977, 3977, 3977, 3977,
-
-        0,    0, 3977, 3977, 3978, 3978, 3978, 3978, 3978, 3978,
-     3978, 3978, 3978, 3979, 3979, 3979, 3979, 3979, 3979, 3979,
-     3979, 3979, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980,
-     3980, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981, 3981,
-     3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3982, 3983,
-     3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476, 3476,
-     3476, 3476, 3476
+     3906, 3906,    0,    0, 3906, 3906, 3907, 3907, 3907, 3907,
+        0, 3907,    0, 3907, 3908, 3908, 3908, 3908,    0, 3908,
+        0, 3908, 3909, 3909, 3909, 3909,    0,    0, 3909, 3909,
+     3910, 3910, 3910, 3910,    0,    0, 3910, 3910, 3911, 3911,
+     3911, 3911,    0, 3911,    0, 3911, 3912, 3912, 3912, 3912,
+        0,    0, 3912, 3912, 3913, 3913, 3913,    0,    0,    0,
+
+     3913, 3914, 3914, 3914, 3914,    0,    0, 3914, 3914, 3915,
+     3915, 3915, 3915,    0, 3915,    0, 3915, 3916, 3916, 3916,
+     3916,    0,    0, 3916, 3916, 3917, 3917, 3917, 3917,    0,
+     3917,    0, 3917, 3918, 3918, 3918,    0,    0,    0, 3918,
+     3919, 3919, 3919,    0,    0,    0, 3919, 3920, 3920, 3920,
+        0,    0,    0, 3920, 3921, 3921, 3921, 3921,    0,    0,
+     3921, 3921, 3922, 3922, 3922,    0,    0,    0, 3922, 3923,
+     3923, 3923, 3923,    0,    0, 3923, 3923, 3924, 3924, 3924,
+        0,    0,    0, 3924, 3925, 3925, 3925, 3925,    0,    0,
+     3925, 3925, 3926, 3926, 3926, 3926, 3926, 3926, 3926, 3926,
+
+     3926, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927, 3927,
+     3928, 3928, 3928,    0,    0,    0, 3928, 3929, 3929, 3929,
+     3929,    0,    0, 3929, 3929, 3930, 3930, 3930, 3930,    0,
+        0, 3930, 3930, 3931, 3931, 3931, 3931,    0,    0, 3931,
+     3931, 3932, 3932, 3932, 3932,    0,    0, 3932, 3932, 3933,
+     3933, 3933,    0,    0,    0, 3933, 3934, 3934, 3934,    0,
+        0,    0, 3934, 3935, 3935, 3935, 3935,    0,    0, 3935,
+     3935, 3936, 3936, 3936,    0,    0,    0, 3936, 3937, 3937,
+     3937, 3937,    0,    0, 3937, 3937, 3938, 3938, 3938, 3938,
+        0,    0, 3938, 3938, 3939, 3939, 3939, 3939, 3939, 3939,
+
+     3939, 3939, 3939, 3940, 3940, 3940, 3940, 3940, 3940, 3940,
+     3940, 3940, 3941, 3941, 3941, 3941, 3941, 3941, 3941, 3941,
+     3941, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942, 3942,
+     3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3943, 3944,
+     3944, 3944, 3944, 3944, 3944, 3944, 3944, 3944, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437, 3437,
+     3437, 3437, 3437
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[596] =
+static yyconst flex_int32_t yy_rule_can_match_eol[586] =
     {   0,
 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 
@@ -4514,24 +4478,24 @@ static yyconst flex_int32_t yy_rule_can_match_eol[596] =
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 
     0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 
     0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+    1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 
+    0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 
+    1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 
+    1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 
+    0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 
+    1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 
     1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 
-    1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 
-    0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
-    1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 
-    1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 
-    1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 
     1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
-    1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 
-    0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 
-    0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
-    1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 
-    0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 
-    1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
-    1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,     };
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 
+    1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+    1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 
+    0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 
+    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 
+    0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 
+    1, 0, 0, 0, 1, 0,     };
 
 static yy_state_type yy_last_accepting_state;
 static char *yy_last_accepting_cpos;
@@ -4767,9 +4731,6 @@ short int surfxml_config_id_isset;
 AT_surfxml_gpu_name AX_surfxml_gpu_name;
 #define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
 short int surfxml_gpu_name_isset;
-AT_surfxml_host_availability AX_surfxml_host_availability;
-#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability)
-short int surfxml_host_availability_isset;
 AT_surfxml_host_availability___file AX_surfxml_host_availability___file;
 #define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file)
 short int surfxml_host_availability___file_isset;
@@ -4788,9 +4749,6 @@ short int surfxml_host_pstate_isset;
 AT_surfxml_host_speed AX_surfxml_host_speed;
 #define A_surfxml_host_speed (surfxml_bufferstack + AX_surfxml_host_speed)
 short int surfxml_host_speed_isset;
-AT_surfxml_host_state AX_surfxml_host_state;
-#define A_surfxml_host_state AX_surfxml_host_state
-short int surfxml_host_state_isset;
 AT_surfxml_host_state___file AX_surfxml_host_state___file;
 #define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file)
 short int surfxml_host_state___file_isset;
@@ -4824,9 +4782,6 @@ short int surfxml_link_latency___file_isset;
 AT_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy;
 #define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy
 short int surfxml_link_sharing___policy_isset;
-AT_surfxml_link_state AX_surfxml_link_state;
-#define A_surfxml_link_state AX_surfxml_link_state
-short int surfxml_link_state_isset;
 AT_surfxml_link_state___file AX_surfxml_link_state___file;
 #define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file)
 short int surfxml_link_state___file_isset;
@@ -5510,7 +5465,6 @@ YY_DECL
   surfxml_bufferliteral('\0', &bnext, "2147483647");
   surfxml_bufferliteral('\0', &bnext, "txt_unix");
   surfxml_bufferliteral('\0', &bnext, "1");
-  surfxml_bufferliteral('\0', &bnext, "1.0");
   surfxml_bufferliteral('\0', &bnext, "0.0");
   surfxml_bufferliteral('\0', &bnext, "txt_unix");
   surfxml_bufferliteral('\0', &bnext, "1");
@@ -5668,13 +5622,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 3477 )
+                               if ( yy_current_state >= 3438 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_base[yy_current_state] != 12459 );
+               while ( yy_base[yy_current_state] != 12349 );
 
 yy_find_action:
                yy_act = yy_accept[yy_current_state];
@@ -6037,8 +5991,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_ASroute_src) FAIL("Required attribute `src' not set for `ASroute' element.");
   LEAVE; STag_surfxml_ASroute(); surfxml_pcdata_ix = 0; ETag_surfxml_ASroute(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_7: case S_surfxml_AS_8: SET(S_surfxml_AS_8); break;
+   case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_6: case S_surfxml_AS_7: case S_surfxml_AS_8: SET(S_surfxml_AS_8); break;
   }
  }
        YY_BREAK
@@ -6062,8 +6016,8 @@ YY_RULE_SETUP
   ETag_surfxml_ASroute();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break;
-   case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_7: case S_surfxml_AS_8: SET(S_surfxml_AS_8); break;
+   case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_6: case S_surfxml_AS_7: case S_surfxml_AS_8: SET(S_surfxml_AS_8); break;
   }
  }
        YY_BREAK
@@ -6666,13 +6620,13 @@ YY_RULE_SETUP
   surfxml_cluster_availability___file_isset = 0;
   AX_surfxml_cluster_bb___bw = 0;
   surfxml_cluster_bb___bw_isset = 0;
-  AX_surfxml_cluster_bb___lat = 46;
+  AX_surfxml_cluster_bb___lat = 42;
   surfxml_cluster_bb___lat_isset = 0;
   AX_surfxml_cluster_bb___sharing___policy = A_surfxml_cluster_bb___sharing___policy_SHARED;
   surfxml_cluster_bb___sharing___policy_isset = 0;
   AX_surfxml_cluster_bw = 0;
   surfxml_cluster_bw_isset = 0;
-  AX_surfxml_cluster_core = 44;
+  AX_surfxml_cluster_core = 40;
   surfxml_cluster_core_isset = 0;
   AX_surfxml_cluster_id = 0;
   surfxml_cluster_id_isset = 0;
@@ -7171,8 +7125,6 @@ case 227:
 /* rule 227 can match eol */
 YY_RULE_SETUP
 {
-  AX_surfxml_host_availability = 27;
-  surfxml_host_availability_isset = 0;
   AX_surfxml_host_availability___file = 0;
   surfxml_host_availability___file_isset = 0;
   AX_surfxml_host_coordinates = 0;
@@ -7181,12 +7133,10 @@ YY_RULE_SETUP
   surfxml_host_core_isset = 0;
   AX_surfxml_host_id = 0;
   surfxml_host_id_isset = 0;
-  AX_surfxml_host_pstate = 31;
+  AX_surfxml_host_pstate = 27;
   surfxml_host_pstate_isset = 0;
   AX_surfxml_host_speed = 0;
   surfxml_host_speed_isset = 0;
-  AX_surfxml_host_state = A_surfxml_host_state_ON;
-  surfxml_host_state_isset = 0;
   AX_surfxml_host_state___file = 0;
   surfxml_host_state___file_isset = 0;
   ENTER(AL_surfxml_host); pushbuffer(0);
@@ -7196,98 +7146,74 @@ YY_RULE_SETUP
 case 228:
 /* rule 228 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_availability_isset != 0) {FAIL("Multiple definition of attribute availability in <surfxml_host>");} surfxml_host_availability_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_availability);
+if (surfxml_host_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in <surfxml_host>");} surfxml_host_availability___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_availability___file);
        YY_BREAK
 case 229:
 /* rule 229 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_availability_isset != 0) {FAIL("Multiple definition of attribute availability in <surfxml_host>");}  surfxml_host_availability_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_availability);
+if (surfxml_host_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in <surfxml_host>");}  surfxml_host_availability___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_availability___file);
        YY_BREAK
 case 230:
 /* rule 230 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in <surfxml_host>");} surfxml_host_availability___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_availability___file);
+if (surfxml_host_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in <surfxml_host>");} surfxml_host_coordinates_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_coordinates);
        YY_BREAK
 case 231:
 /* rule 231 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in <surfxml_host>");}  surfxml_host_availability___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_availability___file);
+if (surfxml_host_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in <surfxml_host>");}  surfxml_host_coordinates_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_coordinates);
        YY_BREAK
 case 232:
 /* rule 232 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in <surfxml_host>");} surfxml_host_coordinates_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_coordinates);
+if (surfxml_host_core_isset != 0) {FAIL("Multiple definition of attribute core in <surfxml_host>");} surfxml_host_core_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_core);
        YY_BREAK
 case 233:
 /* rule 233 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in <surfxml_host>");}  surfxml_host_coordinates_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_coordinates);
+if (surfxml_host_core_isset != 0) {FAIL("Multiple definition of attribute core in <surfxml_host>");}  surfxml_host_core_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_core);
        YY_BREAK
 case 234:
 /* rule 234 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_core_isset != 0) {FAIL("Multiple definition of attribute core in <surfxml_host>");} surfxml_host_core_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_core);
+if (surfxml_host_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_host>");} surfxml_host_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_id);
        YY_BREAK
 case 235:
 /* rule 235 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_core_isset != 0) {FAIL("Multiple definition of attribute core in <surfxml_host>");}  surfxml_host_core_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_core);
+if (surfxml_host_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_host>");}  surfxml_host_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_id);
        YY_BREAK
 case 236:
 /* rule 236 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_host>");} surfxml_host_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_id);
+if (surfxml_host_pstate_isset != 0) {FAIL("Multiple definition of attribute pstate in <surfxml_host>");} surfxml_host_pstate_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_pstate);
        YY_BREAK
 case 237:
 /* rule 237 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_host>");}  surfxml_host_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_id);
+if (surfxml_host_pstate_isset != 0) {FAIL("Multiple definition of attribute pstate in <surfxml_host>");}  surfxml_host_pstate_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_pstate);
        YY_BREAK
 case 238:
 /* rule 238 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_pstate_isset != 0) {FAIL("Multiple definition of attribute pstate in <surfxml_host>");} surfxml_host_pstate_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_pstate);
+if (surfxml_host_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_host>");} surfxml_host_speed_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_speed);
        YY_BREAK
 case 239:
 /* rule 239 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_pstate_isset != 0) {FAIL("Multiple definition of attribute pstate in <surfxml_host>");}  surfxml_host_pstate_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_pstate);
+if (surfxml_host_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_host>");}  surfxml_host_speed_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_speed);
        YY_BREAK
 case 240:
 /* rule 240 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_host>");} surfxml_host_speed_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_speed);
+if (surfxml_host_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in <surfxml_host>");} surfxml_host_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_state___file);
        YY_BREAK
 case 241:
 /* rule 241 can match eol */
 YY_RULE_SETUP
-if (surfxml_host_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_host>");}  surfxml_host_speed_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_speed);
-       YY_BREAK
-case 242:
-/* rule 242 can match eol */
-case 243:
-/* rule 243 can match eol */
-YY_RULE_SETUP
-A_surfxml_host_state = A_surfxml_host_state_ON;
-       YY_BREAK
-case 244:
-/* rule 244 can match eol */
-case 245:
-/* rule 245 can match eol */
-YY_RULE_SETUP
-A_surfxml_host_state = A_surfxml_host_state_OFF;
-       YY_BREAK
-case 246:
-/* rule 246 can match eol */
-YY_RULE_SETUP
-if (surfxml_host_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in <surfxml_host>");} surfxml_host_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_state___file);
-       YY_BREAK
-case 247:
-/* rule 247 can match eol */
-YY_RULE_SETUP
 if (surfxml_host_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in <surfxml_host>");}  surfxml_host_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_state___file);
        YY_BREAK
-case 248:
+case 242:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_host_id) FAIL("Required attribute `id' not set for `host' element.");
@@ -7295,7 +7221,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_host();surfxml_pcdata_ix = 0; ENTER(S_surfxml_host);
  }
        YY_BREAK
-case 249:
+case 243:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_host_id) FAIL("Required attribute `id' not set for `host' element.");
@@ -7306,11 +7232,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 250:
+case 244:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of host element.", surf_parse_text[0]);
        YY_BREAK
-case 251:
+case 245:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `host' element start tag.",surf_parse_text);
        YY_BREAK
@@ -7318,8 +7244,8 @@ case YY_STATE_EOF(AL_surfxml_host):
 FAIL("EOF in attribute list of `host' element.");
        YY_BREAK
 
-case 252:
-/* rule 252 can match eol */
+case 246:
+/* rule 246 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -7330,12 +7256,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 253:
-/* rule 253 can match eol */
+case 247:
+/* rule 247 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</host>' expected.",surf_parse_text);
        YY_BREAK
-case 254:
+case 248:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</host>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -7345,13 +7271,13 @@ case YY_STATE_EOF(S_surfxml_host_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</host>' expected.");
        YY_BREAK
 
-case 255:
-/* rule 255 can match eol */
+case 249:
+/* rule 249 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <host_link> is not allowed here.");
        YY_BREAK
-case 256:
-/* rule 256 can match eol */
+case 250:
+/* rule 250 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_host___link_down = 0;
@@ -7364,37 +7290,37 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 257:
-/* rule 257 can match eol */
+case 251:
+/* rule 251 can match eol */
 YY_RULE_SETUP
 if (surfxml_host___link_down_isset != 0) {FAIL("Multiple definition of attribute down in <surfxml_host___link>");} surfxml_host___link_down_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host___link_down);
        YY_BREAK
-case 258:
-/* rule 258 can match eol */
+case 252:
+/* rule 252 can match eol */
 YY_RULE_SETUP
 if (surfxml_host___link_down_isset != 0) {FAIL("Multiple definition of attribute down in <surfxml_host___link>");}  surfxml_host___link_down_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host___link_down);
        YY_BREAK
-case 259:
-/* rule 259 can match eol */
+case 253:
+/* rule 253 can match eol */
 YY_RULE_SETUP
 if (surfxml_host___link_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_host___link>");} surfxml_host___link_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host___link_id);
        YY_BREAK
-case 260:
-/* rule 260 can match eol */
+case 254:
+/* rule 254 can match eol */
 YY_RULE_SETUP
 if (surfxml_host___link_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_host___link>");}  surfxml_host___link_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host___link_id);
        YY_BREAK
-case 261:
-/* rule 261 can match eol */
+case 255:
+/* rule 255 can match eol */
 YY_RULE_SETUP
 if (surfxml_host___link_up_isset != 0) {FAIL("Multiple definition of attribute up in <surfxml_host___link>");} surfxml_host___link_up_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host___link_up);
        YY_BREAK
-case 262:
-/* rule 262 can match eol */
+case 256:
+/* rule 256 can match eol */
 YY_RULE_SETUP
 if (surfxml_host___link_up_isset != 0) {FAIL("Multiple definition of attribute up in <surfxml_host___link>");}  surfxml_host___link_up_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host___link_up);
        YY_BREAK
-case 263:
+case 257:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_host___link_down) FAIL("Required attribute `down' not set for `host_link' element.");
@@ -7403,7 +7329,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_host___link();surfxml_pcdata_ix = 0; ENTER(E_surfxml_host___link);
  }
        YY_BREAK
-case 264:
+case 258:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_host___link_down) FAIL("Required attribute `down' not set for `host_link' element.");
@@ -7415,11 +7341,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 265:
+case 259:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of host_link element.", surf_parse_text[0]);
        YY_BREAK
-case 266:
+case 260:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `host_link' element start tag.",surf_parse_text);
        YY_BREAK
@@ -7427,8 +7353,8 @@ case YY_STATE_EOF(AL_surfxml_host___link):
 FAIL("EOF in attribute list of `host_link' element.");
        YY_BREAK
 
-case 267:
-/* rule 267 can match eol */
+case 261:
+/* rule 261 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -7439,12 +7365,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 268:
-/* rule 268 can match eol */
+case 262:
+/* rule 262 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</host_link>' expected.",surf_parse_text);
        YY_BREAK
-case 269:
+case 263:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</host_link>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -7452,13 +7378,13 @@ case YY_STATE_EOF(E_surfxml_host___link):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</host_link>' expected.");
        YY_BREAK
 
-case 270:
-/* rule 270 can match eol */
+case 264:
+/* rule 264 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <include> is not allowed here.");
        YY_BREAK
-case 271:
-/* rule 271 can match eol */
+case 265:
+/* rule 265 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_include_file = 0;
@@ -7467,24 +7393,24 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 272:
-/* rule 272 can match eol */
+case 266:
+/* rule 266 can match eol */
 YY_RULE_SETUP
 if (surfxml_include_file_isset != 0) {FAIL("Multiple definition of attribute file in <surfxml_include>");} surfxml_include_file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_include_file);
        YY_BREAK
-case 273:
-/* rule 273 can match eol */
+case 267:
+/* rule 267 can match eol */
 YY_RULE_SETUP
 if (surfxml_include_file_isset != 0) {FAIL("Multiple definition of attribute file in <surfxml_include>");}  surfxml_include_file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_include_file);
        YY_BREAK
-case 274:
+case 268:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_include_file) FAIL("Required attribute `file' not set for `include' element.");
   LEAVE; STag_surfxml_include();surfxml_pcdata_ix = 0; ENTER(S_surfxml_include);
  }
        YY_BREAK
-case 275:
+case 269:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_include_file) FAIL("Required attribute `file' not set for `include' element.");
@@ -7496,11 +7422,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 276:
+case 270:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of include element.", surf_parse_text[0]);
        YY_BREAK
-case 277:
+case 271:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `include' element start tag.",surf_parse_text);
        YY_BREAK
@@ -7508,8 +7434,8 @@ case YY_STATE_EOF(AL_surfxml_include):
 FAIL("EOF in attribute list of `include' element.");
        YY_BREAK
 
-case 278:
-/* rule 278 can match eol */
+case 272:
+/* rule 272 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -7522,12 +7448,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 279:
-/* rule 279 can match eol */
+case 273:
+/* rule 273 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</include>' expected.",surf_parse_text);
        YY_BREAK
-case 280:
+case 274:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</include>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -7537,13 +7463,13 @@ case YY_STATE_EOF(S_surfxml_include_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</include>' expected.");
        YY_BREAK
 
-case 281:
-/* rule 281 can match eol */
+case 275:
+/* rule 275 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <link> is not allowed here.");
        YY_BREAK
-case 282:
-/* rule 282 can match eol */
+case 276:
+/* rule 276 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_link_bandwidth = 0;
@@ -7558,110 +7484,94 @@ YY_RULE_SETUP
   surfxml_link_latency___file_isset = 0;
   AX_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_SHARED;
   surfxml_link_sharing___policy_isset = 0;
-  AX_surfxml_link_state = A_surfxml_link_state_ON;
-  surfxml_link_state_isset = 0;
   AX_surfxml_link_state___file = 0;
   surfxml_link_state___file_isset = 0;
   ENTER(AL_surfxml_link); pushbuffer(0);
   }
        YY_BREAK
 
-case 283:
-/* rule 283 can match eol */
+case 277:
+/* rule 277 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in <surfxml_link>");} surfxml_link_bandwidth_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_bandwidth);
        YY_BREAK
-case 284:
-/* rule 284 can match eol */
+case 278:
+/* rule 278 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in <surfxml_link>");}  surfxml_link_bandwidth_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_bandwidth);
        YY_BREAK
-case 285:
-/* rule 285 can match eol */
+case 279:
+/* rule 279 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_bandwidth___file_isset != 0) {FAIL("Multiple definition of attribute bandwidth_file in <surfxml_link>");} surfxml_link_bandwidth___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_bandwidth___file);
        YY_BREAK
-case 286:
-/* rule 286 can match eol */
+case 280:
+/* rule 280 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_bandwidth___file_isset != 0) {FAIL("Multiple definition of attribute bandwidth_file in <surfxml_link>");}  surfxml_link_bandwidth___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_bandwidth___file);
        YY_BREAK
-case 287:
-/* rule 287 can match eol */
+case 281:
+/* rule 281 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_link>");} surfxml_link_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_id);
        YY_BREAK
-case 288:
-/* rule 288 can match eol */
+case 282:
+/* rule 282 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_link>");}  surfxml_link_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_id);
        YY_BREAK
-case 289:
-/* rule 289 can match eol */
+case 283:
+/* rule 283 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_latency_isset != 0) {FAIL("Multiple definition of attribute latency in <surfxml_link>");} surfxml_link_latency_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_latency);
        YY_BREAK
-case 290:
-/* rule 290 can match eol */
+case 284:
+/* rule 284 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_latency_isset != 0) {FAIL("Multiple definition of attribute latency in <surfxml_link>");}  surfxml_link_latency_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_latency);
        YY_BREAK
-case 291:
-/* rule 291 can match eol */
+case 285:
+/* rule 285 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_latency___file_isset != 0) {FAIL("Multiple definition of attribute latency_file in <surfxml_link>");} surfxml_link_latency___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_latency___file);
        YY_BREAK
-case 292:
-/* rule 292 can match eol */
+case 286:
+/* rule 286 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_latency___file_isset != 0) {FAIL("Multiple definition of attribute latency_file in <surfxml_link>");}  surfxml_link_latency___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_latency___file);
        YY_BREAK
-case 293:
-/* rule 293 can match eol */
-case 294:
-/* rule 294 can match eol */
+case 287:
+/* rule 287 can match eol */
+case 288:
+/* rule 288 can match eol */
 YY_RULE_SETUP
 A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_SHARED;
        YY_BREAK
-case 295:
-/* rule 295 can match eol */
-case 296:
-/* rule 296 can match eol */
+case 289:
+/* rule 289 can match eol */
+case 290:
+/* rule 290 can match eol */
 YY_RULE_SETUP
 A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_FATPIPE;
        YY_BREAK
-case 297:
-/* rule 297 can match eol */
-case 298:
-/* rule 298 can match eol */
+case 291:
+/* rule 291 can match eol */
+case 292:
+/* rule 292 can match eol */
 YY_RULE_SETUP
 A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_FULLDUPLEX;
        YY_BREAK
-case 299:
-/* rule 299 can match eol */
-case 300:
-/* rule 300 can match eol */
-YY_RULE_SETUP
-A_surfxml_link_state = A_surfxml_link_state_ON;
-       YY_BREAK
-case 301:
-/* rule 301 can match eol */
-case 302:
-/* rule 302 can match eol */
-YY_RULE_SETUP
-A_surfxml_link_state = A_surfxml_link_state_OFF;
-       YY_BREAK
-case 303:
-/* rule 303 can match eol */
+case 293:
+/* rule 293 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in <surfxml_link>");} surfxml_link_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_state___file);
        YY_BREAK
-case 304:
-/* rule 304 can match eol */
+case 294:
+/* rule 294 can match eol */
 YY_RULE_SETUP
 if (surfxml_link_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in <surfxml_link>");}  surfxml_link_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_state___file);
        YY_BREAK
-case 305:
+case 295:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_link_bandwidth) FAIL("Required attribute `bandwidth' not set for `link' element.");
@@ -7669,7 +7579,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_link();surfxml_pcdata_ix = 0; ENTER(S_surfxml_link);
  }
        YY_BREAK
-case 306:
+case 296:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_link_bandwidth) FAIL("Required attribute `bandwidth' not set for `link' element.");
@@ -7680,11 +7590,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 307:
+case 297:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of link element.", surf_parse_text[0]);
        YY_BREAK
-case 308:
+case 298:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `link' element start tag.",surf_parse_text);
        YY_BREAK
@@ -7692,8 +7602,8 @@ case YY_STATE_EOF(AL_surfxml_link):
 FAIL("EOF in attribute list of `link' element.");
        YY_BREAK
 
-case 309:
-/* rule 309 can match eol */
+case 299:
+/* rule 299 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -7704,12 +7614,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 310:
-/* rule 310 can match eol */
+case 300:
+/* rule 300 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</link>' expected.",surf_parse_text);
        YY_BREAK
-case 311:
+case 301:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</link>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -7719,13 +7629,13 @@ case YY_STATE_EOF(S_surfxml_link_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</link>' expected.");
        YY_BREAK
 
-case 312:
-/* rule 312 can match eol */
+case 302:
+/* rule 302 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <link_ctn> is not allowed here.");
        YY_BREAK
-case 313:
-/* rule 313 can match eol */
+case 303:
+/* rule 303 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_NONE;
@@ -7736,45 +7646,45 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 314:
-/* rule 314 can match eol */
-case 315:
-/* rule 315 can match eol */
+case 304:
+/* rule 304 can match eol */
+case 305:
+/* rule 305 can match eol */
 YY_RULE_SETUP
 A_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_UP;
        YY_BREAK
-case 316:
-/* rule 316 can match eol */
-case 317:
-/* rule 317 can match eol */
+case 306:
+/* rule 306 can match eol */
+case 307:
+/* rule 307 can match eol */
 YY_RULE_SETUP
 A_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_DOWN;
        YY_BREAK
-case 318:
-/* rule 318 can match eol */
-case 319:
-/* rule 319 can match eol */
+case 308:
+/* rule 308 can match eol */
+case 309:
+/* rule 309 can match eol */
 YY_RULE_SETUP
 A_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_NONE;
        YY_BREAK
-case 320:
-/* rule 320 can match eol */
+case 310:
+/* rule 310 can match eol */
 YY_RULE_SETUP
 if (surfxml_link___ctn_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_link___ctn>");} surfxml_link___ctn_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link___ctn_id);
        YY_BREAK
-case 321:
-/* rule 321 can match eol */
+case 311:
+/* rule 311 can match eol */
 YY_RULE_SETUP
 if (surfxml_link___ctn_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_link___ctn>");}  surfxml_link___ctn_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link___ctn_id);
        YY_BREAK
-case 322:
+case 312:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_link___ctn_id) FAIL("Required attribute `id' not set for `link_ctn' element.");
   LEAVE; STag_surfxml_link___ctn();surfxml_pcdata_ix = 0; ENTER(E_surfxml_link___ctn);
  }
        YY_BREAK
-case 323:
+case 313:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_link___ctn_id) FAIL("Required attribute `id' not set for `link_ctn' element.");
@@ -7787,11 +7697,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 324:
+case 314:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of link_ctn element.", surf_parse_text[0]);
        YY_BREAK
-case 325:
+case 315:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `link_ctn' element start tag.",surf_parse_text);
        YY_BREAK
@@ -7799,8 +7709,8 @@ case YY_STATE_EOF(AL_surfxml_link___ctn):
 FAIL("EOF in attribute list of `link_ctn' element.");
        YY_BREAK
 
-case 326:
-/* rule 326 can match eol */
+case 316:
+/* rule 316 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -7814,12 +7724,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 327:
-/* rule 327 can match eol */
+case 317:
+/* rule 317 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</link_ctn>' expected.",surf_parse_text);
        YY_BREAK
-case 328:
+case 318:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</link_ctn>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -7829,13 +7739,13 @@ if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</link_ctn>' expected.")
 
 /* <!-- <!ATTLIST model_prop key CDATA #REQUIRED> -->
   * <!-- <!ATTLIST model_prop key CDATA #REQUIRED> -->  */
-case 329:
-/* rule 329 can match eol */
+case 319:
+/* rule 319 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <model_prop> is not allowed here.");
        YY_BREAK
-case 330:
-/* rule 330 can match eol */
+case 320:
+/* rule 320 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_model___prop_id = 0;
@@ -7846,27 +7756,27 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 331:
-/* rule 331 can match eol */
+case 321:
+/* rule 321 can match eol */
 YY_RULE_SETUP
 if (surfxml_model___prop_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_model___prop>");} surfxml_model___prop_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_model___prop_id);
        YY_BREAK
-case 332:
-/* rule 332 can match eol */
+case 322:
+/* rule 322 can match eol */
 YY_RULE_SETUP
 if (surfxml_model___prop_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_model___prop>");}  surfxml_model___prop_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_model___prop_id);
        YY_BREAK
-case 333:
-/* rule 333 can match eol */
+case 323:
+/* rule 323 can match eol */
 YY_RULE_SETUP
 if (surfxml_model___prop_value_isset != 0) {FAIL("Multiple definition of attribute value in <surfxml_model___prop>");} surfxml_model___prop_value_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_model___prop_value);
        YY_BREAK
-case 334:
-/* rule 334 can match eol */
+case 324:
+/* rule 324 can match eol */
 YY_RULE_SETUP
 if (surfxml_model___prop_value_isset != 0) {FAIL("Multiple definition of attribute value in <surfxml_model___prop>");}  surfxml_model___prop_value_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_model___prop_value);
        YY_BREAK
-case 335:
+case 325:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_model___prop_id) FAIL("Required attribute `id' not set for `model_prop' element.");
@@ -7874,7 +7784,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_model___prop();surfxml_pcdata_ix = 0; ENTER(E_surfxml_model___prop);
  }
        YY_BREAK
-case 336:
+case 326:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_model___prop_id) FAIL("Required attribute `id' not set for `model_prop' element.");
@@ -7885,11 +7795,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 337:
+case 327:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of model_prop element.", surf_parse_text[0]);
        YY_BREAK
-case 338:
+case 328:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `model_prop' element start tag.",surf_parse_text);
        YY_BREAK
@@ -7897,8 +7807,8 @@ case YY_STATE_EOF(AL_surfxml_model___prop):
 FAIL("EOF in attribute list of `model_prop' element.");
        YY_BREAK
 
-case 339:
-/* rule 339 can match eol */
+case 329:
+/* rule 329 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -7909,12 +7819,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 340:
-/* rule 340 can match eol */
+case 330:
+/* rule 330 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</model_prop>' expected.",surf_parse_text);
        YY_BREAK
-case 341:
+case 331:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</model_prop>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -7922,13 +7832,13 @@ case YY_STATE_EOF(E_surfxml_model___prop):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</model_prop>' expected.");
        YY_BREAK
 
-case 342:
-/* rule 342 can match eol */
+case 332:
+/* rule 332 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <mount> is not allowed here.");
        YY_BREAK
-case 343:
-/* rule 343 can match eol */
+case 333:
+/* rule 333 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_mount_name = 0;
@@ -7939,27 +7849,27 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 344:
-/* rule 344 can match eol */
+case 334:
+/* rule 334 can match eol */
 YY_RULE_SETUP
 if (surfxml_mount_name_isset != 0) {FAIL("Multiple definition of attribute name in <surfxml_mount>");} surfxml_mount_name_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_mount_name);
        YY_BREAK
-case 345:
-/* rule 345 can match eol */
+case 335:
+/* rule 335 can match eol */
 YY_RULE_SETUP
 if (surfxml_mount_name_isset != 0) {FAIL("Multiple definition of attribute name in <surfxml_mount>");}  surfxml_mount_name_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_mount_name);
        YY_BREAK
-case 346:
-/* rule 346 can match eol */
+case 336:
+/* rule 336 can match eol */
 YY_RULE_SETUP
 if (surfxml_mount_storageId_isset != 0) {FAIL("Multiple definition of attribute storageId in <surfxml_mount>");} surfxml_mount_storageId_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_mount_storageId);
        YY_BREAK
-case 347:
-/* rule 347 can match eol */
+case 337:
+/* rule 337 can match eol */
 YY_RULE_SETUP
 if (surfxml_mount_storageId_isset != 0) {FAIL("Multiple definition of attribute storageId in <surfxml_mount>");}  surfxml_mount_storageId_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_mount_storageId);
        YY_BREAK
-case 348:
+case 338:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_mount_name) FAIL("Required attribute `name' not set for `mount' element.");
@@ -7967,7 +7877,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_mount();surfxml_pcdata_ix = 0; ENTER(E_surfxml_mount);
  }
        YY_BREAK
-case 349:
+case 339:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_mount_name) FAIL("Required attribute `name' not set for `mount' element.");
@@ -7978,11 +7888,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 350:
+case 340:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of mount element.", surf_parse_text[0]);
        YY_BREAK
-case 351:
+case 341:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `mount' element start tag.",surf_parse_text);
        YY_BREAK
@@ -7990,8 +7900,8 @@ case YY_STATE_EOF(AL_surfxml_mount):
 FAIL("EOF in attribute list of `mount' element.");
        YY_BREAK
 
-case 352:
-/* rule 352 can match eol */
+case 342:
+/* rule 342 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -8002,12 +7912,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 353:
-/* rule 353 can match eol */
+case 343:
+/* rule 343 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</mount>' expected.",surf_parse_text);
        YY_BREAK
-case 354:
+case 344:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</mount>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -8015,13 +7925,13 @@ case YY_STATE_EOF(E_surfxml_mount):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</mount>' expected.");
        YY_BREAK
 
-case 355:
-/* rule 355 can match eol */
+case 345:
+/* rule 345 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <mstorage> is not allowed here.");
        YY_BREAK
-case 356:
-/* rule 356 can match eol */
+case 346:
+/* rule 346 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_mstorage_name = 0;
@@ -8032,27 +7942,27 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 357:
-/* rule 357 can match eol */
+case 347:
+/* rule 347 can match eol */
 YY_RULE_SETUP
 if (surfxml_mstorage_name_isset != 0) {FAIL("Multiple definition of attribute name in <surfxml_mstorage>");} surfxml_mstorage_name_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_mstorage_name);
        YY_BREAK
-case 358:
-/* rule 358 can match eol */
+case 348:
+/* rule 348 can match eol */
 YY_RULE_SETUP
 if (surfxml_mstorage_name_isset != 0) {FAIL("Multiple definition of attribute name in <surfxml_mstorage>");}  surfxml_mstorage_name_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_mstorage_name);
        YY_BREAK
-case 359:
-/* rule 359 can match eol */
+case 349:
+/* rule 349 can match eol */
 YY_RULE_SETUP
 if (surfxml_mstorage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in <surfxml_mstorage>");} surfxml_mstorage_typeId_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_mstorage_typeId);
        YY_BREAK
-case 360:
-/* rule 360 can match eol */
+case 350:
+/* rule 350 can match eol */
 YY_RULE_SETUP
 if (surfxml_mstorage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in <surfxml_mstorage>");}  surfxml_mstorage_typeId_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_mstorage_typeId);
        YY_BREAK
-case 361:
+case 351:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_mstorage_name) FAIL("Required attribute `name' not set for `mstorage' element.");
@@ -8060,7 +7970,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_mstorage();surfxml_pcdata_ix = 0; ENTER(E_surfxml_mstorage);
  }
        YY_BREAK
-case 362:
+case 352:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_mstorage_name) FAIL("Required attribute `name' not set for `mstorage' element.");
@@ -8071,11 +7981,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 363:
+case 353:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of mstorage element.", surf_parse_text[0]);
        YY_BREAK
-case 364:
+case 354:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `mstorage' element start tag.",surf_parse_text);
        YY_BREAK
@@ -8083,8 +7993,8 @@ case YY_STATE_EOF(AL_surfxml_mstorage):
 FAIL("EOF in attribute list of `mstorage' element.");
        YY_BREAK
 
-case 365:
-/* rule 365 can match eol */
+case 355:
+/* rule 355 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -8095,12 +8005,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 366:
-/* rule 366 can match eol */
+case 356:
+/* rule 356 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</mstorage>' expected.",surf_parse_text);
        YY_BREAK
-case 367:
+case 357:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</mstorage>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -8108,13 +8018,13 @@ case YY_STATE_EOF(E_surfxml_mstorage):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</mstorage>' expected.");
        YY_BREAK
 
-case 368:
-/* rule 368 can match eol */
+case 358:
+/* rule 358 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <peer> is not allowed here.");
        YY_BREAK
-case 369:
-/* rule 369 can match eol */
+case 359:
+/* rule 359 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_peer_availability___file = 0;
@@ -8137,87 +8047,87 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 370:
-/* rule 370 can match eol */
+case 360:
+/* rule 360 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in <surfxml_peer>");} surfxml_peer_availability___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_availability___file);
        YY_BREAK
-case 371:
-/* rule 371 can match eol */
+case 361:
+/* rule 361 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in <surfxml_peer>");}  surfxml_peer_availability___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_availability___file);
        YY_BREAK
-case 372:
-/* rule 372 can match eol */
+case 362:
+/* rule 362 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_bw___in_isset != 0) {FAIL("Multiple definition of attribute bw_in in <surfxml_peer>");} surfxml_peer_bw___in_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_bw___in);
        YY_BREAK
-case 373:
-/* rule 373 can match eol */
+case 363:
+/* rule 363 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_bw___in_isset != 0) {FAIL("Multiple definition of attribute bw_in in <surfxml_peer>");}  surfxml_peer_bw___in_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_bw___in);
        YY_BREAK
-case 374:
-/* rule 374 can match eol */
+case 364:
+/* rule 364 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_bw___out_isset != 0) {FAIL("Multiple definition of attribute bw_out in <surfxml_peer>");} surfxml_peer_bw___out_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_bw___out);
        YY_BREAK
-case 375:
-/* rule 375 can match eol */
+case 365:
+/* rule 365 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_bw___out_isset != 0) {FAIL("Multiple definition of attribute bw_out in <surfxml_peer>");}  surfxml_peer_bw___out_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_bw___out);
        YY_BREAK
-case 376:
-/* rule 376 can match eol */
+case 366:
+/* rule 366 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in <surfxml_peer>");} surfxml_peer_coordinates_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_coordinates);
        YY_BREAK
-case 377:
-/* rule 377 can match eol */
+case 367:
+/* rule 367 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in <surfxml_peer>");}  surfxml_peer_coordinates_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_coordinates);
        YY_BREAK
-case 378:
-/* rule 378 can match eol */
+case 368:
+/* rule 368 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_peer>");} surfxml_peer_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_id);
        YY_BREAK
-case 379:
-/* rule 379 can match eol */
+case 369:
+/* rule 369 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_peer>");}  surfxml_peer_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_id);
        YY_BREAK
-case 380:
-/* rule 380 can match eol */
+case 370:
+/* rule 370 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_lat_isset != 0) {FAIL("Multiple definition of attribute lat in <surfxml_peer>");} surfxml_peer_lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_lat);
        YY_BREAK
-case 381:
-/* rule 381 can match eol */
+case 371:
+/* rule 371 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_lat_isset != 0) {FAIL("Multiple definition of attribute lat in <surfxml_peer>");}  surfxml_peer_lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_lat);
        YY_BREAK
-case 382:
-/* rule 382 can match eol */
+case 372:
+/* rule 372 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_peer>");} surfxml_peer_speed_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_speed);
        YY_BREAK
-case 383:
-/* rule 383 can match eol */
+case 373:
+/* rule 373 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_peer>");}  surfxml_peer_speed_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_speed);
        YY_BREAK
-case 384:
-/* rule 384 can match eol */
+case 374:
+/* rule 374 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in <surfxml_peer>");} surfxml_peer_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_state___file);
        YY_BREAK
-case 385:
-/* rule 385 can match eol */
+case 375:
+/* rule 375 can match eol */
 YY_RULE_SETUP
 if (surfxml_peer_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in <surfxml_peer>");}  surfxml_peer_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_state___file);
        YY_BREAK
-case 386:
+case 376:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_peer_bw___in) FAIL("Required attribute `bw_in' not set for `peer' element.");
@@ -8228,7 +8138,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_peer();surfxml_pcdata_ix = 0; ENTER(E_surfxml_peer);
  }
        YY_BREAK
-case 387:
+case 377:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_peer_bw___in) FAIL("Required attribute `bw_in' not set for `peer' element.");
@@ -8244,11 +8154,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 388:
+case 378:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of peer element.", surf_parse_text[0]);
        YY_BREAK
-case 389:
+case 379:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `peer' element start tag.",surf_parse_text);
        YY_BREAK
@@ -8256,8 +8166,8 @@ case YY_STATE_EOF(AL_surfxml_peer):
 FAIL("EOF in attribute list of `peer' element.");
        YY_BREAK
 
-case 390:
-/* rule 390 can match eol */
+case 380:
+/* rule 380 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -8270,12 +8180,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 391:
-/* rule 391 can match eol */
+case 381:
+/* rule 381 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</peer>' expected.",surf_parse_text);
        YY_BREAK
-case 392:
+case 382:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</peer>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -8291,6 +8201,9 @@ if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</peer>' expected.");
   *    - Rename (power->speed) the attributes describing the amount of flop
   *      that a <host>, <peer>, <cluster> or <cabinet> can deliver per second.
   *    - In <trace_connect>, attribute kind="POWER" is now kind="SPEED".
+  *    
+  *    - In <host> and <link>, attributes availability and state are gone.
+  *      It was redundent with state and availability traces, and with peak values.
   *    - The DOCTYPE points to the right URL (this file):
   *      http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd
   *    - A warning is emited for unit-less values (they are still accepted).
@@ -8321,13 +8234,13 @@ if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</peer>' expected.");
   *      - Link bandwidth: from Mb/s to b/s
   *      - CPU speed: from MFlop/s to Flop/s
   * -->  */
-case 393:
-/* rule 393 can match eol */
+case 383:
+/* rule 383 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <platform> is not allowed here.");
        YY_BREAK
-case 394:
-/* rule 394 can match eol */
+case 384:
+/* rule 384 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_platform_version = 1;
@@ -8336,23 +8249,23 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 395:
-/* rule 395 can match eol */
+case 385:
+/* rule 385 can match eol */
 YY_RULE_SETUP
 if (surfxml_platform_version_isset != 0) {FAIL("Multiple definition of attribute version in <surfxml_platform>");} surfxml_platform_version_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_platform_version);
        YY_BREAK
-case 396:
-/* rule 396 can match eol */
+case 386:
+/* rule 386 can match eol */
 YY_RULE_SETUP
 if (surfxml_platform_version_isset != 0) {FAIL("Multiple definition of attribute version in <surfxml_platform>");}  surfxml_platform_version_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_platform_version);
        YY_BREAK
-case 397:
+case 387:
 YY_RULE_SETUP
 {
   LEAVE; STag_surfxml_platform();surfxml_pcdata_ix = 0; ENTER(S_surfxml_platform);
  }
        YY_BREAK
-case 398:
+case 388:
 YY_RULE_SETUP
 {
   LEAVE; STag_surfxml_platform(); surfxml_pcdata_ix = 0; ETag_surfxml_platform(); popbuffer(); /* attribute */
@@ -8361,11 +8274,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 399:
+case 389:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of platform element.", surf_parse_text[0]);
        YY_BREAK
-case 400:
+case 390:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `platform' element start tag.",surf_parse_text);
        YY_BREAK
@@ -8373,8 +8286,8 @@ case YY_STATE_EOF(AL_surfxml_platform):
 FAIL("EOF in attribute list of `platform' element.");
        YY_BREAK
 
-case 401:
-/* rule 401 can match eol */
+case 391:
+/* rule 391 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -8385,12 +8298,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 402:
-/* rule 402 can match eol */
+case 392:
+/* rule 392 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</platform>' expected.",surf_parse_text);
        YY_BREAK
-case 403:
+case 393:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</platform>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -8404,84 +8317,84 @@ case YY_STATE_EOF(S_surfxml_platform_8):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</platform>' expected.");
        YY_BREAK
 
-case 404:
-/* rule 404 can match eol */
+case 394:
+/* rule 394 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <process> is not allowed here.");
        YY_BREAK
-case 405:
-/* rule 405 can match eol */
+case 395:
+/* rule 395 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_process_function = 0;
   surfxml_process_function_isset = 0;
   AX_surfxml_process_host = 0;
   surfxml_process_host_isset = 0;
-  AX_surfxml_process_kill___time = 54;
+  AX_surfxml_process_kill___time = 50;
   surfxml_process_kill___time_isset = 0;
   AX_surfxml_process_on___failure = A_surfxml_process_on___failure_DIE;
   surfxml_process_on___failure_isset = 0;
-  AX_surfxml_process_start___time = 49;
+  AX_surfxml_process_start___time = 45;
   surfxml_process_start___time_isset = 0;
   ENTER(AL_surfxml_process); pushbuffer(0);
   }
        YY_BREAK
 
-case 406:
-/* rule 406 can match eol */
+case 396:
+/* rule 396 can match eol */
 YY_RULE_SETUP
 if (surfxml_process_function_isset != 0) {FAIL("Multiple definition of attribute function in <surfxml_process>");} surfxml_process_function_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_process_function);
        YY_BREAK
-case 407:
-/* rule 407 can match eol */
+case 397:
+/* rule 397 can match eol */
 YY_RULE_SETUP
 if (surfxml_process_function_isset != 0) {FAIL("Multiple definition of attribute function in <surfxml_process>");}  surfxml_process_function_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_process_function);
        YY_BREAK
-case 408:
-/* rule 408 can match eol */
+case 398:
+/* rule 398 can match eol */
 YY_RULE_SETUP
 if (surfxml_process_host_isset != 0) {FAIL("Multiple definition of attribute host in <surfxml_process>");} surfxml_process_host_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_process_host);
        YY_BREAK
-case 409:
-/* rule 409 can match eol */
+case 399:
+/* rule 399 can match eol */
 YY_RULE_SETUP
 if (surfxml_process_host_isset != 0) {FAIL("Multiple definition of attribute host in <surfxml_process>");}  surfxml_process_host_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_process_host);
        YY_BREAK
-case 410:
-/* rule 410 can match eol */
+case 400:
+/* rule 400 can match eol */
 YY_RULE_SETUP
 if (surfxml_process_kill___time_isset != 0) {FAIL("Multiple definition of attribute kill_time in <surfxml_process>");} surfxml_process_kill___time_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_process_kill___time);
        YY_BREAK
-case 411:
-/* rule 411 can match eol */
+case 401:
+/* rule 401 can match eol */
 YY_RULE_SETUP
 if (surfxml_process_kill___time_isset != 0) {FAIL("Multiple definition of attribute kill_time in <surfxml_process>");}  surfxml_process_kill___time_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_process_kill___time);
        YY_BREAK
-case 412:
-/* rule 412 can match eol */
-case 413:
-/* rule 413 can match eol */
+case 402:
+/* rule 402 can match eol */
+case 403:
+/* rule 403 can match eol */
 YY_RULE_SETUP
 A_surfxml_process_on___failure = A_surfxml_process_on___failure_DIE;
        YY_BREAK
-case 414:
-/* rule 414 can match eol */
-case 415:
-/* rule 415 can match eol */
+case 404:
+/* rule 404 can match eol */
+case 405:
+/* rule 405 can match eol */
 YY_RULE_SETUP
 A_surfxml_process_on___failure = A_surfxml_process_on___failure_RESTART;
        YY_BREAK
-case 416:
-/* rule 416 can match eol */
+case 406:
+/* rule 406 can match eol */
 YY_RULE_SETUP
 if (surfxml_process_start___time_isset != 0) {FAIL("Multiple definition of attribute start_time in <surfxml_process>");} surfxml_process_start___time_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_process_start___time);
        YY_BREAK
-case 417:
-/* rule 417 can match eol */
+case 407:
+/* rule 407 can match eol */
 YY_RULE_SETUP
 if (surfxml_process_start___time_isset != 0) {FAIL("Multiple definition of attribute start_time in <surfxml_process>");}  surfxml_process_start___time_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_process_start___time);
        YY_BREAK
-case 418:
+case 408:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_process_function) FAIL("Required attribute `function' not set for `process' element.");
@@ -8489,7 +8402,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_process();surfxml_pcdata_ix = 0; ENTER(S_surfxml_process);
  }
        YY_BREAK
-case 419:
+case 409:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_process_function) FAIL("Required attribute `function' not set for `process' element.");
@@ -8500,11 +8413,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 420:
+case 410:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of process element.", surf_parse_text[0]);
        YY_BREAK
-case 421:
+case 411:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `process' element start tag.",surf_parse_text);
        YY_BREAK
@@ -8512,8 +8425,8 @@ case YY_STATE_EOF(AL_surfxml_process):
 FAIL("EOF in attribute list of `process' element.");
        YY_BREAK
 
-case 422:
-/* rule 422 can match eol */
+case 412:
+/* rule 412 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -8524,12 +8437,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 423:
-/* rule 423 can match eol */
+case 413:
+/* rule 413 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</process>' expected.",surf_parse_text);
        YY_BREAK
-case 424:
+case 414:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</process>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -8541,13 +8454,13 @@ if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</process>' expected.");
 
 /* <!-- <!ATTLIST prop key CDATA #REQUIRED> -->
   * <!-- <!ATTLIST prop key CDATA #REQUIRED> -->  */
-case 425:
-/* rule 425 can match eol */
+case 415:
+/* rule 415 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <prop> is not allowed here.");
        YY_BREAK
-case 426:
-/* rule 426 can match eol */
+case 416:
+/* rule 416 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_prop_id = 0;
@@ -8558,27 +8471,27 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 427:
-/* rule 427 can match eol */
+case 417:
+/* rule 417 can match eol */
 YY_RULE_SETUP
 if (surfxml_prop_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_prop>");} surfxml_prop_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_prop_id);
        YY_BREAK
-case 428:
-/* rule 428 can match eol */
+case 418:
+/* rule 418 can match eol */
 YY_RULE_SETUP
 if (surfxml_prop_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_prop>");}  surfxml_prop_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_prop_id);
        YY_BREAK
-case 429:
-/* rule 429 can match eol */
+case 419:
+/* rule 419 can match eol */
 YY_RULE_SETUP
 if (surfxml_prop_value_isset != 0) {FAIL("Multiple definition of attribute value in <surfxml_prop>");} surfxml_prop_value_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_prop_value);
        YY_BREAK
-case 430:
-/* rule 430 can match eol */
+case 420:
+/* rule 420 can match eol */
 YY_RULE_SETUP
 if (surfxml_prop_value_isset != 0) {FAIL("Multiple definition of attribute value in <surfxml_prop>");}  surfxml_prop_value_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_prop_value);
        YY_BREAK
-case 431:
+case 421:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_prop_id) FAIL("Required attribute `id' not set for `prop' element.");
@@ -8586,7 +8499,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_prop();surfxml_pcdata_ix = 0; ENTER(E_surfxml_prop);
  }
        YY_BREAK
-case 432:
+case 422:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_prop_id) FAIL("Required attribute `id' not set for `prop' element.");
@@ -8604,11 +8517,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 433:
+case 423:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of prop element.", surf_parse_text[0]);
        YY_BREAK
-case 434:
+case 424:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `prop' element start tag.",surf_parse_text);
        YY_BREAK
@@ -8616,8 +8529,8 @@ case YY_STATE_EOF(AL_surfxml_prop):
 FAIL("EOF in attribute list of `prop' element.");
        YY_BREAK
 
-case 435:
-/* rule 435 can match eol */
+case 425:
+/* rule 425 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -8635,12 +8548,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 436:
-/* rule 436 can match eol */
+case 426:
+/* rule 426 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</prop>' expected.",surf_parse_text);
        YY_BREAK
-case 437:
+case 427:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</prop>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -8648,13 +8561,13 @@ case YY_STATE_EOF(E_surfxml_prop):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</prop>' expected.");
        YY_BREAK
 
-case 438:
-/* rule 438 can match eol */
+case 428:
+/* rule 428 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <random> is not allowed here.");
        YY_BREAK
-case 439:
-/* rule 439 can match eol */
+case 429:
+/* rule 429 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_random_generator = A_surfxml_random_generator_DRAND48;
@@ -8677,105 +8590,105 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 440:
-/* rule 440 can match eol */
-case 441:
-/* rule 441 can match eol */
+case 430:
+/* rule 430 can match eol */
+case 431:
+/* rule 431 can match eol */
 YY_RULE_SETUP
 A_surfxml_random_generator = A_surfxml_random_generator_DRAND48;
        YY_BREAK
-case 442:
-/* rule 442 can match eol */
-case 443:
-/* rule 443 can match eol */
+case 432:
+/* rule 432 can match eol */
+case 433:
+/* rule 433 can match eol */
 YY_RULE_SETUP
 A_surfxml_random_generator = A_surfxml_random_generator_RAND;
        YY_BREAK
-case 444:
-/* rule 444 can match eol */
-case 445:
-/* rule 445 can match eol */
+case 434:
+/* rule 434 can match eol */
+case 435:
+/* rule 435 can match eol */
 YY_RULE_SETUP
 A_surfxml_random_generator = A_surfxml_random_generator_RNGSTREAM;
        YY_BREAK
-case 446:
-/* rule 446 can match eol */
-case 447:
-/* rule 447 can match eol */
+case 436:
+/* rule 436 can match eol */
+case 437:
+/* rule 437 can match eol */
 YY_RULE_SETUP
 A_surfxml_random_generator = A_surfxml_random_generator_NONE;
        YY_BREAK
-case 448:
-/* rule 448 can match eol */
+case 438:
+/* rule 438 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_random>");} surfxml_random_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_random_id);
        YY_BREAK
-case 449:
-/* rule 449 can match eol */
+case 439:
+/* rule 439 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_random>");}  surfxml_random_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_random_id);
        YY_BREAK
-case 450:
-/* rule 450 can match eol */
+case 440:
+/* rule 440 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_max_isset != 0) {FAIL("Multiple definition of attribute max in <surfxml_random>");} surfxml_random_max_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_random_max);
        YY_BREAK
-case 451:
-/* rule 451 can match eol */
+case 441:
+/* rule 441 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_max_isset != 0) {FAIL("Multiple definition of attribute max in <surfxml_random>");}  surfxml_random_max_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_random_max);
        YY_BREAK
-case 452:
-/* rule 452 can match eol */
+case 442:
+/* rule 442 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_mean_isset != 0) {FAIL("Multiple definition of attribute mean in <surfxml_random>");} surfxml_random_mean_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_random_mean);
        YY_BREAK
-case 453:
-/* rule 453 can match eol */
+case 443:
+/* rule 443 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_mean_isset != 0) {FAIL("Multiple definition of attribute mean in <surfxml_random>");}  surfxml_random_mean_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_random_mean);
        YY_BREAK
-case 454:
-/* rule 454 can match eol */
+case 444:
+/* rule 444 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_min_isset != 0) {FAIL("Multiple definition of attribute min in <surfxml_random>");} surfxml_random_min_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_random_min);
        YY_BREAK
-case 455:
-/* rule 455 can match eol */
+case 445:
+/* rule 445 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_min_isset != 0) {FAIL("Multiple definition of attribute min in <surfxml_random>");}  surfxml_random_min_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_random_min);
        YY_BREAK
-case 456:
-/* rule 456 can match eol */
+case 446:
+/* rule 446 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_radical_isset != 0) {FAIL("Multiple definition of attribute radical in <surfxml_random>");} surfxml_random_radical_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_random_radical);
        YY_BREAK
-case 457:
-/* rule 457 can match eol */
+case 447:
+/* rule 447 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_radical_isset != 0) {FAIL("Multiple definition of attribute radical in <surfxml_random>");}  surfxml_random_radical_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_random_radical);
        YY_BREAK
-case 458:
-/* rule 458 can match eol */
+case 448:
+/* rule 448 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_seed_isset != 0) {FAIL("Multiple definition of attribute seed in <surfxml_random>");} surfxml_random_seed_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_random_seed);
        YY_BREAK
-case 459:
-/* rule 459 can match eol */
+case 449:
+/* rule 449 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_seed_isset != 0) {FAIL("Multiple definition of attribute seed in <surfxml_random>");}  surfxml_random_seed_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_random_seed);
        YY_BREAK
-case 460:
-/* rule 460 can match eol */
+case 450:
+/* rule 450 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_std___deviation_isset != 0) {FAIL("Multiple definition of attribute std_deviation in <surfxml_random>");} surfxml_random_std___deviation_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_random_std___deviation);
        YY_BREAK
-case 461:
-/* rule 461 can match eol */
+case 451:
+/* rule 451 can match eol */
 YY_RULE_SETUP
 if (surfxml_random_std___deviation_isset != 0) {FAIL("Multiple definition of attribute std_deviation in <surfxml_random>");}  surfxml_random_std___deviation_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_random_std___deviation);
        YY_BREAK
-case 462:
+case 452:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_random_id) FAIL("Required attribute `id' not set for `random' element.");
@@ -8786,7 +8699,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_random();surfxml_pcdata_ix = 0; ENTER(E_surfxml_random);
  }
        YY_BREAK
-case 463:
+case 453:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_random_id) FAIL("Required attribute `id' not set for `random' element.");
@@ -8800,11 +8713,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 464:
+case 454:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of random element.", surf_parse_text[0]);
        YY_BREAK
-case 465:
+case 455:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `random' element start tag.",surf_parse_text);
        YY_BREAK
@@ -8812,8 +8725,8 @@ case YY_STATE_EOF(AL_surfxml_random):
 FAIL("EOF in attribute list of `random' element.");
        YY_BREAK
 
-case 466:
-/* rule 466 can match eol */
+case 456:
+/* rule 456 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -8824,12 +8737,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 467:
-/* rule 467 can match eol */
+case 457:
+/* rule 457 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</random>' expected.",surf_parse_text);
        YY_BREAK
-case 468:
+case 458:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</random>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -8837,13 +8750,13 @@ case YY_STATE_EOF(E_surfxml_random):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</random>' expected.");
        YY_BREAK
 
-case 469:
-/* rule 469 can match eol */
+case 459:
+/* rule 459 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <route> is not allowed here.");
        YY_BREAK
-case 470:
-/* rule 470 can match eol */
+case 460:
+/* rule 460 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_route_dst = 0;
@@ -8856,41 +8769,41 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 471:
-/* rule 471 can match eol */
+case 461:
+/* rule 461 can match eol */
 YY_RULE_SETUP
 if (surfxml_route_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_route>");} surfxml_route_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_route_dst);
        YY_BREAK
-case 472:
-/* rule 472 can match eol */
+case 462:
+/* rule 462 can match eol */
 YY_RULE_SETUP
 if (surfxml_route_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_route>");}  surfxml_route_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_route_dst);
        YY_BREAK
-case 473:
-/* rule 473 can match eol */
+case 463:
+/* rule 463 can match eol */
 YY_RULE_SETUP
 if (surfxml_route_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_route>");} surfxml_route_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_route_src);
        YY_BREAK
-case 474:
-/* rule 474 can match eol */
+case 464:
+/* rule 464 can match eol */
 YY_RULE_SETUP
 if (surfxml_route_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_route>");}  surfxml_route_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_route_src);
        YY_BREAK
-case 475:
-/* rule 475 can match eol */
-case 476:
-/* rule 476 can match eol */
+case 465:
+/* rule 465 can match eol */
+case 466:
+/* rule 466 can match eol */
 YY_RULE_SETUP
 A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_YES;
        YY_BREAK
-case 477:
-/* rule 477 can match eol */
-case 478:
-/* rule 478 can match eol */
+case 467:
+/* rule 467 can match eol */
+case 468:
+/* rule 468 can match eol */
 YY_RULE_SETUP
 A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
        YY_BREAK
-case 479:
+case 469:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_route_dst) FAIL("Required attribute `dst' not set for `route' element.");
@@ -8898,7 +8811,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_route();surfxml_pcdata_ix = 0; ENTER(S_surfxml_route);
  }
        YY_BREAK
-case 480:
+case 470:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_route_dst) FAIL("Required attribute `dst' not set for `route' element.");
@@ -8909,11 +8822,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 481:
+case 471:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of route element.", surf_parse_text[0]);
        YY_BREAK
-case 482:
+case 472:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `route' element start tag.",surf_parse_text);
        YY_BREAK
@@ -8921,8 +8834,8 @@ case YY_STATE_EOF(AL_surfxml_route):
 FAIL("EOF in attribute list of `route' element.");
        YY_BREAK
 
-case 483:
-/* rule 483 can match eol */
+case 473:
+/* rule 473 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -8933,12 +8846,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 484:
-/* rule 484 can match eol */
+case 474:
+/* rule 474 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</route>' expected.",surf_parse_text);
        YY_BREAK
-case 485:
+case 475:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</route>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -8948,13 +8861,13 @@ case YY_STATE_EOF(S_surfxml_route_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</route>' expected.");
        YY_BREAK
 
-case 486:
-/* rule 486 can match eol */
+case 476:
+/* rule 476 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <router> is not allowed here.");
        YY_BREAK
-case 487:
-/* rule 487 can match eol */
+case 477:
+/* rule 477 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_router_coordinates = 0;
@@ -8965,34 +8878,34 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 488:
-/* rule 488 can match eol */
+case 478:
+/* rule 478 can match eol */
 YY_RULE_SETUP
 if (surfxml_router_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in <surfxml_router>");} surfxml_router_coordinates_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_router_coordinates);
        YY_BREAK
-case 489:
-/* rule 489 can match eol */
+case 479:
+/* rule 479 can match eol */
 YY_RULE_SETUP
 if (surfxml_router_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in <surfxml_router>");}  surfxml_router_coordinates_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_router_coordinates);
        YY_BREAK
-case 490:
-/* rule 490 can match eol */
+case 480:
+/* rule 480 can match eol */
 YY_RULE_SETUP
 if (surfxml_router_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_router>");} surfxml_router_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_router_id);
        YY_BREAK
-case 491:
-/* rule 491 can match eol */
+case 481:
+/* rule 481 can match eol */
 YY_RULE_SETUP
 if (surfxml_router_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_router>");}  surfxml_router_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_router_id);
        YY_BREAK
-case 492:
+case 482:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_router_id) FAIL("Required attribute `id' not set for `router' element.");
   LEAVE; STag_surfxml_router();surfxml_pcdata_ix = 0; ENTER(E_surfxml_router);
  }
        YY_BREAK
-case 493:
+case 483:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_router_id) FAIL("Required attribute `id' not set for `router' element.");
@@ -9002,11 +8915,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 494:
+case 484:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of router element.", surf_parse_text[0]);
        YY_BREAK
-case 495:
+case 485:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `router' element start tag.",surf_parse_text);
        YY_BREAK
@@ -9014,8 +8927,8 @@ case YY_STATE_EOF(AL_surfxml_router):
 FAIL("EOF in attribute list of `router' element.");
        YY_BREAK
 
-case 496:
-/* rule 496 can match eol */
+case 486:
+/* rule 486 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -9026,12 +8939,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 497:
-/* rule 497 can match eol */
+case 487:
+/* rule 487 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</router>' expected.",surf_parse_text);
        YY_BREAK
-case 498:
+case 488:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</router>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -9039,20 +8952,20 @@ case YY_STATE_EOF(E_surfxml_router):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</router>' expected.");
        YY_BREAK
 
-case 499:
-/* rule 499 can match eol */
+case 489:
+/* rule 489 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <storage> is not allowed here.");
        YY_BREAK
-case 500:
-/* rule 500 can match eol */
+case 490:
+/* rule 490 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_storage_attach = 0;
   surfxml_storage_attach_isset = 0;
   AX_surfxml_storage_content = 0;
   surfxml_storage_content_isset = 0;
-  AX_surfxml_storage_content___type = 35;
+  AX_surfxml_storage_content___type = 31;
   surfxml_storage_content___type_isset = 0;
   AX_surfxml_storage_id = 0;
   surfxml_storage_id_isset = 0;
@@ -9062,57 +8975,57 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 501:
-/* rule 501 can match eol */
+case 491:
+/* rule 491 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_attach_isset != 0) {FAIL("Multiple definition of attribute attach in <surfxml_storage>");} surfxml_storage_attach_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_attach);
        YY_BREAK
-case 502:
-/* rule 502 can match eol */
+case 492:
+/* rule 492 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_attach_isset != 0) {FAIL("Multiple definition of attribute attach in <surfxml_storage>");}  surfxml_storage_attach_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_attach);
        YY_BREAK
-case 503:
-/* rule 503 can match eol */
+case 493:
+/* rule 493 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_content_isset != 0) {FAIL("Multiple definition of attribute content in <surfxml_storage>");} surfxml_storage_content_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_content);
        YY_BREAK
-case 504:
-/* rule 504 can match eol */
+case 494:
+/* rule 494 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_content_isset != 0) {FAIL("Multiple definition of attribute content in <surfxml_storage>");}  surfxml_storage_content_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_content);
        YY_BREAK
-case 505:
-/* rule 505 can match eol */
+case 495:
+/* rule 495 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_content___type_isset != 0) {FAIL("Multiple definition of attribute content_type in <surfxml_storage>");} surfxml_storage_content___type_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_content___type);
        YY_BREAK
-case 506:
-/* rule 506 can match eol */
+case 496:
+/* rule 496 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_content___type_isset != 0) {FAIL("Multiple definition of attribute content_type in <surfxml_storage>");}  surfxml_storage_content___type_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_content___type);
        YY_BREAK
-case 507:
-/* rule 507 can match eol */
+case 497:
+/* rule 497 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_storage>");} surfxml_storage_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_id);
        YY_BREAK
-case 508:
-/* rule 508 can match eol */
+case 498:
+/* rule 498 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_storage>");}  surfxml_storage_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_id);
        YY_BREAK
-case 509:
-/* rule 509 can match eol */
+case 499:
+/* rule 499 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in <surfxml_storage>");} surfxml_storage_typeId_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_typeId);
        YY_BREAK
-case 510:
-/* rule 510 can match eol */
+case 500:
+/* rule 500 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in <surfxml_storage>");}  surfxml_storage_typeId_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_typeId);
        YY_BREAK
-case 511:
+case 501:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_storage_attach) FAIL("Required attribute `attach' not set for `storage' element.");
@@ -9121,7 +9034,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_storage();surfxml_pcdata_ix = 0; ENTER(S_surfxml_storage);
  }
        YY_BREAK
-case 512:
+case 502:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_storage_attach) FAIL("Required attribute `attach' not set for `storage' element.");
@@ -9133,11 +9046,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 513:
+case 503:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of storage element.", surf_parse_text[0]);
        YY_BREAK
-case 514:
+case 504:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `storage' element start tag.",surf_parse_text);
        YY_BREAK
@@ -9145,8 +9058,8 @@ case YY_STATE_EOF(AL_surfxml_storage):
 FAIL("EOF in attribute list of `storage' element.");
        YY_BREAK
 
-case 515:
-/* rule 515 can match eol */
+case 505:
+/* rule 505 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -9157,12 +9070,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 516:
-/* rule 516 can match eol */
+case 506:
+/* rule 506 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</storage>' expected.",surf_parse_text);
        YY_BREAK
-case 517:
+case 507:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</storage>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -9172,13 +9085,13 @@ case YY_STATE_EOF(S_surfxml_storage_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</storage>' expected.");
        YY_BREAK
 
-case 518:
-/* rule 518 can match eol */
+case 508:
+/* rule 508 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <storage_type> is not allowed here.");
        YY_BREAK
-case 519:
-/* rule 519 can match eol */
+case 509:
+/* rule 509 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_storage___type_content = 0;
@@ -9195,57 +9108,57 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 520:
-/* rule 520 can match eol */
+case 510:
+/* rule 510 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_content_isset != 0) {FAIL("Multiple definition of attribute content in <surfxml_storage___type>");} surfxml_storage___type_content_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_content);
        YY_BREAK
-case 521:
-/* rule 521 can match eol */
+case 511:
+/* rule 511 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_content_isset != 0) {FAIL("Multiple definition of attribute content in <surfxml_storage___type>");}  surfxml_storage___type_content_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_content);
        YY_BREAK
-case 522:
-/* rule 522 can match eol */
+case 512:
+/* rule 512 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_content___type_isset != 0) {FAIL("Multiple definition of attribute content_type in <surfxml_storage___type>");} surfxml_storage___type_content___type_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_content___type);
        YY_BREAK
-case 523:
-/* rule 523 can match eol */
+case 513:
+/* rule 513 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_content___type_isset != 0) {FAIL("Multiple definition of attribute content_type in <surfxml_storage___type>");}  surfxml_storage___type_content___type_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_content___type);
        YY_BREAK
-case 524:
-/* rule 524 can match eol */
+case 514:
+/* rule 514 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_storage___type>");} surfxml_storage___type_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_id);
        YY_BREAK
-case 525:
-/* rule 525 can match eol */
+case 515:
+/* rule 515 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_storage___type>");}  surfxml_storage___type_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_id);
        YY_BREAK
-case 526:
-/* rule 526 can match eol */
+case 516:
+/* rule 516 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_model_isset != 0) {FAIL("Multiple definition of attribute model in <surfxml_storage___type>");} surfxml_storage___type_model_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_model);
        YY_BREAK
-case 527:
-/* rule 527 can match eol */
+case 517:
+/* rule 517 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_model_isset != 0) {FAIL("Multiple definition of attribute model in <surfxml_storage___type>");}  surfxml_storage___type_model_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_model);
        YY_BREAK
-case 528:
-/* rule 528 can match eol */
+case 518:
+/* rule 518 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_size_isset != 0) {FAIL("Multiple definition of attribute size in <surfxml_storage___type>");} surfxml_storage___type_size_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_size);
        YY_BREAK
-case 529:
-/* rule 529 can match eol */
+case 519:
+/* rule 519 can match eol */
 YY_RULE_SETUP
 if (surfxml_storage___type_size_isset != 0) {FAIL("Multiple definition of attribute size in <surfxml_storage___type>");}  surfxml_storage___type_size_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_size);
        YY_BREAK
-case 530:
+case 520:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_storage___type_id) FAIL("Required attribute `id' not set for `storage_type' element.");
@@ -9254,7 +9167,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_storage___type();surfxml_pcdata_ix = 0; ENTER(S_surfxml_storage___type);
  }
        YY_BREAK
-case 531:
+case 521:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_storage___type_id) FAIL("Required attribute `id' not set for `storage_type' element.");
@@ -9266,11 +9179,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 532:
+case 522:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of storage_type element.", surf_parse_text[0]);
        YY_BREAK
-case 533:
+case 523:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `storage_type' element start tag.",surf_parse_text);
        YY_BREAK
@@ -9278,8 +9191,8 @@ case YY_STATE_EOF(AL_surfxml_storage___type):
 FAIL("EOF in attribute list of `storage_type' element.");
        YY_BREAK
 
-case 534:
-/* rule 534 can match eol */
+case 524:
+/* rule 524 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -9290,12 +9203,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 535:
-/* rule 535 can match eol */
+case 525:
+/* rule 525 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</storage_type>' expected.",surf_parse_text);
        YY_BREAK
-case 536:
+case 526:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</storage_type>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -9305,13 +9218,13 @@ case YY_STATE_EOF(S_surfxml_storage___type_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</storage_type>' expected.");
        YY_BREAK
 
-case 537:
-/* rule 537 can match eol */
+case 527:
+/* rule 527 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <trace> is not allowed here.");
        YY_BREAK
-case 538:
-/* rule 538 can match eol */
+case 528:
+/* rule 528 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_trace_file = 0;
@@ -9324,37 +9237,37 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 539:
-/* rule 539 can match eol */
+case 529:
+/* rule 529 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace_file_isset != 0) {FAIL("Multiple definition of attribute file in <surfxml_trace>");} surfxml_trace_file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_trace_file);
        YY_BREAK
-case 540:
-/* rule 540 can match eol */
+case 530:
+/* rule 530 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace_file_isset != 0) {FAIL("Multiple definition of attribute file in <surfxml_trace>");}  surfxml_trace_file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_trace_file);
        YY_BREAK
-case 541:
-/* rule 541 can match eol */
+case 531:
+/* rule 531 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_trace>");} surfxml_trace_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_trace_id);
        YY_BREAK
-case 542:
-/* rule 542 can match eol */
+case 532:
+/* rule 532 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_trace>");}  surfxml_trace_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_trace_id);
        YY_BREAK
-case 543:
-/* rule 543 can match eol */
+case 533:
+/* rule 533 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace_periodicity_isset != 0) {FAIL("Multiple definition of attribute periodicity in <surfxml_trace>");} surfxml_trace_periodicity_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_trace_periodicity);
        YY_BREAK
-case 544:
-/* rule 544 can match eol */
+case 534:
+/* rule 534 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace_periodicity_isset != 0) {FAIL("Multiple definition of attribute periodicity in <surfxml_trace>");}  surfxml_trace_periodicity_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_trace_periodicity);
        YY_BREAK
-case 545:
+case 535:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_trace_id) FAIL("Required attribute `id' not set for `trace' element.");
@@ -9362,7 +9275,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_trace();pushbuffer(surfxml_pcdata_ix); BUFFERSET(surfxml_pcdata_ix);; ENTER(IN_trace);
  }
        YY_BREAK
-case 546:
+case 536:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_trace_id) FAIL("Required attribute `id' not set for `trace' element.");
@@ -9375,11 +9288,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 547:
+case 537:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of trace element.", surf_parse_text[0]);
        YY_BREAK
-case 548:
+case 538:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `trace' element start tag.",surf_parse_text);
        YY_BREAK
@@ -9387,8 +9300,8 @@ case YY_STATE_EOF(AL_surfxml_trace):
 FAIL("EOF in attribute list of `trace' element.");
        YY_BREAK
 
-case 549:
-/* rule 549 can match eol */
+case 539:
+/* rule 539 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -9403,8 +9316,8 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 550:
-/* rule 550 can match eol */
+case 540:
+/* rule 540 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</trace>' expected.",surf_parse_text);
        YY_BREAK
@@ -9412,13 +9325,13 @@ case YY_STATE_EOF(IN_trace):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</trace>' expected.");
        YY_BREAK
 
-case 551:
-/* rule 551 can match eol */
+case 541:
+/* rule 541 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <trace_connect> is not allowed here.");
        YY_BREAK
-case 552:
-/* rule 552 can match eol */
+case 542:
+/* rule 542 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_trace___connect_element = 0;
@@ -9431,62 +9344,62 @@ YY_RULE_SETUP
   }
        YY_BREAK
 
-case 553:
-/* rule 553 can match eol */
+case 543:
+/* rule 543 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace___connect_element_isset != 0) {FAIL("Multiple definition of attribute element in <surfxml_trace___connect>");} surfxml_trace___connect_element_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_trace___connect_element);
        YY_BREAK
-case 554:
-/* rule 554 can match eol */
+case 544:
+/* rule 544 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace___connect_element_isset != 0) {FAIL("Multiple definition of attribute element in <surfxml_trace___connect>");}  surfxml_trace___connect_element_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_trace___connect_element);
        YY_BREAK
-case 555:
-/* rule 555 can match eol */
-case 556:
-/* rule 556 can match eol */
+case 545:
+/* rule 545 can match eol */
+case 546:
+/* rule 546 can match eol */
 YY_RULE_SETUP
 A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_HOST___AVAIL;
        YY_BREAK
-case 557:
-/* rule 557 can match eol */
-case 558:
-/* rule 558 can match eol */
+case 547:
+/* rule 547 can match eol */
+case 548:
+/* rule 548 can match eol */
 YY_RULE_SETUP
 A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_SPEED;
        YY_BREAK
-case 559:
-/* rule 559 can match eol */
-case 560:
-/* rule 560 can match eol */
+case 549:
+/* rule 549 can match eol */
+case 550:
+/* rule 550 can match eol */
 YY_RULE_SETUP
 A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_LINK___AVAIL;
        YY_BREAK
-case 561:
-/* rule 561 can match eol */
-case 562:
-/* rule 562 can match eol */
+case 551:
+/* rule 551 can match eol */
+case 552:
+/* rule 552 can match eol */
 YY_RULE_SETUP
 A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_BANDWIDTH;
        YY_BREAK
-case 563:
-/* rule 563 can match eol */
-case 564:
-/* rule 564 can match eol */
+case 553:
+/* rule 553 can match eol */
+case 554:
+/* rule 554 can match eol */
 YY_RULE_SETUP
 A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_LATENCY;
        YY_BREAK
-case 565:
-/* rule 565 can match eol */
+case 555:
+/* rule 555 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace___connect_trace_isset != 0) {FAIL("Multiple definition of attribute trace in <surfxml_trace___connect>");} surfxml_trace___connect_trace_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_trace___connect_trace);
        YY_BREAK
-case 566:
-/* rule 566 can match eol */
+case 556:
+/* rule 556 can match eol */
 YY_RULE_SETUP
 if (surfxml_trace___connect_trace_isset != 0) {FAIL("Multiple definition of attribute trace in <surfxml_trace___connect>");}  surfxml_trace___connect_trace_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_trace___connect_trace);
        YY_BREAK
-case 567:
+case 557:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_trace___connect_element) FAIL("Required attribute `element' not set for `trace_connect' element.");
@@ -9494,7 +9407,7 @@ YY_RULE_SETUP
   LEAVE; STag_surfxml_trace___connect();surfxml_pcdata_ix = 0; ENTER(E_surfxml_trace___connect);
  }
        YY_BREAK
-case 568:
+case 558:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_trace___connect_element) FAIL("Required attribute `element' not set for `trace_connect' element.");
@@ -9507,11 +9420,11 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 569:
+case 559:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of trace_connect element.", surf_parse_text[0]);
        YY_BREAK
-case 570:
+case 560:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `trace_connect' element start tag.",surf_parse_text);
        YY_BREAK
@@ -9519,8 +9432,8 @@ case YY_STATE_EOF(AL_surfxml_trace___connect):
 FAIL("EOF in attribute list of `trace_connect' element.");
        YY_BREAK
 
-case 571:
-/* rule 571 can match eol */
+case 561:
+/* rule 561 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -9533,12 +9446,12 @@ YY_RULE_SETUP
   }
  }
        YY_BREAK
-case 572:
-/* rule 572 can match eol */
+case 562:
+/* rule 562 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</trace_connect>' expected.",surf_parse_text);
        YY_BREAK
-case 573:
+case 563:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</trace_connect>' expected.",surf_parse_text[0]);
        YY_BREAK
@@ -9548,7 +9461,7 @@ if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</trace_connect>' expect
 
 /* EPILOG: after the root element. */
 
-case 574:
+case 564:
 YY_RULE_SETUP
 {SET(PROLOG); yyless(0); CLEANUP; return -1;}
        YY_BREAK
@@ -9559,58 +9472,58 @@ SUCCEED;
 /* CHARACTER DATA. */
 
 /* Non-defined standard entities... */
-case 575:
+case 565:
 YY_RULE_SETUP
 BUFFERPUTC('&');
        YY_BREAK
-case 576:
+case 566:
 YY_RULE_SETUP
 BUFFERPUTC('<');
        YY_BREAK
-case 577:
+case 567:
 YY_RULE_SETUP
 BUFFERPUTC('>');
        YY_BREAK
-case 578:
+case 568:
 YY_RULE_SETUP
 BUFFERPUTC('\'');
        YY_BREAK
-case 579:
+case 569:
 YY_RULE_SETUP
 BUFFERPUTC('"');
        YY_BREAK
 /* Character entities. */
-case 580:
+case 570:
 YY_RULE_SETUP
 BUFFERPUTC((unsigned char)atoi(surf_parse_text+2));
        YY_BREAK
-case 581:
+case 571:
 YY_RULE_SETUP
 BUFFERPUTC((unsigned char)strtol(surf_parse_text+3,NULL,16));
        YY_BREAK
 
-case 582:
-/* rule 582 can match eol */
-case 583:
-/* rule 583 can match eol */
-case 584:
-/* rule 584 can match eol */
-case 585:
-/* rule 585 can match eol */
+case 572:
+/* rule 572 can match eol */
+case 573:
+/* rule 573 can match eol */
+case 574:
+/* rule 574 can match eol */
+case 575:
+/* rule 575 can match eol */
 YY_RULE_SETUP
 BUFFERPUTC('\n');
        YY_BREAK
 
-case 586:
+case 576:
 YY_RULE_SETUP
 ENTER(CDATA);
        YY_BREAK
-case 587:
+case 577:
 YY_RULE_SETUP
 FAIL("Unexpected `]""]>' in character data.");
        YY_BREAK
 
-case 588:
+case 578:
 YY_RULE_SETUP
 BUFFERDONE; LEAVE;
        YY_BREAK
@@ -9618,7 +9531,7 @@ case YY_STATE_EOF(VALUE1):
 FAIL("EOF in literal (\"'\" expected).");
        YY_BREAK
 
-case 589:
+case 579:
 YY_RULE_SETUP
 BUFFERDONE; LEAVE;
        YY_BREAK
@@ -9626,22 +9539,22 @@ case YY_STATE_EOF(VALUE2):
 FAIL("EOF in literal (`\"' expected).");
        YY_BREAK
 
-case 590:
-/* rule 590 can match eol */
+case 580:
+/* rule 580 can match eol */
 YY_RULE_SETUP
 BUFFERPUTC(surf_parse_text[0]);
        YY_BREAK
-case 591:
+case 581:
 YY_RULE_SETUP
 FAIL("Spurious `%c' in character data.",surf_parse_text[0]);
        YY_BREAK
 
-case 592:
+case 582:
 YY_RULE_SETUP
 LEAVE;
        YY_BREAK
 /* "]""]"              BUFFERPUTC(surf_parse_text[0]); BUFFERPUTC(surf_parse_text[1]); */
-case 593:
+case 583:
 YY_RULE_SETUP
 BUFFERPUTC(surf_parse_text[0]);
        YY_BREAK
@@ -9653,13 +9566,13 @@ FAIL("EOF in CDATA section.");
 /* Ideally, this should be replaced by code in flexml.pl that
     generates just the states not covered by other rules. */
 
-case 594:
-/* rule 594 can match eol */
+case 584:
+/* rule 584 can match eol */
 YY_RULE_SETUP
 FAIL("Syntax error on character `%c'.", surf_parse_text[0]);
        YY_BREAK
 
-case 595:
+case 585:
 YY_RULE_SETUP
 ECHO;
        YY_BREAK
@@ -9975,7 +9888,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 3477 )
+                       if ( yy_current_state >= 3438 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -10003,11 +9916,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 3477 )
+               if ( yy_current_state >= 3438 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 3476);
+       yy_is_jam = (yy_current_state == 3437);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
index 58a929e..c89ff48 100644 (file)
@@ -195,8 +195,6 @@ typedef int AT_surfxml_config_id;
 #define AU_surfxml_config_id NULL
 typedef int AT_surfxml_gpu_name;
 #define AU_surfxml_gpu_name NULL
-typedef int AT_surfxml_host_availability;
-#define AU_surfxml_host_availability NULL
 typedef int AT_surfxml_host_availability___file;
 #define AU_surfxml_host_availability___file NULL
 typedef int AT_surfxml_host_coordinates;
@@ -209,7 +207,6 @@ typedef int AT_surfxml_host_pstate;
 #define AU_surfxml_host_pstate NULL
 typedef int AT_surfxml_host_speed;
 #define AU_surfxml_host_speed NULL
-typedef enum { AU_surfxml_host_state, A_surfxml_host_state_ON,A_surfxml_host_state_OFF } AT_surfxml_host_state;
 typedef int AT_surfxml_host_state___file;
 #define AU_surfxml_host_state___file NULL
 typedef int AT_surfxml_host___link_down;
@@ -231,7 +228,6 @@ typedef int AT_surfxml_link_latency;
 typedef int AT_surfxml_link_latency___file;
 #define AU_surfxml_link_latency___file NULL
 typedef enum { AU_surfxml_link_sharing___policy, A_surfxml_link_sharing___policy_SHARED,A_surfxml_link_sharing___policy_FATPIPE,A_surfxml_link_sharing___policy_FULLDUPLEX } AT_surfxml_link_sharing___policy;
-typedef enum { AU_surfxml_link_state, A_surfxml_link_state_ON,A_surfxml_link_state_OFF } AT_surfxml_link_state;
 typedef int AT_surfxml_link_state___file;
 #define AU_surfxml_link_state___file NULL
 typedef enum { AU_surfxml_link___ctn_direction, A_surfxml_link___ctn_direction_UP,A_surfxml_link___ctn_direction_DOWN,A_surfxml_link___ctn_direction_NONE } AT_surfxml_link___ctn_direction;
@@ -478,9 +474,6 @@ XBT_PUBLIC_DATA(short int) surfxml_config_id_isset;
 XBT_PUBLIC_DATA(AT_surfxml_gpu_name) AX_surfxml_gpu_name;
 #define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name)
 XBT_PUBLIC_DATA(short int) surfxml_gpu_name_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_availability) AX_surfxml_host_availability;
-#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability)
-XBT_PUBLIC_DATA(short int) surfxml_host_availability_isset;
 XBT_PUBLIC_DATA(AT_surfxml_host_availability___file) AX_surfxml_host_availability___file;
 #define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file)
 XBT_PUBLIC_DATA(short int) surfxml_host_availability___file_isset;
@@ -499,9 +492,6 @@ XBT_PUBLIC_DATA(short int) surfxml_host_pstate_isset;
 XBT_PUBLIC_DATA(AT_surfxml_host_speed) AX_surfxml_host_speed;
 #define A_surfxml_host_speed (surfxml_bufferstack + AX_surfxml_host_speed)
 XBT_PUBLIC_DATA(short int) surfxml_host_speed_isset;
-XBT_PUBLIC_DATA(AT_surfxml_host_state) AX_surfxml_host_state;
-#define A_surfxml_host_state AX_surfxml_host_state
-XBT_PUBLIC_DATA(short int) surfxml_host_state_isset;
 XBT_PUBLIC_DATA(AT_surfxml_host_state___file) AX_surfxml_host_state___file;
 #define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file)
 XBT_PUBLIC_DATA(short int) surfxml_host_state___file_isset;
@@ -535,9 +525,6 @@ XBT_PUBLIC_DATA(short int) surfxml_link_latency___file_isset;
 XBT_PUBLIC_DATA(AT_surfxml_link_sharing___policy) AX_surfxml_link_sharing___policy;
 #define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy
 XBT_PUBLIC_DATA(short int) surfxml_link_sharing___policy_isset;
-XBT_PUBLIC_DATA(AT_surfxml_link_state) AX_surfxml_link_state;
-#define A_surfxml_link_state AX_surfxml_link_state
-XBT_PUBLIC_DATA(short int) surfxml_link_state_isset;
 XBT_PUBLIC_DATA(AT_surfxml_link_state___file) AX_surfxml_link_state___file;
 #define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file)
 XBT_PUBLIC_DATA(short int) surfxml_link_state___file_isset;
index 0c85993..02f8ccd 100644 (file)
@@ -10,6 +10,7 @@
 #include "xbt/dict.h"
 #include "src/surf/cpu_interface.hpp"
 #include "src/surf/network_interface.hpp"
+#include "src/instr/instr_private.h" // TRACE_start(). FIXME: remove by subscribing tracing to the surf signals
 
 #include "src/surf/xml/platf.hpp"
 
index b36b0e2..ea86273 100644 (file)
@@ -15,6 +15,7 @@
 #include "xbt/dict.h"
 #include "src/surf/surf_private.h"
 #include "simgrid/sg_config.h"
+#include "simgrid/link.h"
 
 #include "src/surf/xml/platf_private.hpp"
 
@@ -477,19 +478,11 @@ void ETag_surfxml_host(void)    {
   }
 
   XBT_DEBUG("pstate: %s", A_surfxml_host_pstate);
-  host.speed_scale = surf_parse_get_double( A_surfxml_host_availability);
   host.core_amount = surf_parse_get_int(A_surfxml_host_core);
   host.speed_trace = tmgr_trace_new_from_file(A_surfxml_host_availability___file);
   host.state_trace = tmgr_trace_new_from_file(A_surfxml_host_state___file);
   host.pstate      = surf_parse_get_int(A_surfxml_host_pstate);
-
-  xbt_assert((A_surfxml_host_state == A_surfxml_host_state_ON) ||
-        (A_surfxml_host_state == A_surfxml_host_state_OFF), "Invalid state");
-  if (A_surfxml_host_state == A_surfxml_host_state_ON)
-    host.initiallyOn = 1;
-  if (A_surfxml_host_state == A_surfxml_host_state_OFF)
-    host.initiallyOn = 1;
-  host.coord = A_surfxml_host_coordinates;
+  host.coord       = A_surfxml_host_coordinates;
 
   sg_platf_new_host(&host);
   xbt_dynar_free(&host.speed_peak);
@@ -639,28 +632,13 @@ void ETag_surfxml_link(void){
   s_sg_platf_link_cbarg_t link = SG_PLATF_LINK_INITIALIZER;
   memset(&link,0,sizeof(link));
 
-  link.properties = current_property_set;
-
-  link.id                                            = A_surfxml_link_id;
-  link.bandwidth                                     = surf_parse_get_bandwidth(A_surfxml_link_bandwidth, "bandwidth of link", link.id);
-  //printf("Link bandwidth [%g]\n", link.bandwidth);
-  link.bandwidth_trace                               = tmgr_trace_new_from_file(A_surfxml_link_bandwidth___file);
-  link.latency                                       = surf_parse_get_time(A_surfxml_link_latency, "latency of link", link.id);
-  //printf("Link latency [%g]\n", link.latency);
-  link.latency_trace                                 = tmgr_trace_new_from_file(A_surfxml_link_latency___file);
-
-  switch (A_surfxml_link_state) {
-  case A_surfxml_link_state_ON:
-    link.initiallyOn = 1;
-    break;
-  case A_surfxml_link_state_OFF:
-    link.initiallyOn = 0;
-    break;
-  default:
-    surf_parse_error("invalid state for link %s", link.id);
-    break;
-  }
-  link.state_trace = tmgr_trace_new_from_file(A_surfxml_link_state___file);
+  link.properties          = current_property_set;
+  link.id                  = A_surfxml_link_id;
+  link.bandwidth           = surf_parse_get_bandwidth(A_surfxml_link_bandwidth, "bandwidth of link", link.id);
+  link.bandwidth_trace     = tmgr_trace_new_from_file(A_surfxml_link_bandwidth___file);
+  link.latency             = surf_parse_get_time(A_surfxml_link_latency, "latency of link", link.id);
+  link.latency_trace       = tmgr_trace_new_from_file(A_surfxml_link_latency___file);
+  link.state_trace         = tmgr_trace_new_from_file(A_surfxml_link_state___file);
 
   switch (A_surfxml_link_sharing___policy) {
   case A_surfxml_link_sharing___policy_SHARED:
@@ -712,7 +690,6 @@ void ETag_surfxml_backbone(void){
   link.id = A_surfxml_backbone_id;
   link.bandwidth = surf_parse_get_bandwidth(A_surfxml_backbone_bandwidth, "bandwidth of backbone", link.id);
   link.latency = surf_parse_get_time(A_surfxml_backbone_latency, "latency of backbone", link.id);
-  link.initiallyOn = 1;
   link.policy = SURF_LINK_SHARED;
 
   sg_platf_new_link(&link);
index 95bda63..46d7509 100644 (file)
@@ -171,7 +171,6 @@ XBT_INLINE void xbt_dict_set_ext(xbt_dict_t dict,
   unsigned int hash_code = xbt_str_hash_ext(key, key_len);
 
   xbt_dictelm_t current, previous = NULL;
-  xbt_assert(dict);
 
   XBT_CDEBUG(xbt_dict,
              "ADD %.*s hash = %u, size = %d, & = %u", key_len, key, hash_code,
@@ -237,17 +236,11 @@ XBT_INLINE void xbt_dict_set(xbt_dict_t dict,
  *
  * Search the given \a key. Throws not_found_error when not found.
  */
-XBT_INLINE void *xbt_dict_get_ext(xbt_dict_t dict, const char *key,
-                                  int key_len)
+XBT_INLINE void *xbt_dict_get_ext(xbt_dict_t dict, const char *key, int key_len)
 {
-
-
   unsigned int hash_code = xbt_str_hash_ext(key, key_len);
-  xbt_dictelm_t current;
+  xbt_dictelm_t current = dict->table[hash_code & dict->table_size];
 
-  xbt_assert(dict);
-
-  current = dict->table[hash_code & dict->table_size];
   while (current != NULL &&
          (hash_code != current->hash_code || key_len != current->key_len
           || memcmp(key, current->key, key_len))) {
@@ -260,19 +253,12 @@ XBT_INLINE void *xbt_dict_get_ext(xbt_dict_t dict, const char *key,
   return current->content;
 }
 
-/**
- * \brief like xbt_dict_get_ext(), but returning NULL when not found
- */
-void *xbt_dict_get_or_null_ext(xbt_dict_t dict, const char *key,
-                               int key_len)
+/** @brief like xbt_dict_get_ext(), but returning NULL when not found */
+void *xbt_dict_get_or_null_ext(xbt_dict_t dict, const char *key, int key_len)
 {
-
   unsigned int hash_code = xbt_str_hash_ext(key, key_len);
-  xbt_dictelm_t current;
-
-  xbt_assert(dict);
+  xbt_dictelm_t current = dict->table[hash_code & dict->table_size];
 
-  current = dict->table[hash_code & dict->table_size];
   while (current != NULL &&
          (hash_code != current->hash_code || key_len != current->key_len
           || memcmp(key, current->key, key_len))) {
@@ -292,12 +278,8 @@ void *xbt_dict_get_or_null_ext(xbt_dict_t dict, const char *key,
  */
 char *xbt_dict_get_key(xbt_dict_t dict, const void *data)
 {
-  int i;
-  xbt_dictelm_t current;
-
-
-  for (i = 0; i <= dict->table_size; i++) {
-    current = dict->table[i];
+  for (int i = 0; i <= dict->table_size; i++) {
+    xbt_dictelm_t current = dict->table[i];
     while (current != NULL) {
       if (current->content == data)
         return current->key;
@@ -308,10 +290,7 @@ char *xbt_dict_get_key(xbt_dict_t dict, const void *data)
   return NULL;
 }
 
-/**
- * @brief retrieve the key associated to that xbt_dictelm_t.
- *
- */
+/** @brief retrieve the key associated to that xbt_dictelm_t. */
 char *xbt_dict_get_elm_key(xbt_dictelm_t elm)
 {
   return elm->key;
@@ -371,11 +350,8 @@ XBT_INLINE void *xbt_dict_get_or_null(xbt_dict_t dict, const char *key)
 XBT_INLINE xbt_dictelm_t xbt_dict_get_elm_or_null(xbt_dict_t dict, const char *key)
 {
   unsigned int hash_code = xbt_str_hash(key);
-  xbt_dictelm_t current;
-
-  xbt_assert(dict);
+  xbt_dictelm_t current = dict->table[hash_code & dict->table_size];
 
-  current = dict->table[hash_code & dict->table_size];
   while (current != NULL &&
          (hash_code != current->hash_code || strcmp(key, current->key)))
     current = current->next;
@@ -392,18 +368,12 @@ XBT_INLINE xbt_dictelm_t xbt_dict_get_elm_or_null(xbt_dict_t dict, const char *k
  *
  * Remove the entry associated with the given \a key (throws not_found)
  */
-XBT_INLINE void xbt_dict_remove_ext(xbt_dict_t dict, const char *key,
-                                    int key_len)
+XBT_INLINE void xbt_dict_remove_ext(xbt_dict_t dict, const char *key, int key_len)
 {
-
-
   unsigned int hash_code = xbt_str_hash_ext(key, key_len);
-  xbt_dictelm_t current, previous = NULL;
+  xbt_dictelm_t previous = NULL;
+  xbt_dictelm_t current = dict->table[hash_code & dict->table_size];
 
-  xbt_assert(dict);
-
-  //  fprintf(stderr,"RM %.*s hash = %d, size = %d, & = %d\n",key_len,key,hash_code, dict->table_size, hash_code & dict->table_size);
-  current = dict->table[hash_code & dict->table_size];
   while (current != NULL &&
          (hash_code != current->hash_code || key_len != current->key_len
           || strncmp(key, current->key, key_len))) {
@@ -479,23 +449,15 @@ XBT_INLINE void xbt_dicti_remove(xbt_dict_t dict, uintptr_t key)
 }
 #endif
 
-/**
- * \brief Remove all data from the dict
- * \param dict the dict
- */
+/** @brief Remove all data from the dict */
 void xbt_dict_reset(xbt_dict_t dict)
 {
-
-  int i;
-  xbt_dictelm_t current, previous = NULL;
-
-  xbt_assert(dict);
-
   if (dict->count == 0)
     return;
 
-  for (i = 0; i <= dict->table_size; i++) {
-    current = dict->table[i];
+  for (int i = 0; i <= dict->table_size; i++) {
+    xbt_dictelm_t previous = NULL;
+    xbt_dictelm_t current = dict->table[i];
     while (current != NULL) {
       previous = current;
       current = current->next;
@@ -514,8 +476,6 @@ void xbt_dict_reset(xbt_dict_t dict)
  */
 XBT_INLINE int xbt_dict_length(xbt_dict_t dict)
 {
-  xbt_assert(dict);
-
   return dict->count;
 }
 
@@ -573,57 +533,57 @@ xbt_dynar_t all_sizes = NULL;
 /** @brief shows some debugging info about the bucklet repartition */
 void xbt_dict_dump_sizes(xbt_dict_t dict)
 {
-
-  int i;
   unsigned int count;
   unsigned int size;
-  xbt_dictelm_t element;
+
+  printf("Dict %p: %d bucklets, %d used cells (of %d) ", dict, dict->count, dict->fill, dict->table_size);
+
+  if (!dict) {
+    printf("\n");
+    return;
+  }
   xbt_dynar_t sizes = xbt_dynar_new(sizeof(int), NULL);
 
-  printf("Dict %p: %d bucklets, %d used cells (of %d) ", dict, dict->count,
-         dict->fill, dict->table_size);
-  if (dict != NULL) {
-    for (i = 0; i < dict->table_size; i++) {
-      element = dict->table[i];
-      size = 0;
-      if (element) {
-        while (element != NULL) {
-          size++;
-          element = element->next;
-        }
-      }
-      if (xbt_dynar_length(sizes) <= size) {
-        int prevsize = 1;
-        xbt_dynar_set(sizes, size, &prevsize);
-      } else {
-        int prevsize;
-        xbt_dynar_get_cpy(sizes, size, &prevsize);
-        prevsize++;
-        xbt_dynar_set(sizes, size, &prevsize);
+  for (int i = 0; i < dict->table_size; i++) {
+    xbt_dictelm_t element = dict->table[i];
+    size = 0;
+    if (element) {
+      while (element != NULL) {
+        size++;
+        element = element->next;
       }
     }
-    if (!all_sizes)
-      all_sizes = xbt_dynar_new(sizeof(int), NULL);
-
-    xbt_dynar_foreach(sizes, count, size) {
-      /* Copy values of this one into all_sizes */
-      int prevcount;
-      if (xbt_dynar_length(all_sizes) <= count) {
-        prevcount = size;
-        xbt_dynar_set(all_sizes, count, &prevcount);
-      } else {
-        xbt_dynar_get_cpy(all_sizes, count, &prevcount);
-        prevcount += size;
-        xbt_dynar_set(all_sizes, count, &prevcount);
-      }
-
-      /* Report current sizes */
-      if (count == 0)
-        continue;
-      if (size == 0)
-        continue;
-      printf("%uelm x %u cells; ", count, size);
+    if (xbt_dynar_length(sizes) <= size) {
+      int prevsize = 1;
+      xbt_dynar_set(sizes, size, &prevsize);
+    } else {
+      int prevsize;
+      xbt_dynar_get_cpy(sizes, size, &prevsize);
+      prevsize++;
+      xbt_dynar_set(sizes, size, &prevsize);
+    }
+  }
+  if (!all_sizes)
+    all_sizes = xbt_dynar_new(sizeof(int), NULL);
+
+  xbt_dynar_foreach(sizes, count, size) {
+    /* Copy values of this one into all_sizes */
+    int prevcount;
+    if (xbt_dynar_length(all_sizes) <= count) {
+      prevcount = size;
+      xbt_dynar_set(all_sizes, count, &prevcount);
+    } else {
+      xbt_dynar_get_cpy(all_sizes, count, &prevcount);
+      prevcount += size;
+      xbt_dynar_set(all_sizes, count, &prevcount);
     }
+
+    /* Report current sizes */
+    if (count == 0)
+      continue;
+    if (size == 0)
+      continue;
+    printf("%uelm x %u cells; ", count, size);
   }
   printf("\n");
   xbt_dynar_free(&sizes);
@@ -682,7 +642,6 @@ void xbt_dict_postexit(void)
 #include "xbt/ex.h"
 #include "src/portable.h"
 
-#define PRINTF_STR(a) (a)?:"(null)"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(xbt_dict);
 
@@ -693,8 +652,7 @@ static void debuged_add_ext(xbt_dict_t head, const char *key,
 {
   char *data = xbt_strdup(data_to_fill);
 
-  xbt_test_log("Add %s under %s", PRINTF_STR(data_to_fill),
-                PRINTF_STR(key));
+  xbt_test_log("Add %s under %s", data_to_fill, key);
 
   xbt_dict_set(head, key, data, free_f);
   if (XBT_LOG_ISENABLED(xbt_dict, xbt_log_priority_debug)) {
@@ -757,7 +715,7 @@ static void search(xbt_dict_t head, const char *key)
 static void debuged_remove(xbt_dict_t head, const char *key)
 {
 
-  xbt_test_add("Remove '%s'", PRINTF_STR(key));
+  xbt_test_add("Remove '%s'", key);
   xbt_dict_remove(head, key);
   /*  xbt_dict_dump(head,(void (*)(void*))&printf); */
 }
@@ -772,10 +730,9 @@ static void traverse(xbt_dict_t head)
 
   xbt_dict_foreach(head, cursor, key, data) {
     if (!key || !data || strcmp(key, data)) {
-      xbt_test_log("Seen #%d:  %s->%s", ++i, PRINTF_STR(key),
-                    PRINTF_STR(data));
+      xbt_test_log("Seen #%d:  %s->%s", ++i, key, data);
     } else {
-      xbt_test_log("Seen #%d:  %s", ++i, PRINTF_STR(key));
+      xbt_test_log("Seen #%d:  %s", ++i, key);
     }
     xbt_test_assert(!data || !strcmp(key, data),
                      "Key(%s) != value(%s). Aborting", key, data);
@@ -1052,9 +1009,9 @@ XBT_TEST_UNIT("nulldata", test_dict_nulldata, "NULL data management")
 
     xbt_dict_foreach(head, cursor, key, data) {
       if (!key || !data || strcmp(key, data)) {
-        xbt_test_log("Seen:  %s->%s", PRINTF_STR(key), PRINTF_STR(data));
+        xbt_test_log("Seen:  %s->%s", key, data);
       } else {
-        xbt_test_log("Seen:  %s", PRINTF_STR(key));
+        xbt_test_log("Seen:  %s", key);
       }
 
       if (!strcmp(key, "null"))
index 47bdc4d..1edc64a 100644 (file)
@@ -29,21 +29,4 @@ typedef struct xbt_fifo {
 #define xbt_fifo_getItemcontent(i) ((i)?(i)->content:NULL)
 #define xbt_fifo_Itemcontent(i) ((i)->content)
 #define xbt_fifo_setItemcontent(i,v) (i->content=v)
-
-
-/* static __inline__ xbt_fifo_item_t xbt_fifo_getFirstitem(xbt_fifo_t l) */
-/* { */
-/*   return l->head; */
-/* } */
-/* static __inline__ xbt_fifo_item_t xbt_fifo_getNextitem(xbt_fifo_item_t i)  */
-/* { */
-/*   if(i) return i->next; */
-/*   return NULL; */
-/* } */
-/* static __inline__ xbt_fifo_item_t xbt_fifo_getPrevitem(xbt_fifo_item_t i) */
-/* { */
-/*   if(i) return i->prev; */
-/*   return NULL; */
-/* } */
-
 #endif                          /* _XBT_FIFO_PRIVATE_H */
index 5e47cf9..ef85280 100644 (file)
@@ -10,7 +10,6 @@
 #include "xbt/log.h"
 #include "xbt/graph.h"
 #include "graph_private.h"
-#include "xbt/graphxml_parse.h"
 #include "xbt/dict.h"
 #include "xbt/heap.h"
 #include "xbt/str.h"
@@ -59,8 +58,7 @@ xbt_node_t xbt_graph_new_node(xbt_graph_t g, void *data)
 }
 
 /** @brief add an edge to the given graph */
-xbt_edge_t xbt_graph_new_edge(xbt_graph_t g,
-                              xbt_node_t src, xbt_node_t dst, void *data)
+xbt_edge_t xbt_graph_new_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst, void *data)
 {
   xbt_edge_t edge = NULL;
 
@@ -81,8 +79,7 @@ xbt_edge_t xbt_graph_new_edge(xbt_graph_t g,
 }
 
 /** @brief Get the edge connecting src and dst */
-xbt_edge_t xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src,
-                              xbt_node_t dst)
+xbt_edge_t xbt_graph_get_edge(xbt_graph_t g, xbt_node_t src, xbt_node_t dst)
 {
   xbt_edge_t edge;
   unsigned int cursor;
@@ -162,92 +159,9 @@ void xbt_graph_free_graph(xbt_graph_t g,
   if (graph_free_function)
     graph_free_function(g->data);
   free(g);
-  xbt_graph_parse_lex_destroy();
 }
 
 
-/** @brief remove the given node from the given graph */
-void xbt_graph_free_node(xbt_graph_t g, xbt_node_t n,
-                         void_f_pvoid_t node_free_function,
-                         void_f_pvoid_t edge_free_function)
-{
-  unsigned long nbr;
-  unsigned long i;
-  unsigned int cursor = 0;
-  xbt_node_t node = NULL;
-  xbt_edge_t edge = NULL;
-
-  nbr = xbt_dynar_length(g->edges);
-  cursor = 0;
-  for (i = 0; i < nbr; i++) {
-    xbt_dynar_get_cpy(g->edges, cursor, &edge);
-
-    if ((edge->dst == n) || (edge->src == n)) {
-      xbt_graph_free_edge(g, edge, edge_free_function);
-    } else
-      cursor++;
-  }
-
-  if ((node_free_function) && (n->data))
-    node_free_function(n->data);
-
-  cursor = 0;
-  xbt_dynar_foreach(g->nodes, cursor, node)
-      if (node == n)
-    xbt_dynar_cursor_rm(g->nodes, &cursor);
-
-  xbt_dynar_free(&(n->in));
-  xbt_dynar_free(&(n->out));
-
-  free(n);
-
-  return;
-}
-
-/** @brief remove the given edge from the given graph */
-void xbt_graph_free_edge(xbt_graph_t g, xbt_edge_t e,
-                         void_f_pvoid_t free_function)
-{
-  int idx;
-  unsigned int cursor = 0;
-  xbt_edge_t edge = NULL;
-
-  if ((free_function) && (e->data))
-    free_function(e->data);
-
-  xbt_dynar_foreach(g->edges, cursor, edge) {
-    if (edge == e) {
-      if (g->directed) {
-        idx = __xbt_find_in_dynar(edge->dst->in, edge);
-        xbt_dynar_remove_at(edge->dst->in, idx, NULL);
-      } else {                  /* only the out field is used */
-        idx = __xbt_find_in_dynar(edge->dst->out, edge);
-        xbt_dynar_remove_at(edge->dst->out, idx, NULL);
-      }
-
-      idx = __xbt_find_in_dynar(edge->src->out, edge);
-      xbt_dynar_remove_at(edge->src->out, idx, NULL);
-
-      xbt_dynar_cursor_rm(g->edges, &cursor);
-      free(edge);
-      break;
-    }
-  }
-}
-
-int __xbt_find_in_dynar(xbt_dynar_t dynar, void *p)
-{
-
-  unsigned int cursor = 0;
-  void *tmp = NULL;
-
-  xbt_dynar_foreach(dynar, cursor, tmp) {
-    if (tmp == p)
-      return cursor;
-  }
-  return -1;
-}
-
 /** @brief Retrieve the graph's nodes as a dynar */
 xbt_dynar_t xbt_graph_get_nodes(xbt_graph_t g)
 {
@@ -291,47 +205,6 @@ double xbt_graph_edge_get_length(xbt_edge_t edge)
   return edge->length;
 }
 
-
-/** @brief construct the adjacency matrix corresponding to the given graph
- *
- * The weights are the distances between nodes
- */
-double *xbt_graph_get_length_matrix(xbt_graph_t g)
-{
-  unsigned int cursor = 0;
-  unsigned int in_cursor = 0;
-  unsigned long idx, i;
-  unsigned long n;
-  xbt_edge_t edge = NULL;
-  xbt_node_t node = NULL;
-  double *d = NULL;
-
-# define D(u,v) d[(u)*n+(v)]
-  n = xbt_dynar_length(g->nodes);
-
-  d = (double *) xbt_new0(double, n * n);
-
-  for (i = 0; i < n * n; i++) {
-    d[i] = -1.0;
-  }
-
-  xbt_dynar_foreach(g->nodes, cursor, node) {
-    D(cursor, cursor) = 0;
-
-    xbt_dynar_foreach(node->out, in_cursor, edge) {
-      if (edge->dst == node)
-        idx = __xbt_find_in_dynar(g->nodes, edge->src);
-      else                      /*case of  undirected graphs */
-        idx = __xbt_find_in_dynar(g->nodes, edge->dst);
-      D(cursor, idx) = edge->length;
-    }
-  }
-
-# undef D
-
-  return d;
-}
-
 /** @brief Floyd-Warshall algorithm for shortest path finding
  *
  * From wikipedia:
@@ -379,264 +252,10 @@ void xbt_floyd_algorithm(xbt_graph_t g, double *adj, double *d,
       }
     }
   }
-
-
-
 # undef P
 # undef D
 }
 
-/** @brief computes all-pairs shortest paths */
-xbt_node_t *xbt_graph_shortest_paths(xbt_graph_t g)
-{
-  xbt_node_t *p;
-  xbt_node_t *r;
-  unsigned long i, j, k;
-  unsigned long n;
-
-  double *adj = NULL;
-  double *d = NULL;
-
-# define P(u,v) p[(u)*n+(v)]
-# define R(u,v) r[(u)*n+(v)]
-
-  n = xbt_dynar_length(g->nodes);
-  adj = xbt_graph_get_length_matrix(g);
-  d = xbt_new0(double, n * n);
-  p = xbt_new0(xbt_node_t, n * n);
-  r = xbt_new0(xbt_node_t, n * n);
-
-  xbt_floyd_algorithm(g, adj, d, p);
-
-  for (i = 0; i < n; i++) {
-    for (j = 0; j < n; j++) {
-      k = j;
-
-      while ((P(i, k)) && (__xbt_find_in_dynar(g->nodes, P(i, k)) != i)) {
-        k = __xbt_find_in_dynar(g->nodes, P(i, k));
-      }
-
-      if (P(i, j)) {
-        R(i, j) = *((xbt_node_t *) xbt_dynar_get_ptr(g->nodes, k));
-      }
-    }
-  }
-# undef R
-# undef P
-
-  free(d);
-  free(p);
-  free(adj);
-  return r;
-}
-
-/** @brief Extract a spanning tree of the given graph */
-xbt_edge_t *xbt_graph_spanning_tree_prim(xbt_graph_t g)
-{
-  int tree_size = 0;
-  int tree_size_max = xbt_dynar_length(g->nodes) - 1;
-  xbt_edge_t *tree = xbt_new0(xbt_edge_t, tree_size_max);
-  xbt_edge_t e, edge;
-  xbt_node_t node = NULL;
-  xbt_dynar_t edge_list = NULL;
-  xbt_heap_t heap = xbt_heap_new(10, NULL);
-  unsigned int cursor;
-
-  xbt_assert(!(g->directed),
-              "Spanning trees do not make sense on directed graphs");
-
-  xbt_dynar_foreach(g->nodes, cursor, node) {
-    node->xbtdata = NULL;
-  }
-
-  node = xbt_dynar_getfirst_as(g->nodes, xbt_node_t);
-  node->xbtdata = (void *) 1;
-  edge_list = node->out;
-  xbt_dynar_foreach(edge_list, cursor, e)
-      xbt_heap_push(heap, e, -(e->length));
-
-  while ((edge = xbt_heap_pop(heap))) {
-    if ((edge->src->xbtdata) && (edge->dst->xbtdata))
-      continue;
-    tree[tree_size++] = edge;
-    if (!(edge->src->xbtdata)) {
-      edge->src->xbtdata = (void *) 1;
-      edge_list = edge->src->out;
-      xbt_dynar_foreach(edge_list, cursor, e) {
-        xbt_heap_push(heap, e, -(e->length));
-      }
-    } else {
-      edge->dst->xbtdata = (void *) 1;
-      edge_list = edge->dst->out;
-      xbt_dynar_foreach(edge_list, cursor, e) {
-        xbt_heap_push(heap, e, -(e->length));
-      }
-    }
-    if (tree_size == tree_size_max)
-      break;
-  }
-
-  xbt_heap_free(heap);
-
-  return tree;
-}
-
-/** @brief Topological sort on the given graph
- *
- *  From wikipedia:
- *
- * In graph theory, a topological sort of a directed acyclic graph (DAG) is
- * a linear ordering of its nodes which is compatible with the partial
- * order R induced on the nodes where x comes before y (xRy) if there's a
- * directed path from x to y in the DAG. An equivalent definition is that
- * each node comes before all nodes to which it has edges. Every DAG has at
- * least one topological sort, and may have many.
- */
-xbt_node_t *xbt_graph_topo_sort(xbt_graph_t g)
-{
-
-  xbt_node_t *sorted;
-  unsigned int cursor;
-  int idx;
-  xbt_node_t node;
-  unsigned long n;
-
-  n = xbt_dynar_length(g->nodes);
-  idx = n - 1;
-
-  sorted = xbt_malloc(n * sizeof(xbt_node_t));
-
-  xbt_dynar_foreach(g->nodes, cursor, node)
-      node->xbtdata = xbt_new0(int, 1);
-
-  xbt_dynar_foreach(g->nodes, cursor, node)
-      xbt_graph_depth_visit(g, node, sorted, &idx);
-
-  xbt_dynar_foreach(g->nodes, cursor, node) {
-    free(node->xbtdata);
-    node->xbtdata = NULL;
-  }
-
-  return sorted;
-}
-
-/** @brief First-depth graph traversal */
-void xbt_graph_depth_visit(xbt_graph_t g, xbt_node_t n,
-                           xbt_node_t * sorted, int *idx)
-{
-  unsigned int cursor;
-  xbt_edge_t edge;
-
-  if (*((int *) (n->xbtdata)) == ALREADY_EXPLORED)
-    return;
-  else if (*((int *) (n->xbtdata)) == CURRENTLY_EXPLORING)
-    THROWF(0, 0, "There is a cycle");
-  else {
-    *((int *) (n->xbtdata)) = CURRENTLY_EXPLORING;
-
-    xbt_dynar_foreach(n->out, cursor, edge) {
-      xbt_graph_depth_visit(g, edge->dst, sorted, idx);
-    }
-
-    *((int *) (n->xbtdata)) = ALREADY_EXPLORED;
-    sorted[(*idx)--] = n;
-  }
-}
-
-/********************* Import and Export ******************/
-static xbt_graph_t parsed_graph = NULL;
-static xbt_dict_t parsed_nodes = NULL;
-
-static void *(*__parse_node_label_and_data) (xbt_node_t, const char *,
-                                             const char *) = NULL;
-static void *(*__parse_edge_label_and_data) (xbt_edge_t, const char *,
-                                             const char *) = NULL;
-
-static void __parse_graph_begin(void)
-{
-  XBT_DEBUG("<graph>");
-  if (A_graphxml_graph_isDirected == A_graphxml_graph_isDirected_true)
-    parsed_graph = xbt_graph_new_graph(1, NULL);
-  else
-    parsed_graph = xbt_graph_new_graph(0, NULL);
-
-  parsed_nodes = xbt_dict_new_homogeneous(NULL);
-}
-
-static void __parse_graph_end(void)
-{
-  xbt_dict_free(&parsed_nodes);
-  XBT_DEBUG("</graph>");
-}
-
-static void __parse_node(void)
-{
-  xbt_node_t node = xbt_graph_new_node(parsed_graph, NULL);
-
-  XBT_DEBUG("<node name=\"%s\"/>", A_graphxml_node_name);
-  if (__parse_node_label_and_data)
-    node->data = __parse_node_label_and_data(node, A_graphxml_node_label,
-                                             A_graphxml_node_data);
-  node->position_x = xbt_graph_parse_get_double(A_graphxml_node_position___x);
-  node->position_y = xbt_graph_parse_get_double(A_graphxml_node_position___y);
-
-  xbt_dict_set(parsed_nodes, A_graphxml_node_name, (void *) node, NULL);
-}
-
-static void __parse_edge(void)
-{
-  xbt_edge_t edge = xbt_graph_new_edge(parsed_graph,
-                                       xbt_dict_get(parsed_nodes,
-                                                    A_graphxml_edge_source),
-                                       xbt_dict_get(parsed_nodes,
-                                                    A_graphxml_edge_target),
-                                       NULL);
-
-  if (__parse_edge_label_and_data)
-    edge->data = __parse_edge_label_and_data(edge, A_graphxml_edge_label,
-                                             A_graphxml_edge_data);
-
-  edge->length = xbt_graph_parse_get_double(A_graphxml_edge_length);
-
-  XBT_DEBUG("<edge  source=\"%s\" target=\"%s\" length=\"%f\"/>",
-         (char *) (edge->src)->data,
-         (char *) (edge->dst)->data, xbt_graph_edge_get_length(edge));
-}
-
-/** @brief Import a graph from a file following the GraphXML format */
-xbt_graph_t xbt_graph_read(const char *filename,
-                           void *(*node_label_and_data) (xbt_node_t,
-                                                         const char *,
-                                                         const char *),
-                           void *(*edge_label_and_data) (xbt_edge_t,
-                                                         const char *,
-                                                         const char *))
-{
-
-  xbt_graph_t graph = NULL;
-
-  __parse_node_label_and_data = node_label_and_data;
-  __parse_edge_label_and_data = edge_label_and_data;
-
-  xbt_graph_parse_reset_parser();
-
-  STag_graphxml_graph_fun = __parse_graph_begin;
-  ETag_graphxml_graph_fun = __parse_graph_end;
-  ETag_graphxml_node_fun = __parse_node;
-  ETag_graphxml_edge_fun = __parse_edge;
-
-  xbt_graph_parse_open(filename);
-  XBT_ATTRIB_UNUSED int res;
-  res = xbt_graph_parse();
-  xbt_assert(!res, "Parse error in %s", filename);
-  xbt_graph_parse_close();
-
-  graph = parsed_graph;
-  parsed_graph = NULL;
-
-  return graph;
-}
-
 /** @brief Export the given graph in the GraphViz formatting for visualization */
 void xbt_graph_export_graphviz(xbt_graph_t g, const char *filename,
                                const char *(node_name) (xbt_node_t),
@@ -694,154 +313,3 @@ void xbt_graph_export_graphviz(xbt_graph_t g, const char *filename,
   fprintf(file, "}\n");
   fclose(file);
 }
-
-/** @brief Export the given graph in the GraphXML format */
-void xbt_graph_export_graphxml(xbt_graph_t g, const char *filename,
-                               const char *(node_name) (xbt_node_t),
-                               const char *(edge_name) (xbt_edge_t),
-                               const char *(node_data_print) (void *),
-                               const char *(edge_data_print) (void *))
-{
-  unsigned int cursor = 0;
-  xbt_node_t node = NULL;
-  xbt_edge_t edge = NULL;
-  FILE *file = NULL;
-  const char *name = NULL;
-
-  file = fopen(filename, "w");
-  xbt_assert(file, "Failed to open %s \n", filename);
-
-  fprintf(file, "<?xml version='1.0'?>\n");
-  fprintf(file, "<!DOCTYPE graph SYSTEM \"graphxml.dtd\">\n");
-  if (g->directed)
-    fprintf(file, "<graph isDirected=\"true\">\n");
-  else
-    fprintf(file, "<graph isDirected=\"false\">\n");
-  xbt_dynar_foreach(g->nodes, cursor, node) {
-    fprintf(file, "  <node name=\"%p\" ", node);
-    if ((node_name) && ((name = node_name(node))))
-      fprintf(file, "label=\"%s\" ", name);
-    if ((node_data_print) && ((name = node_data_print(node->data))))
-      fprintf(file, "data=\"%s\" ", name);
-    fprintf(file, "/>\n");
-  }
-  xbt_dynar_foreach(g->edges, cursor, edge) {
-    fprintf(file, "  <edge source=\"%p\" target =\"%p\" ",
-            edge->src, edge->dst);
-    if ((edge_name) && ((name = edge_name(edge))))
-      fprintf(file, "label=\"%s\" ", name);
-    if (edge->length >= 0.0)
-      fprintf(file, "length=\"%g\" ", edge->length);
-    if ((edge_data_print) && ((name = edge_data_print(edge->data))))
-      fprintf(file, "data=\"%s\" ", name);
-    fprintf(file, "/>\n");
-  }
-  fprintf(file, "</graph>\n");
-  fclose(file);
-}
-
-/** @brief Load a graph from a file (in the SimGrid Graph format) */
-xbt_graph_t xbt_graph_load (const char *filename)
-{
-  FILE *file = NULL;
-  ssize_t read;
-  file = fopen (filename, "r");
-  xbt_assert(file, "Failed to open %s \n", filename);
-
-  xbt_dict_t nodes_dict = xbt_dict_new_homogeneous(NULL);
-  xbt_graph_t ret = xbt_graph_new_graph (0, NULL);
-
-  //read the number of nodes
-  size_t size;
-  char *nnodes_str = NULL;
-  read = xbt_getline (&nnodes_str, &size, file);
-  if (read == -1)
-    THROWF(system_error, 0, "xbt_getline failed to read the number of nodes (errno = %d)", errno);
-  int i, nnodes = atoi (nnodes_str);
-  free (nnodes_str);
-
-  //read all nodes
-  for (i = 0; i < nnodes; i++){
-    char *node_str = NULL;
-    read = xbt_getline (&node_str, &size, file);
-    if (read == -1)
-      THROWF(system_error, 0, "xbt_getline failed to read all nodes (errno = %d)", errno);
-    xbt_node_t n;
-    char *name = xbt_strdup (node_str);
-    xbt_str_subst (name, '\n', '\0', 0);
-    n = xbt_graph_new_node (ret, name);
-    xbt_dict_set (nodes_dict, name, n, NULL);
-    free (node_str);
-  }
-
-  //read the number of edges
-  char *nedges_str = NULL;
-  read = xbt_getline (&nedges_str, &size, file);
-  if (read == -1)
-    THROWF(system_error, 0, "xbt_getline failed to read the number of edges (errno = %d)", errno);
-  int nedges = atoi (nedges_str);
-  free (nedges_str);
-
-  //read all edges
-  for (i = 0; i < nedges; i++){
-    char *edge_str = NULL, edge_id[200], node_source[200], node_target[200];
-    read = xbt_getline (&edge_str, &size, file);
-    if (read == -1)
-      THROWF(system_error, 0, "xbt_getline failed to read all edges (errno = %d)", errno);
-    sscanf (edge_str, "%s %s %s", edge_id, node_source, node_target);
-    free (edge_str);
-    xbt_str_subst (edge_id, '\n', '\0', 0);
-    xbt_str_subst (node_source, '\n', '\0', 0);
-    xbt_str_subst (node_target, '\n', '\0', 0);
-
-    xbt_node_t source = xbt_dict_get (nodes_dict, node_source);
-    xbt_node_t target = xbt_dict_get (nodes_dict, node_target);
-    xbt_graph_new_edge (ret, source, target, xbt_strdup(edge_id));
-  }
-  xbt_dict_free (&nodes_dict);
-  return ret;
-}
-
-/** @brief Save a graph from a file (in the SimGrid Graph format) */
-void xbt_graph_save (xbt_graph_t span,
-                     const char *filename,
-                     const char *(nname) (xbt_node_t),
-                     const char *(ename) (xbt_edge_t))
-{
-  FILE *file = NULL;
-  file = fopen(filename, "w");
-  xbt_assert(file, "Failed to open %s \n", filename);
-
-  xbt_dynar_t nodes = xbt_graph_get_nodes (span);
-  xbt_dynar_t edges = xbt_graph_get_edges (span);
-  unsigned int cpt;
-  xbt_node_t node;
-  fprintf (file, "%lu\n", xbt_dynar_length (nodes));
-  xbt_dynar_foreach (nodes, cpt, node) {
-    if (nname){
-      fprintf (file, "%s\n", nname(node));
-    }else{
-      fprintf (file, "%p\n", node);
-    }
-  }
-  fprintf (file, "%lu\n", xbt_dynar_length (edges));
-  xbt_edge_t edge;
-  xbt_dynar_foreach (edges, cpt, edge) {
-    xbt_node_t source = xbt_graph_edge_get_source (edge);
-    xbt_node_t target = xbt_graph_edge_get_target (edge);
-    if (ename){
-      if (nname){
-        fprintf (file, "%s %s %s\n", ename(edge), nname(source), nname(target));
-      }else{
-        fprintf (file, "%s %p %p\n", ename(edge), source, target);
-      }
-    }else{
-      if (nname){
-        fprintf (file, "%p %s %s\n", edge, nname(source), nname(target));
-      }else{
-        fprintf (file, "%p %p %p\n", edge, source, target);
-      }
-    }
-  }
-  fclose (file);
-}
index aa85f24..3fc5791 100644 (file)
 #include "xbt/dynar.h"
 #include "xbt/graph.h"
 
-#define NOT_EXPLORED 0
-#define CURRENTLY_EXPLORING 1
-#define ALREADY_EXPLORED 2
-
-XBT_PRIVATE void xbt_floyd_algorithm(xbt_graph_t g, double *adj, double *d,
-                         xbt_node_t * p);
-XBT_PRIVATE void xbt_graph_depth_visit(xbt_graph_t g, xbt_node_t n,
-                           xbt_node_t * sorted, int *idx);
+XBT_PRIVATE void xbt_floyd_algorithm(xbt_graph_t g, double *adj, double *d, xbt_node_t * p);
 
 #endif                          /* _XBT_GRAPH_PRIVATE_H */
diff --git a/src/xbt/graphxml.c b/src/xbt/graphxml.c
deleted file mode 100644 (file)
index 3a9aa36..0000000
+++ /dev/null
@@ -1,3379 +0,0 @@
-
-#line 3 "src/xbt/graphxml.c"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define yy_create_buffer xbt_graph_parse__create_buffer
-#define yy_delete_buffer xbt_graph_parse__delete_buffer
-#define yy_flex_debug xbt_graph_parse__flex_debug
-#define yy_init_buffer xbt_graph_parse__init_buffer
-#define yy_flush_buffer xbt_graph_parse__flush_buffer
-#define yy_load_buffer_state xbt_graph_parse__load_buffer_state
-#define yy_switch_to_buffer xbt_graph_parse__switch_to_buffer
-#define yyin xbt_graph_parse_in
-#define yyleng xbt_graph_parse_leng
-#define yylex xbt_graph_parse_lex
-#define yylineno xbt_graph_parse_lineno
-#define yyout xbt_graph_parse_out
-#define yyrestart xbt_graph_parse_restart
-#define yytext xbt_graph_parse_text
-#define yywrap xbt_graph_parse_wrap
-#define yyalloc xbt_graph_parse_alloc
-#define yyrealloc xbt_graph_parse_realloc
-#define yyfree xbt_graph_parse_free
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 39
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! C99 */
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else  /* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif /* defined (__STDC__) */
-#endif /* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE xbt_graph_parse_restart(xbt_graph_parse_in  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
-#define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-extern yy_size_t xbt_graph_parse_leng;
-
-extern FILE *xbt_graph_parse_in, *xbt_graph_parse_out;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
-     *       access to the local variable yy_act. Since yyless() is a macro, it would break
-     *       existing scanners that call yyless() from OUTSIDE xbt_graph_parse_lex. 
-     *       One obvious solution it to make yy_act a global. I tried that, and saw
-     *       a 5% performance hit in a non-xbt_graph_parse_lineno scanner, because yy_act is
-     *       normally declared as a variable-- so it is not worth it.
-     */
-    #define  YY_LESS_LINENO(n) \
-            do { \
-                unsigned int yyl;\
-                for ( yyl = n; yyl < xbt_graph_parse_leng; ++yyl )\
-                    if ( xbt_graph_parse_text[yyl] == '\n' )\
-                        --xbt_graph_parse_lineno;\
-            }while(0)
-    #define YY_LINENO_REWIND_TO(dst) \
-            do {\
-                const char *p;\
-                for ( p = yy_cp-1; p >= (dst); --p)\
-                    if ( *p == '\n' )\
-                        --xbt_graph_parse_lineno;\
-            }while(0)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-       do \
-               { \
-               /* Undo effects of setting up xbt_graph_parse_text. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-               *yy_cp = (yy_hold_char); \
-               YY_RESTORE_YY_MORE_OFFSET \
-               (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-               YY_DO_BEFORE_ACTION; /* set up xbt_graph_parse_text again */ \
-               } \
-       while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-       {
-       FILE *yy_input_file;
-
-       char *yy_ch_buf;                /* input buffer */
-       char *yy_buf_pos;               /* current position in input buffer */
-
-       /* Size of input buffer in bytes, not including room for EOB
-        * characters.
-        */
-       yy_size_t yy_buf_size;
-
-       /* Number of characters read into yy_ch_buf, not including EOB
-        * characters.
-        */
-       yy_size_t yy_n_chars;
-
-       /* Whether we "own" the buffer - i.e., we know we created it,
-        * and can realloc() it to grow it, and should free() it to
-        * delete it.
-        */
-       int yy_is_our_buffer;
-
-       /* Whether this is an "interactive" input source; if so, and
-        * if we're using stdio for input, then we want to use getc()
-        * instead of fread(), to make sure we stop fetching input after
-        * each newline.
-        */
-       int yy_is_interactive;
-
-       /* Whether we're considered to be at the beginning of a line.
-        * If so, '^' rules will be active on the next match, otherwise
-        * not.
-        */
-       int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-       /* Whether to try to fill the input buffer when we reach the
-        * end of it.
-        */
-       int yy_fill_buffer;
-
-       int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-       /* When an EOF's been seen but there's still some text to process
-        * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-        * shouldn't try reading from the input source any more.  We might
-        * still have a bunch of tokens to match, though, because of
-        * possible backing-up.
-        *
-        * When we actually see the EOF, we change the status to "new"
-        * (via xbt_graph_parse_restart()), so that the user can continue scanning by
-        * just pointing xbt_graph_parse_in at a new input file.
-        */
-#define YY_BUFFER_EOF_PENDING 2
-
-       };
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when xbt_graph_parse_text is formed. */
-static char yy_hold_char;
-static yy_size_t yy_n_chars;           /* number of characters read into yy_ch_buf */
-yy_size_t xbt_graph_parse_leng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0;                /* whether we need to initialize */
-static int yy_start = 0;       /* start state number */
-
-/* Flag which is used to allow xbt_graph_parse_wrap()'s to do buffer switches
- * instead of setting up a fresh xbt_graph_parse_in.  A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void xbt_graph_parse_restart (FILE *input_file  );
-void xbt_graph_parse__switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE xbt_graph_parse__create_buffer (FILE *file,int size  );
-void xbt_graph_parse__delete_buffer (YY_BUFFER_STATE b  );
-void xbt_graph_parse__flush_buffer (YY_BUFFER_STATE b  );
-void xbt_graph_parse_push_buffer_state (YY_BUFFER_STATE new_buffer  );
-void xbt_graph_parse_pop_buffer_state (void );
-
-static void xbt_graph_parse_ensure_buffer_stack (void );
-static void xbt_graph_parse__load_buffer_state (void );
-static void xbt_graph_parse__init_buffer (YY_BUFFER_STATE b,FILE *file  );
-
-#define YY_FLUSH_BUFFER xbt_graph_parse__flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE xbt_graph_parse__scan_buffer (char *base,yy_size_t size  );
-YY_BUFFER_STATE xbt_graph_parse__scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE xbt_graph_parse__scan_bytes (yyconst char *bytes,yy_size_t len  );
-
-void *xbt_graph_parse_alloc (yy_size_t  );
-void *xbt_graph_parse_realloc (void *,yy_size_t  );
-void xbt_graph_parse_free (void *  );
-
-#define yy_new_buffer xbt_graph_parse__create_buffer
-
-#define yy_set_interactive(is_interactive) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){ \
-        xbt_graph_parse_ensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
-            xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-       }
-
-#define yy_set_bol(at_bol) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){\
-        xbt_graph_parse_ensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
-            xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-       }
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-#define xbt_graph_parse_wrap() 1
-#define YY_SKIP_YYWRAP
-
-typedef unsigned char YY_CHAR;
-
-FILE *xbt_graph_parse_in = (FILE *) 0, *xbt_graph_parse_out = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int xbt_graph_parse_lineno;
-
-int xbt_graph_parse_lineno = 1;
-
-extern char *xbt_graph_parse_text;
-#define yytext_ptr xbt_graph_parse_text
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[]  );
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up xbt_graph_parse_text.
- */
-#define YY_DO_BEFORE_ACTION \
-       (yytext_ptr) = yy_bp; \
-       xbt_graph_parse_leng = (size_t) (yy_cp - yy_bp); \
-       (yy_hold_char) = *yy_cp; \
-       *yy_cp = '\0'; \
-       (yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 92
-#define YY_END_OF_BUFFER 93
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-       {
-       flex_int32_t yy_verify;
-       flex_int32_t yy_nxt;
-       };
-static yyconst flex_int16_t yy_accept[564] =
-    {   0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       93,   91,   17,   10,   10,   17,   17,   71,   10,   71,
-        5,    6,    5,    8,    9,    8,   87,   79,   80,   88,
-       85,   88,   86,   90,   79,   80,   90,   91,   34,   10,
-       34,   34,   34,   32,   34,   34,   34,   34,   34,   38,
-       10,   38,   91,   47,   10,   47,   47,   47,   45,   47,
-
-       51,   10,   51,   51,   91,   91,   51,   91,   66,   10,
-       66,   66,   66,   64,   66,   66,   66,   66,   70,   10,
-       70,   88,   87,   10,    0,    2,    2,    0,    4,    7,
-       82,   81,    0,    0,    0,    0,    0,    0,    0,   33,
-       35,   35,   35,   35,   35,   35,   35,    0,    0,   46,
-       48,   48,    0,    0,    0,    0,    0,   65,   67,   67,
-       67,   67,   67,    0,    0,    0,    0,    0,    0,    0,
-        3,    0,    0,    0,    0,    0,    0,    0,   89,    0,
-       35,   35,   35,   35,   35,   35,    0,    0,    0,   48,
-        0,    0,    0,    0,    0,    0,   67,   67,   67,   67,
-
-        0,    0,    0,   84,    0,   16,    1,    0,    0,   77,
-        0,    0,    0,   74,   73,    0,    0,   35,   35,   35,
-       35,   35,   35,    0,    0,   37,    0,    0,   48,    0,
-        0,   50,    0,    0,    0,    0,    0,   67,   67,   67,
-       67,    0,    0,   69,    0,    0,    0,    0,   78,   72,
-        0,    0,   19,    0,    0,   35,   35,    0,    0,   35,
-       35,    0,    0,   48,    0,    0,   53,   52,   18,    0,
-        0,   67,    0,    0,   67,    0,    0,    0,    0,    0,
-       12,    0,   75,   76,   19,    0,   21,   20,    0,    0,
-       35,    0,   27,   26,   35,   35,    0,   40,   48,    0,
-
-       39,   53,   52,   18,    0,   55,   54,    0,    0,    0,
-       59,   58,   67,    0,    0,    0,    0,    0,   11,    0,
-       23,   22,    0,    0,    0,    0,    0,    0,    0,   36,
-       40,   48,    0,   39,    0,   57,   56,   67,    0,   68,
-        0,    0,    0,    0,    0,   25,   24,    0,   29,   28,
-        0,   31,   30,   48,    0,   49,   67,    0,    0,    0,
-        0,   48,   67,   83,    0,    0,    0,   48,   67,   67,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       61,   60,    0,   63,   62,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   12,    0,   12,    0,    0,   42,    0,
-       41,    0,    0,    0,    0,    0,    0,    0,   44,   43,
-        0,    0,    0,    0,    0,    0,    0,   11,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   13,    0,    0,   15,
-        0,   14,    0
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    2,    4,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    5,    6,    7,    1,    1,    8,    9,    1,
-        1,    1,    1,    1,   10,   11,   12,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   14,   15,   16,
-       17,   18,   19,    1,   20,   21,   22,   23,   24,   21,
-       14,   14,   14,   14,   14,   14,   25,   14,   26,   27,
-       14,   14,   28,   29,   14,   14,   14,   14,   30,   14,
-       31,    1,   32,    1,   33,    1,   34,   35,   36,   37,
-
-       38,   39,   40,   41,   42,   14,   14,   43,   44,   45,
-       46,   47,   48,   49,   50,   51,   52,   53,   14,   54,
-       55,   14,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-static yyconst flex_int32_t yy_meta[56] =
-    {   0,
-        1,    2,    2,    2,    1,    1,    1,    1,    1,    3,
-        3,    1,    4,    5,    1,    1,    1,    6,    1,    7,
-        7,    7,    7,    7,    5,    5,    5,    5,    5,    5,
-        1,    1,    5,    7,    7,    7,    7,    7,    7,    5,
-        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5,    5
-    } ;
-
-static yyconst flex_int16_t yy_base[594] =
-    {   0,
-        0,    0,    0,    3,    6,    9,   24,   27,   11,   14,
-       15,   17,   29,   38,   45,   52,   59,   61,   67,   70,
-       93,    0,   73,   76,  147,  150,  166,  208,  184,  187,
-      190,  226,  229,  232,  249,  252,  255,  258,  273,  276,
-      279,  282,  297,  300,  316,    0,  370,  373,  375,  377,
-     1585, 1586, 1586,  153,  156,   47,   62, 1586,  303,  244,
-     1586, 1586, 1574, 1586, 1586, 1565, 1586, 1578, 1578,  377,
-     1586, 1586, 1586, 1586, 1576, 1576, 1546,  377, 1586,  306,
-     1559,    0,  268, 1586, 1542,    1, 1541, 1528, 1539, 1586,
-      395,  382,  383, 1586,  401, 1554,    0,  292, 1586, 1521,
-
-     1586,  410,  414,  417,  405,  411,  423,  387, 1586,  435,
-     1552,    0,  422, 1586, 1535, 1534, 1533, 1520, 1586,  444,
-      448, 1560, 1532,  462,   34, 1509, 1586, 1552, 1543, 1586,
-     1586, 1586,  148,   38, 1509, 1508, 1506, 1539, 1519, 1586,
-        0, 1504, 1519, 1508, 1508, 1499, 1501, 1511, 1499, 1586,
-        0, 1524, 1506, 1496, 1498, 1497, 1505, 1586,    0, 1490,
-     1505, 1495, 1488, 1492, 1505, 1517, 1516, 1523,  178, 1488,
-     1586,   75,    0, 1484, 1484, 1514, 1513, 1481, 1586, 1486,
-     1491, 1486, 1483, 1484, 1472, 1480,  467,  470, 1485, 1476,
-      473,  476, 1483, 1479, 1478, 1474, 1479, 1474, 1473, 1468,
-
-      479,  496, 1487, 1586, 1490, 1586, 1586,  177, 1464, 1586,
-     1491, 1490, 1454, 1586, 1586, 1452, 1464,  499, 1458, 1449,
-      502, 1463, 1392,  506,  509, 1586,  518, 1382, 1370,  526,
-      529, 1586,  535, 1369, 1375, 1372, 1365,  546, 1355,  553,
-     1342,  557,  562, 1586,  569, 1288,  466,  574, 1586, 1586,
-     1295, 1293,  579,  582,  592,  586, 1266,  605,  608, 1268,
-     1253,  616, 1262, 1263,  621, 1259,  624,  627,  633,  638,
-      641,  649,  654,  658, 1237,  670, 1245,  505, 1244,  673,
-     1586, 1239, 1586, 1586,  676,  680, 1586, 1586,  690,  693,
-      701,  710, 1586, 1586,  718,  721,  725,  728, 1136,  737,
-
-      742,  745,  748,  754,  757, 1586, 1586,  765,  768,  777,
-     1586, 1586, 1097,  785, 1111,   32,  162,  226, 1586,  788,
-     1586, 1586,  796,  802,  812,  815,  823,  828,  839, 1586,
-      842, 1053,  845,  848,  852, 1586, 1586, 1030,  862, 1586,
-     1004,  219,  252,  220,  865, 1586, 1586,  873, 1586, 1586,
-      881, 1586, 1586,  943,  889, 1586,  938,  929,  892,  248,
-      390,  912,  110, 1586,  895,  204,  249,  898,  901,  917,
-      275,  372,  440,  254,  469,  920,  923,  939,  942,  950,
-      955,  478,  400,  508,  472,  522,  966,  495,  523,  974,
-     1586, 1586,  982, 1586, 1586,  595,  550,  631,  598,  990,
-
-      878,  824,  838,  761,  993,  561,  996,  999, 1002, 1019,
-      750,  723,  694,  684, 1027, 1030, 1036, 1039, 1056, 1064,
-     1082, 1114,  684,  695,  554,  516,  680, 1074,  724, 1132,
-      747,  534, 1150, 1182,  455,  486,  451,  435,  523,  746,
-      587,  767,  228,  389,  582,  305, 1077,  199, 1586,  192,
-     1586,  603,  672,  630,  156,   68,   75, 1106, 1586, 1586,
-      663,  688,  691,    5,  645,  777,  784, 1586, 1145,  810,
-     1174, 1200, 1208, 1213,  744,  820, 1221,  841,  868,  382,
-      804,  871,  888,  821,  860,  667,  778,  898,  913,  789,
-      802,  815,  870,  896,  921,  918,  932,  948,  969,  997,
-
-     1000,  972,  994,  920,  955, 1008, 1009, 1018, 1051, 1093,
-     1152, 1053, 1085, 1161, 1177,  272, 1189, 1190, 1202, 1210,
-     1211, 1035, 1153, 1215, 1217, 1162, 1225,  628,  945, 1226,
-     1227, 1075, 1088, 1109, 1110, 1156, 1222, 1124, 1223, 1224,
-     1229, 1230, 1231, 1232, 1233, 1045, 1043, 1234, 1238, 1249,
-     1254, 1274, 1262, 1255, 1281, 1284, 1586, 1287, 1291, 1586,
-     1294, 1586, 1586, 1312, 1319, 1326, 1333, 1340, 1347, 1354,
-     1361, 1368, 1375, 1382, 1387, 1392, 1397, 1404, 1407, 1410,
-     1413, 1420, 1424, 1430, 1436, 1442, 1449, 1456, 1463, 1470,
-     1477, 1484, 1491
-
-    } ;
-
-static yyconst flex_int16_t yy_def[594] =
-    {   0,
-      564,  564,  565,  565,  565,  565,  566,  566,  567,  567,
-      568,  568,  569,  569,  569,  569,  570,  570,  564,  564,
-      563,   21,  571,  571,  564,  564,  572,  572,  573,  573,
-      573,  573,  564,  564,  573,  573,  564,  564,  573,  573,
-      573,  573,  564,  564,  563,   45,  574,  574,  569,  569,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  575,  563,  563,  575,  575,  575,  575,  575,  563,
-      563,  563,  563,  563,  563,  563,  576,  563,  563,  576,
-
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  577,  563,  563,  577,  577,  577,  577,  563,  563,
-      563,  563,  563,  563,  578,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      575,  575,  575,  575,  575,  575,  575,  579,  563,  563,
-      576,  576,  580,  563,  563,  563,  563,  563,  577,  577,
-      577,  577,  577,  581,  563,  563,  582,  563,  582,  563,
-      563,  563,  583,  563,  563,  563,  563,  563,  563,  563,
-      575,  575,  575,  575,  575,  575,  584,  584,  563,  576,
-      585,  585,  563,  563,  563,  563,  577,  577,  577,  577,
-
-      586,  586,  563,  563,  582,  563,  563,  582,  563,  563,
-      583,  563,  563,  563,  563,  563,  563,  575,  575,  575,
-      575,  575,  575,  563,  584,  563,  584,  563,  576,  563,
-      585,  563,  585,  563,  563,  563,  563,  577,  577,  577,
-      577,  563,  586,  563,  586,  563,  582,  587,  563,  563,
-      563,  563,  563,  563,  563,  575,  575,  563,  563,  575,
-      575,  584,  563,  576,  585,  563,  563,  563,  563,  563,
-      563,  577,  563,  563,  577,  586,  563,  582,  587,  587,
-      563,  587,  563,  563,  563,  563,  563,  563,  563,  563,
-      575,  563,  563,  563,  575,  575,  584,  563,  576,  585,
-
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  577,  586,  563,  582,  587,  587,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  576,  585,  563,  563,  563,  563,  577,  563,  563,
-      563,  582,  587,  587,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  576,  563,  563,  577,  563,  582,  587,
-      587,  576,  577,  563,  582,  587,  587,  576,  577,  577,
-      582,  582,  582,  587,  587,  563,  563,  563,  563,  563,
-      563,  582,  582,  582,  587,  587,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  582,  582,  582,  587,  587,
-
-      563,  563,  563,  563,  582,  582,  582,  587,  587,  587,
-      563,  563,  563,  563,  582,  582,  582,  587,  587,  587,
-      588,  589,  563,  563,  563,  563,  582,  582,  582,  587,
-      590,  591,  588,  589,  563,  563,  563,  563,  582,  582,
-      582,  590,  587,  592,  591,  593,  587,  563,  563,  563,
-      563,  582,  582,  582,  592,  563,  593,  587,  563,  563,
-      582,  582,  582,  563,  582,  582,  582,  563,  582,  582,
-      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
-      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
-      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
-
-      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
-      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
-      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
-      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
-      582,  582,  582,  582,  582,  582,  582,  582,  582,  582,
-      582,  582,  582,  582,  582,  582,  563,  582,  582,  563,
-      582,  563,    0,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563
-
-    } ;
-
-static yyconst flex_int16_t yy_nxt[1642] =
-    {   0,
-      563,   54,   55,   54,   54,   55,   54,   54,   55,   54,
-       54,   55,   54,   62,  563,   56,   62,   65,   56,   65,
-       63,   57,  468,   63,   57,   59,   55,   59,   59,   55,
-       59,   68,   69,   66,  143,   66,   70,   71,  144,   60,
-       68,   69,   60,  168,   72,   70,   71,   68,   69,  206,
-       73,  125,   70,   72,   68,   69,  169,   73,  342,   70,
-       72,   75,   76,   75,   76,  126,  125,   72,   55,   55,
-       55,   55,   55,   55,   91,   55,   91,   91,   55,   91,
-      127,  174,   78,  456,  175,   78,  464,  172,   92,  210,
-       77,   92,   77,   79,   80,   55,   80,   79,   79,   79,
-
-       79,   79,   79,   79,   81,   79,   82,   79,   83,   79,
-       84,   79,   82,   82,   82,   82,   82,   82,   82,   82,
-       82,   82,   82,   79,   79,   82,   82,   82,   82,   85,
-       82,   82,   82,   82,   82,   86,   82,   87,   82,   82,
-       82,   82,   88,   89,   82,   82,   82,   82,   55,   55,
-       55,   55,   55,   55,  124,  124,  124,  124,  124,  124,
-      172,  456,   93,  369,  370,   93,   94,   95,   55,   95,
-       94,   94,   94,   94,   94,   94,   94,   96,   94,  281,
-       94,   98,   94,   99,   94,  102,   55,  102,  102,   55,
-      102,  102,   55,  102,  206,  206,   94,   94,  247,  103,
-
-      460,  173,  103,  208,  459,  104,  343,  100,   94,   95,
-       55,   95,   94,   94,   94,   94,   94,   94,   94,   96,
-       94,  281,   94,   98,   94,   99,   94,  102,   55,  102,
-       55,   55,   55,   55,   55,   55,  206,  281,   94,   94,
-      374,  104,  359,  281,  105,  281,  282,  105,  128,  100,
-      102,   55,  102,  102,   55,  102,   55,   55,   55,   55,
-       55,   55,  127,  344,  103,  281,  281,  103,  361,  281,
-      106,  281,  128,  106,  102,   55,  102,  102,   55,  102,
-      102,   55,  102,  102,   55,  102,  127,  360,  104,  206,
-      375,  104,  206,  366,  107,  385,  128,  107,   55,   55,
-
-       55,   55,   55,   55,  124,  124,  124,  124,  124,  124,
-      127,  382,  108,  456,  522,  108,  109,  110,   55,  110,
-      109,  109,  109,  109,  109,  109,  109,  111,  109,  112,
-      109,  113,  109,  114,  109,  112,  112,  112,  112,  112,
-      112,  112,  112,  112,  112,  112,  109,  109,  112,  112,
-      112,  112,  115,  112,  112,  112,  112,  112,  116,  112,
-      117,  112,  118,  112,  112,  112,  112,  112,  112,  112,
-      112,  120,   55,  120,  120,   55,  120,   68,   69,   68,
-       69,  128,   70,  133,   70,  121,  128,  128,  121,  206,
-      122,  128,  122,  148,  456,  127,  124,  124,  124,  206,
-
-      127,  127,  124,  124,  124,  127,  123,  281,  123,  128,
-      134,  124,  124,  124,  139,  128,  135,  206,  128,  136,
-      383,  128,  149,  127,  137,  153,  128,  128,  153,  127,
-      486,  155,  127,  397,  153,  127,  124,  124,  124,  367,
-      127,  127,  157,  451,  154,  124,  124,  124,  139,  155,
-      154,  139,  128,  154,  139,  156,  154,  206,  155,  164,
-      157,  156,  154,  124,  124,  124,  127,  156,  224,  224,
-      224,  224,  224,  224,  230,  230,  230,  230,  230,  230,
-      242,  242,  242,  206,  226,  384,  281,  226,  450,  281,
-      232,  449,  448,  232,  278,  206,  244,  242,  242,  242,
-
-      254,  254,  254,  258,  258,  258,  227,  224,  224,  224,
-      224,  224,  224,  244,  386,  255,  399,  396,  259,  224,
-      224,  224,  206,  226,  233,  206,  226,  230,  230,  230,
-      230,  230,  230,  401,  316,  226,  230,  230,  230,  281,
-      206,  245,  443,  232,  398,  402,  232,  270,  270,  270,
-      452,  446,  232,  438,  273,  273,  273,  262,  242,  242,
-      242,  403,  271,  242,  242,  242,  400,  206,  265,  274,
-      242,  242,  242,  404,  244,  280,  280,  280,  206,  244,
-      285,  285,  285,  254,  254,  254,  244,  289,  289,  289,
-      443,  281,  282,  286,  286,  286,  406,  287,  255,  446,
-
-      288,  416,  290,  437,  206,  276,  258,  258,  258,  292,
-      292,  292,  206,  293,  454,  281,  294,  224,  224,  224,
-      206,  259,  230,  230,  230,  302,  302,  302,  303,  303,
-      303,  461,  405,  226,  304,  304,  304,  408,  232,  270,
-      270,  270,  305,  305,  305,  206,  306,  206,  206,  307,
-      308,  308,  308,  297,  271,  273,  273,  273,  463,  310,
-      310,  310,  206,  311,  534,  309,  312,  300,  407,  469,
-      274,  242,  242,  242,  280,  280,  280,  285,  285,  285,
-      206,  286,  286,  286,  206,  287,  465,  244,  288,  206,
-      281,  289,  289,  289,  320,  320,  320,  206,  321,  462,
-
-      492,  322,  323,  323,  323,  206,  290,  314,  206,  439,
-      317,  292,  292,  292,  467,  293,  466,  324,  294,  325,
-      325,  325,  327,  327,  327,  318,  329,  329,  329,  331,
-      331,  331,  436,  435,  326,  426,  425,  328,  230,  230,
-      230,  206,  330,  334,  334,  334,  302,  302,  302,  303,
-      303,  303,  443,  441,  232,  304,  304,  304,  305,  305,
-      305,  206,  306,  206,  444,  307,  308,  308,  308,  335,
-      335,  335,  443,  336,  424,  453,  337,  333,  310,  310,
-      310,  309,  311,  480,  444,  312,  339,  339,  339,  320,
-      320,  320,  423,  321,  206,  206,  322,  323,  323,  323,
-
-      470,  206,  340,  345,  345,  345,  206,  346,  471,  414,
-      347,  493,  324,  325,  325,  325,  348,  348,  348,  206,
-      349,  206,  496,  350,  327,  327,  327,  206,  326,  351,
-      351,  351,  206,  352,  473,  497,  353,  206,  206,  328,
-      329,  329,  329,  331,  331,  331,  355,  355,  355,  334,
-      334,  334,  487,  335,  335,  335,  330,  336,  206,  481,
-      337,  498,  356,  339,  339,  339,  345,  345,  345,  490,
-      346,  413,  412,  347,  348,  348,  348,  206,  349,  340,
-      484,  350,  351,  351,  351,  206,  352,  206,  206,  353,
-      355,  355,  355,  365,  365,  365,  365,  365,  365,  376,
-
-      376,  376,  378,  378,  378,  206,  356,  485,  491,  206,
-      488,  411,  206,  206,  377,  206,  499,  379,  380,  380,
-      380,  376,  376,  376,  387,  387,  387,  489,  388,  500,
-      206,  389,  371,  381,  372,  206,  377,  206,  206,  373,
-      378,  378,  378,  390,  390,  390,  494,  391,  368,  206,
-      392,  380,  380,  380,  501,  379,  393,  393,  393,  364,
-      394,  495,  206,  395,  502,  206,  381,  387,  387,  387,
-      363,  388,  206,  510,  389,  390,  390,  390,  503,  391,
-      362,  535,  392,  393,  393,  393,  206,  394,  504,  206,
-      395,  409,  409,  409,  415,  415,  415,  417,  417,  417,
-
-      418,  418,  418,  409,  409,  409,  410,  281,  511,  505,
-      206,  206,  508,  206,  206,  419,  281,  206,  410,  281,
-      420,  420,  420,  358,  421,  206,  206,  422,  415,  415,
-      415,  428,  428,  428,  509,  206,  281,  417,  417,  417,
-      418,  418,  418,  506,  206,  528,  507,  206,  512,  513,
-      552,  552,  206,  206,  427,  419,  281,  430,  430,  430,
-      206,  431,  206,  429,  432,  420,  420,  420,  206,  421,
-      206,  514,  422,  281,  357,  428,  428,  428,  458,  458,
-      458,  281,  279,  279,  279,  279,  279,  279,  279,  279,
-      279,  206,  206,  279,  281,  282,  279,  279,  279,  281,
-
-      279,  440,  206,  354,  515,  206,  518,  458,  458,  458,
-      206,  538,  279,  279,  279,  279,  279,  279,  279,  279,
-      279,  279,  279,  281,  539,  279,  206,  206,  279,  279,
-      279,  281,  279,  430,  430,  430,  516,  431,  519,  341,
-      432,  206,  338,  317,  279,  279,  472,  472,  472,  281,
-      279,  279,  279,  279,  279,  447,  279,  279,  279,  540,
-      541,  279,  206,  529,  279,  279,  279,  281,  279,  206,
-      206,  332,  532,  206,  544,  474,  474,  474,  206,  206,
-      279,  279,  279,  279,  279,  279,  279,  279,  279,  279,
-      447,  206,  542,  279,  206,  517,  279,  279,  279,  281,
-
-      279,  472,  472,  472,  520,  475,  206,  206,  476,  477,
-      477,  477,  279,  279,  474,  474,  474,  206,  478,  206,
-      521,  479,  477,  477,  477,  206,  482,  206,  206,  483,
-      206,  523,  206,  524,  206,  533,  536,  537,  206,  206,
-      206,  206,  206,  206,  206,  525,  206,  206,  206,  206,
-      206,  206,  526,  527,  555,  206,  319,  530,  543,  531,
-      546,  281,  555,  558,  315,  547,  206,  558,  550,  551,
-      553,  206,  206,  545,  554,  556,  556,  556,  313,  206,
-      548,  549,  559,  559,  559,  556,  556,  556,  561,  561,
-      561,  557,  559,  559,  559,  561,  561,  561,  560,  301,
-
-      299,  557,  298,  296,  562,  295,  291,  284,  560,  283,
-      277,  562,   52,   52,   52,   52,   52,   52,   52,   53,
-       53,   53,   53,   53,   53,   53,   58,   58,   58,   58,
-       58,   58,   58,   61,   61,   61,   61,   61,   61,   61,
-       64,   64,   64,   64,   64,   64,   64,   67,   67,   67,
-       67,   67,   67,   67,   74,   74,   74,   74,   74,   74,
-       74,   90,   90,   90,   90,   90,   90,   90,   97,   97,
-       97,   97,   97,   97,   97,  101,  101,  101,  101,  101,
-      101,  101,  119,  119,  119,  119,  119,  119,  119,  141,
-      141,  141,  275,  141,  151,  151,  151,  272,  151,  159,
-
-      159,  159,  269,  159,  167,  167,  167,  167,  167,  268,
-      167,  187,  267,  187,  191,  266,  191,  201,  264,  201,
-      205,  205,  205,  205,  205,  205,  205,  211,  263,  261,
-      211,  225,  225,  225,  225,  225,  225,  231,  231,  231,
-      231,  231,  231,  243,  243,  243,  243,  243,  243,  279,
-      279,  279,  279,  279,  279,  279,  433,  433,  433,  433,
-      433,  433,  433,  434,  434,  434,  434,  434,  434,  434,
-      442,  442,  442,  442,  442,  442,  442,  445,  445,  445,
-      445,  445,  445,  445,  455,  455,  455,  455,  455,  455,
-      455,  457,  457,  457,  457,  457,  457,  457,  260,  257,
-
-      256,  253,  252,  251,  250,  249,  248,  206,  246,  241,
-      240,  239,  238,  237,  236,  235,  234,  229,  228,  223,
-      222,  221,  220,  219,  218,  217,  216,  215,  214,  213,
-      212,  209,  207,  206,  204,  203,  202,  200,  199,  198,
-      197,  196,  195,  194,  193,  192,  190,  189,  188,  186,
-      185,  184,  183,  182,  181,  180,  179,  178,  177,  176,
-      171,  168,  170,  166,  165,  163,  162,  161,  160,  158,
-      152,  150,  147,  146,  145,  142,  140,  138,  132,  131,
-      132,  131,  130,  129,  563,   51,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563
-    } ;
-
-static yyconst flex_int16_t yy_chk[1642] =
-    {   0,
-        0,    3,    3,    3,    4,    4,    4,    5,    5,    5,
-        6,    6,    6,    9,    0,    3,   10,   11,    4,   12,
-        9,    5,  464,   10,    6,    7,    7,    7,    8,    8,
-        8,   13,   13,   11,   86,   12,   13,   13,   86,    7,
-       14,   14,    8,  125,   13,   14,   14,   15,   15,  316,
-       15,   56,   15,   14,   16,   16,  125,   16,  316,   16,
-       15,   17,   17,   18,   18,   56,   57,   16,   19,   19,
-       19,   20,   20,   20,   23,   23,   23,   24,   24,   24,
-       57,  134,   19,  457,  134,   20,  456,  172,   23,  172,
-       17,   24,   18,   21,   21,   21,   21,   21,   21,   21,
-
-       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
-       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
-       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
-       21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
-       21,   21,   21,   21,   21,   21,   21,   21,   25,   25,
-       25,   26,   26,   26,   54,   54,   54,   55,   55,   55,
-      133,  455,   25,  363,  363,   26,   27,   27,   27,   27,
-       27,   27,   27,   27,   27,   27,   27,   27,   27,  317,
-       27,   27,   27,   27,   27,   29,   29,   29,   30,   30,
-       30,   31,   31,   31,  208,  169,   27,   27,  208,   29,
-
-      450,  133,   30,  169,  448,   31,  317,   27,   28,   28,
-       28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
-       28,  366,   28,   28,   28,   28,   28,   32,   32,   32,
-       33,   33,   33,   34,   34,   34,  342,  344,   28,   28,
-      366,   32,  342,  318,   33,  443,  443,   34,   60,   28,
-       35,   35,   35,   36,   36,   36,   37,   37,   37,   38,
-       38,   38,   60,  318,   35,  360,  367,   36,  344,  343,
-       37,  374,   83,   38,   39,   39,   39,   40,   40,   40,
-       41,   41,   41,   42,   42,   42,   83,  343,   39,  516,
-      367,   40,  371,  360,   41,  374,   98,   42,   43,   43,
-
-       43,   44,   44,   44,   59,   59,   59,   80,   80,   80,
-       98,  371,   43,  446,  516,   44,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   47,   47,   47,   48,   48,   48,   49,   49,   50,
-       50,   78,   49,   70,   50,   47,   92,   93,   48,  372,
-       49,  108,   50,   92,  444,   78,   91,   91,   91,  480,
-
-       92,   93,   95,   95,   95,  108,   49,  361,   50,  105,
-       70,  102,  102,  102,   78,  106,   70,  383,  103,   70,
-      372,  104,   93,  105,   70,  103,  113,  107,  104,  106,
-      480,  108,  103,  383,  107,  104,  110,  110,  110,  361,
-      113,  107,  105,  438,  105,  120,  120,  120,  106,  105,
-      106,  103,  121,  103,  104,  106,  104,  373,  103,  121,
-      107,  104,  107,  124,  124,  124,  121,  107,  187,  187,
-      187,  188,  188,  188,  191,  191,  191,  192,  192,  192,
-      201,  201,  201,  247,  187,  373,  375,  188,  437,  385,
-      191,  436,  435,  192,  247,  382,  201,  202,  202,  202,
-
-      218,  218,  218,  221,  221,  221,  188,  224,  224,  224,
-      225,  225,  225,  202,  375,  218,  385,  382,  221,  227,
-      227,  227,  278,  224,  192,  384,  225,  230,  230,  230,
-      231,  231,  231,  388,  278,  227,  233,  233,  233,  386,
-      439,  202,  432,  230,  384,  388,  231,  238,  238,  238,
-      439,  432,  233,  426,  240,  240,  240,  227,  242,  242,
-      242,  389,  238,  243,  243,  243,  386,  397,  233,  240,
-      245,  245,  245,  389,  242,  248,  248,  248,  406,  243,
-      253,  253,  253,  254,  254,  254,  245,  256,  256,  256,
-      445,  248,  248,  255,  255,  255,  397,  255,  254,  445,
-
-      255,  406,  256,  425,  441,  245,  258,  258,  258,  259,
-      259,  259,  396,  259,  441,  399,  259,  262,  262,  262,
-      452,  258,  265,  265,  265,  267,  267,  267,  268,  268,
-      268,  452,  396,  262,  269,  269,  269,  399,  265,  270,
-      270,  270,  271,  271,  271,  528,  271,  454,  398,  271,
-      272,  272,  272,  262,  270,  273,  273,  273,  454,  274,
-      274,  274,  465,  274,  528,  272,  274,  265,  398,  465,
-      273,  276,  276,  276,  280,  280,  280,  285,  285,  285,
-      461,  286,  286,  286,  486,  286,  461,  276,  286,  453,
-      280,  289,  289,  289,  290,  290,  290,  427,  290,  453,
-
-      486,  290,  291,  291,  291,  462,  289,  276,  463,  427,
-      280,  292,  292,  292,  463,  292,  462,  291,  292,  295,
-      295,  295,  296,  296,  296,  280,  297,  297,  297,  298,
-      298,  298,  424,  423,  295,  414,  413,  296,  300,  300,
-      300,  429,  297,  301,  301,  301,  302,  302,  302,  303,
-      303,  303,  431,  429,  300,  304,  304,  304,  305,  305,
-      305,  475,  305,  440,  431,  305,  308,  308,  308,  309,
-      309,  309,  442,  309,  412,  440,  309,  300,  310,  310,
-      310,  308,  310,  475,  442,  310,  314,  314,  314,  320,
-      320,  320,  411,  320,  466,  487,  320,  323,  323,  323,
-
-      466,  467,  314,  324,  324,  324,  490,  324,  467,  404,
-      324,  487,  323,  325,  325,  325,  326,  326,  326,  491,
-      326,  481,  490,  326,  327,  327,  327,  470,  325,  328,
-      328,  328,  492,  328,  470,  491,  328,  476,  484,  327,
-      329,  329,  329,  331,  331,  331,  333,  333,  333,  334,
-      334,  334,  481,  335,  335,  335,  329,  335,  478,  476,
-      335,  492,  333,  339,  339,  339,  345,  345,  345,  484,
-      345,  403,  402,  345,  348,  348,  348,  485,  348,  339,
-      478,  348,  351,  351,  351,  479,  351,  493,  482,  351,
-      355,  355,  355,  359,  359,  359,  365,  365,  365,  368,
-
-      368,  368,  369,  369,  369,  483,  355,  479,  485,  359,
-      482,  401,  365,  494,  368,  488,  493,  369,  370,  370,
-      370,  376,  376,  376,  377,  377,  377,  483,  377,  494,
-      489,  377,  365,  370,  365,  496,  376,  504,  495,  365,
-      378,  378,  378,  379,  379,  379,  488,  379,  362,  497,
-      379,  380,  380,  380,  495,  378,  381,  381,  381,  358,
-      381,  489,  529,  381,  496,  498,  380,  387,  387,  387,
-      357,  387,  505,  504,  387,  390,  390,  390,  497,  390,
-      354,  529,  390,  393,  393,  393,  499,  393,  498,  502,
-      393,  400,  400,  400,  405,  405,  405,  407,  407,  407,
-
-      408,  408,  408,  409,  409,  409,  400,  400,  505,  499,
-      405,  503,  502,  407,  500,  408,  408,  501,  409,  409,
-      410,  410,  410,  341,  410,  506,  507,  410,  415,  415,
-      415,  416,  416,  416,  503,  508,  410,  417,  417,  417,
-      418,  418,  418,  500,  415,  522,  501,  416,  506,  507,
-      546,  547,  522,  417,  415,  418,  418,  419,  419,  419,
-      547,  419,  546,  417,  419,  420,  420,  420,  509,  420,
-      512,  508,  420,  419,  338,  428,  428,  428,  447,  447,
-      447,  420,  421,  421,  421,  421,  421,  421,  421,  421,
-      421,  428,  532,  421,  447,  447,  421,  421,  421,  421,
-
-      421,  428,  513,  332,  509,  533,  512,  458,  458,  458,
-      510,  532,  421,  421,  422,  422,  422,  422,  422,  422,
-      422,  422,  422,  458,  533,  422,  534,  535,  422,  422,
-      422,  422,  422,  430,  430,  430,  510,  430,  513,  315,
-      430,  538,  313,  458,  422,  422,  469,  469,  469,  430,
-      433,  433,  433,  433,  433,  433,  433,  433,  433,  534,
-      535,  433,  469,  523,  433,  433,  433,  433,  433,  511,
-      523,  299,  526,  536,  538,  471,  471,  471,  514,  526,
-      433,  433,  434,  434,  434,  434,  434,  434,  434,  434,
-      434,  471,  536,  434,  515,  511,  434,  434,  434,  434,
-
-      434,  472,  472,  472,  514,  472,  517,  518,  472,  473,
-      473,  473,  434,  434,  474,  474,  474,  472,  474,  519,
-      515,  474,  477,  477,  477,  473,  477,  520,  521,  477,
-      474,  517,  524,  518,  525,  527,  530,  531,  477,  537,
-      539,  540,  527,  530,  531,  519,  541,  542,  543,  544,
-      545,  548,  520,  521,  550,  549,  282,  524,  537,  525,
-      540,  279,  551,  554,  277,  541,  550,  553,  544,  545,
-      548,  551,  554,  539,  549,  552,  552,  552,  275,  553,
-      542,  543,  555,  555,  555,  556,  556,  556,  558,  558,
-      558,  552,  559,  559,  559,  561,  561,  561,  555,  266,
-
-      264,  556,  263,  261,  558,  260,  257,  252,  559,  251,
-      246,  561,  564,  564,  564,  564,  564,  564,  564,  565,
-      565,  565,  565,  565,  565,  565,  566,  566,  566,  566,
-      566,  566,  566,  567,  567,  567,  567,  567,  567,  567,
-      568,  568,  568,  568,  568,  568,  568,  569,  569,  569,
-      569,  569,  569,  569,  570,  570,  570,  570,  570,  570,
-      570,  571,  571,  571,  571,  571,  571,  571,  572,  572,
-      572,  572,  572,  572,  572,  573,  573,  573,  573,  573,
-      573,  573,  574,  574,  574,  574,  574,  574,  574,  575,
-      575,  575,  241,  575,  576,  576,  576,  239,  576,  577,
-
-      577,  577,  237,  577,  578,  578,  578,  578,  578,  236,
-      578,  579,  235,  579,  580,  234,  580,  581,  229,  581,
-      582,  582,  582,  582,  582,  582,  582,  583,  228,  223,
-      583,  584,  584,  584,  584,  584,  584,  585,  585,  585,
-      585,  585,  585,  586,  586,  586,  586,  586,  586,  587,
-      587,  587,  587,  587,  587,  587,  588,  588,  588,  588,
-      588,  588,  588,  589,  589,  589,  589,  589,  589,  589,
-      590,  590,  590,  590,  590,  590,  590,  591,  591,  591,
-      591,  591,  591,  591,  592,  592,  592,  592,  592,  592,
-      592,  593,  593,  593,  593,  593,  593,  593,  222,  220,
-
-      219,  217,  216,  213,  212,  211,  209,  205,  203,  200,
-      199,  198,  197,  196,  195,  194,  193,  190,  189,  186,
-      185,  184,  183,  182,  181,  180,  178,  177,  176,  175,
-      174,  170,  168,  167,  166,  165,  164,  163,  162,  161,
-      160,  157,  156,  155,  154,  153,  152,  149,  148,  147,
-      146,  145,  144,  143,  142,  139,  138,  137,  136,  135,
-      129,  128,  126,  123,  122,  118,  117,  116,  115,  111,
-      100,   96,   89,   88,   87,   85,   81,   77,   76,   75,
-       69,   68,   66,   63,   51,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563,  563,  563,  563,  563,  563,  563,  563,  563,  563,
-      563
-    } ;
-
-/* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[93] =
-    {   0,
-0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 
-    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 
-    1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 
-    1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-    1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,     };
-
-static yy_state_type yy_last_accepting_state;
-static char *yy_last_accepting_cpos;
-
-extern int xbt_graph_parse__flex_debug;
-int xbt_graph_parse__flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *xbt_graph_parse_text;
-/* Validating XML processor for src/xbt/graphxml.dtd.
- *
- * This program was generated with the FleXML XML processor generator.
- * FleXML is Copyright (C) 1999-2005 Kristoffer Rose.  All rights reserved.
- * FleXML is Copyright (C) 2003-2013 Martin Quinson.  All rights reserved.
- * (1.9.6).
- * 
- * There are two, intertwined parts to this program, part A and part B.
- *
- * Part A
- * ------
- * 
- * Some parts, here collectively called "Part A", are found in the 
- * FleXML package.  They are Copyright (C) 1999-2005 Kristoffer Rose
- * and Copyright (C) 2003-2013 Martin Quinson. All rights reserved.
- *
- * You can redistribute, use, perform, display and/or modify "Part A"
- * provided the following two conditions hold:
- *
- * 1. The program is distributed WITHOUT ANY WARRANTY from the author of
- *    FleXML; without even the implied warranty of MERCHANTABILITY or
- *    FITNESS FOR A PARTICULAR PURPOSE.
- *
- * 2. The program distribution conditions do not in any way affect the
- *    distribution conditions of the FleXML system used to generate this
- *    file or any version of FleXML derived from that system.
- *
- * Notice that these are explicit rights granted to you for files
- * generated by the FleXML system.  For your rights in connection with
- * the FleXML system itself please consult the GNU General Public License.
- * 
- * Part B
- * ------
- * 
- * The other parts, here collectively called "Part B", and which came 
- * from the DTD used by FleXML to generate this program, can be 
- * distributed (or not, as the case may be) under the terms of whoever
- * wrote them, provided these terms respect and obey the two conditions 
- * above under the heading "Part A".
- *
- * The author of and contributors to FleXML specifically disclaim
- * any copyright interest in "Part B", unless "Part B" was written 
- * by the author of or contributors to FleXML.
- * 
- */
-
-/* Version strings. */
-const char graphxml_flexml_version[] = "1.9.6";
-
-/* ANSI headers. */
-#include <stdlib.h> /* for realloc() -- needed here when using flex 2.5.4 */
-#include <stdio.h>
-#include <string.h>
-#include <assert.h>
-#include <stdarg.h>
-#include <ctype.h>
-     
-#if defined(_XBT_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__TOS_WIN__)
-# ifndef __STRICT_ANSI__
-#  include <io.h>
-#  include <process.h>
-# endif
-#else
-# include <unistd.h>
-#endif
-     
-#ifndef FLEXML_INDEXSTACKSIZE
-#define FLEXML_INDEXSTACKSIZE 1000
-#endif
-
-/* Generated definitions. */
-#define FLEXML_yylineno
-#ifndef FLEXML_BUFFERSTACKSIZE
-#define FLEXML_BUFFERSTACKSIZE 1000000
-#endif
-#define FLEXML_NEED_BUFFERLIT
-
-/* XML processor api. */
-/* FleXML-provided data. */
-int graphxml_pcdata_ix;
-extern char *graphxml_bufferstack;
-#define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix)
-AT_graphxml_edge_data AX_graphxml_edge_data;
-#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data)
-short int graphxml_edge_data_isset;
-AT_graphxml_edge_label AX_graphxml_edge_label;
-#define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label)
-short int graphxml_edge_label_isset;
-AT_graphxml_edge_length AX_graphxml_edge_length;
-#define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length)
-short int graphxml_edge_length_isset;
-AT_graphxml_edge_name AX_graphxml_edge_name;
-#define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name)
-short int graphxml_edge_name_isset;
-AT_graphxml_edge_source AX_graphxml_edge_source;
-#define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source)
-short int graphxml_edge_source_isset;
-AT_graphxml_edge_target AX_graphxml_edge_target;
-#define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target)
-short int graphxml_edge_target_isset;
-AT_graphxml_graph_isDirected AX_graphxml_graph_isDirected;
-#define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected
-short int graphxml_graph_isDirected_isset;
-AT_graphxml_node_data AX_graphxml_node_data;
-#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data)
-short int graphxml_node_data_isset;
-AT_graphxml_node_label AX_graphxml_node_label;
-#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label)
-short int graphxml_node_label_isset;
-AT_graphxml_node_name AX_graphxml_node_name;
-#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name)
-short int graphxml_node_name_isset;
-AT_graphxml_node_position___x AX_graphxml_node_position___x;
-#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x)
-short int graphxml_node_position___x_isset;
-AT_graphxml_node_position___y AX_graphxml_node_position___y;
-#define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y)
-short int graphxml_node_position___y_isset;
-
-/* XML state. */
-#ifdef FLEX_DEBUG
-# define ENTER(state)  debug_enter(state,#state)
-# define LEAVE         debug_leave()
-# define SET(state)    debug_set(state,#state)
-  static void debug_enter(int, const char*);
-  static void debug_leave(void);
-  static void debug_set(int, const char*);
-#else
-# define ENTER(state)  (yy_push_state(state))
-# define LEAVE         (yy_pop_state())
-# define SET(state)    BEGIN(state)
-#endif
-
-/* Generic actions. */
-#define SKIP   /*skip*/
-#define SUCCEED        CLEANUP; return 0
-
-#define FAIL   return fail
-static int fail(const char*, ...);
-
-enum {flexml_max_err_msg_size = 512};
-static char flexml_err_msg[flexml_max_err_msg_size];
-const char * graphxml_parse_err_msg()
-{
-    return flexml_err_msg;
-}
-static void reset_graphxml_parse_err_msg()
-{
-    flexml_err_msg[0] = '\0';
-}
-
-/* Cleanup */
-static void cleanup(void);
-#define CLEANUP  cleanup()
-
-/* Text buffer stack handling. */
-char *graphxml_bufferstack = NULL;
-static int blimit = FLEXML_BUFFERSTACKSIZE;
-static int bnext = 1;
-
-static int *indexstack = NULL;
-static int ilimit = FLEXML_INDEXSTACKSIZE;
-static int inext = 1;
-
-#define BUFFERSET(P)  (P = bnext)
-#define BUFFERPUTC(C) (ck_blimit(), graphxml_bufferstack[bnext++] = (C))
-#define BUFFERDONE    (BUFFERPUTC('\0'))
-
-#define BUFFERLITERAL(C, P) graphxml_bufferliteral(C, &(P), xbt_graph_parse_text)
-
-/* after this is called, there are at least 2 slots left in the stack */
-static int ck_blimit()
-{
-     if (bnext >= blimit) {
-        blimit += FLEXML_BUFFERSTACKSIZE + 2;
-        {
-            char *temp = (char *) realloc(graphxml_bufferstack, blimit);
-            assert(temp);
-            graphxml_bufferstack = temp;
-        }
-     }
-     return 0;
-}
-
-/* after this is called, there are at least 2 slots left in the stack */
-static int ck_ilimit()
-{
-     if (inext >= ilimit) {
-        ilimit += FLEXML_INDEXSTACKSIZE + 2;
-        {
-            int *temp = (int *) realloc(indexstack, ilimit);
-            assert(temp);
-            indexstack = temp;
-        }
-     }
-     return 0;
-}
-
-#ifdef FLEXML_NEED_BUFFERLIT
-static void graphxml_bufferliteral(char c, int* pp, const char* text)
-{
-   BUFFERSET(*pp);
-   if (c) {
-      const char *s = strchr(text, c), *e = strrchr(text, c);
-      assert(s && e && s <= e);
-      ++s;
-      while (s < e) {
-        if (isspace(*s)) {
-           BUFFERPUTC(' ');
-           do ++s; while (s < e && isspace(*s));
-        } else
-          BUFFERPUTC(*s++);
-      }
-   } else {
-      const char *s = text;
-      while (*s)
-       BUFFERPUTC(*s++);
-   }
-   BUFFERDONE;
-}
-#endif
-
-static void pushbuffer(int p)
-{
-    ck_ilimit();
-    indexstack[inext++] = p;
-    indexstack[inext++] = bnext;    
-}
-
-static int popbuffer(void)
-{
-    assert(inext >= 2);
-    bnext = indexstack[--inext];
-    return indexstack[--inext];
-}
-
-/* General internal entities are `unput' back onto the input stream... */
-#define ENTITYTEXT(T) \
-  { char *s = (T), *e = s+strlen(s);\
-    while (--e >= s) { unput(*e); }}
-
-/* Flex standard options. */
-#define YY_NO_INPUT 1
-/* Flex user-requested options. */
-/* XML character classes (currently restricted to ASCII). */
-/* "Common syntactic structures." */
-/* "Names and Tokens." */
-/* Miscellaneous. */
-/* Parser states (flex `exclusive start conditions'):
- *
- * PROLOG      the XML prolog of the document before <?xml...>
- * DOCTYPE     the XML prolog of the document after <?xml...>
- * EPILOG      after the root element
- * INCOMMENT   inside an XML comment <!--....-->
- * INPI                inside an XML PI <?...?>
- * VALUE1      inside a '...'-delimited literal
- * VALUE2      inside a "..."-delimited literal
- * CDATA       inside a <![CDATA[...] ]> section.
- * ROOT_<tag>  expect root element <tag>
- * AL_<tag>    inside the attribute list for <tag>
- * IN_<tag>    inside a <tag> with element contents (ready for end tag)
- * IMPOSSIBLE  dummy to permit disabling rules; must be last
- */
-
-/* State names. */
-const char* *graphxml_statenames=NULL;
-
-#define INITIAL 0
-#define PROLOG 1
-#define DOCTYPE 2
-#define EPILOG 3
-#define INCOMMENT 4
-#define INPI 5
-#define VALUE1 6
-#define VALUE2 7
-#define CDATA 8
-#define ROOT_graphxml_edge 9
-#define AL_graphxml_edge 10
-#define E_graphxml_edge 11
-#define ROOT_graphxml_graph 12
-#define AL_graphxml_graph 13
-#define S_graphxml_graph 14
-#define S_graphxml_graph_1 15
-#define S_graphxml_graph_2 16
-#define S_graphxml_graph_3 17
-#define S_graphxml_graph_4 18
-#define S_graphxml_graph_5 19
-#define E_graphxml_graph 20
-#define ROOT_graphxml_node 21
-#define AL_graphxml_node 22
-#define E_graphxml_node 23
-#define IMPOSSIBLE 24
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#if defined(_XBT_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__TOS_WIN__)
-#  ifndef __STRICT_ANSI__
-#    include <io.h>
-#    include <process.h>
-#  endif
-#else
-#  include <unistd.h>
-#endif
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
-
-/* Accessor methods to globals.
-   These are made visible to non-reentrant scanners for convenience. */
-
-int xbt_graph_parse_lex_destroy (void );
-
-int xbt_graph_parse_get_debug (void );
-
-void xbt_graph_parse_set_debug (int debug_flag  );
-
-YY_EXTRA_TYPE xbt_graph_parse_get_extra (void );
-
-void xbt_graph_parse_set_extra (YY_EXTRA_TYPE user_defined  );
-
-FILE *xbt_graph_parse_get_in (void );
-
-void xbt_graph_parse_set_in  (FILE * in_str  );
-
-FILE *xbt_graph_parse_get_out (void );
-
-void xbt_graph_parse_set_out  (FILE * out_str  );
-
-yy_size_t xbt_graph_parse_get_leng (void );
-
-char *xbt_graph_parse_get_text (void );
-
-int xbt_graph_parse_get_lineno (void );
-
-void xbt_graph_parse_set_lineno (int line_number  );
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int xbt_graph_parse_wrap (void );
-#else
-extern int xbt_graph_parse_wrap (void );
-#endif
-#endif
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-        static int yy_start_stack_ptr = 0;
-        static int yy_start_stack_depth = 0;
-        static int *yy_start_stack = NULL;
-    
-    static void yy_push_state (int new_state );
-    
-    static void yy_pop_state (void );
-    
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
-#define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO do { if (fwrite( xbt_graph_parse_text, xbt_graph_parse_leng, 1, xbt_graph_parse_out )) {} } while (0)
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-       if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
-               { \
-               int c = '*'; \
-               size_t n; \
-               for ( n = 0; n < max_size && \
-                            (c = getc( xbt_graph_parse_in )) != EOF && c != '\n'; ++n ) \
-                       buf[n] = (char) c; \
-               if ( c == '\n' ) \
-                       buf[n++] = (char) c; \
-               if ( c == EOF && ferror( xbt_graph_parse_in ) ) \
-                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
-               result = n; \
-               } \
-       else \
-               { \
-               errno=0; \
-               while ( (result = fread(buf, 1, max_size, xbt_graph_parse_in))==0 && ferror(xbt_graph_parse_in)) \
-                       { \
-                       if( errno != EINTR) \
-                               { \
-                               YY_FATAL_ERROR( "input in flex scanner failed" ); \
-                               break; \
-                               } \
-                       errno=0; \
-                       clearerr(xbt_graph_parse_in); \
-                       } \
-               }\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int xbt_graph_parse_lex (void);
-
-#define YY_DECL int xbt_graph_parse_lex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after xbt_graph_parse_text and xbt_graph_parse_leng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
-       YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-       yy_state_type yy_current_state;
-       char *yy_cp, *yy_bp;
-       int yy_act;
-    
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
-
-#ifdef YY_USER_INIT
-               YY_USER_INIT;
-#endif
-
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
-
-               if ( ! xbt_graph_parse_in )
-                       xbt_graph_parse_in = stdin;
-
-               if ( ! xbt_graph_parse_out )
-                       xbt_graph_parse_out = stdout;
-
-               if ( ! YY_CURRENT_BUFFER ) {
-                       xbt_graph_parse_ensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE );
-               }
-
-               xbt_graph_parse__load_buffer_state( );
-               }
-
-       {
-
- /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */
- SET(PROLOG);
- reset_graphxml_parse_err_msg();
- graphxml_bufferstack = (char *) malloc(FLEXML_BUFFERSTACKSIZE);
- assert(graphxml_bufferstack);
- #ifdef FLEX_DEBUG
- {
-     int i;
-     for (i = 0; i < blimit; i++) {
-         graphxml_bufferstack[i] = '\377';
-     }
- }
- #endif
- graphxml_bufferstack[0] = '\0';
- indexstack = (int *) malloc(FLEXML_INDEXSTACKSIZE * sizeof(int));
- assert(indexstack);
- indexstack[0] = 0;
-
-  /* FleXML_init */
-  bnext = inext = 1;
-  graphxml_bufferliteral('\0', &bnext, "-1.0");
-  graphxml_bufferliteral('\0', &bnext, "-1.0");
-  graphxml_bufferliteral('\0', &bnext, "-1.0");
-  if(!graphxml_statenames) {graphxml_statenames= (const char **)calloc(IMPOSSIBLE,sizeof(char*));
-  graphxml_statenames[PROLOG] = NULL;
-  graphxml_statenames[DOCTYPE] = NULL;
-  graphxml_statenames[EPILOG] = NULL;
-  graphxml_statenames[INCOMMENT] = NULL;
-  graphxml_statenames[INPI] = NULL;
-  graphxml_statenames[VALUE1] = NULL;
-  graphxml_statenames[VALUE2] = NULL;
-  graphxml_statenames[CDATA] = NULL;
-  graphxml_statenames[ROOT_graphxml_edge] = NULL;
-  graphxml_statenames[AL_graphxml_edge] = NULL;
-  graphxml_statenames[E_graphxml_edge] = "edge";
-  graphxml_statenames[ROOT_graphxml_graph] = NULL;
-  graphxml_statenames[AL_graphxml_graph] = NULL;
-  graphxml_statenames[S_graphxml_graph] = "graph";
-  graphxml_statenames[S_graphxml_graph_1] = "graph";
-  graphxml_statenames[S_graphxml_graph_2] = "graph";
-  graphxml_statenames[S_graphxml_graph_3] = "graph";
-  graphxml_statenames[S_graphxml_graph_4] = "graph";
-  graphxml_statenames[S_graphxml_graph_5] = "graph";
-  graphxml_statenames[E_graphxml_graph] = "graph";
-  graphxml_statenames[ROOT_graphxml_node] = NULL;
-  graphxml_statenames[AL_graphxml_node] = NULL;
-  graphxml_statenames[E_graphxml_node] = "node";
-  }
-
- /* COMMENTS and PIs: handled uniformly for efficiency. */
-
-       while ( 1 )             /* loops until end-of-file is reached */
-               {
-               yy_cp = (yy_c_buf_p);
-
-               /* Support of xbt_graph_parse_text. */
-               *yy_cp = (yy_hold_char);
-
-               /* yy_bp points to the position in yy_ch_buf of the start of
-                * the current run.
-                */
-               yy_bp = yy_cp;
-
-               yy_current_state = (yy_start);
-yy_match:
-               do
-                       {
-                       YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ;
-                       if ( yy_accept[yy_current_state] )
-                               {
-                               (yy_last_accepting_state) = yy_current_state;
-                               (yy_last_accepting_cpos) = yy_cp;
-                               }
-                       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-                               {
-                               yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 564 )
-                                       yy_c = yy_meta[(unsigned int) yy_c];
-                               }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-                       ++yy_cp;
-                       }
-               while ( yy_base[yy_current_state] != 1586 );
-
-yy_find_action:
-               yy_act = yy_accept[yy_current_state];
-               if ( yy_act == 0 )
-                       { /* have to back up */
-                       yy_cp = (yy_last_accepting_cpos);
-                       yy_current_state = (yy_last_accepting_state);
-                       yy_act = yy_accept[yy_current_state];
-                       }
-
-               YY_DO_BEFORE_ACTION;
-
-               if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
-                       {
-                       yy_size_t yyl;
-                       for ( yyl = 0; yyl < xbt_graph_parse_leng; ++yyl )
-                               if ( xbt_graph_parse_text[yyl] == '\n' )
-                                          
-    xbt_graph_parse_lineno++;
-;
-                       }
-
-do_action:     /* This label is used only to access EOF actions. */
-
-               switch ( yy_act )
-       { /* beginning of action switch */
-                       case 0: /* must back up */
-                       /* undo the effects of YY_DO_BEFORE_ACTION */
-                       *yy_cp = (yy_hold_char);
-                       yy_cp = (yy_last_accepting_cpos);
-                       yy_current_state = (yy_last_accepting_state);
-                       goto yy_find_action;
-
-case 1:
-YY_RULE_SETUP
-ENTER(INCOMMENT);
-       YY_BREAK
-case 2:
-YY_RULE_SETUP
-ENTER(INPI);
-       YY_BREAK
-
-case 3:
-YY_RULE_SETUP
-LEAVE;
-       YY_BREAK
-case 4:
-case 5:
-case 6:
-/* rule 6 can match eol */
-YY_RULE_SETUP
-SKIP;
-       YY_BREAK
-case YY_STATE_EOF(INCOMMENT):
-FAIL("EOF in comment.");
-       YY_BREAK
-
-case 7:
-YY_RULE_SETUP
-LEAVE;
-       YY_BREAK
-case 8:
-case 9:
-/* rule 9 can match eol */
-YY_RULE_SETUP
-SKIP;
-       YY_BREAK
-case YY_STATE_EOF(INPI):
-FAIL("EOF in PI (processing instruction).");
-       YY_BREAK
-
-/* SPACES: skipped uniformly */
-case 10:
-/* rule 10 can match eol */
-YY_RULE_SETUP
-SKIP;
-       YY_BREAK
-/* PROLOG: determine root element and process it. */
-
-case 11:
-/* rule 11 can match eol */
-YY_RULE_SETUP
-SET(DOCTYPE); 
-       YY_BREAK
-case 12:
-/* rule 12 can match eol */
-YY_RULE_SETUP
-FAIL("Bad declaration %s.",xbt_graph_parse_text);
-       YY_BREAK
-
-case 13:
-/* rule 13 can match eol */
-YY_RULE_SETUP
-SET(ROOT_graphxml_edge);
-       YY_BREAK
-case 14:
-/* rule 14 can match eol */
-YY_RULE_SETUP
-SET(ROOT_graphxml_graph);
-       YY_BREAK
-case 15:
-/* rule 15 can match eol */
-YY_RULE_SETUP
-SET(ROOT_graphxml_node);
-       YY_BREAK
-case 16:
-/* rule 16 can match eol */
-YY_RULE_SETUP
-FAIL("Bad declaration %s.",xbt_graph_parse_text);
-       YY_BREAK
-case 17:
-YY_RULE_SETUP
-FAIL("Unexpected character `%c' in prolog.", xbt_graph_parse_text[0]);
-       YY_BREAK
-case YY_STATE_EOF(PROLOG):
-case YY_STATE_EOF(DOCTYPE):
-FAIL("EOF in prolog.");
-       YY_BREAK
-
-/* RULES DERIVED FROM DTD. */
-/*     label           CDATA                ""
-  *     name            CDATA               #IMPLIED
-  *     source          CDATA               #REQUIRED
-  *     target          CDATA               #REQUIRED
-  *     length          CDATA               "-1.0"
-  *     data            CDATA               ""
-  * >  */
-case 18:
-/* rule 18 can match eol */
-YY_RULE_SETUP
-FAIL("Starting tag <edge> is not allowed here.");
-       YY_BREAK
-case 19:
-/* rule 19 can match eol */
-YY_RULE_SETUP
-{
-  AX_graphxml_edge_data = 0;
-  graphxml_edge_data_isset = 0;
-  AX_graphxml_edge_label = 0;
-  graphxml_edge_label_isset = 0;
-  AX_graphxml_edge_length = 11;
-  graphxml_edge_length_isset = 0;
-  AX_graphxml_edge_name = 0;
-  graphxml_edge_name_isset = 0;
-  AX_graphxml_edge_source = 0;
-  graphxml_edge_source_isset = 0;
-  AX_graphxml_edge_target = 0;
-  graphxml_edge_target_isset = 0;
-  ENTER(AL_graphxml_edge); pushbuffer(0);
-  }
-       YY_BREAK
-
-case 20:
-/* rule 20 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_data_isset != 0) {FAIL("Multiple definition of attribute data in <graphxml_edge>");} graphxml_edge_data_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_data);
-       YY_BREAK
-case 21:
-/* rule 21 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_data_isset != 0) {FAIL("Multiple definition of attribute data in <graphxml_edge>");}  graphxml_edge_data_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_data);
-       YY_BREAK
-case 22:
-/* rule 22 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_label_isset != 0) {FAIL("Multiple definition of attribute label in <graphxml_edge>");} graphxml_edge_label_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_label);
-       YY_BREAK
-case 23:
-/* rule 23 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_label_isset != 0) {FAIL("Multiple definition of attribute label in <graphxml_edge>");}  graphxml_edge_label_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_label);
-       YY_BREAK
-case 24:
-/* rule 24 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_length_isset != 0) {FAIL("Multiple definition of attribute length in <graphxml_edge>");} graphxml_edge_length_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_length);
-       YY_BREAK
-case 25:
-/* rule 25 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_length_isset != 0) {FAIL("Multiple definition of attribute length in <graphxml_edge>");}  graphxml_edge_length_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_length);
-       YY_BREAK
-case 26:
-/* rule 26 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_name_isset != 0) {FAIL("Multiple definition of attribute name in <graphxml_edge>");} graphxml_edge_name_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_name);
-       YY_BREAK
-case 27:
-/* rule 27 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_name_isset != 0) {FAIL("Multiple definition of attribute name in <graphxml_edge>");}  graphxml_edge_name_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_name);
-       YY_BREAK
-case 28:
-/* rule 28 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_source_isset != 0) {FAIL("Multiple definition of attribute source in <graphxml_edge>");} graphxml_edge_source_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_source);
-       YY_BREAK
-case 29:
-/* rule 29 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_source_isset != 0) {FAIL("Multiple definition of attribute source in <graphxml_edge>");}  graphxml_edge_source_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_source);
-       YY_BREAK
-case 30:
-/* rule 30 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_target_isset != 0) {FAIL("Multiple definition of attribute target in <graphxml_edge>");} graphxml_edge_target_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_edge_target);
-       YY_BREAK
-case 31:
-/* rule 31 can match eol */
-YY_RULE_SETUP
-if (graphxml_edge_target_isset != 0) {FAIL("Multiple definition of attribute target in <graphxml_edge>");}  graphxml_edge_target_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_edge_target);
-       YY_BREAK
-case 32:
-YY_RULE_SETUP
-{
-  if (!AX_graphxml_edge_source) FAIL("Required attribute `source' not set for `edge' element.");
-  if (!AX_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element.");
-  LEAVE; STag_graphxml_edge();graphxml_pcdata_ix = 0; ENTER(E_graphxml_edge);
- }
-       YY_BREAK
-case 33:
-YY_RULE_SETUP
-{
-  if (!AX_graphxml_edge_source) FAIL("Required attribute `source' not set for `edge' element.");
-  if (!AX_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element.");
-  LEAVE; STag_graphxml_edge(); graphxml_pcdata_ix = 0; ETag_graphxml_edge(); popbuffer(); /* attribute */
-  switch (YY_START) {
-   case ROOT_graphxml_edge: SET(EPILOG); break;
-   case S_graphxml_graph: case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_4: case S_graphxml_graph_5: SET(S_graphxml_graph_5); break;
-  }
- }
-       YY_BREAK
-case 34:
-YY_RULE_SETUP
-FAIL("Unexpected character `%c' in attribute list of edge element.", xbt_graph_parse_text[0]);
-       YY_BREAK
-case 35:
-YY_RULE_SETUP
-FAIL("Bad attribute `%s' in `edge' element start tag.",xbt_graph_parse_text);
-       YY_BREAK
-case YY_STATE_EOF(AL_graphxml_edge):
-FAIL("EOF in attribute list of `edge' element.");
-       YY_BREAK
-
-case 36:
-/* rule 36 can match eol */
-YY_RULE_SETUP
-{
-  LEAVE;
-  ETag_graphxml_edge();
-  popbuffer(); /* attribute */
-  switch (YY_START) {
-   case ROOT_graphxml_edge: SET(EPILOG); break;
-   case S_graphxml_graph: case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_4: case S_graphxml_graph_5: SET(S_graphxml_graph_5); break;
-  }
- }
-       YY_BREAK
-case 37:
-/* rule 37 can match eol */
-YY_RULE_SETUP
-FAIL("Unexpected end-tag `%s': `</edge>' expected.",xbt_graph_parse_text);
-       YY_BREAK
-case 38:
-YY_RULE_SETUP
-FAIL("Unexpected character `%c': `</edge>' expected.",xbt_graph_parse_text[0]);
-       YY_BREAK
-case YY_STATE_EOF(E_graphxml_edge):
-FAIL("Premature EOF: `</edge>' expected.");
-       YY_BREAK
-
-/* <!-- Small DTD for xbt graphs. -->  */
-/*     isDirected (true|false) "true"
-  * >  */
-case 39:
-/* rule 39 can match eol */
-YY_RULE_SETUP
-FAIL("Starting tag <graph> is not allowed here.");
-       YY_BREAK
-case 40:
-/* rule 40 can match eol */
-YY_RULE_SETUP
-{
-  AX_graphxml_graph_isDirected = A_graphxml_graph_isDirected_true;
-  graphxml_graph_isDirected_isset = 0;
-  ENTER(AL_graphxml_graph); pushbuffer(0);
-  }
-       YY_BREAK
-
-case 41:
-/* rule 41 can match eol */
-case 42:
-/* rule 42 can match eol */
-YY_RULE_SETUP
-A_graphxml_graph_isDirected = A_graphxml_graph_isDirected_true;
-       YY_BREAK
-case 43:
-/* rule 43 can match eol */
-case 44:
-/* rule 44 can match eol */
-YY_RULE_SETUP
-A_graphxml_graph_isDirected = A_graphxml_graph_isDirected_false;
-       YY_BREAK
-case 45:
-YY_RULE_SETUP
-{
-  LEAVE; STag_graphxml_graph();graphxml_pcdata_ix = 0; ENTER(S_graphxml_graph);
- }
-       YY_BREAK
-case 46:
-YY_RULE_SETUP
-{
-  LEAVE; STag_graphxml_graph(); graphxml_pcdata_ix = 0; ETag_graphxml_graph(); popbuffer(); /* attribute */
-  switch (YY_START) {
-   case ROOT_graphxml_graph: SET(EPILOG); break;
-  }
- }
-       YY_BREAK
-case 47:
-YY_RULE_SETUP
-FAIL("Unexpected character `%c' in attribute list of graph element.", xbt_graph_parse_text[0]);
-       YY_BREAK
-case 48:
-YY_RULE_SETUP
-FAIL("Bad attribute `%s' in `graph' element start tag.",xbt_graph_parse_text);
-       YY_BREAK
-case YY_STATE_EOF(AL_graphxml_graph):
-FAIL("EOF in attribute list of `graph' element.");
-       YY_BREAK
-
-case 49:
-/* rule 49 can match eol */
-YY_RULE_SETUP
-{
-  LEAVE;
-  ETag_graphxml_graph();
-  popbuffer(); /* attribute */
-  switch (YY_START) {
-   case ROOT_graphxml_graph: SET(EPILOG); break;
-  }
- }
-       YY_BREAK
-case 50:
-/* rule 50 can match eol */
-YY_RULE_SETUP
-FAIL("Unexpected end-tag `%s': `</graph>' expected.",xbt_graph_parse_text);
-       YY_BREAK
-case 51:
-YY_RULE_SETUP
-FAIL("Unexpected character `%c': `</graph>' expected.",xbt_graph_parse_text[0]);
-       YY_BREAK
-case YY_STATE_EOF(E_graphxml_graph):
-case YY_STATE_EOF(S_graphxml_graph):
-case YY_STATE_EOF(S_graphxml_graph_1):
-case YY_STATE_EOF(S_graphxml_graph_3):
-case YY_STATE_EOF(S_graphxml_graph_5):
-FAIL("Premature EOF: `</graph>' expected.");
-       YY_BREAK
-
-/*     label           CDATA                ""
-  *     name            CDATA                #REQUIRED
-  *     data            CDATA                ""
-  *     position_x         CDATA                "-1.0"
-  *     position_y         CDATA                "-1.0"
-  * >  */
-case 52:
-/* rule 52 can match eol */
-YY_RULE_SETUP
-FAIL("Starting tag <node> is not allowed here.");
-       YY_BREAK
-case 53:
-/* rule 53 can match eol */
-YY_RULE_SETUP
-{
-  AX_graphxml_node_data = 0;
-  graphxml_node_data_isset = 0;
-  AX_graphxml_node_label = 0;
-  graphxml_node_label_isset = 0;
-  AX_graphxml_node_name = 0;
-  graphxml_node_name_isset = 0;
-  AX_graphxml_node_position___x = 1;
-  graphxml_node_position___x_isset = 0;
-  AX_graphxml_node_position___y = 6;
-  graphxml_node_position___y_isset = 0;
-  ENTER(AL_graphxml_node); pushbuffer(0);
-  }
-       YY_BREAK
-
-case 54:
-/* rule 54 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_data_isset != 0) {FAIL("Multiple definition of attribute data in <graphxml_node>");} graphxml_node_data_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_node_data);
-       YY_BREAK
-case 55:
-/* rule 55 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_data_isset != 0) {FAIL("Multiple definition of attribute data in <graphxml_node>");}  graphxml_node_data_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_node_data);
-       YY_BREAK
-case 56:
-/* rule 56 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_label_isset != 0) {FAIL("Multiple definition of attribute label in <graphxml_node>");} graphxml_node_label_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_node_label);
-       YY_BREAK
-case 57:
-/* rule 57 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_label_isset != 0) {FAIL("Multiple definition of attribute label in <graphxml_node>");}  graphxml_node_label_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_node_label);
-       YY_BREAK
-case 58:
-/* rule 58 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_name_isset != 0) {FAIL("Multiple definition of attribute name in <graphxml_node>");} graphxml_node_name_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_node_name);
-       YY_BREAK
-case 59:
-/* rule 59 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_name_isset != 0) {FAIL("Multiple definition of attribute name in <graphxml_node>");}  graphxml_node_name_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_node_name);
-       YY_BREAK
-case 60:
-/* rule 60 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_position___x_isset != 0) {FAIL("Multiple definition of attribute position_x in <graphxml_node>");} graphxml_node_position___x_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_node_position___x);
-       YY_BREAK
-case 61:
-/* rule 61 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_position___x_isset != 0) {FAIL("Multiple definition of attribute position_x in <graphxml_node>");}  graphxml_node_position___x_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_node_position___x);
-       YY_BREAK
-case 62:
-/* rule 62 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_position___y_isset != 0) {FAIL("Multiple definition of attribute position_y in <graphxml_node>");} graphxml_node_position___y_isset = 1; ENTER(VALUE1); BUFFERSET(AX_graphxml_node_position___y);
-       YY_BREAK
-case 63:
-/* rule 63 can match eol */
-YY_RULE_SETUP
-if (graphxml_node_position___y_isset != 0) {FAIL("Multiple definition of attribute position_y in <graphxml_node>");}  graphxml_node_position___y_isset = 1; ENTER(VALUE2); BUFFERSET(AX_graphxml_node_position___y);
-       YY_BREAK
-case 64:
-YY_RULE_SETUP
-{
-  if (!AX_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element.");
-  LEAVE; STag_graphxml_node();graphxml_pcdata_ix = 0; ENTER(E_graphxml_node);
- }
-       YY_BREAK
-case 65:
-YY_RULE_SETUP
-{
-  if (!AX_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element.");
-  LEAVE; STag_graphxml_node(); graphxml_pcdata_ix = 0; ETag_graphxml_node(); popbuffer(); /* attribute */
-  switch (YY_START) {
-   case ROOT_graphxml_node: SET(EPILOG); break;
-   case S_graphxml_graph: case S_graphxml_graph_2: case S_graphxml_graph_3: SET(S_graphxml_graph_3); break;
-  }
- }
-       YY_BREAK
-case 66:
-YY_RULE_SETUP
-FAIL("Unexpected character `%c' in attribute list of node element.", xbt_graph_parse_text[0]);
-       YY_BREAK
-case 67:
-YY_RULE_SETUP
-FAIL("Bad attribute `%s' in `node' element start tag.",xbt_graph_parse_text);
-       YY_BREAK
-case YY_STATE_EOF(AL_graphxml_node):
-FAIL("EOF in attribute list of `node' element.");
-       YY_BREAK
-
-case 68:
-/* rule 68 can match eol */
-YY_RULE_SETUP
-{
-  LEAVE;
-  ETag_graphxml_node();
-  popbuffer(); /* attribute */
-  switch (YY_START) {
-   case ROOT_graphxml_node: SET(EPILOG); break;
-   case S_graphxml_graph: case S_graphxml_graph_2: case S_graphxml_graph_3: SET(S_graphxml_graph_3); break;
-  }
- }
-       YY_BREAK
-case 69:
-/* rule 69 can match eol */
-YY_RULE_SETUP
-FAIL("Unexpected end-tag `%s': `</node>' expected.",xbt_graph_parse_text);
-       YY_BREAK
-case 70:
-YY_RULE_SETUP
-FAIL("Unexpected character `%c': `</node>' expected.",xbt_graph_parse_text[0]);
-       YY_BREAK
-case YY_STATE_EOF(E_graphxml_node):
-FAIL("Premature EOF: `</node>' expected.");
-       YY_BREAK
-
-/* EPILOG: after the root element. */
-
-case 71:
-YY_RULE_SETUP
-{SET(PROLOG); yyless(0); CLEANUP; return -1;}
-       YY_BREAK
-case YY_STATE_EOF(EPILOG):
-SUCCEED;
-       YY_BREAK
-
-/* CHARACTER DATA. */
-
-/* Non-defined standard entities... */
-case 72:
-YY_RULE_SETUP
-BUFFERPUTC('&');
-       YY_BREAK
-case 73:
-YY_RULE_SETUP
-BUFFERPUTC('<');
-       YY_BREAK
-case 74:
-YY_RULE_SETUP
-BUFFERPUTC('>');
-       YY_BREAK
-case 75:
-YY_RULE_SETUP
-BUFFERPUTC('\'');
-       YY_BREAK
-case 76:
-YY_RULE_SETUP
-BUFFERPUTC('"');
-       YY_BREAK
-/* Character entities. */
-case 77:
-YY_RULE_SETUP
-BUFFERPUTC((unsigned char)atoi(xbt_graph_parse_text+2));
-       YY_BREAK
-case 78:
-YY_RULE_SETUP
-BUFFERPUTC((unsigned char)strtol(xbt_graph_parse_text+3,NULL,16));
-       YY_BREAK
-
-case 79:
-/* rule 79 can match eol */
-case 80:
-/* rule 80 can match eol */
-case 81:
-/* rule 81 can match eol */
-case 82:
-/* rule 82 can match eol */
-YY_RULE_SETUP
-BUFFERPUTC('\n');
-       YY_BREAK
-
-case 83:
-YY_RULE_SETUP
-ENTER(CDATA);
-       YY_BREAK
-case 84:
-YY_RULE_SETUP
-FAIL("Unexpected `]""]>' in character data.");
-       YY_BREAK
-
-case 85:
-YY_RULE_SETUP
-BUFFERDONE; LEAVE;
-       YY_BREAK
-case YY_STATE_EOF(VALUE1):
-FAIL("EOF in literal (\"'\" expected).");
-       YY_BREAK
-
-case 86:
-YY_RULE_SETUP
-BUFFERDONE; LEAVE;
-       YY_BREAK
-case YY_STATE_EOF(VALUE2):
-FAIL("EOF in literal (`\"' expected).");
-       YY_BREAK
-
-case 87:
-/* rule 87 can match eol */
-YY_RULE_SETUP
-BUFFERPUTC(xbt_graph_parse_text[0]);
-       YY_BREAK
-case 88:
-YY_RULE_SETUP
-FAIL("Spurious `%c' in character data.",xbt_graph_parse_text[0]);
-       YY_BREAK
-
-case 89:
-YY_RULE_SETUP
-LEAVE;
-       YY_BREAK
-/* "]""]"              BUFFERPUTC(xbt_graph_parse_text[0]); BUFFERPUTC(xbt_graph_parse_text[1]); */
-case 90:
-YY_RULE_SETUP
-BUFFERPUTC(xbt_graph_parse_text[0]);
-       YY_BREAK
-case YY_STATE_EOF(CDATA):
-FAIL("EOF in CDATA section.");
-       YY_BREAK
-
-/* Impossible rules to avoid warnings from flex(1). */
-/* Ideally, this should be replaced by code in flexml.pl that
-    generates just the states not covered by other rules. */
-
-case 91:
-/* rule 91 can match eol */
-YY_RULE_SETUP
-FAIL("Syntax error on character `%c'.", xbt_graph_parse_text[0]);
-       YY_BREAK
-
-case 92:
-YY_RULE_SETUP
-ECHO;
-       YY_BREAK
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(ROOT_graphxml_edge):
-case YY_STATE_EOF(ROOT_graphxml_graph):
-case YY_STATE_EOF(S_graphxml_graph_2):
-case YY_STATE_EOF(S_graphxml_graph_4):
-case YY_STATE_EOF(ROOT_graphxml_node):
-case YY_STATE_EOF(IMPOSSIBLE):
-       yyterminate();
-
-       case YY_END_OF_BUFFER:
-               {
-               /* Amount of text matched not including the EOB char. */
-               int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-               /* Undo the effects of YY_DO_BEFORE_ACTION. */
-               *yy_cp = (yy_hold_char);
-               YY_RESTORE_YY_MORE_OFFSET
-
-               if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-                       {
-                       /* We're scanning a new file or input source.  It's
-                        * possible that this happened because the user
-                        * just pointed xbt_graph_parse_in at a new source and called
-                        * xbt_graph_parse_lex().  If so, then we have to assure
-                        * consistency between YY_CURRENT_BUFFER and our
-                        * globals.  Here is the right place to do so, because
-                        * this is the first action (other than possibly a
-                        * back-up) that will match for the new input source.
-                        */
-                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-                       YY_CURRENT_BUFFER_LVALUE->yy_input_file = xbt_graph_parse_in;
-                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-                       }
-
-               /* Note that here we test for yy_c_buf_p "<=" to the position
-                * of the first EOB in the buffer, since yy_c_buf_p will
-                * already have been incremented past the NUL character
-                * (since all states make transitions on EOB to the
-                * end-of-buffer state).  Contrast this with the test
-                * in input().
-                */
-               if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-                       { /* This was really a NUL. */
-                       yy_state_type yy_next_state;
-
-                       (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-                       yy_current_state = yy_get_previous_state(  );
-
-                       /* Okay, we're now positioned to make the NUL
-                        * transition.  We couldn't have
-                        * yy_get_previous_state() go ahead and do it
-                        * for us because it doesn't know how to deal
-                        * with the possibility of jamming (and we don't
-                        * want to build jamming into it because then it
-                        * will run more slowly).
-                        */
-
-                       yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-                       yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-                       if ( yy_next_state )
-                               {
-                               /* Consume the NUL. */
-                               yy_cp = ++(yy_c_buf_p);
-                               yy_current_state = yy_next_state;
-                               goto yy_match;
-                               }
-
-                       else
-                               {
-                               yy_cp = (yy_c_buf_p);
-                               goto yy_find_action;
-                               }
-                       }
-
-               else switch ( yy_get_next_buffer(  ) )
-                       {
-                       case EOB_ACT_END_OF_FILE:
-                               {
-                               (yy_did_buffer_switch_on_eof) = 0;
-
-                               if ( xbt_graph_parse_wrap( ) )
-                                       {
-                                       /* Note: because we've taken care in
-                                        * yy_get_next_buffer() to have set up
-                                        * xbt_graph_parse_text, we can now set up
-                                        * yy_c_buf_p so that if some total
-                                        * hoser (like flex itself) wants to
-                                        * call the scanner after we return the
-                                        * YY_NULL, it'll still work - another
-                                        * YY_NULL will get returned.
-                                        */
-                                       (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-                                       yy_act = YY_STATE_EOF(YY_START);
-                                       goto do_action;
-                                       }
-
-                               else
-                                       {
-                                       if ( ! (yy_did_buffer_switch_on_eof) )
-                                               YY_NEW_FILE;
-                                       }
-                               break;
-                               }
-
-                       case EOB_ACT_CONTINUE_SCAN:
-                               (yy_c_buf_p) =
-                                       (yytext_ptr) + yy_amount_of_matched_text;
-
-                               yy_current_state = yy_get_previous_state(  );
-
-                               yy_cp = (yy_c_buf_p);
-                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-                               goto yy_match;
-
-                       case EOB_ACT_LAST_MATCH:
-                               (yy_c_buf_p) =
-                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-                               yy_current_state = yy_get_previous_state(  );
-
-                               yy_cp = (yy_c_buf_p);
-                               yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-                               goto yy_find_action;
-                       }
-               break;
-               }
-
-       default:
-               YY_FATAL_ERROR(
-                       "fatal flex scanner internal error--no action found" );
-       } /* end of action switch */
-               } /* end of scanning one token */
-       } /* end of user's declarations */
-} /* end of xbt_graph_parse_lex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *     EOB_ACT_LAST_MATCH -
- *     EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *     EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
-       char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-       char *source = (yytext_ptr);
-       int number_to_move, i;
-       int ret_val;
-
-       if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-               YY_FATAL_ERROR(
-               "fatal flex scanner internal error--end of buffer missed" );
-
-       if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-               { /* Don't try to fill the buffer, so this is an EOF. */
-               if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-                       {
-                       /* We matched a single character, the EOB, so
-                        * treat this as a final EOF.
-                        */
-                       return EOB_ACT_END_OF_FILE;
-                       }
-
-               else
-                       {
-                       /* We matched some text prior to the EOB, first
-                        * process it.
-                        */
-                       return EOB_ACT_LAST_MATCH;
-                       }
-               }
-
-       /* Try to read more data. */
-
-       /* First move last chars to start of buffer. */
-       number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-       for ( i = 0; i < number_to_move; ++i )
-               *(dest++) = *(source++);
-
-       if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-               /* don't do the read, it's not guaranteed to return an EOF,
-                * just force an EOF
-                */
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-       else
-               {
-                       yy_size_t num_to_read =
-                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-               while ( num_to_read <= 0 )
-                       { /* Not enough room in the buffer - grow it. */
-
-                       /* just a shorter name for the current buffer */
-                       YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE;
-
-                       int yy_c_buf_p_offset =
-                               (int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-                       if ( b->yy_is_our_buffer )
-                               {
-                               yy_size_t new_size = b->yy_buf_size * 2;
-
-                               if ( new_size <= 0 )
-                                       b->yy_buf_size += b->yy_buf_size / 8;
-                               else
-                                       b->yy_buf_size *= 2;
-
-                               b->yy_ch_buf = (char *)
-                                       /* Include room in for 2 EOB chars. */
-                                       xbt_graph_parse_realloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-                               }
-                       else
-                               /* Can't grow it, we don't own it. */
-                               b->yy_ch_buf = 0;
-
-                       if ( ! b->yy_ch_buf )
-                               YY_FATAL_ERROR(
-                               "fatal error - scanner input buffer overflow" );
-
-                       (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-                       num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-                                               number_to_move - 1;
-
-                       }
-
-               if ( num_to_read > YY_READ_BUF_SIZE )
-                       num_to_read = YY_READ_BUF_SIZE;
-
-               /* Read in more data. */
-               YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-                       (yy_n_chars), num_to_read );
-
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-               }
-
-       if ( (yy_n_chars) == 0 )
-               {
-               if ( number_to_move == YY_MORE_ADJ )
-                       {
-                       ret_val = EOB_ACT_END_OF_FILE;
-                       xbt_graph_parse_restart(xbt_graph_parse_in  );
-                       }
-
-               else
-                       {
-                       ret_val = EOB_ACT_LAST_MATCH;
-                       YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-                               YY_BUFFER_EOF_PENDING;
-                       }
-               }
-
-       else
-               ret_val = EOB_ACT_CONTINUE_SCAN;
-
-       if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-               /* Extend the array by 50%, plus the number we really need. */
-               yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) xbt_graph_parse_realloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-               if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-                       YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-       }
-
-       (yy_n_chars) += number_to_move;
-       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-       YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-       (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-       return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-    static yy_state_type yy_get_previous_state (void)
-{
-       yy_state_type yy_current_state;
-       char *yy_cp;
-    
-       yy_current_state = (yy_start);
-
-       for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-               {
-               YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
-               if ( yy_accept[yy_current_state] )
-                       {
-                       (yy_last_accepting_state) = yy_current_state;
-                       (yy_last_accepting_cpos) = yy_cp;
-                       }
-               while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-                       {
-                       yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 564 )
-                               yy_c = yy_meta[(unsigned int) yy_c];
-                       }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-               }
-
-       return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *     next_state = yy_try_NUL_trans( current_state );
- */
-    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
-{
-       int yy_is_jam;
-       char *yy_cp = (yy_c_buf_p);
-
-       YY_CHAR yy_c = 1;
-       if ( yy_accept[yy_current_state] )
-               {
-               (yy_last_accepting_state) = yy_current_state;
-               (yy_last_accepting_cpos) = yy_cp;
-               }
-       while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
-               {
-               yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 564 )
-                       yy_c = yy_meta[(unsigned int) yy_c];
-               }
-       yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-       yy_is_jam = (yy_current_state == 563);
-
-               return yy_is_jam ? 0 : yy_current_state;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-    static int yyinput (void)
-#else
-    static int input  (void)
-#endif
-
-{
-       int c;
-    
-       *(yy_c_buf_p) = (yy_hold_char);
-
-       if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-               {
-               /* yy_c_buf_p now points to the character we want to return.
-                * If this occurs *before* the EOB characters, then it's a
-                * valid NUL; if not, then we've hit the end of the buffer.
-                */
-               if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-                       /* This was really a NUL. */
-                       *(yy_c_buf_p) = '\0';
-
-               else
-                       { /* need more input */
-                       yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
-                       ++(yy_c_buf_p);
-
-                       switch ( yy_get_next_buffer(  ) )
-                               {
-                               case EOB_ACT_LAST_MATCH:
-                                       /* This happens because yy_g_n_b()
-                                        * sees that we've accumulated a
-                                        * token and flags that we need to
-                                        * try matching the token before
-                                        * proceeding.  But for input(),
-                                        * there's no matching to consider.
-                                        * So convert the EOB_ACT_LAST_MATCH
-                                        * to EOB_ACT_END_OF_FILE.
-                                        */
-
-                                       /* Reset buffer status. */
-                                       xbt_graph_parse_restart(xbt_graph_parse_in );
-
-                                       /*FALLTHROUGH*/
-
-                               case EOB_ACT_END_OF_FILE:
-                                       {
-                                       if ( xbt_graph_parse_wrap( ) )
-                                               return EOF;
-
-                                       if ( ! (yy_did_buffer_switch_on_eof) )
-                                               YY_NEW_FILE;
-#ifdef __cplusplus
-                                       return yyinput();
-#else
-                                       return input();
-#endif
-                                       }
-
-                               case EOB_ACT_CONTINUE_SCAN:
-                                       (yy_c_buf_p) = (yytext_ptr) + offset;
-                                       break;
-                               }
-                       }
-               }
-
-       c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
-       *(yy_c_buf_p) = '\0';   /* preserve xbt_graph_parse_text */
-       (yy_hold_char) = *++(yy_c_buf_p);
-
-       if ( c == '\n' )
-                  
-    xbt_graph_parse_lineno++;
-;
-
-       return c;
-}
-#endif /* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-    void xbt_graph_parse_restart  (FILE * input_file )
-{
-    
-       if ( ! YY_CURRENT_BUFFER ){
-        xbt_graph_parse_ensure_buffer_stack ();
-               YY_CURRENT_BUFFER_LVALUE =
-            xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE );
-       }
-
-       xbt_graph_parse__init_buffer(YY_CURRENT_BUFFER,input_file );
-       xbt_graph_parse__load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-    void xbt_graph_parse__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
-{
-    
-       /* TODO. We should be able to replace this entire function body
-        * with
-        *              xbt_graph_parse_pop_buffer_state();
-        *              xbt_graph_parse_push_buffer_state(new_buffer);
-     */
-       xbt_graph_parse_ensure_buffer_stack ();
-       if ( YY_CURRENT_BUFFER == new_buffer )
-               return;
-
-       if ( YY_CURRENT_BUFFER )
-               {
-               /* Flush out information for old buffer. */
-               *(yy_c_buf_p) = (yy_hold_char);
-               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-               }
-
-       YY_CURRENT_BUFFER_LVALUE = new_buffer;
-       xbt_graph_parse__load_buffer_state( );
-
-       /* We don't actually know whether we did this switch during
-        * EOF (xbt_graph_parse_wrap()) processing, but the only time this flag
-        * is looked at is after xbt_graph_parse_wrap() is called, so it's safe
-        * to go ahead and always set it.
-        */
-       (yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void xbt_graph_parse__load_buffer_state  (void)
-{
-       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-       (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-       xbt_graph_parse_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-       (yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-    YY_BUFFER_STATE xbt_graph_parse__create_buffer  (FILE * file, int  size )
-{
-       YY_BUFFER_STATE b;
-    
-       b = (YY_BUFFER_STATE) xbt_graph_parse_alloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse__create_buffer()" );
-
-       b->yy_buf_size = size;
-
-       /* yy_ch_buf has to be 2 characters longer than the size given because
-        * we need to put in 2 end-of-buffer characters.
-        */
-       b->yy_ch_buf = (char *) xbt_graph_parse_alloc(b->yy_buf_size + 2  );
-       if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse__create_buffer()" );
-
-       b->yy_is_our_buffer = 1;
-
-       xbt_graph_parse__init_buffer(b,file );
-
-       return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with xbt_graph_parse__create_buffer()
- * 
- */
-    void xbt_graph_parse__delete_buffer (YY_BUFFER_STATE  b )
-{
-    
-       if ( ! b )
-               return;
-
-       if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-               YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-       if ( b->yy_is_our_buffer )
-               xbt_graph_parse_free((void *) b->yy_ch_buf  );
-
-       xbt_graph_parse_free((void *) b  );
-}
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a xbt_graph_parse_restart() or at EOF.
- */
-    static void xbt_graph_parse__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
-
-{
-       int oerrno = errno;
-    
-       xbt_graph_parse__flush_buffer(b );
-
-       b->yy_input_file = file;
-       b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then xbt_graph_parse__init_buffer was _probably_
-     * called from xbt_graph_parse_restart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-    
-       errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-    void xbt_graph_parse__flush_buffer (YY_BUFFER_STATE  b )
-{
-       if ( ! b )
-               return;
-
-       b->yy_n_chars = 0;
-
-       /* We always need two end-of-buffer characters.  The first causes
-        * a transition to the end-of-buffer state.  The second causes
-        * a jam in that state.
-        */
-       b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-       b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-       b->yy_buf_pos = &b->yy_ch_buf[0];
-
-       b->yy_at_bol = 1;
-       b->yy_buffer_status = YY_BUFFER_NEW;
-
-       if ( b == YY_CURRENT_BUFFER )
-               xbt_graph_parse__load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-void xbt_graph_parse_push_buffer_state (YY_BUFFER_STATE new_buffer )
-{
-       if (new_buffer == NULL)
-               return;
-
-       xbt_graph_parse_ensure_buffer_stack();
-
-       /* This block is copied from xbt_graph_parse__switch_to_buffer. */
-       if ( YY_CURRENT_BUFFER )
-               {
-               /* Flush out information for old buffer. */
-               *(yy_c_buf_p) = (yy_hold_char);
-               YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-               }
-
-       /* Only push if top exists. Otherwise, replace top. */
-       if (YY_CURRENT_BUFFER)
-               (yy_buffer_stack_top)++;
-       YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-       /* copied from xbt_graph_parse__switch_to_buffer. */
-       xbt_graph_parse__load_buffer_state( );
-       (yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-void xbt_graph_parse_pop_buffer_state (void)
-{
-       if (!YY_CURRENT_BUFFER)
-               return;
-
-       xbt_graph_parse__delete_buffer(YY_CURRENT_BUFFER );
-       YY_CURRENT_BUFFER_LVALUE = NULL;
-       if ((yy_buffer_stack_top) > 0)
-               --(yy_buffer_stack_top);
-
-       if (YY_CURRENT_BUFFER) {
-               xbt_graph_parse__load_buffer_state( );
-               (yy_did_buffer_switch_on_eof) = 1;
-       }
-}
-
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-static void xbt_graph_parse_ensure_buffer_stack (void)
-{
-       yy_size_t num_to_alloc;
-    
-       if (!(yy_buffer_stack)) {
-
-               /* First allocation is just for 2 elements, since we don't know if this
-                * scanner will even need a stack. We use 2 instead of 1 to avoid an
-                * immediate realloc on the next call.
-         */
-               num_to_alloc = 1;
-               (yy_buffer_stack) = (struct yy_buffer_state**)xbt_graph_parse_alloc
-                                                               (num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                               );
-               if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse_ensure_buffer_stack()" );
-                                                                 
-               memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-                               
-               (yy_buffer_stack_max) = num_to_alloc;
-               (yy_buffer_stack_top) = 0;
-               return;
-       }
-
-       if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-               /* Increase the buffer to prepare for a possible push. */
-               int grow_size = 8 /* arbitrary grow size */;
-
-               num_to_alloc = (yy_buffer_stack_max) + grow_size;
-               (yy_buffer_stack) = (struct yy_buffer_state**)xbt_graph_parse_realloc
-                                                               ((yy_buffer_stack),
-                                                               num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                               );
-               if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse_ensure_buffer_stack()" );
-
-               /* zero only the new slots.*/
-               memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-               (yy_buffer_stack_max) = num_to_alloc;
-       }
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- * 
- * @return the newly allocated buffer state object. 
- */
-YY_BUFFER_STATE xbt_graph_parse__scan_buffer  (char * base, yy_size_t  size )
-{
-       YY_BUFFER_STATE b;
-    
-       if ( size < 2 ||
-            base[size-2] != YY_END_OF_BUFFER_CHAR ||
-            base[size-1] != YY_END_OF_BUFFER_CHAR )
-               /* They forgot to leave room for the EOB's. */
-               return 0;
-
-       b = (YY_BUFFER_STATE) xbt_graph_parse_alloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse__scan_buffer()" );
-
-       b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
-       b->yy_buf_pos = b->yy_ch_buf = base;
-       b->yy_is_our_buffer = 0;
-       b->yy_input_file = 0;
-       b->yy_n_chars = b->yy_buf_size;
-       b->yy_is_interactive = 0;
-       b->yy_at_bol = 1;
-       b->yy_fill_buffer = 0;
-       b->yy_buffer_status = YY_BUFFER_NEW;
-
-       xbt_graph_parse__switch_to_buffer(b  );
-
-       return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to xbt_graph_parse_lex() will
- * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
- * 
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- *       xbt_graph_parse__scan_bytes() instead.
- */
-YY_BUFFER_STATE xbt_graph_parse__scan_string (yyconst char * yystr )
-{
-    
-       return xbt_graph_parse__scan_bytes(yystr,strlen(yystr) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to xbt_graph_parse_lex() will
- * scan from a @e copy of @a bytes.
- * @param yybytes the byte buffer to scan
- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
- * 
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE xbt_graph_parse__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
-{
-       YY_BUFFER_STATE b;
-       char *buf;
-       yy_size_t n;
-       yy_size_t i;
-    
-       /* Get memory for full buffer, including space for trailing EOB's. */
-       n = _yybytes_len + 2;
-       buf = (char *) xbt_graph_parse_alloc(n  );
-       if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in xbt_graph_parse__scan_bytes()" );
-
-       for ( i = 0; i < _yybytes_len; ++i )
-               buf[i] = yybytes[i];
-
-       buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-
-       b = xbt_graph_parse__scan_buffer(buf,n );
-       if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in xbt_graph_parse__scan_bytes()" );
-
-       /* It's okay to grow etc. this buffer, and we should throw it
-        * away when we're done.
-        */
-       b->yy_is_our_buffer = 1;
-
-       return b;
-}
-
-    static void yy_push_state (int  new_state )
-{
-       if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
-               {
-               yy_size_t new_size;
-
-               (yy_start_stack_depth) += YY_START_STACK_INCR;
-               new_size = (yy_start_stack_depth) * sizeof( int );
-
-               if ( ! (yy_start_stack) )
-                       (yy_start_stack) = (int *) xbt_graph_parse_alloc(new_size  );
-
-               else
-                       (yy_start_stack) = (int *) xbt_graph_parse_realloc((void *) (yy_start_stack),new_size  );
-
-               if ( ! (yy_start_stack) )
-                       YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
-               }
-
-       (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
-
-       BEGIN(new_state);
-}
-
-    static void yy_pop_state  (void)
-{
-       if ( --(yy_start_stack_ptr) < 0 )
-               YY_FATAL_ERROR( "start-condition stack underflow" );
-
-       BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
-       (void) fprintf( stderr, "%s\n", msg );
-       exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-       do \
-               { \
-               /* Undo effects of setting up xbt_graph_parse_text. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-               xbt_graph_parse_text[xbt_graph_parse_leng] = (yy_hold_char); \
-               (yy_c_buf_p) = xbt_graph_parse_text + yyless_macro_arg; \
-               (yy_hold_char) = *(yy_c_buf_p); \
-               *(yy_c_buf_p) = '\0'; \
-               xbt_graph_parse_leng = yyless_macro_arg; \
-               } \
-       while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- * 
- */
-int xbt_graph_parse_get_lineno  (void)
-{
-        
-    return xbt_graph_parse_lineno;
-}
-
-/** Get the input stream.
- * 
- */
-FILE *xbt_graph_parse_get_in  (void)
-{
-        return xbt_graph_parse_in;
-}
-
-/** Get the output stream.
- * 
- */
-FILE *xbt_graph_parse_get_out  (void)
-{
-        return xbt_graph_parse_out;
-}
-
-/** Get the length of the current token.
- * 
- */
-yy_size_t xbt_graph_parse_get_leng  (void)
-{
-        return xbt_graph_parse_leng;
-}
-
-/** Get the current token.
- * 
- */
-
-char *xbt_graph_parse_get_text  (void)
-{
-        return xbt_graph_parse_text;
-}
-
-/** Set the current line number.
- * @param line_number
- * 
- */
-void xbt_graph_parse_set_lineno (int  line_number )
-{
-    
-    xbt_graph_parse_lineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- * 
- * @see xbt_graph_parse__switch_to_buffer
- */
-void xbt_graph_parse_set_in (FILE *  in_str )
-{
-        xbt_graph_parse_in = in_str ;
-}
-
-void xbt_graph_parse_set_out (FILE *  out_str )
-{
-        xbt_graph_parse_out = out_str ;
-}
-
-int xbt_graph_parse_get_debug  (void)
-{
-        return xbt_graph_parse__flex_debug;
-}
-
-void xbt_graph_parse_set_debug (int  bdebug )
-{
-        xbt_graph_parse__flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
-        /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from xbt_graph_parse_lex_destroy(), so don't allocate here.
-     */
-
-    /* We do not touch xbt_graph_parse_lineno unless the option is enabled. */
-    xbt_graph_parse_lineno =  1;
-    
-    (yy_buffer_stack) = 0;
-    (yy_buffer_stack_top) = 0;
-    (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
-    (yy_init) = 0;
-    (yy_start) = 0;
-
-    (yy_start_stack_ptr) = 0;
-    (yy_start_stack_depth) = 0;
-    (yy_start_stack) =  NULL;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
-    xbt_graph_parse_in = stdin;
-    xbt_graph_parse_out = stdout;
-#else
-    xbt_graph_parse_in = (FILE *) 0;
-    xbt_graph_parse_out = (FILE *) 0;
-#endif
-
-    /* For future reference: Set errno on error, since we are called by
-     * xbt_graph_parse_lex_init()
-     */
-    return 0;
-}
-
-/* xbt_graph_parse_lex_destroy is for both reentrant and non-reentrant scanners. */
-int xbt_graph_parse_lex_destroy  (void)
-{
-    
-    /* Pop the buffer stack, destroying each element. */
-       while(YY_CURRENT_BUFFER){
-               xbt_graph_parse__delete_buffer(YY_CURRENT_BUFFER  );
-               YY_CURRENT_BUFFER_LVALUE = NULL;
-               xbt_graph_parse_pop_buffer_state();
-       }
-
-       /* Destroy the stack itself. */
-       xbt_graph_parse_free((yy_buffer_stack) );
-       (yy_buffer_stack) = NULL;
-
-    /* Destroy the start condition stack. */
-        xbt_graph_parse_free((yy_start_stack)  );
-        (yy_start_stack) = NULL;
-
-    /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * xbt_graph_parse_lex() is called, initialization will occur. */
-    yy_init_globals( );
-
-    return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-       int i;
-       for ( i = 0; i < n; ++i )
-               s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-       int n;
-       for ( n = 0; s[n]; ++n )
-               ;
-
-       return n;
-}
-#endif
-
-void *xbt_graph_parse_alloc (yy_size_t  size )
-{
-       return (void *) malloc( size );
-}
-
-void *xbt_graph_parse_realloc  (void * ptr, yy_size_t  size )
-{
-       /* The cast to (char *) in the following accommodates both
-        * implementations that use char* generic pointers, and those
-        * that use void* generic pointers.  It works with the latter
-        * because both ANSI C and C++ allow castless assignment from
-        * any pointer type to void*, and deal with argument conversions
-        * as though doing an assignment.
-        */
-       return (void *) realloc( (char *) ptr, size );
-}
-
-void xbt_graph_parse_free (void * ptr )
-{
-       free( (char *) ptr );   /* see xbt_graph_parse_realloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
-/* Element context stack lookup. */
-int graphxml_element_context(int i)
-{
-  return (0<i && i<yy_start_stack_depth
-         ? yy_start_stack[yy_start_stack_ptr - i]
-         : 0);
-}
-
-#ifdef FLEX_DEBUG
-void print_yy_stack(char* fmt, ...)
-{
-  int i = 0; va_list ap; va_start(ap, fmt);
-  vfprintf(stderr, fmt, ap);
-  if (graphxml_statenames) {
-      for (i=1; i<yy_start_stack_ptr; i++) {
-          fprintf(stderr, "%s/", graphxml_statenames[yy_start_stack[i] ]);
-      }
-      fprintf(stderr,"%s\n", graphxml_statenames[YY_START]);
-  }
-  va_end(ap);
-}
-
-void print_graphxml_bufferstack()
-{
-    int i;
-    fputs("Buffer: ", stderr);
-    for (i = 0; i < blimit; i++) {
-       if ( graphxml_bufferstack[i] == '\377' ) break;
-         putc(graphxml_bufferstack[i], stderr);
-    }
-    putc('\n', stderr);
-}
-
-static void debug_enter(int state, const char* statename) {
-  yy_push_state(state);
-  if (xbt_graph_parse__flex_debug) {
-       print_yy_stack("--ENTER(%s) : ",statename);
-       print_graphxml_bufferstack();
-  }
-}
-
-static void debug_leave(void) {
-    if (xbt_graph_parse__flex_debug) {
-        print_yy_stack("--LEAVE : ");
-       print_graphxml_bufferstack();
-    }
-  yy_pop_state();
-}
-
-static void debug_set(int state, const char* statename) {
-  BEGIN(state);
-  if (xbt_graph_parse__flex_debug) print_yy_stack("--SET(%s) : ",statename);
-}
-#endif
-
-static void cleanup(void)
-{
-    if (graphxml_statenames) {
-        free(graphxml_statenames);
-       graphxml_statenames = NULL;
-    }
-    free(graphxml_bufferstack);
-    graphxml_bufferstack = NULL;
-
-    free(indexstack);
-    indexstack = NULL;
-}
-
-static int fail(const char* fmt, ...)
-{
-    int chars_left, used;
-    va_list ap; va_start(ap, fmt);
-#ifdef FLEXML_yylineno
-    used = sprintf(flexml_err_msg,
-                  "Invalid XML (XML input line %d, state %d): ",
-                  xbt_graph_parse_lineno, YY_START);
-#else
-    used = sprintf(flexml_err_msg,
-                  "Invalid XML (state %d): ",
-                  YY_START);
-#endif
-    chars_left = flexml_max_err_msg_size - used - 1;
-    vsnprintf(flexml_err_msg + used, chars_left, fmt, ap);
-    va_end(ap);
-
-#ifndef FLEXML_quiet_parser
-    /* print directly to sdterr */
-    fprintf(stderr, "%s\n", flexml_err_msg);
-    flexml_err_msg[0] = '\0';
-#endif
-
-    cleanup();
-
-    return 1;
-}
-
diff --git a/src/xbt/graphxml.dtd b/src/xbt/graphxml.dtd
deleted file mode 100644 (file)
index 027cad4..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-<!-- Small DTD for xbt graphs. -->
-<!ELEMENT graph ((node)*,(edge)*)>
-<!ATTLIST graph
-    isDirected (true|false) "true"
->
-<!ELEMENT node EMPTY>
-<!ATTLIST node
-    label           CDATA                ""
-    name            CDATA                #REQUIRED
-    data            CDATA                ""
-    position_x     CDATA                "-1.0"
-    position_y     CDATA                "-1.0"
->
-
-<!ELEMENT edge EMPTY>
-<!ATTLIST edge
-    label           CDATA                ""
-    name            CDATA               #IMPLIED
-    source          CDATA               #REQUIRED
-    target          CDATA               #REQUIRED
-    length          CDATA               "-1.0"
-    data            CDATA               ""
->
diff --git a/src/xbt/graphxml_parse.c b/src/xbt/graphxml_parse.c
deleted file mode 100644 (file)
index 4f7605d..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Copyright (c) 2006-2011, 2013-2014. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include "xbt/misc.h"
-#include "xbt/sysdep.h"
-#include "xbt/log.h"
-#include "xbt/asserts.h"
-
-#include "xbt/dynar.h"
-#include "xbt/graphxml_parse.h"
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(graphxml_parse, xbt,
-                                "Logging specific to the graphxml parsing  module");
-
-#undef CLEANUP
-#include "graphxml.c"
-
-static xbt_dynar_t xbt_graph_input_buffer_stack = NULL;
-static xbt_dynar_t xbt_graph_file_to_parse_stack = NULL;
-
-static void nil_function(void)
-{
-  return;
-}
-
-void_f_void_t STag_graphxml_graph_fun = nil_function;
-void_f_void_t ETag_graphxml_graph_fun = nil_function;
-void_f_void_t STag_graphxml_node_fun = nil_function;
-void_f_void_t ETag_graphxml_node_fun = nil_function;
-void_f_void_t STag_graphxml_edge_fun = nil_function;
-void_f_void_t ETag_graphxml_edge_fun = nil_function;
-
-YY_BUFFER_STATE xbt_graph_input_buffer;
-FILE *xbt_graph_file_to_parse;
-
-void xbt_graph_parse_reset_parser(void)
-{
-  STag_graphxml_graph_fun = nil_function;
-  ETag_graphxml_graph_fun = nil_function;
-  STag_graphxml_node_fun = nil_function;
-  ETag_graphxml_node_fun = nil_function;
-  STag_graphxml_edge_fun = nil_function;
-  ETag_graphxml_edge_fun = nil_function;
-}
-
-void STag_graphxml_graph(void)
-{
-  STag_graphxml_graph_fun();
-}
-
-void ETag_graphxml_graph(void)
-{
-  ETag_graphxml_graph_fun();
-}
-
-
-void STag_graphxml_node(void)
-{
-  STag_graphxml_node_fun();
-}
-
-void ETag_graphxml_node(void)
-{
-  ETag_graphxml_node_fun();
-}
-
-
-void STag_graphxml_edge(void)
-{
-  STag_graphxml_edge_fun();
-}
-
-void ETag_graphxml_edge(void)
-{
-  ETag_graphxml_edge_fun();
-}
-
-
-
-void xbt_graph_parse_open(const char *file)
-{
-  if (!file) {
-    XBT_WARN
-        ("I hope you know what you're doing... you just gave me a NULL pointer!");
-    return;
-  }
-  if (!xbt_graph_input_buffer_stack)
-    xbt_graph_input_buffer_stack =
-        xbt_dynar_new(sizeof(YY_BUFFER_STATE), NULL);
-  if (!xbt_graph_file_to_parse_stack)
-    xbt_graph_file_to_parse_stack = xbt_dynar_new(sizeof(FILE *), NULL);
-
-  xbt_graph_file_to_parse = fopen(file, "r");   /* FIXME should use something like surf_fopen */
-  xbt_assert((xbt_graph_file_to_parse), "Unable to open \"%s\"\n", file);
-  xbt_graph_input_buffer =
-      xbt_graph_parse__create_buffer(xbt_graph_file_to_parse, 10);
-  xbt_graph_parse__switch_to_buffer(xbt_graph_input_buffer);
-  xbt_graph_parse_lineno = 1;
-}
-
-void xbt_graph_parse_close(void)
-{
-  xbt_dynar_free(&xbt_graph_input_buffer_stack);
-  xbt_dynar_free(&xbt_graph_file_to_parse_stack);
-
-  if (xbt_graph_file_to_parse) {
-    xbt_graph_parse__delete_buffer(xbt_graph_input_buffer);
-    fclose(xbt_graph_file_to_parse);
-  }
-}
-
-
-static int _xbt_graph_parse(void)
-{
-  return xbt_graph_parse_lex();
-}
-
-int_f_void_t xbt_graph_parse = _xbt_graph_parse;
-
-double xbt_graph_parse_get_double(const char *string)
-{
-  double result;
-  XBT_ATTRIB_UNUSED int ret = 0;
-
-  ret = sscanf(string, "%lg", &result);
-  xbt_assert((ret == 1), "Parse error line %d : %s not a number",
-              xbt_graph_parse_lineno, string);
-  return result;
-}
index 49d4529..76ecb58 100644 (file)
@@ -11,7 +11,7 @@
 #include <stdio.h>              /* snprintf */
 #include <stdlib.h>             /* snprintf */
 
-#include "src/portable.h"           /* to get a working stdarg.h */
+#include "src/portable.h"
 
 #include "src/xbt_modinter.h"
 
@@ -562,7 +562,6 @@ static void xbt_log_connect_categories(void)
 
   /* xbt */
   XBT_LOG_CONNECT(xbt);
-  XBT_LOG_CONNECT(graphxml_parse);
   XBT_LOG_CONNECT(log);
   XBT_LOG_CONNECT(module);
   XBT_LOG_CONNECT(replay);
index 89df5fb..148a593 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2005-2010, 2012-2015. The SimGrid Team.
+/* Copyright (c) 2005-2010, 2012-2016. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * - return value semantics per ISO/IEC 9899:1999 ("ISO C99");
  * - written in standard ISO/ANSI C - requires an ANSI C compiler.
  *
- * SUPPORTED CONVERSION SPECIFIERS AND DATA TYPES
- *
- * This snprintf only supports the following conversion specifiers:
- * s, c, d, u, o, x, X, p  (and synonyms: i, D, U, O - see below)
- * with flags: '-', '+', ' ', '0' and '#'.
- * An asterisk is supported for field width as well as precision.
- *
- * Length modifiers 'h' (short int), 'l' (long int),
- * and 'll' (long long int) are supported.
- * NOTE:
- *   If macro SNPRINTF_LONGLONG_SUPPORT is not defined (default) the
- *   length modifier 'll' is recognized but treated the same as 'l',
- *   which may cause argument value truncation! Defining
- *   SNPRINTF_LONGLONG_SUPPORT requires that your system's sprintf also
- *   handles length modifier 'll'.  long long int is a language extension
- *   which may not be portable.
- *
- * Conversion of numeric data (conversion specifiers d, u, o, x, X, p)
- * with length modifiers (none or h, l, ll) is left to the system routine
- * sprintf, but all handling of flags, field width and precision as well as
- * c and s conversions is done very carefully by this portable routine.
- * If a string precision (truncation) is specified (e.g. %.8s) it is
- * guaranteed the string beyond the specified precision will not be referenced.
- *
- * Length modifiers h, l and ll are ignored for c and s conversions (data
- * types wint_t and wchar_t are not supported).
- *
- * The following common synonyms for conversion characters are supported:
- *   - i is a synonym for d
- *   - D is a synonym for ld, explicit length modifiers are ignored
- *   - U is a synonym for lu, explicit length modifiers are ignored
- *   - O is a synonym for lo, explicit length modifiers are ignored
- * The D, O and U conversion characters are nonstandard, they are supported
- * for backward compatibility only, and should not be used for new code.
- *
- * The following is specifically NOT supported:
- *   - flag ' (thousands' grouping character) is recognized but ignored
- *   - numeric conversion specifiers: f, e, E, g, G and synonym F,
- *     as well as the new a and A conversion specifiers
- *   - length modifier 'L' (long double) and 'q' (quad - use 'll' instead)
- *   - wide character/string conversions: lc, ls, and nonstandard
- *     synonyms C and S
- *   - writeback of converted string length: conversion character n
- *   - the n$ specification for direct reference to n-th argument
- *   - locales
- *
- * It is permitted for str_m to be zero, and it is permitted to specify NULL
- * pointer for resulting string argument if str_m is zero (as per ISO C99).
- *
- * The return value is the number of characters which would be generated
- * for the given input, excluding the trailing null. If this value
- * is greater or equal to str_m, not all characters from the result
- * have been stored in str, output bytes beyond the (str_m-1) -th character
- * are discarded. If str_m is greater than zero it is guaranteed
- * the resulting string will be null-terminated.
- *
- * NOTE that this matches the ISO C99, OpenBSD, and GNU C library 2.1,
- * but is different from some older and vendor implementations,
- * and is also different from XPG, XSH5, SUSv2 specifications.
- * For historical discussion on changes in the semantics and standards
- * of snprintf see printf(3) man page in the Linux programmers manual.
+ * [...]
  *
  * Routines asprintf and vasprintf return a pointer (in the ptr argument)
  * to a buffer sufficiently large to hold the resulting string. This pointer
  * will return -1 and set ptr to be a NULL pointer. These two routines are a
  * GNU C library extensions (glibc).
  *
- * Routines asnprintf and vasnprintf are similar to asprintf and vasprintf,
- * yet, like snprintf and vsnprintf counterparts, will write at most str_m-1
- * characters into the allocated output string, the last character in the
- * allocated buffer then gets the terminating null. If the formatted string
- * length (the return value) is greater than or equal to the str_m argument,
- * the resulting string was truncated and some of the formatted characters
- * were discarded. These routines present a handy way to limit the amount
- * of allocated memory to some sane value.
- *
  * AVAILABILITY
  *   http://www.ijs.si/software/snprintf/
- *
- * REVISION HISTORY
- * 1999-04  V0.9  Mark Martinec
- *    - initial version, some modifications after comparing printf
- *      man pages for Digital Unix 4.0, Solaris 2.6 and HPUX 10,
- *      and checking how Perl handles sprintf (differently!);
- * 1999-04-09  V1.0  Mark Martinec <mark.martinec@ijs.si>
- *    - added main test program, fixed remaining inconsistencies,
- *      added optional (long long int) support;
- * 1999-04-12  V1.1  Mark Martinec <mark.martinec@ijs.si>
- *    - support the 'p' conversion (pointer to void);
- *    - if a string precision is specified
- *      make sure the string beyond the specified precision
- *      will not be referenced (e.g. by strlen);
- * 1999-04-13  V1.2  Mark Martinec <mark.martinec@ijs.si>
- *    - support synonyms %D=%ld, %U=%lu, %O=%lo;
- *    - speed up the case of long format string with few conversions;
- * 1999-06-30  V1.3  Mark Martinec <mark.martinec@ijs.si>
- *    - fixed runaway loop (eventually crashing when str_l wraps
- *      beyond 2^31) while copying format string without
- *      conversion specifiers to a buffer that is too short
- *      (thanks to Edwin Young <edwiny@autonomy.com> for
- *      spotting the problem);
- *    - added macros PORTABLE_SNPRINTF_VERSION_(MAJOR|MINOR)
- *      to snprintf.h
- * 2000-02-14  V2.0 (never released) Mark Martinec <mark.martinec@ijs.si>
- *    - relaxed license terms: The Artistic License now applies.
- *      You may still apply the GNU GENERAL PUBLIC LICENSE
- *      as was distributed with previous versions, if you prefer;
- *    - changed REVISION HISTORY dates to use ISO 8601 date format;
- *    - added vsnprintf (patch also independently proposed by
- *      Caolan McNamara 2000-05-04, and Keith M Willenson 2000-06-01)
- * 2000-06-27  V2.1  Mark Martinec <mark.martinec@ijs.si>
- *    - removed POSIX check for str_m<1; value 0 for str_m is
- *      allowed by ISO C99 (and GNU C library 2.1) - (pointed out
- *      on 2000-05-04 by Caolan McNamara, caolan@ csn dot ul dot ie).
- *      Besides relaxed license this change in standards adherence
- *      is the main reason to bump up the major version number;
- *    - added nonstandard routines asnprintf, vasnprintf, asprintf,
- *      vasprintf that dynamically allocate storage for the
- *      resulting string; these routines are not compiled by default,
- *      see comments where NEED_V?ASN?PRINTF macros are defined;
- *    - autoconf contributed by Caolan McNamara
- * 2000-10-06  V2.2  Mark Martinec <mark.martinec@ijs.si>
- *    - BUG FIX: the %c conversion used a temporary variable
- *      that was no longer in scope when referenced,
- *      possibly causing incorrect resulting character;
- *    - BUG FIX: make precision and minimal field width unsigned
- *      to handle huge values (2^31 <= n < 2^32) correctly;
- *      also be more careful in the use of signed/unsigned/size_t
- *      internal variables - probably more careful than many
- *      vendor implementations, but there may still be a case
- *      where huge values of str_m, precision or minimal field
- *      could cause incorrect behaviour;
- *    - use separate variables for signed/unsigned arguments,
- *      and for short/int, long, and long long argument lengths
- *      to avoid possible incompatibilities on certain
- *      computer architectures. Also use separate variable
- *      arg_sign to hold sign of a numeric argument,
- *      to make code more transparent;
- *    - some fiddling with zero padding and "0x" to make it
- *      Linux compatible;
- *    - systematically use macros fast_memcpy and fast_memset
- *      instead of case-by-case hand optimization; determine some
- *      breakeven string lengths for different architectures;
- *    - terminology change: 'format' -> 'conversion specifier',
- *      'C9x' -> 'ISO/IEC 9899:1999 ("ISO C99")',
- *      'alternative form' -> 'alternate form',
- *      'data type modifier' -> 'length modifier';
- *    - several comments rephrased and new ones added;
- *    - make compiler not complain about 'credits' defined but
- *      not used;
- */
-
-
-/* Define HAVE_SNPRINTF if your system already has snprintf and vsnprintf.
- *
- * If HAVE_SNPRINTF is defined this module will not produce code for
- * snprintf and vsnprintf, unless PREFER_PORTABLE_SNPRINTF is defined as well,
- * causing this portable version of snprintf to be called portable_snprintf
- * (and portable_vsnprintf).
- */
-/* #define HAVE_SNPRINTF */
-
-/* Define PREFER_PORTABLE_SNPRINTF if your system does have snprintf and
- * vsnprintf but you would prefer to use the portable routine(s) instead.
- * In this case the portable routine is declared as portable_snprintf
- * (and portable_vsnprintf) and a macro 'snprintf' (and 'vsnprintf')
- * is defined to expand to 'portable_v?snprintf' - see file snprintf.h .
- * Defining this macro is only useful if HAVE_SNPRINTF is also defined,
- * but does does no harm if defined nevertheless.
- */
-/* #define PREFER_PORTABLE_SNPRINTF */
-
-/* Define SNPRINTF_LONGLONG_SUPPORT if you want to support
- * data type (long long int) and length modifier 'll' (e.g. %lld).
- * If undefined, 'll' is recognized but treated as a single 'l'.
- *
- * If the system's sprintf does not handle 'll'
- * the SNPRINTF_LONGLONG_SUPPORT must not be defined!
- *
- * This is off by default as (long long int) is a language extension.
- */
-/* #define SNPRINTF_LONGLONG_SUPPORT */
-
-/* Define NEED_SNPRINTF_ONLY if you only need snprintf, and not vsnprintf.
- * If NEED_SNPRINTF_ONLY is defined, the snprintf will be defined directly,
- * otherwise both snprintf and vsnprintf routines will be defined
- * and snprintf will be a simple wrapper around vsnprintf, at the expense
- * of an extra procedure call.
  */
-/* #define NEED_SNPRINTF_ONLY */
-
-/* Define NEED_V?ASN?PRINTF macros if you need library extension
- * routines asprintf, vasprintf, asnprintf, vasnprintf respectively,
- * and your system library does not provide them. They are all small
- * wrapper routines around portable_vsnprintf. Defining any of the four
- * NEED_V?ASN?PRINTF macros automatically turns off NEED_SNPRINTF_ONLY
- * and turns on PREFER_PORTABLE_SNPRINTF.
- *
- * Watch for name conflicts with the system library if these routines
- * are already present there.
- *
- * NOTE: vasprintf and vasnprintf routines need va_copy() from stdarg.h, as
- * specified by C99, to be able to traverse the same list of arguments twice.
- * I don't know of any other standard and portable way of achieving the same.
- * With some versions of gcc you may use __va_copy(). You might even get away
- * with "ap2 = ap", in this case you must not call va_end(ap2) !
- *   #define va_copy(ap2,ap) ap2 = ap
- */
-/* #define NEED_ASPRINTF   */
-/* #define NEED_ASNPRINTF  */
-/* #define NEED_VASPRINTF  */
-/* #define NEED_VASNPRINTF */
-
-
-/* Define the following macros if desired:
- *   SOLARIS_COMPATIBLE, SOLARIS_BUG_COMPATIBLE,
- *   HPUX_COMPATIBLE, HPUX_BUG_COMPATIBLE, LINUX_COMPATIBLE,
- *   DIGITAL_UNIX_COMPATIBLE, DIGITAL_UNIX_BUG_COMPATIBLE,
- *   PERL_COMPATIBLE, PERL_BUG_COMPATIBLE,
- *
- * - For portable applications it is best not to rely on peculiarities
- *   of a given implementation so it may be best not to define any
- *   of the macros that select compatibility and to avoid features
- *   that vary among the systems.
- *
- * - Selecting compatibility with more than one operating system
- *   is not strictly forbidden but is not recommended.
- *
- * - 'x'_BUG_COMPATIBLE implies 'x'_COMPATIBLE .
- *
- * - 'x'_COMPATIBLE refers to (and enables) a behaviour that is
- *   documented in a sprintf man page on a given operating system
- *   and actually adhered to by the system's sprintf (but not on
- *   most other operating systems). It may also refer to and enable
- *   a behaviour that is declared 'undefined' or 'implementation specific'
- *   in the man page but a given implementation behaves predictably
- *   in a certain way.
- *
- * - 'x'_BUG_COMPATIBLE refers to (and enables) a behaviour of system's sprintf
- *   that contradicts the sprintf man page on the same operating system.
- *
- * - I do not claim that the 'x'_COMPATIBLE and 'x'_BUG_COMPATIBLE
- *   conditionals take into account all idiosyncrasies of a particular
- *   implementation, there may be other incompatibilities.
- */
-
-
-/* ============================================= */
-/* NO USER SERVICABLE PARTS FOLLOWING THIS POINT */
-/* ============================================= */
-
-#define PORTABLE_SNPRINTF_VERSION_MAJOR 2
-#define PORTABLE_SNPRINTF_VERSION_MINOR 2
-
-#if defined(NEED_ASPRINTF) || defined(NEED_ASNPRINTF) || defined(NEED_VASPRINTF) || defined(NEED_VASNPRINTF)
-# if defined(NEED_SNPRINTF_ONLY)
-# undef NEED_SNPRINTF_ONLY
-# endif
-# if !defined(PREFER_PORTABLE_SNPRINTF)
-# define PREFER_PORTABLE_SNPRINTF
-# endif
-#endif
-
-#if defined(SOLARIS_BUG_COMPATIBLE) && !defined(SOLARIS_COMPATIBLE)
-#define SOLARIS_COMPATIBLE
-#endif
-
-#if defined(HPUX_BUG_COMPATIBLE) && !defined(HPUX_COMPATIBLE)
-#define HPUX_COMPATIBLE
-#endif
-
-#if defined(DIGITAL_UNIX_BUG_COMPATIBLE) && !defined(DIGITAL_UNIX_COMPATIBLE)
-#define DIGITAL_UNIX_COMPATIBLE
-#endif
-
-#if defined(PERL_BUG_COMPATIBLE) && !defined(PERL_COMPATIBLE)
-#define PERL_COMPATIBLE
-#endif
-
-#if defined(LINUX_BUG_COMPATIBLE) && !defined(LINUX_COMPATIBLE)
-#define LINUX_COMPATIBLE
-#endif
-
-#include "src/portable.h"           /* to get a working stdarg.h */
 
-#include <sys/types.h>
-#include <string.h>
-#include <stdlib.h>
+#include "xbt/sysdep.h"           /* xbt_abort() */
+#include "src/internal_config.h"  /* Do we need vasprintf? */
 #include <stdio.h>
-#include <stdarg.h>
-
-#include <assert.h>
-#include <errno.h>
-#include "xbt/str.h"
-
-#ifdef isdigit
-#undef isdigit
-#endif
-#define isdigit(c) ((c) >= '0' && (c) <= '9')
-
-/* For copying strings longer or equal to 'breakeven_point'
- * it is more efficient to call memcpy() than to do it inline.
- * The value depends mostly on the processor architecture,
- * but also on the compiler and its optimization capabilities.
- * The value is not critical, some small value greater than zero
- * will be just fine if you don't care to squeeze every drop
- * of performance out of the code.
- *
- * Small values favor memcpy, large values favor inline code.
- */
-#if defined(__alpha__) || defined(__alpha)
-#  define breakeven_point   2   /* AXP (DEC Alpha)     - gcc or cc or egcs */
-#endif
-#if defined(__i386__)  || defined(__i386)
-#  define breakeven_point  12   /* Intel Pentium/Linux - gcc 2.96 */
-#endif
-#if defined(__hppa)
-#  define breakeven_point  10   /* HP-PA               - gcc */
-#endif
-#if defined(__sparc__) || defined(__sparc)
-#  define breakeven_point  33   /* Sun Sparc 5         - gcc 2.8.1 */
-#endif
-
-/* some other values of possible interest: */
-                                                                                                                                                                                                                                                                                                                                                                                                  /* #define breakeven_point  8 *//* VAX 4000          - vaxc */
-                                                                                                                                                                                                                                                                                                                                                                                                  /* #define breakeven_point 19 *//* VAX 4000          - gcc 2.7.0 */
-
-#ifndef breakeven_point
-#  define breakeven_point   6   /* some reasonable one-size-fits-all value */
-#endif
-
-#define fast_memcpy(d,s,n) \
-  { size_t nn = (size_t)(n); \
-  if (nn >= breakeven_point) memcpy((d), (s), nn); \
-  else if (nn > 0) { /* proc call overhead is worth only for large strings*/\
-  char *dd; const char *ss; \
-  for (ss=(s), dd=(d); nn>0; nn--) *dd++ = *ss++; } }
-
-#define fast_memset(d,c,n) \
-  { size_t nn = (size_t)(n); \
-  if (nn >= breakeven_point) memset((d), (int)(c), nn); \
-  else if (nn > 0) { /* proc call overhead is worth only for large strings*/\
-  char *dd; const int cc=(int)(c); \
-  for (dd=(d); nn>0; nn--) *dd++ = cc; } }
-
-/* prototypes */
-
 
-#if defined(NEED_ASPRINTF)
-int asprintf(char **ptr, const char *fmt, /*args */ ...);
-#endif
-#if defined(NEED_VASPRINTF)
+#if !defined(HAVE_VASPRINTF)
+#include <stdarg.h> /* vsnprintf */
 int vasprintf(char **ptr, const char *fmt, va_list ap);
-#endif
-
-#if defined(NEED_ASNPRINTF)
-int asnprintf(char **ptr, size_t str_m, const char *fmt, /*args */ ...);
-#endif
-#if defined(NEED_VASNPRINTF)
-int vasnprintf(char **ptr, size_t str_m, const char *fmt, va_list ap);
-#endif
-
-#if defined(HAVE_SNPRINTF)
-/* declare our portable snprintf  routine under name portable_snprintf  */
-/* declare our portable vsnprintf routine under name portable_vsnprintf */
-#  if defined(_MSC_VER) && (_MSC_VER >= 1400)
-#    define portable_snprintf  _snprintf
-#    define portable_vsnprintf  vsnprintf
-#  else
-#    define portable_snprintf  snprintf
-#    define portable_vsnprintf vsnprintf
-#  endif
-#else
-/* declare our portable routines under names snprintf and vsnprintf */
-#define portable_snprintf snprintf
-#if !defined(NEED_SNPRINTF_ONLY)
-#define portable_vsnprintf vsnprintf
-#endif
-#endif
-
-#if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF)
-int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args */
-                      ...);
-#if !defined(NEED_SNPRINTF_ONLY)
-int portable_vsnprintf(char *str, size_t str_m, const char *fmt,
-                       va_list ap);
-#endif
-#endif
-
-  /* FIXME: better place */
-#include "xbt/sysdep.h"
-
-/* declarations */
-
-/*
-    Old copyright
-    snprintf.c, v2.2: Mark Martinec, <mark.martinec@ijs.si>
-    snprintf.c, v2.2: Copyright 1999, Mark Martinec. Frontier Artistic License applies.
-    snprintf.c, v2.2: http://www.ijs.si/software/snprintf
-*/
-
-#if defined(NEED_ASPRINTF)
-int asprintf(char **ptr, const char *fmt, /*args */ ...)
-{
-  va_list ap;
-  size_t str_m;
-  int str_l;
-
-  *ptr = NULL;
-  va_start(ap, fmt);            /* measure the required size */
-  str_l = portable_vsnprintf(NULL, (size_t) 0, fmt, ap);
-  va_end(ap);
-  assert(str_l >= 0);           /* possible integer overflow if str_m > INT_MAX */
-  *ptr = (char *) xbt_malloc(str_m = (size_t) str_l + 1);
-  if (*ptr == NULL) {
-    errno = ENOMEM;
-    str_l = -1;
-  } else {
-    int str_l2;
-    va_start(ap, fmt);
-    str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);
-    va_end(ap);
-    assert(str_l2 == str_l);
-  }
-  return str_l;
-}
-#endif
-
-#if defined(NEED_VASPRINTF)
 int vasprintf(char **ptr, const char *fmt, va_list ap)
 {
   size_t str_m;
@@ -476,699 +65,19 @@ int vasprintf(char **ptr, const char *fmt, va_list ap)
   {
     va_list ap2;
     va_copy(ap2, ap);           /* don't consume the original ap, we'll need it again */
-    str_l = portable_vsnprintf(NULL, (size_t) 0, fmt, ap2);     /*get required size */
+    str_l = vsnprintf(NULL, (size_t) 0, fmt, ap2);     /*get required size */
     va_end(ap2);
   }
-  assert(str_l >= 0);           /* possible integer overflow if str_m > INT_MAX */
+  xbt_assert(str_l >= 0);           /* possible integer overflow if str_m > INT_MAX */
   *ptr = (char *) xbt_malloc(str_m = (size_t) str_l + 1);
-  if (*ptr == NULL) {
-    errno = ENOMEM;
-    str_l = -1;
-  } else {
-    int str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);
-    assert(str_l2 == str_l);
-  }
-  return str_l;
-}
-#endif
-
-#if defined(NEED_ASNPRINTF)
-int asnprintf(char **ptr, size_t str_m, const char *fmt, /*args */ ...)
-{
-  va_list ap;
-  int str_l;
-
-  *ptr = NULL;
-  va_start(ap, fmt);            /* measure the required size */
-  str_l = portable_vsnprintf(NULL, (size_t) 0, fmt, ap);
-  va_end(ap);
-  assert(str_l >= 0);           /* possible integer overflow if str_m > INT_MAX */
-  if ((size_t) str_l + 1 < str_m)
-    str_m = (size_t) str_l + 1; /* truncate */
-  /* if str_m is 0, no buffer is allocated, just set *ptr to NULL */
-  if (str_m == 0) {             /* not interested in resulting string, just return size */
-  } else {
-    *ptr = (char *) xbt_malloc(str_m);
-    if (*ptr == NULL) {
-      errno = ENOMEM;
-      str_l = -1;
-    } else {
-      int str_l2;
-      va_start(ap, fmt);
-      str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);
-      va_end(ap);
-      assert(str_l2 == str_l);
-    }
-  }
-  return str_l;
-}
-#endif
-
-#if defined(NEED_VASNPRINTF)
-int vasnprintf(char **ptr, size_t str_m, const char *fmt, va_list ap)
-{
-  int str_l;
 
-  *ptr = NULL;
-  {
-    va_list ap2;
-    va_copy(ap2, ap);           /* don't consume the original ap, we'll need it again */
-    str_l = portable_vsnprintf(NULL, (size_t) 0, fmt, ap2);     /*get required size */
-    va_end(ap2);
-  }
-  assert(str_l >= 0);           /* possible integer overflow if str_m > INT_MAX */
-  if ((size_t) str_l + 1 < str_m)
-    str_m = (size_t) str_l + 1; /* truncate */
-  /* if str_m is 0, no buffer is allocated, just set *ptr to NULL */
-  if (str_m == 0) {             /* not interested in resulting string, just return size */
-  } else {
-    *ptr = (char *) xbt_malloc(str_m);
-    if (*ptr == NULL) {
-      errno = ENOMEM;
-      str_l = -1;
-    } else {
-      int str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);
-      assert(str_l2 == str_l);
-    }
-  }
-  return str_l;
-}
-#endif
+  int str_l2 = vsnprintf(*ptr, str_m, fmt, ap);
+  assert(str_l2 == str_l);
 
-/*
- * If the system does have snprintf and the portable routine is not
- * specifically required, this module produces no code for snprintf/vsnprintf.
- */
-#if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF)
-
-#if !defined(NEED_SNPRINTF_ONLY)
-int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args */
-                      ...)
-{
-  va_list ap;
-  int str_l;
-
-  va_start(ap, fmt);
-  str_l = portable_vsnprintf(str, str_m, fmt, ap);
-  va_end(ap);
   return str_l;
 }
 #endif
 
-#if defined(NEED_SNPRINTF_ONLY)
-int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args */
-                      ...)
-{
-#else
-int portable_vsnprintf(char *str, size_t str_m, const char *fmt,
-                       va_list ap)
-{
-#endif
-
-#if defined(NEED_SNPRINTF_ONLY)
-  va_list ap;
-#endif
-  size_t str_l = 0;
-  const char *p = fmt;
-
-  /* In contrast with POSIX, the ISO C99 now says
-   * that str can be NULL and str_m can be 0.
-   * This is more useful than the old:  if (str_m < 1) return -1; */
-
-#if defined(NEED_SNPRINTF_ONLY)
-  va_start(ap, fmt);
-#endif
-  if (!p)
-    p = "";
-  while (*p) {
-    if (*p != '%') {
-      /* if (str_l < str_m) str[str_l++] = *p++;    -- this would be sufficient */
-      /* but the following code achieves better performance for cases
-       * where format string is long and contains few conversions */
-      const char *q = strchr(p + 1, '%');
-      size_t n = !q ? strlen(p) : (q - p);
-      if (str_l < str_m) {
-        size_t avail = str_m - str_l;
-        fast_memcpy(str + str_l, p, (n > avail ? avail : n));
-      }
-      p += n;
-      str_l += n;
-    } else {
-      const char *starting_p;
-      size_t min_field_width = 0, precision = 0;
-      int zero_padding = 0, precision_specified = 0, justify_left = 0;
-      int alternate_form = 0, force_sign = 0;
-      int space_for_positive = 1;       /* If both the ' ' and '+' flags appear,
-                                           the ' ' flag should be ignored. */
-      char length_modifier = '\0';      /* allowed values: \0, h, l, L */
-      char tmp[32];             /* temporary buffer for simple numeric->string conversion */
-
-      const char *str_arg;      /* string address in case of string argument */
-      size_t str_arg_l;         /* natural field width of arg without padding
-                                   and sign */
-      unsigned char uchar_arg;
-      /* unsigned char argument value - only defined for c conversion.
-         N.B. standard explicitly states the char argument for
-         the c conversion is unsigned */
-
-      size_t number_of_zeros_to_pad = 0;
-      /* number of zeros to be inserted for numeric conversions
-         as required by the precision or minimal field width */
-
-      size_t zero_padding_insertion_ind = 0;
-      /* index into tmp where zero padding is to be inserted */
-
-      char fmt_spec = '\0';
-      /* current conversion specifier character */
-
-      str_arg = credits;        /* just to make compiler happy (defined but not used) */
-      str_arg = NULL;
-      starting_p = p;
-      p++;                      /* skip '%' */
-      /* parse flags */
-      while (*p == '0' || *p == '-' || *p == '+' ||
-             *p == ' ' || *p == '#' || *p == '\'') {
-        switch (*p) {
-        case '0':
-          zero_padding = 1;
-          break;
-        case '-':
-          justify_left = 1;
-          break;
-        case '+':
-          force_sign = 1;
-          space_for_positive = 0;
-          break;
-        case ' ':
-          force_sign = 1;
-          /* If both the ' ' and '+' flags appear, the ' ' flag should be ignored */
-#ifdef PERL_COMPATIBLE
-          /* ... but in Perl the last of ' ' and '+' applies */
-          space_for_positive = 1;
-#endif
-          break;
-        case '#':
-          alternate_form = 1;
-          break;
-        case '\'':
-          break;
-        }
-        p++;
-      }
-      /* If the '0' and '-' flags both appear, the '0' flag should be ignored. */
-
-      /* parse field width */
-      if (*p == '*') {
-        int j;
-        p++;
-        j = va_arg(ap, int);
-        if (j >= 0)
-          min_field_width = j;
-        else {
-          min_field_width = -j;
-          justify_left = 1;
-        }
-      } else if (isdigit((int) (*p))) {
-        /* size_t could be wider than unsigned int;
-           make sure we treat argument like common implementations do */
-        unsigned int uj = *p++ - '0';
-        while (isdigit((int) (*p)))
-          uj = 10 * uj + (unsigned int) (*p++ - '0');
-        min_field_width = uj;
-      }
-      /* parse precision */
-      if (*p == '.') {
-        p++;
-        precision_specified = 1;
-        if (*p == '*') {
-          int j = va_arg(ap, int);
-          p++;
-          if (j >= 0)
-            precision = j;
-          else {
-            precision_specified = 0;
-            precision = 0;
-            /* NOTE:
-             *   Solaris 2.6 man page claims that in this case the precision
-             *   should be set to 0.  Digital Unix 4.0, HPUX 10 and BSD man page
-             *   claim that this case should be treated as unspecified precision,
-             *   which is what we do here.
-             */
-          }
-        } else if (isdigit((int) (*p))) {
-          /* size_t could be wider than unsigned int;
-             make sure we treat argument like common implementations do */
-          unsigned int uj = *p++ - '0';
-          while (isdigit((int) (*p)))
-            uj = 10 * uj + (unsigned int) (*p++ - '0');
-          precision = uj;
-        }
-      }
-      /* parse 'h', 'l' and 'll' length modifiers */
-      if (*p == 'h' || *p == 'l') {
-        length_modifier = *p;
-        p++;
-        if (length_modifier == 'l' && *p == 'l') {      /* double l = long long */
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-          length_modifier = '2';        /* double l encoded as '2' */
-#else
-          length_modifier = 'l';        /* treat it as a single 'l' */
-#endif
-          p++;
-        }
-      }
-      fmt_spec = *p;
-      /* common synonyms: */
-      switch (fmt_spec) {
-      case 'i':
-        fmt_spec = 'd';
-        break;
-      case 'D':
-        fmt_spec = 'd';
-        length_modifier = 'l';
-        break;
-      case 'U':
-        fmt_spec = 'u';
-        length_modifier = 'l';
-        break;
-      case 'O':
-        fmt_spec = 'o';
-        length_modifier = 'l';
-        break;
-      default:
-        break;
-      }
-      /* get parameter value, do initial processing */
-      switch (fmt_spec) {
-      case '%':                /* % behaves similar to 's' regarding flags and field widths */
-      case 'c':                /* c behaves similar to 's' regarding flags and field widths */
-      case 's':
-        length_modifier = '\0'; /* wint_t and wchar_t not supported */
-        /* the result of zero padding flag with non-numeric conversion specifier */
-        /* is undefined. Solaris and HPUX 10 does zero padding in this case,    */
-        /* Digital Unix and Linux does not. */
-#if !defined(SOLARIS_COMPATIBLE) && !defined(HPUX_COMPATIBLE)
-        zero_padding = 0;       /* turn zero padding off for string conversions */
-#endif
-        str_arg_l = 1;
-        switch (fmt_spec) {
-        case '%':
-          str_arg = p;
-          break;
-        case 'c':{
-            int j = va_arg(ap, int);
-            uchar_arg = (unsigned char) j;      /* standard demands unsigned char */
-            str_arg = (const char *) &uchar_arg;
-            break;
-          }
-        case 's':
-          str_arg = va_arg(ap, const char *);
-          if (!str_arg)
-            str_arg_l = 0;
-          /* make sure not to address string beyond the specified precision !!! */
-          else if (!precision_specified)
-            str_arg_l = strlen(str_arg);
-          /* truncate string if necessary as requested by precision */
-          else if (precision == 0)
-            str_arg_l = 0;
-          else {
-            /* memchr on HP does not like n > 2^31  !!! */
-            char *q = (char *) memchr(str_arg, '\0',
-                                      precision <=
-                                      0x7fffffff ? precision : 0x7fffffff);
-            str_arg_l = !q ? precision : (q - str_arg);
-          }
-          break;
-        default:
-          break;
-        }
-        break;
-      case 'd':
-      case 'u':
-      case 'o':
-      case 'x':
-      case 'X':
-      case 'p':{
-          /* NOTE: the u, o, x, X and p conversion specifiers imply
-             the value is unsigned;  d implies a signed value */
-
-          int arg_sign = 0;
-          /* 0 if numeric argument is zero (or if pointer is NULL for 'p'),
-             +1 if greater than zero (or nonzero for unsigned arguments),
-             -1 if negative (unsigned argument is never negative) */
-
-          int int_arg = 0;
-          unsigned int uint_arg = 0;
-          /* only defined for length modifier h, or for no length modifiers */
-
-          long int long_arg = 0;
-          unsigned long int ulong_arg = 0;
-          /* only defined for length modifier l */
-
-          void *ptr_arg = NULL;
-          /* pointer argument value -only defined for p conversion */
-
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-          long long int long_long_arg = 0;
-          unsigned long long int ulong_long_arg = 0;
-          /* only defined for length modifier ll */
-#endif
-          if (fmt_spec == 'p') {
-            /* HPUX 10: An l, h, ll or L before any other conversion character
-             *   (other than d, i, u, o, x, or X) is ignored.
-             * Digital Unix:
-             *   not specified, but seems to behave as HPUX does.
-             * Solaris: If an h, l, or L appears before any other conversion
-             *   specifier (other than d, i, u, o, x, or X), the behavior
-             *   is undefined. (Actually %hp converts only 16-bits of address
-             *   and %llp treats address as 64-bit data which is incompatible
-             *   with (void *) argument on a 32-bit system).
-             */
-#ifdef SOLARIS_COMPATIBLE
-#  ifdef SOLARIS_BUG_COMPATIBLE
-            /* keep length modifiers even if it represents 'll' */
-#  else
-            if (length_modifier == '2')
-              length_modifier = '\0';
-#  endif
-#else
-            length_modifier = '\0';
-#endif
-            ptr_arg = va_arg(ap, void *);
-            if (ptr_arg != NULL)
-              arg_sign = 1;
-          } else if (fmt_spec == 'd') { /* signed */
-            switch (length_modifier) {
-            case '\0':
-            case 'h':
-              /* It is non-portable to specify a second argument of char or short
-               * to va_arg, because arguments seen by the called function
-               * are not char or short.  C converts char and short arguments
-               * to int before passing them to a function.
-               */
-              int_arg = va_arg(ap, int);
-              if (int_arg > 0)
-                arg_sign = 1;
-              else if (int_arg < 0)
-                arg_sign = -1;
-              break;
-            case 'l':
-              long_arg = va_arg(ap, long int);
-              if (long_arg > 0)
-                arg_sign = 1;
-              else if (long_arg < 0)
-                arg_sign = -1;
-              break;
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-            case '2':
-              long_long_arg = va_arg(ap, long long int);
-              if (long_long_arg > 0)
-                arg_sign = 1;
-              else if (long_long_arg < 0)
-                arg_sign = -1;
-              break;
-#endif
-            }
-          } else {              /* unsigned */
-            switch (length_modifier) {
-            case '\0':
-            case 'h':
-              uint_arg = va_arg(ap, unsigned int);
-              if (uint_arg)
-                arg_sign = 1;
-              break;
-            case 'l':
-              ulong_arg = va_arg(ap, unsigned long int);
-              if (ulong_arg)
-                arg_sign = 1;
-              break;
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-            case '2':
-              ulong_long_arg = va_arg(ap, unsigned long long int);
-              if (ulong_long_arg)
-                arg_sign = 1;
-              break;
-#endif
-            }
-          }
-          str_arg = tmp;
-          str_arg_l = 0;
-          /* NOTE:
-           *   For d, i, u, o, x, and X conversions, if precision is specified,
-           *   the '0' flag should be ignored. This is so with Solaris 2.6,
-           *   Digital UNIX 4.0, HPUX 10, Linux, FreeBSD, NetBSD; but not with Perl.
-           */
-#ifndef PERL_COMPATIBLE
-          if (precision_specified)
-            zero_padding = 0;
-#endif
-          if (fmt_spec == 'd') {
-            if (force_sign && arg_sign >= 0)
-              tmp[str_arg_l++] = space_for_positive ? ' ' : '+';
-            /* leave negative numbers for sprintf to handle,
-               to avoid handling tricky cases like (short int)(-32768) */
-#ifdef LINUX_COMPATIBLE
-          } else if (fmt_spec == 'p' && force_sign && arg_sign > 0) {
-            tmp[str_arg_l++] = space_for_positive ? ' ' : '+';
-#endif
-          } else if (alternate_form) {
-            if (arg_sign != 0 && (fmt_spec == 'x' || fmt_spec == 'X')) {
-              tmp[str_arg_l++] = '0';
-              tmp[str_arg_l++] = fmt_spec;
-            }
-            /* alternate form should have no effect for p conversion, but ... */
-#ifdef HPUX_COMPATIBLE
-            else if (fmt_spec == 'p'
-                     /* HPUX 10: for an alternate form of p conversion,
-                      *          a nonzero result is prefixed by 0x. */
-#ifndef HPUX_BUG_COMPATIBLE
-                     /* Actually it uses 0x prefix even for a zero value. */
-                     && arg_sign != 0
-#endif
-                ) {
-              tmp[str_arg_l++] = '0';
-              tmp[str_arg_l++] = 'x';
-            }
-#endif
-          }
-          zero_padding_insertion_ind = str_arg_l;
-          if (!precision_specified)
-            precision = 1;      /* default precision is 1 */
-          if (precision == 0 && arg_sign == 0
-#if defined(HPUX_BUG_COMPATIBLE) || defined(LINUX_COMPATIBLE)
-              && fmt_spec != 'p'
-              /* HPUX 10 man page claims: With conversion character p the result of
-               * converting a zero value with a precision of zero is a null string.
-               * Actually HP returns all zeroes, and Linux returns "(nil)". */
-#endif
-              ) {
-            /* converted to null string */
-            /* When zero value is formatted with an explicit precision 0,
-               the resulting formatted string is empty (d, i, u, o, x, X, p).   */
-          } else {
-            char f[5];
-            int f_l = 0;
-            f[f_l++] = '%';     /* construct a simple format string for sprintf */
-            if (!length_modifier) {
-            } else if (length_modifier == '2') {
-              f[f_l++] = 'l';
-              f[f_l++] = 'l';
-            } else
-              f[f_l++] = length_modifier;
-            f[f_l++] = fmt_spec;
-            f[f_l++] = '\0';
-            if (fmt_spec == 'p')
-              str_arg_l += sprintf(tmp + str_arg_l, f, ptr_arg);
-            else if (fmt_spec == 'd') { /* signed */
-              switch (length_modifier) {
-              case '\0':
-              case 'h':
-                str_arg_l += sprintf(tmp + str_arg_l, f, int_arg);
-                break;
-              case 'l':
-                str_arg_l += sprintf(tmp + str_arg_l, f, long_arg);
-                break;
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-              case '2':
-                str_arg_l += sprintf(tmp + str_arg_l, f, long_long_arg);
-                break;
-#endif
-              }
-            } else {            /* unsigned */
-              switch (length_modifier) {
-              case '\0':
-              case 'h':
-                str_arg_l += sprintf(tmp + str_arg_l, f, uint_arg);
-                break;
-              case 'l':
-                str_arg_l += sprintf(tmp + str_arg_l, f, ulong_arg);
-                break;
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-              case '2':
-                str_arg_l += sprintf(tmp + str_arg_l, f, ulong_long_arg);
-                break;
-#endif
-              }
-            }
-            /* include the optional minus sign and possible "0x"
-               in the region before the zero padding insertion point */
-            if (zero_padding_insertion_ind < str_arg_l &&
-                tmp[zero_padding_insertion_ind] == '-') {
-              zero_padding_insertion_ind++;
-            }
-            if (zero_padding_insertion_ind + 1 < str_arg_l &&
-                tmp[zero_padding_insertion_ind] == '0' &&
-                (tmp[zero_padding_insertion_ind + 1] == 'x' ||
-                 tmp[zero_padding_insertion_ind + 1] == 'X')) {
-              zero_padding_insertion_ind += 2;
-            }
-          }
-          {
-            size_t num_of_digits = str_arg_l - zero_padding_insertion_ind;
-            if (alternate_form && fmt_spec == 'o'
-#ifdef HPUX_COMPATIBLE          /* ("%#.o",0) -> ""  */
-                && (str_arg_l > 0)
-#endif
-#ifdef DIGITAL_UNIX_BUG_COMPATIBLE      /* ("%#o",0) -> "00" */
-#else
-                /* unless zero is already the first character */
-                && !(zero_padding_insertion_ind < str_arg_l
-                     && tmp[zero_padding_insertion_ind] == '0')
-#endif
-                ) {             /* assure leading zero for alternate-form octal numbers */
-              if (!precision_specified || precision < num_of_digits + 1) {
-                /* precision is increased to force the first character to be zero,
-                   except if a zero value is formatted with an explicit precision
-                   of zero */
-                precision = num_of_digits + 1;
-                precision_specified = 1;
-              }
-            }
-            /* zero padding to specified precision? */
-            if (num_of_digits < precision)
-              number_of_zeros_to_pad = precision - num_of_digits;
-          }
-          /* zero padding to specified minimal field width? */
-          if (!justify_left && zero_padding) {
-            int n = min_field_width - (str_arg_l + number_of_zeros_to_pad);
-            if (n > 0)
-              number_of_zeros_to_pad += n;
-          }
-          break;
-        }
-      default:                 /* unrecognized conversion specifier, keep format string as-is */
-        zero_padding = 0;       /* turn zero padding off for non-numeric convers. */
-#ifndef DIGITAL_UNIX_COMPATIBLE
-        justify_left = 1;
-        min_field_width = 0;    /* reset flags */
-#endif
-#if defined(PERL_COMPATIBLE) || defined(LINUX_COMPATIBLE)
-        /* keep the entire format string unchanged */
-        str_arg = starting_p;
-        str_arg_l = p - starting_p;
-        /* well, not exactly so for Linux, which does something inbetween,
-         * and I don't feel an urge to imitate it: "%+++++hy" -> "%+y"  */
-#else
-        /* discard the unrecognized conversion, just keep *
-         * the unrecognized conversion character          */
-        str_arg = p;
-        str_arg_l = 0;
-#endif
-        if (*p)
-          str_arg_l++;          /* include invalid conversion specifier unchanged
-                                   if not at end-of-string */
-        break;
-      }
-      if (*p)
-        p++;                    /* step over the just processed conversion specifier */
-      /* insert padding to the left as requested by min_field_width;
-         this does not include the zero padding in case of numerical conversions */
-      if (!justify_left) {      /* left padding with blank or zero */
-        int n = min_field_width - (str_arg_l + number_of_zeros_to_pad);
-        if (n > 0) {
-          if (str_l < str_m) {
-            int avail = str_m - str_l;
-            fast_memset(str + str_l, (zero_padding ? '0' : ' '),
-                        (n > avail ? avail : n));
-          }
-          str_l += n;
-        }
-      }
-      /* zero padding as requested by the precision or by the minimal field width
-       * for numeric conversions required? */
-      if (number_of_zeros_to_pad <= 0) {
-        /* will not copy first part of numeric right now, *
-         * force it to be copied later in its entirety    */
-        zero_padding_insertion_ind = 0;
-      } else {
-        /* insert first part of numerics (sign or '0x') before zero padding */
-        int n = zero_padding_insertion_ind;
-        if (n > 0) {
-          if (str_l < str_m) {
-            int avail = str_m - str_l;
-            fast_memcpy(str + str_l, str_arg, (n > avail ? avail : n));
-          }
-          str_l += n;
-        }
-        /* insert zero padding as requested by the precision or min field width */
-        n = number_of_zeros_to_pad;
-        if (n > 0) {
-          if (str_l < str_m) {
-            int avail = str_m - str_l;
-            fast_memset(str + str_l, '0', (n > avail ? avail : n));
-          }
-          str_l += n;
-        }
-      }
-      /* insert formatted string
-       * (or as-is conversion specifier for unknown conversions) */
-      {
-        int n = str_arg_l - zero_padding_insertion_ind;
-        if (n > 0) {
-          if (str_l < str_m) {
-            int avail = str_m - str_l;
-            fast_memcpy(str + str_l, str_arg + zero_padding_insertion_ind,
-                        (n > avail ? avail : n));
-          }
-          str_l += n;
-        }
-      }
-      /* insert right padding */
-      if (justify_left) {       /* right blank padding to the field width */
-        int n = min_field_width - (str_arg_l + number_of_zeros_to_pad);
-        if (n > 0) {
-          if (str_l < str_m) {
-            int avail = str_m - str_l;
-            fast_memset(str + str_l, ' ', (n > avail ? avail : n));
-          }
-          str_l += n;
-        }
-      }
-    }
-  }
-#if defined(NEED_SNPRINTF_ONLY)
-  va_end(ap);
-#endif
-  if (str_m > 0) {              /* make sure the string is null-terminated
-                                   even at the expense of overwriting the last character
-                                   (shouldn't happen, but just in case) */
-    str[str_l <= str_m - 1 ? str_l : str_m - 1] = '\0';
-  }
-  /* Return the number of characters formatted (excluding trailing null
-   * character), that is, the number of characters that would have been
-   * written to the buffer if it were large enough.
-   *
-   * The value of str_l should be returned, but str_l is of unsigned type
-   * size_t, and snprintf is int, possibly leading to an undetected
-   * integer overflow, resulting in a negative return value, which is illegal.
-   * Both XSH5 and ISO C99 (at least the draft) are silent on this issue.
-   * Should errno be set to EOVERFLOW and EOF returned in this case???
-   */
-  return (int) str_l;
-}
-#endif
-
-
 char *bvprintf(const char *fmt, va_list ap)
 {
   char *res;
@@ -1185,10 +94,9 @@ char *bvprintf(const char *fmt, va_list ap)
 char *bprintf(const char *fmt, ...)
 {
   va_list ap;
-  char *res;
 
   va_start(ap, fmt);
-  res = bvprintf(fmt, ap);
+  char *res = bvprintf(fmt, ap);
   va_end(ap);
   return res;
 }
index 9cb965c..3e37abd 100644 (file)
@@ -158,18 +158,6 @@ xbt_matrix_t xbt_matrix_double_new_id(int lines, int rows)
   return res;
 }
 
-/** \brief Creates a new matrix of double randomly filled */
-xbt_matrix_t xbt_matrix_double_new_rand(int lines, int rows)
-{
-  xbt_matrix_t res = xbt_matrix_new(lines, rows, sizeof(double), NULL);
-  int i, j;
-
-  for (i = 0; i < lines; i++)
-    for (j = 0; j < rows; j++)
-      xbt_matrix_get_as(res, i, j, double) = (double) rand();
-  return res;
-}
-
 /** \brief Creates a new matrix of double containing the sequence of numbers in order */
 xbt_matrix_t xbt_matrix_double_new_seq(int lines, int rows)
 {
@@ -182,29 +170,6 @@ xbt_matrix_t xbt_matrix_double_new_seq(int lines, int rows)
   return res;
 }
 
-/** \brief Checks whether the matrix contains the sequence of numbers */
-int xbt_matrix_double_is_seq(xbt_matrix_t mat)
-{
-  unsigned int i;
-
-  for (i = 0; i < mat->lines * mat->rows; i++) {
-    double val = xbt_matrix_get_as(mat, i, 0, double);
-    if (val != i)
-      return 0;
-  }
-
-  return 1;
-}
-
-/** \brief Creates a new matrix being the multiplication of two others */
-xbt_matrix_t xbt_matrix_double_new_mult(xbt_matrix_t A, xbt_matrix_t B)
-{
-  xbt_matrix_t result = xbt_matrix_double_new_zeros(A->lines, B->rows);
-
-  xbt_matrix_double_addmult(A, B, result);
-  return result;
-}
-
 /** \brief add to C the result of A*B */
 void xbt_matrix_double_addmult(xbt_matrix_t A, xbt_matrix_t B,
                                /*OUT*/ xbt_matrix_t C)
index 9be103f..0532a81 100644 (file)
@@ -55,19 +55,11 @@ xbt_replay_reader_t xbt_replay_reader_new(const char *filename)
 {
   xbt_replay_reader_t res = xbt_new0(s_xbt_replay_reader_t,1);
   res->fp = fopen(filename, "r");
-  if (res->fp == NULL)
-    xbt_die("Cannot open %s: %s", filename, strerror(errno));
+  xbt_assert(res->fp != NULL, "Cannot open %s: %s", filename, strerror(errno));
   res->filename = xbt_strdup(filename);
   return res;
 }
 
-const char *xbt_replay_reader_position(xbt_replay_reader_t reader)
-{
-  free(reader->position);
-  reader->position = bprintf("%s:%d",reader->filename,reader->linenum);
-  return reader->position;
-}
-
 const char **xbt_replay_reader_get(xbt_replay_reader_t reader)
 {
   ssize_t read;
@@ -121,18 +113,6 @@ void xbt_replay_action_register(const char *action_name, action_fun function)
   xbt_free(lowername);
 }
 
-/** \ingroup XBT_replay
- * \brief Unregisters a function, which handled a kind of action
- *
- * \param action_name the reference name of the action.
- */
-void xbt_replay_action_unregister(const char *action_name)
-{
-  char* lowername = str_tolower (action_name);
-  xbt_dict_remove(xbt_action_funs, lowername);
-  xbt_free(lowername);
-}
-
 /** @brief Initializes the replay mechanism, and returns true if (and only if) it was necessary
  *
  * It returns false if it was already done by another process.
@@ -180,8 +160,7 @@ int xbt_replay_action_runner(int argc, char *argv[])
       }
       CATCH(e) {
         free(evt);
-        xbt_die("Replay error :\n %s"
-                  , e.msg);
+        xbt_die("Replay error :\n %s", e.msg);
       }
       for (i=0;evt[i]!= NULL;i++)
         free(evt[i]);
@@ -205,12 +184,10 @@ int xbt_replay_action_runner(int argc, char *argv[])
         }
         CATCH(e) {
           free(evt);
-          xbt_die("Replay error on line %d of file %s :\n %s"
-                     , reader->linenum,reader->filename, e.msg);               
+          xbt_die("Replay error on line %d of file %s :\n %s" , reader->linenum,reader->filename, e.msg);
         }
       } else {
-        XBT_WARN("%s: Ignore trace element not for me",
-              xbt_replay_reader_position(reader));
+        XBT_WARN("%s:%d: Ignore trace element not for me", reader->filename, reader->linenum);
       }
       free(evt);
     }
index d6223e2..aa3dd12 100644 (file)
@@ -15,6 +15,7 @@
 
 #include "xbt/sysdep.h"
 #include "xbt/hash.h"
+#include <stdio.h> /* sprintf */
 
 struct s_xbt_sha_ {
   unsigned int hash[5];
@@ -31,11 +32,8 @@ static void sha_calculate(xbt_sha_t sha);
 /** @brief constructor */
 xbt_sha_t xbt_sha_new(void)
 {
-  xbt_sha_t sha;
-
-  sha = xbt_new(s_xbt_sha_t, 1);
+  xbt_sha_t sha = xbt_new(s_xbt_sha_t, 1);
   xbt_sha_reset(sha);
-
   return sha;
 }
 
index cee4235..14f928f 100644 (file)
@@ -124,50 +124,6 @@ void xbt_str_trim(char *s, const char *char_list)
   xbt_str_ltrim(s, char_list);
 }
 
-/**  @brief Replace double whitespaces (but no other characters) from the string.
- *
- * The function modifies the string so that each time that several spaces appear,
- * they are replaced by a single space. It will only do so for spaces (ASCII 32, 0x20).
- *
- * @param s The string to strip. Modified in place.
- *
- */
-void xbt_str_strip_spaces(char *s)
-{
-  char *p = s;
-  int e = 0;
-
-  if (!s)
-    return;
-
-  while (1) {
-    if (!*p)
-      goto end;
-
-    if (*p != ' ')
-      break;
-
-    p++;
-  }
-
-  e = 1;
-
-  do {
-    if (e)
-      *s++ = *p;
-
-    if (!*++p)
-      goto end;
-
-    if (e ^ (*p != ' '))
-      if ((e = !e))
-        *s++ = ' ';
-  } while (1);
-
-end:
-  *s = '\0';
-}
-
 /** @brief Substitutes a char for another in a string
  *
  * @param str the string to modify
@@ -520,317 +476,6 @@ char *xbt_str_join_array(const char *const *strs, const char *sep)
   return res;
 }
 
-/*
- * Diff related functions
- *
- * Implementation of the algorithm described in "An O(NP) Sequence Comparison
- * Algorithm", by Sun Wu, Udi Manber, Gene Myers, and Webb Miller (Information
- * Processing Letters 35(6):317-323, 1990), with the linear-space
- * divide-and-conquer strategy described in "An O(ND) Difference Algorithm and
- * Its Variations", by Eugene W. Myers (Algorithmica 1:251-266, 1986).
- */
-
-struct subsequence {
-    int x, y;                   /* starting coordinates */
-    int len;                    /* length */
-};
-
-static XBT_INLINE
-void diff_snake(const char *vec_a[], int a0, int len_a,
-                const char *vec_b[], int b0, int len_b,
-                struct subsequence *seqs, int *fp, int k, int limit)
-{
-  int record_seq;
-  int x, y;
-  int fp_left = fp[k - 1] + 1;
-  int fp_right = fp[k + 1];
-  if (fp_left > fp_right) {
-    x = fp_left;
-    record_seq = k - 1;
-  } else {
-    x = fp_right;
-    record_seq = k + 1;
-  }
-  y = x - k;
-  if (x + y <= limit) {
-    seqs[k].x = x;
-    seqs[k].y = y;
-    record_seq = k;
-  } else {
-    seqs[k] = seqs[record_seq];
-  }
-  while (x < len_a && y < len_b && !strcmp(vec_a[a0 + x], vec_b[b0 + y]))
-    ++x, ++y;
-  fp[k] = x;
-  if (record_seq == k)
-    seqs[k].len = x - seqs[k].x;
-}
-
-/* Returns the length of a shortest edit script, and a common
- * subsequence from the middle.
- */
-static int diff_middle_subsequence(const char *vec_a[], int a0,  int len_a,
-                                   const char *vec_b[], int b0,  int len_b,
-                                   struct subsequence *subseq,
-                                   struct subsequence *seqs, int *fp)
-{
-  const int delta = len_a - len_b;
-  const int limit = (len_a + len_b) / 2;
-  int kmin;
-  int kmax;
-  int k;
-  int p = -1;
-
-  if (delta >= 0) {
-    kmin = 0;
-    kmax = delta;
-  } else {
-    kmin = delta;
-    kmax = 0;
-  }
-  for (k = kmin; k <= kmax; k++)
-    fp[k] = -1;
-  do {
-    p++;
-    fp[kmin - p - 1] = fp[kmax + p + 1] = -1;
-    for (k = kmax + p; k > delta; k--)
-      diff_snake(vec_a, a0, len_a, vec_b, b0, len_b, seqs, fp, k, limit);
-    for (k = kmin - p; k <= delta; k++)
-      diff_snake(vec_a, a0, len_a, vec_b, b0, len_b, seqs, fp, k, limit);
-  } while (fp[delta] != len_a);
-
-  subseq->x = a0 + seqs[delta].x;
-  subseq->y = b0 + seqs[delta].y;
-  subseq->len = seqs[delta].len;
-  return abs(delta) + 2 * p;;
-}
-
-/* Finds a longest common subsequence.
- * Returns its length.
- */
-static int diff_compute_lcs(const char *vec_a[], int a0, int len_a,
-                            const char *vec_b[], int b0, int len_b,
-                            xbt_dynar_t common_sequence,
-                            struct subsequence *seqs, int *fp)
-{
-  if (len_a > 0 && len_b > 0) {
-    struct subsequence subseq;
-    int ses_len = diff_middle_subsequence(vec_a, a0, len_a, vec_b, b0, len_b,
-                                          &subseq, seqs, fp);
-    int lcs_len = (len_a + len_b - ses_len) / 2;
-    if (lcs_len == 0) {
-      return 0;
-    } else if (ses_len > 1) {
-      int lcs_len1 = subseq.len;
-      if (lcs_len1 < lcs_len)
-        lcs_len1 += diff_compute_lcs(vec_a, a0, subseq.x - a0,
-                                     vec_b, b0, subseq.y - b0,
-                                     common_sequence, seqs, fp);
-      if (subseq.len > 0)
-        xbt_dynar_push(common_sequence, &subseq);
-      if (lcs_len1 < lcs_len) {
-        int u = subseq.x + subseq.len;
-        int v = subseq.y + subseq.len;
-        diff_compute_lcs(vec_a, u, a0 + len_a - u, vec_b, v, b0 + len_b - v,
-                         common_sequence, seqs, fp);
-      }
-    } else {
-      int len = MIN(len_a, len_b) - subseq.len;
-      if (subseq.x == a0 && subseq.y == b0) {
-        if (subseq.len > 0)
-          xbt_dynar_push(common_sequence, &subseq);
-        if (len > 0) {
-          struct subsequence subseq0 = {a0 + len_a - len,
-                                        b0 + len_b - len, len};
-          xbt_dynar_push(common_sequence, &subseq0);
-        }
-      } else {
-        if (len > 0) {
-          struct subsequence subseq0 = {a0, b0, len};
-          xbt_dynar_push(common_sequence, &subseq0);
-        }
-        if (subseq.len > 0)
-          xbt_dynar_push(common_sequence, &subseq);
-      }
-    }
-    return lcs_len;
-  } else {
-    return 0;
-  }
-}
-
-static int diff_member(const char *s, const char *vec[], int from, int to)
-{
-  for ( ; from < to ; from++)
-    if (!strcmp(s, vec[from]))
-      return 1;
-  return 0;
-}
-
-/* Extract common prefix.
- */
-static void diff_easy_prefix(const char *vec_a[], int *a0_p, int *len_a_p,
-                             const char *vec_b[], int *b0_p, int *len_b_p,
-                             xbt_dynar_t common_sequence)
-{
-  int a0 = *a0_p;
-  int b0 = *b0_p;
-  int len_a = *len_a_p;
-  int len_b = *len_b_p;
-
-  while (len_a > 0 && len_b > 0) {
-    struct subsequence subseq = {a0, b0, 0};
-    while (len_a > 0 && len_b > 0 && !strcmp(vec_a[a0], vec_b[b0])) {
-      a0++, len_a--;
-      b0++, len_b--;
-      subseq.len++;
-    }
-    if (subseq.len > 0)
-      xbt_dynar_push(common_sequence, &subseq);
-    if (len_a > 0 && len_b > 0 &&
-        !diff_member(vec_a[a0], vec_b, b0 + 1, b0 + len_b)) {
-      a0++, len_a--;
-    } else {
-      break;
-    }
-  }
-
-  *a0_p = a0;
-  *b0_p = b0;
-  *len_a_p = len_a;
-  *len_b_p = len_b;
-}
-
-/* Extract common suffix.
- */
-static void diff_easy_suffix(const char *vec_a[], int *a0_p, int *len_a_p,
-                             const char *vec_b[], int *b0_p, int *len_b_p,
-                             xbt_dynar_t common_suffix)
-{
-  int a0 = *a0_p;
-  int b0 = *b0_p;
-  int len_a = *len_a_p;
-  int len_b = *len_b_p;
-
-  while (len_a > 0 && len_b > 0){
-    struct subsequence subseq;
-    subseq.len = 0;
-    while (len_a > 0 && len_b > 0 &&
-           !strcmp(vec_a[a0 + len_a - 1], vec_b[b0 + len_b - 1])) {
-      len_a--;
-      len_b--;
-      subseq.len++;
-    }
-    if (subseq.len > 0) {
-      subseq.x = a0 + len_a;
-      subseq.y = b0 + len_b;
-      xbt_dynar_push(common_suffix, &subseq);
-    }
-    if (len_a > 0 && len_b > 0 &&
-        !diff_member(vec_b[b0 + len_b - 1], vec_a, a0, a0 + len_a - 1)) {
-      len_b--;
-    } else {
-      break;
-    }
-  }
-
-  *a0_p = a0;
-  *b0_p = b0;
-  *len_a_p = len_a;
-  *len_b_p = len_b;
-}
-
-/** @brief Compute the unified diff of two strings */
-char *xbt_str_diff(const char *a, const char *b)
-{
-  xbt_dynar_t da = xbt_str_split(a, "\n");
-  xbt_dynar_t db = xbt_str_split(b, "\n");
-  xbt_dynar_t common_sequence, common_suffix;
-  size_t len;
-  const char **vec_a, **vec_b;
-  int a0, b0;
-  int len_a, len_b;
-  int max;
-  int *fp_base, *fp;
-  struct subsequence *seqs_base, *seqs;
-  struct subsequence subseq;
-  xbt_dynar_t diff;
-  char *res;
-  int x, y;
-  unsigned s;
-
-  /* Clean empty lines at the end of da and db */
-  len = strlen(a);
-  if (len > 0 && a[len - 1] == '\n')
-    xbt_dynar_pop(da, NULL);
-  len = strlen(b);
-  if (len > 0 && b[len - 1] == '\n')
-    xbt_dynar_pop(db, NULL);
-
-  /* Various initializations */
-  /* Assume that dynar's content is contiguous */
-  a0 = 0;
-  len_a = xbt_dynar_length(da);
-  vec_a = len_a ? xbt_dynar_get_ptr(da, 0) : NULL;
-  b0 = 0;
-  len_b = xbt_dynar_length(db);
-  vec_b = len_b ? xbt_dynar_get_ptr(db, 0) : NULL;
-  max = MAX(len_a, len_b) + 1;
-  fp_base = xbt_new(int, 2 * max + 1);
-  fp = fp_base + max;           /* indexes in [-max..max] */
-  seqs_base = xbt_new(struct subsequence, 2 * max + 1);
-  seqs = seqs_base + max;       /* indexes in [-max..max] */
-  common_sequence = xbt_dynar_new(sizeof(struct subsequence), NULL);
-  common_suffix = xbt_dynar_new(sizeof(struct subsequence), NULL);
-
-  /* Add a sentinel a the end of the sequence */
-  subseq.x = len_a;
-  subseq.y = len_b;
-  subseq.len = 0;
-  xbt_dynar_push(common_suffix, &subseq);
-
-  /* Compute the Longest Common Subsequence */
-  diff_easy_prefix(vec_a, &a0, &len_a, vec_b, &b0, &len_b, common_sequence);
-  diff_easy_suffix(vec_a, &a0, &len_a, vec_b, &b0, &len_b, common_suffix);
-  diff_compute_lcs(vec_a, a0, len_a, vec_b, b0, len_b, common_sequence, seqs, fp);
-  while (!xbt_dynar_is_empty(common_suffix)) {
-    xbt_dynar_pop(common_suffix, &subseq);
-    xbt_dynar_push(common_sequence, &subseq);
-  }
-
-  /* Build a Shortest Edit Script, and the final result */
-  diff = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
-  x = 0;
-  y = 0;
-  xbt_dynar_foreach(common_sequence, s, subseq) {
-    while (x < subseq.x) {
-      char *topush = bprintf("- %s", vec_a[x++]);
-      xbt_dynar_push_as(diff, char*, topush);
-    }
-    while (y < subseq.y) {
-      char *topush = bprintf("+ %s", vec_b[y++]);
-      xbt_dynar_push_as(diff, char*, topush);
-    }
-    while (x < subseq.x + subseq.len) {
-      char *topush = bprintf("  %s", vec_a[x++]);
-      xbt_dynar_push_as(diff, char*, topush);
-      y++;
-    }
-  }
-  res = xbt_str_join(diff, "\n");
-
-  xbt_free(fp_base);
-  xbt_free(seqs_base);
-  xbt_dynar_free(&db);
-  xbt_dynar_free(&da);
-  xbt_dynar_free(&common_sequence);
-  xbt_dynar_free(&common_suffix);
-  xbt_dynar_free(&diff);
-
-  return res;
-}
-
-
 /** @brief creates a new string containing what can be read on a fd
  *
  */
@@ -852,28 +497,6 @@ char *xbt_str_from_file(FILE * file)
   return res;
 }
 
-/* @brief Retrun 1 if string 'str' starts with string 'start'
- *
- * \param str a string
- * \param start the string to search in str
- *
- * \return 1 if 'str' starts with 'start'
- */
-int xbt_str_start_with(const char* str, const char* start)
-{
-  unsigned int i;
-  size_t l_str = strlen(str);
-  size_t l_start = strlen(start);
-
-  if(l_start > l_str) return 0;
-
-  for(i = 0; i< l_start; i++){
-    if(str[i] != start[i]) return 0;
-  }
-
-  return 1;
-}
-
 /** @brief Parse an integer out of a string, or raise an error
  *
  * The #str is passed as argument to your #error_msg, as follows:
@@ -968,135 +591,6 @@ XBT_TEST_UNIT("xbt_str_split_str", test_split_str, "test the function xbt_str_sp
   mytest_str("Basic test", "toto##tutu", "##", "totoXXXtutu");
 }
 
-/* Last args are format string and parameters for xbt_test_add */
-#define mytest_diff(s1, s2, diff, ...)                                  \
-  do {                                                                  \
-    char *mytest_diff_res;                                              \
-    xbt_test_add(__VA_ARGS__);                                          \
-    mytest_diff_res = xbt_str_diff(s1, s2);                             \
-    xbt_test_assert(!strcmp(mytest_diff_res, diff),                     \
-                    "Wrong output:\n--- got:\n%s\n--- expected:\n%s\n---", \
-                    mytest_diff_res, diff);                             \
-    free(mytest_diff_res);                                              \
-  } while (0)
-
-XBT_TEST_UNIT("xbt_str_diff", test_diff, "test the function xbt_str_diff")
-{
-  unsigned i;
-
-  /* Trivial cases */
-  mytest_diff("a", "a", "  a", "1 word, no difference");
-  mytest_diff("a", "A", "- a\n+ A", "1 word, different");
-  mytest_diff("a\n", "a\n", "  a", "1 line, no difference");
-  mytest_diff("a\n", "A\n", "- a\n+ A", "1 line, different");
-
-  /* Empty strings */
-  mytest_diff("", "", "", "empty strings");
-  mytest_diff("", "a", "+ a", "1 word, added");
-  mytest_diff("a", "", "- a", "1 word, removed");
-  mytest_diff("", "a\n", "+ a", "1 line, added");
-  mytest_diff("a\n", "", "- a", "1 line, removed");
-  mytest_diff("", "a\nb\nc\n", "+ a\n+ b\n+ c", "4 lines, all added");
-  mytest_diff("a\nb\nc\n", "", "- a\n- b\n- c", "4 lines, all removed");
-
-  /* Empty lines */
-  mytest_diff("\n", "\n", "  ", "empty lines");
-  mytest_diff("", "\n", "+ ", "empty line, added");
-  mytest_diff("\n", "", "- ", "empty line, removed");
-
-  mytest_diff("a", "\na", "+ \n  a", "empty line added before word");
-  mytest_diff("a", "a\n\n", "  a\n+ ", "empty line added after word");
-  mytest_diff("\na", "a", "- \n  a", "empty line removed before word");
-  mytest_diff("a\n\n", "a", "  a\n- ", "empty line removed after word");
-
-  mytest_diff("a\n", "\na\n", "+ \n  a", "empty line added before line");
-  mytest_diff("a\n", "a\n\n", "  a\n+ ", "empty line added after line");
-  mytest_diff("\na\n", "a\n", "- \n  a", "empty line removed before line");
-  mytest_diff("a\n\n", "a\n", "  a\n- ", "empty line removed after line");
-
-  mytest_diff("a\nb\nc\nd\n", "\na\nb\nc\nd\n", "+ \n  a\n  b\n  c\n  d",
-              "empty line added before 4 lines");
-  mytest_diff("a\nb\nc\nd\n", "a\nb\nc\nd\n\n", "  a\n  b\n  c\n  d\n+ ",
-              "empty line added after 4 lines");
-  mytest_diff("\na\nb\nc\nd\n", "a\nb\nc\nd\n", "- \n  a\n  b\n  c\n  d",
-              "empty line removed before 4 lines");
-  mytest_diff("a\nb\nc\nd\n\n", "a\nb\nc\nd\n", "  a\n  b\n  c\n  d\n- ",
-              "empty line removed after 4 lines");
-
-  /* Missing newline at the end of one of the strings */
-  mytest_diff("a\n", "a", "  a", "1 line, 1 word, no difference");
-  mytest_diff("a", "a\n", "  a", "1 word, 1 line, no difference");
-  mytest_diff("a\n", "A", "- a\n+ A", "1 line, 1 word, different");
-  mytest_diff("a", "A\n", "- a\n+ A", "1 word, 1 line, different");
-
-  mytest_diff("a\nb\nc\nd", "a\nb\nc\nd\n", "  a\n  b\n  c\n  d",
-              "4 lines, no newline on first");
-  mytest_diff("a\nb\nc\nd\n", "a\nb\nc\nd", "  a\n  b\n  c\n  d",
-              "4 lines, no newline on second");
-
-  /* Four lines, all combinations of differences */
-  for (i = 0 ; i < (1U << 4) ; i++) {
-    char d2[4 + 1];
-    char s2[4 * 2 + 1];
-    char res[4 * 8 + 1];
-    char *pd = d2;
-    char *ps = s2;
-    char *pr = res;
-    unsigned j = 0;
-    while (j < 4) {
-      unsigned k;
-      for (/* j */ ; j < 4 && !(i & (1U << j)) ; j++) {
-        *pd++ = "abcd"[j];
-        ps += sprintf(ps, "%c\n", "abcd"[j]);
-        pr += sprintf(pr, "  %c\n", "abcd"[j]);
-      }
-      for (k = j ; k < 4 && (i & (1U << k)) ; k++) {
-        *pd++ = "ABCD"[k];
-        ps += sprintf(ps, "%c\n", "ABCD"[k]);
-        pr += sprintf(pr, "- %c\n", "abcd"[k]);
-      }
-      for (/* j */ ; j < k ; j++) {
-        pr += sprintf(pr, "+ %c\n", "ABCD"[j]);
-      }
-    }
-    *pd = '\0';
-    *--pr = '\0';               /* strip last '\n' from expected result */
-    mytest_diff("a\nb\nc\nd\n", s2, res,
-                "compare (abcd) with changed (%s)", d2);
-  }
-
-  /* Subsets of four lines, do not test for empty subset */
-  for (i = 1 ; i < (1U << 4) ; i++) {
-    char d2[4 + 1];
-    char s2[4 * 2 + 1];
-    char res[4 * 8 + 1];
-    char *pd = d2;
-    char *ps = s2;
-    char *pr = res;
-    unsigned j = 0;
-    while (j < 4) {
-      for (/* j */ ; j < 4 && (i & (1U << j)) ; j++) {
-        *pd++ = "abcd"[j];
-        ps += sprintf(ps, "%c\n", "abcd"[j]);
-        pr += sprintf(pr, "  %c\n", "abcd"[j]);
-      }
-      for (/* j */; j < 4 && !(i & (1U << j)) ; j++) {
-        pr += sprintf(pr, "- %c\n", "abcd"[j]);
-      }
-    }
-    *pd = '\0';
-    *--pr = '\0';               /* strip last '\n' from expected result */
-    mytest_diff("a\nb\nc\nd\n", s2, res,
-                "compare (abcd) with subset (%s)", d2);
-
-    for (pr = res ; *pr != '\0' ; pr++)
-      if (*pr == '-')
-        *pr = '+';
-    mytest_diff(s2, "a\nb\nc\nd\n", res,
-                "compare subset (%s) with (abcd)", d2);
-  }
-}
-
 #define test_parse_error(function, name, variable, str)                 \
   do {                                                                  \
     xbt_test_add(name);                                                 \
index 980a3dc..ae27f4e 100644 (file)
@@ -63,8 +63,7 @@ void xbt_strbuff_append(xbt_strbuff_t b, const char *toadd)
   int addlen;
   int needed_space;
 
-  if (!b)
-    THROWF(arg_error, 0, "Asked to append stuff to NULL buffer");
+  xbt_assert(b, "Asked to append stuff to NULL buffer");
 
   addlen = strlen(toadd);
   needed_space = b->used + addlen + 1;
@@ -77,20 +76,6 @@ void xbt_strbuff_append(xbt_strbuff_t b, const char *toadd)
   b->used += addlen;
 }
 
-XBT_INLINE void xbt_strbuff_chomp(xbt_strbuff_t b)
-{
-  while (b->used && b->data[b->used - 1] == '\n') {
-    b->used--;
-    b->data[b->used] = '\0';
-  }
-}
-
-XBT_INLINE void xbt_strbuff_trim(xbt_strbuff_t b)
-{
-  xbt_str_trim(b->data, " ");
-  b->used = strlen(b->data);
-}
-
 /** @brief Replaces a set of variables by their values
  *
  * @param b buffer to modify
@@ -121,8 +106,7 @@ void xbt_strbuff_varsubst(xbt_strbuff_t b, xbt_dict_t patterns)
     case '\\':
       /* Protected char; pass the protection */
       end++;
-      if (*end == '\0')
-        THROWF(arg_error, 0, "String ends with \\");
+      xbt_assert(*end != '\0', "String ends with \\");
       break;
 
     case '\'':
@@ -161,9 +145,7 @@ void xbt_strbuff_varsubst(xbt_strbuff_t b, xbt_dict_t patterns)
               char *p = end_var + 1;
               while (*p != '\0' && *p != '}')
                 p++;
-              if (*p == '\0')
-                THROWF(arg_error, 0,
-                       "Variable default value not terminated ('}' missing)");
+              xbt_assert (*p != '\0', "Variable default value not terminated ('}' missing)");
 
               default_value = xbt_malloc(p - end_var - 1);
               memcpy(default_value, end_var + 2, p - end_var - 2);
@@ -175,15 +157,12 @@ void xbt_strbuff_varsubst(xbt_strbuff_t b, xbt_dict_t patterns)
             }
             end_var++;
           }
-          if (*end_var == '\0')
-            THROWF(arg_error, 0,
-                   "Variable name not terminated ('}' missing)");
+          xbt_assert(*end_var != '\0', "Variable name not terminated ('}' missing)");
 
           if (!end_subst)       /* already set if there's a default value */
             end_subst = end_var + 1;    /* also kill the } in the name */
 
-          if (end_var == beg_var)
-            THROWF(arg_error, 0, "Variable name empty (${} is not valid)");
+          xbt_assert(end_var != beg_var, "Variable name empty (${} is not valid)");
 
 
         } else {
@@ -194,22 +173,11 @@ void xbt_strbuff_varsubst(xbt_strbuff_t b, xbt_dict_t patterns)
                  && *end_var != '\n')
             end_var++;
           end_subst = end_var;
-          if (end_var == beg_var)
-            THROWF(arg_error, 0, "Variable name empty ($ is not valid)");
+          xbt_assert (end_var != beg_var, "Variable name empty ($ is not valid)");
         }
-/*        XBT_DEBUG("var='%.*s'; subst='%.*s'; End_var = '%s'",
-            end_var-beg_var,beg_var,
-            end_subst-beg_subst,beg_subst,
-            end_var);*/
 
         /* ok, we now have the variable name. Search the dictionary for the substituted value */
-        value =
-            xbt_dict_get_or_null_ext(patterns, beg_var, end_var - beg_var);
-/*        XBT_DEBUG("Deal with '%s'",b->data);
-        XBT_DEBUG("Search for %.*s, found %s (default value = %s)\n",
-            end_var-beg_var,beg_var,
-            (value?value:"(no value)"),
-            (default_value?default_value:"(no value)"));*/
+        value = xbt_dict_get_or_null_ext(patterns, beg_var, end_var - beg_var);
 
         if (value)
           value = xbt_strdup(value);
@@ -220,18 +188,9 @@ void xbt_strbuff_varsubst(xbt_strbuff_t b, xbt_dict_t patterns)
 
         /* En route for the actual substitution */
         val_len = strlen(value);
-//        XBT_DEBUG("val_len = %d, key_len=%d",val_len,end_subst-beg_subst);
         if (val_len <= end_subst - beg_subst) {
           /* enough room to do the substitute in place */
-//          XBT_DEBUG("Substitute key name by its value: ie '%.*s' by '%.*s'",end_subst-beg_subst,beg_subst,val_len,value);
           memmove(beg_subst, value, val_len);   /* substitute */
-//          XBT_DEBUG("String is now: '%s'",b->data);
-/*          XBT_DEBUG("Move end of string closer (%d chars moved) :\n-'%.*s%.*s'\n+'%.*s%s'",
-              b->used - (end_subst - b->data) + 1,
-              beg_subst-b->data,b->data,
-              b->used-(end_subst-b->data)+1,beg_subst+val_len,
-              beg_subst-b->data,b->data,
-              end_subst);*/
           memmove(beg_subst + val_len, end_subst, b->used - (end_subst - b->data) + 1); /* move the end of the string closer */
 //          XBT_DEBUG("String is now: '%s'",b->data);
           end = beg_subst + val_len;    /* update the currently explored char in the overall loop */
@@ -240,16 +199,13 @@ void xbt_strbuff_varsubst(xbt_strbuff_t b, xbt_dict_t patterns)
 //          XBT_DEBUG("Used:%d end:%d ending char:%d",b->used,end-b->data,*end);
         } else {
           /* we have to extend the data area */
-          int tooshort =
-              val_len - (end_subst - beg_subst) + 1 /*don't forget \0 */ ;
+          int tooshort = val_len - (end_subst - beg_subst) + 1 /* don't forget \0 */ ;
           int newused = b->used + tooshort;
           end += tooshort;      /* update the pointer of the overall loop */
 //          XBT_DEBUG("Too short (by %d chars; %d chars left in area)",val_len- (end_subst-beg_subst), b->size - b->used);
           if (newused > b->size) {
             /* We have to realloc the data area before (because b->size is too small). We have to update our pointers, too */
-            char *newdata = xbt_realloc(b->data,
-                                    b->used + MAX(minimal_increment,
-                                                  tooshort));
+            char *newdata = xbt_realloc(b->data, b->used + MAX(minimal_increment, tooshort));
             int offset = newdata - b->data;
             b->data = newdata;
             b->size = b->used + MAX(minimal_increment, tooshort);
@@ -272,6 +228,7 @@ void xbt_strbuff_varsubst(xbt_strbuff_t b, xbt_dict_t patterns)
 
     case '\0':
       done = 1;
+      break;
     }
     end++;
   }
index a046cfa..2d44621 100644 (file)
@@ -18,23 +18,6 @@ static int xbt_fake_pid(void)
 
 int_f_void_t xbt_getpid = xbt_fake_pid;
 
-/*
- * Time elapsed since the beginning of the simulation.
- */
-double xbt_time()
-{
-  /* FIXME: check if we should use the request mechanism or not */
-  return SIMIX_get_clock();
-}
-
-/*
- * Freeze the process for the specified amount of time
- */
-void xbt_sleep(double sec)
-{
-  simcall_process_sleep(sec);
-}
-
 const char *xbt_procname(void)
 {
   return SIMIX_process_self_get_name();
index 5247795..84e79b1 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
       set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(bug-17132 ${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132/bug-17132.c)
+
+  add_executable       (bug-17132 bug-17132.c)
   target_link_libraries(bug-17132 simgrid)
 endif(enable_smpi)
 
index 1469e80..f910523 100644 (file)
@@ -1,7 +1,5 @@
 set(example java_semaphore_gc)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/SemaphoreGC.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/SemaphoreGC.java)
 
 if(enable_java)
   add_custom_command(
index 5f3db60..289792f 100644 (file)
@@ -1,7 +1,5 @@
 set(example java_sleep_host_off)
-set(sources
-  ${CMAKE_CURRENT_SOURCE_DIR}/SleepHostOff.java
-  )
+set(sources ${CMAKE_CURRENT_SOURCE_DIR}/SleepHostOff.java)
 
 if(enable_java)
   add_custom_command(
index 73d251e..6a38e8b 100644 (file)
@@ -1,11 +1,7 @@
-if(HAVE_MC)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-endif()
+add_executable       (with_mutex_handling    mutex_handling.c)
+target_link_libraries(with_mutex_handling    simgrid)
 
-add_executable(with_mutex_handling mutex_handling.c)
-target_link_libraries(with_mutex_handling simgrid)
-
-add_executable(without_mutex_handling mutex_handling.c)
+add_executable       (without_mutex_handling mutex_handling.c)
 target_link_libraries(without_mutex_handling simgrid)
 set_target_properties(without_mutex_handling PROPERTIES COMPILE_FLAGS -DDISABLE_THE_MUTEX=1)
 
index 7edcfc5..904cafb 100644 (file)
@@ -1,7 +1,5 @@
 if(HAVE_MC)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-  add_executable(dwarf dwarf.cpp)
+  add_executable       (dwarf dwarf.cpp)
   target_link_libraries(dwarf simgrid)
 endif()
 
index 91df00c..83862c4 100644 (file)
@@ -11,7 +11,6 @@
 #include <string.h>
 #include <assert.h>
 
-#include <xbt.h>
 #include <mc/mc.h>
 
 #include "mc/datatypes.h"
@@ -80,8 +79,10 @@ static void test_local_variable(simgrid::mc::ObjectInformation* info, const char
 
 }
 
-static simgrid::mc::Variable* test_global_variable(simgrid::mc::Process* process, simgrid::mc::ObjectInformation* info, const char* name, void* address, long byte_size) {
-
+static simgrid::mc::Variable* test_global_variable(
+  simgrid::mc::Process& process, simgrid::mc::ObjectInformation* info,
+  const char* name, void* address, long byte_size)
+{
   simgrid::mc::Variable* variable = info->find_variable(name);
   xbt_assert(variable, "Global variable %s was not found", name);
   xbt_assert(variable->name == name,
@@ -91,8 +92,8 @@ static simgrid::mc::Variable* test_global_variable(simgrid::mc::Process* process
       "Address mismatch for %s : %p expected but %p found",
       name, address, variable->address);
 
-  auto i = process->binary_info->types.find(variable->type_id);
-  xbt_assert(i != process->binary_info->types.end(), "Missing type for %s", name);
+  auto i = process.binary_info->types.find(variable->type_id);
+  xbt_assert(i != process.binary_info->types.end(), "Missing type for %s", name);
   simgrid::mc::Type* type = &i->second;
   xbt_assert(type->byte_size = byte_size, "Byte size mismatch for %s", name);
   return variable;
@@ -110,11 +111,11 @@ int some_local_variable = 0;
 
 typedef struct foo {int i;} s_foo;
 
-static void test_type_by_name(simgrid::mc::Process* process, s_foo my_foo)
+static void test_type_by_name(simgrid::mc::Process& process, s_foo my_foo)
 {
   assert(
-    process->binary_info->full_types_by_name.find("struct foo") !=
-      process->binary_info->full_types_by_name.end());
+    process.binary_info->full_types_by_name.find("struct foo") !=
+      process.binary_info->full_types_by_name.end());
 }
 
 int main(int argc, char** argv)
@@ -124,25 +125,25 @@ int main(int argc, char** argv)
   simgrid::mc::Variable* var;
   simgrid::mc::Type* type;
 
-  simgrid::mc::Process p(getpid(), -1);
-  simgrid::mc::Process* process = &p;
+  simgrid::mc::Process process(getpid(), -1);
+  process.init();
 
-  test_global_variable(process, process->binary_info.get(),
+  test_global_variable(process, process.binary_info.get(),
     "some_local_variable", &some_local_variable, sizeof(int));
 
-  var = test_global_variable(process, process->binary_info.get(),
+  var = test_global_variable(process, process.binary_info.get(),
     "test_some_array", &test_some_array, sizeof(test_some_array));
-  auto i = process->binary_info->types.find(var->type_id);
-  xbt_assert(i != process->binary_info->types.end(), "Missing type");
+  auto i = process.binary_info->types.find(var->type_id);
+  xbt_assert(i != process.binary_info->types.end(), "Missing type");
   type = &i->second;
   xbt_assert(type->element_count == 6*5*4,
     "element_count mismatch in test_some_array : %i / %i",
     type->element_count, 6*5*4);
 
-  var = test_global_variable(process, process->binary_info.get(),
+  var = test_global_variable(process, process.binary_info.get(),
     "test_some_struct", &test_some_struct, sizeof(test_some_struct));
-  i = process->binary_info->types.find(var->type_id);
-  xbt_assert(i != process->binary_info->types.end(), "Missing type");
+  i = process.binary_info->types.find(var->type_id);
+  xbt_assert(i != process.binary_info->types.end(), "Missing type");
   type = &i->second;
 
   assert(type);
@@ -155,11 +156,11 @@ int main(int argc, char** argv)
   unw_getcontext(&context);
   unw_init_local(&cursor, &context);
 
-  test_local_variable(process->binary_info.get(), "main", "argc", &argc, &cursor);
+  test_local_variable(process.binary_info.get(), "main", "argc", &argc, &cursor);
 
   {
     int lexical_block_variable = 50;
-    test_local_variable(process->binary_info.get(), "main",
+    test_local_variable(process.binary_info.get(), "main",
       "lexical_block_variable", &lexical_block_variable, &cursor);
   }
 
index ce37b27..e17889e 100644 (file)
@@ -1,7 +1,5 @@
 if(HAVE_MC)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-  add_executable(dwarf-expression dwarf_expression.cpp)
+  add_executable       (dwarf-expression dwarf_expression.cpp)
   target_link_libraries(dwarf-expression simgrid)
 endif()
 
index 4a1b342..fbe890e 100644 (file)
@@ -151,6 +151,7 @@ void test_deref(simgrid::dwarf::ExpressionContext const& state) {
 
 int main(int argc, char** argv) {
   process = new simgrid::mc::Process(getpid(), -1);
+  process->init();
 
   simgrid::dwarf::ExpressionContext state;
   state.address_space = (simgrid::mc::AddressSpace*) process;
index e768581..9bfb7ad 100644 (file)
@@ -1,5 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-add_executable(random_bug random_bug.c)
+add_executable       (random_bug random_bug.c)
 target_link_libraries(random_bug simgrid)
 
 set(tesh_files
index 7141cba..d4cef67 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(get_sender get_sender.c)
+add_executable       (get_sender get_sender.c)
 target_link_libraries(get_sender simgrid)
 
 set(tesh_files
index 776a811..2f60d1e 100644 (file)
@@ -1,7 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
 foreach(x host_on_off host_on_off_wait host_on_off_recv)
-  add_executable(${x} ${x}.c)
+  add_executable       (${x} ${x}.c)
   target_link_libraries(${x} simgrid)
 endforeach()
 
index 166f781..91946d3 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(host_on_off_processes host_on_off_processes.c)
+add_executable       (host_on_off_processes host_on_off_processes.c)
 target_link_libraries(host_on_off_processes simgrid)
 
 set(tesh_files
index c8c0e90..988789a 100644 (file)
@@ -1,13 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(pid pid.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(pid simgrid m pthread)
-else()
-  target_link_libraries(pid simgrid)
-endif()
+add_executable       (pid pid.c)
+target_link_libraries(pid simgrid)
 
 set(tesh_files
   ${tesh_files}
index 685c635..9034065 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(process process.c)
+add_executable       (process process.c)
 target_link_libraries(process simgrid)
 
 set(tesh_files
index 883aa86..adb7cac 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(process_join ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process_join/process_join.c)
+add_executable       (process_join process_join.c)
 target_link_libraries(process_join simgrid)
 
 set(tesh_files
index be971df..68bc0d8 100644 (file)
@@ -1,16 +1,7 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(storage_basic storage_basic.c)
-add_executable(concurrent_rw concurrent_rw.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(storage_basic simgrid m pthread )
-  target_link_libraries(concurrent_rw simgrid m pthread )
-else()
-  target_link_libraries(storage_basic simgrid)
-  target_link_libraries(concurrent_rw simgrid)
-endif()
+add_executable       (storage_basic storage_basic.c)
+target_link_libraries(storage_basic simgrid)
+add_executable       (concurrent_rw concurrent_rw.c)
+target_link_libraries(concurrent_rw simgrid)
 
 set(tesh_files
   ${tesh_files}
index 716f4be..bfcd350 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(task_destroy_cancel task_destroy_cancel.c)
+add_executable       (task_destroy_cancel task_destroy_cancel.c)
 target_link_libraries(task_destroy_cancel simgrid)
 
 set(tesh_files
index e7663b6..f7c52b2 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(test_trace_integration test_trace_integration.c)
+add_executable       (test_trace_integration test_trace_integration.c)
 target_link_libraries(test_trace_integration simgrid)
 
 set(tesh_files
index 05cdb9c..798d88a 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(availability_test availability_test.c)
+add_executable       (availability_test availability_test.c)
 target_link_libraries(availability_test simgrid)
 
 set(tesh_files
index 69af506..2fd0417 100644 (file)
@@ -1,19 +1,16 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(basic0 basic0.c)
-add_executable(basic1 basic1.c)
-add_executable(basic2 basic2.c)
-add_executable(basic3 basic3.c)
-add_executable(basic4 basic4.c)
-add_executable(basic5 basic5.c)
-add_executable(basic6 basic6.c)
-
+add_executable       (basic0 basic0.c)
 target_link_libraries(basic0 simgrid)
+add_executable       (basic1 basic1.c)
 target_link_libraries(basic1 simgrid)
+add_executable       (basic2 basic2.c)
 target_link_libraries(basic2 simgrid)
+add_executable       (basic3 basic3.c)
 target_link_libraries(basic3 simgrid)
+add_executable       (basic4 basic4.c)
 target_link_libraries(basic4 simgrid)
+add_executable       (basic5 basic5.c)
 target_link_libraries(basic5 simgrid)
+add_executable       (basic6 basic6.c)
 target_link_libraries(basic6 simgrid)
 
 set(tesh_files
index d62eb99..c742098 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(incomplete incomplete.c)
+add_executable       (incomplete incomplete.c)
 target_link_libraries(incomplete simgrid)
 
 set(tesh_files
index 7c60a4b..2d536b6 100644 (file)
@@ -1,11 +1,9 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(test_intra_all2all test_intra_all2all.c)
-add_executable(test_intra_independent_comm test_intra_independent_comm.c)
-add_executable(test_intra_scatter test_intra_scatter.c)
-target_link_libraries(test_intra_all2all simgrid)
+add_executable       (test_intra_all2all          test_intra_all2all.c)
+target_link_libraries(test_intra_all2all          simgrid)
+add_executable       (test_intra_independent_comm test_intra_independent_comm.c)
 target_link_libraries(test_intra_independent_comm simgrid)
-target_link_libraries(test_intra_scatter simgrid)
+add_executable       (test_intra_scatter          test_intra_scatter.c)
+target_link_libraries(test_intra_scatter          simgrid)
 
 set(tesh_files
   ${tesh_files}
index 5f68137..931f2e0 100644 (file)
@@ -1,12 +1,10 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(test_latency1 test_latency1.c)
-add_executable(test_latency2 test_latency2.c)
-add_executable(test_latency3 test_latency3.c)
-add_executable(test_latency_bound test_latency_bound.c)
-target_link_libraries(test_latency1 simgrid)
-target_link_libraries(test_latency2 simgrid)
-target_link_libraries(test_latency3 simgrid)
+add_executable       (test_latency1      test_latency1.c)
+target_link_libraries(test_latency1      simgrid)
+add_executable       (test_latency2      test_latency2.c)
+target_link_libraries(test_latency2      simgrid)
+add_executable       (test_latency3      test_latency3.c)
+target_link_libraries(test_latency3      simgrid)
+add_executable       (test_latency_bound test_latency_bound.c)
 target_link_libraries(test_latency_bound simgrid)
 
 set(tesh_files
index 176ea1e..bf3a960 100644 (file)
@@ -1,8 +1,6 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(test_comp_only_seq test_comp_only_seq.c)
-add_executable(test_comp_only_par test_comp_only_par.c)
+add_executable       (test_comp_only_seq test_comp_only_seq.c)
 target_link_libraries(test_comp_only_seq simgrid)
+add_executable       (test_comp_only_par test_comp_only_par.c)
 target_link_libraries(test_comp_only_par simgrid)
 
 set(tesh_files
index 89f52e4..3a95a07 100644 (file)
@@ -1,21 +1,15 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(basic_parsing_test basic_parsing_test.c)
-add_executable(is_router_test is_router_test.cpp)
-add_executable(flatifier flatifier.cpp)
-add_executable(basic_link_test basic_link_test.c)
-target_link_libraries(basic_parsing_test simgrid)
-target_link_libraries(is_router_test simgrid)
-target_link_libraries(flatifier simgrid)
-target_link_libraries(basic_link_test simgrid)
-
-### Add definitions for compile
-if(NOT WIN32)
-  add_executable(evaluate_parse_time Evaluate_parse_time.c)
-  add_executable(evaluate_get_route_time Evaluate_get_route_time.c)
-  target_link_libraries(evaluate_get_route_time simgrid m)
-  target_link_libraries(evaluate_parse_time simgrid m)
-endif()
+add_executable       (basic_parsing_test      basic_parsing_test.c)
+target_link_libraries(basic_parsing_test      simgrid)
+add_executable       (is_router_test          is_router_test.cpp)
+target_link_libraries(is_router_test          simgrid)
+add_executable       (flatifier               flatifier.cpp)
+target_link_libraries(flatifier               simgrid)
+add_executable       (basic_link_test         basic_link_test.c)
+target_link_libraries(basic_link_test         simgrid)
+add_executable       (evaluate_parse_time     Evaluate_parse_time.c)
+target_link_libraries(evaluate_parse_time     simgrid)
+add_executable       (evaluate_get_route_time Evaluate_get_route_time.c)
+target_link_libraries(evaluate_get_route_time simgrid)
 
 set(tesh_files
   ${tesh_files}
@@ -33,40 +27,26 @@ set(tesh_files
 set(xml_files
   ${xml_files}
   ${CMAKE_CURRENT_SOURCE_DIR}/four_hosts_Dijkstra_ns3.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/four_hosts_floyd_bis.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/four_hosts_floyd_ns3.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/four_hosts_floyd.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/two_hosts_multi_hop.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/host_attributes.xml
+  ${CMAKE_CURRENT_SOURCE_DIR}/link_attributes.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/one_cluster_file.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/one_cluster_multicore.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/one_cluster_fullduplex.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/one_cluster_router_id.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/one_cluster.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_host_availability.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_host_properties.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_host_state_file.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_host_state_off.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_host_state_on.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_host_trace_file.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_host_trace_inside.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_host.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_link_availability.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_link_fatpipe.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_link_shared.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/one_link_state_file.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/platform_include.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/properties.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/random.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/test_of_is_router.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/three_hosts_non_symmetric_route.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/two_clusters_one_name.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/two_clusters_router_id.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/two_clusters_symmetric.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/two_clusters.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/bogus_missing_src_gateway.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/bogus_missing_dst_gateway.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/bogus_two_hosts_asymetric.xml
-  ${CMAKE_CURRENT_SOURCE_DIR}/bogus_two_hosts_asymetric-2.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/two_hosts_one_link_fullduplex.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/two_hosts_one_link_symmetrical.xml
   ${CMAKE_CURRENT_SOURCE_DIR}/two_hosts_one_link.xml
@@ -86,13 +66,10 @@ set(teshsuite_src
   PARENT_SCOPE)
 set(txt_files
   ${txt_files}
-  ${CMAKE_CURRENT_SOURCE_DIR}/bob0_availability_file.trace
-  ${CMAKE_CURRENT_SOURCE_DIR}/bob0_state_file.trace
-  ${CMAKE_CURRENT_SOURCE_DIR}/bob2_availability_file.trace
-  ${CMAKE_CURRENT_SOURCE_DIR}/bob2_state_file.trace
-  ${CMAKE_CURRENT_SOURCE_DIR}/bob.fail
+  ${CMAKE_CURRENT_SOURCE_DIR}/carol.fail
   ${CMAKE_CURRENT_SOURCE_DIR}/bob.trace
-  ${CMAKE_CURRENT_SOURCE_DIR}/link1.bw
-  ${CMAKE_CURRENT_SOURCE_DIR}/link1.fail
-  ${CMAKE_CURRENT_SOURCE_DIR}/link1.lat
+  ${CMAKE_CURRENT_SOURCE_DIR}/erin.avail
+  ${CMAKE_CURRENT_SOURCE_DIR}/link.bw
+  ${CMAKE_CURRENT_SOURCE_DIR}/link.fail
+  ${CMAKE_CURRENT_SOURCE_DIR}/link.lat
   PARENT_SCOPE)
index 64b39c8..39e7fb3 100644 (file)
@@ -1,32 +1,27 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
 <platform version="4">
-
- <AS  id="AS0"  routing="Dijkstra">
-
+ <AS id="AS0" routing="Dijkstra">
    <host id="NODO01" speed="10Mf"/>
    <host id="NODO02" speed="10Mf"/>
-   
-   <router id="ROUTER" />
-   
+
+   <router id="ROUTER"/>
+
    <link id="1" bandwidth="1MBps" latency="1ms"/>
    <link id="2" bandwidth="1MBps" latency="1ms"/>
-   
+
    <link id="10" bandwidth="1MBps" latency="1ms"/>
    <link id="11" bandwidth="1MBps" latency="1ms"/>
    <link id="12" bandwidth="1MBps" latency="1ms"/>
-      
+
    <route src="NODO01" dst="ROUTER" symmetrical="NO"><link_ctn id="1"/></route>
    <route src="NODO02" dst="ROUTER" symmetrical="NO"><link_ctn id="2"/></route>
-   
+
    <route src="ROUTER" dst="NODO01" symmetrical="NO"><link_ctn id="1"/></route>
    <route src="ROUTER" dst="NODO02" symmetrical="NO"><link_ctn id="2"/></route>
 
    <route src="NODO01" dst="NODO02" symmetrical="NO">
-       <link_ctn id="10"/>
-       <link_ctn id="11"/>
-       <link_ctn id="12"/>
+     <link_ctn id="10"/><link_ctn id="11"/><link_ctn id="12"/>
    </route>
-
  </AS>
 </platform>
index 98e5f16..c6be629 100644 (file)
@@ -4,53 +4,13 @@ $ ${bindir:=.}/basic_parsing_test one_cluster.xml "--log=root.fmt:[%10.6r]%e(%i:
 > [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
 > Workstation number: 5, link number: 12
 
-$ ${bindir:=.}/basic_parsing_test one_host_availability.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/basic_parsing_test host_attributes.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 1
-
-$ ${bindir:=.}/basic_parsing_test one_host_properties.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 1
-
-$ ${bindir:=.}/basic_parsing_test one_host_state_file.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 1
-
-$ ${bindir:=.}/basic_parsing_test one_host_state_off.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 1
-
-$ ${bindir:=.}/basic_parsing_test one_host_state_on.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 1
-
-$ ${bindir:=.}/basic_parsing_test one_host_trace_file.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 1
-
-$ ${bindir:=.}/basic_parsing_test one_host_trace_inside.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 1
+> Workstation number: 5, link number: 1
 
-$ ${bindir:=.}/basic_parsing_test one_host.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/basic_parsing_test link_attributes.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 1
-
-$ ${bindir:=.}/basic_parsing_test one_link_availability.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 2
-
-$ ${bindir:=.}/basic_parsing_test one_link_fatpipe.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 2
-
-$ ${bindir:=.}/basic_parsing_test one_link_shared.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 2
-
-$ ${bindir:=.}/basic_parsing_test one_link_state_file.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 1, link number: 2
+> Workstation number: 1, link number: 5
 
 $ ${bindir:=.}/basic_parsing_test three_hosts_non_symmetric_route.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
@@ -58,7 +18,7 @@ $ ${bindir:=.}/basic_parsing_test three_hosts_non_symmetric_route.xml "--log=roo
 
 $ ${bindir:=.}/basic_parsing_test two_clusters.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
-> Workstation number: 10, link number: 24
+> Workstation number: 4, link number: 12
 
 $ ${bindir:=.}/basic_parsing_test two_hosts_multi_hop.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
@@ -72,10 +32,6 @@ $ ${bindir:=.}/basic_parsing_test ./four_hosts_floyd.xml
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > Workstation number: 4, link number: 5
 
-$ ${bindir:=.}/basic_parsing_test ./four_hosts_floyd_bis.xml
-> [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
-> Workstation number: 5, link number: 7
-
 $ ${bindir:=.}/basic_parsing_test ./properties.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'host/model' to 'compound'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'cpu/optim' to 'TI'
@@ -91,9 +47,14 @@ $ ${bindir:=.}/basic_parsing_test ./properties.xml --cfg=cpu/optim:TI
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'Vegas'
 > Workstation number: 1, link number: 1
 
+$ cp -f ./bob.trace ./bob0_availability_file.trace
+$ cp -f ./bob.trace ./bob2_availability_file.trace
+$ cp -f ./bob.trace ./bob0_state_file.trace
+$ cp -f ./bob.trace ./bob2_state_file.trace
 $ ${bindir:=.}/basic_parsing_test ./one_cluster_file.xml
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
 > Workstation number: 2, link number: 6
+$ rm -f ./bob0_availability_file.trace ./bob2_availability_file.trace ./bob0_state_file.trace ./bob2_state_file.trace
 
 $ ${bindir:=.}/is_router_test ./test_of_is_router.xml
 > [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
index e16f261..d265142 100644 (file)
@@ -155,7 +155,7 @@ $ ${bindir:=.}/basic_parsing_test one_cluster_fullduplex.xml FULL_LINK "--log=ro
 >   Link bob_cluster_link_6_DOWN: latency = 0.000050, bandwidth = 125000000.000000
 >   Route latency = 0.000600, route bandwidth = 125000000.000000
 
-$ ${bindir:=.}/basic_parsing_test two_clusters_symmetric.xml FULL_LINK "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ ${bindir:=.}/basic_parsing_test two_clusters.xml FULL_LINK "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Switching to the L07 model to handle parallel tasks.
 > Workstation number: 4, link number: 12
 > Route between bob1.hamburger.edu and bob1.hamburger.edu
diff --git a/teshsuite/simdag/platforms/bob0_state_file.trace b/teshsuite/simdag/platforms/bob0_state_file.trace
deleted file mode 100644 (file)
index 019c2c8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-PERIODICITY 1.0
-0.0 1.0
-11.0 0.5
-20.0 0.8
diff --git a/teshsuite/simdag/platforms/bob2_availability_file.trace b/teshsuite/simdag/platforms/bob2_availability_file.trace
deleted file mode 100644 (file)
index 019c2c8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-PERIODICITY 1.0
-0.0 1.0
-11.0 0.5
-20.0 0.8
diff --git a/teshsuite/simdag/platforms/bob2_state_file.trace b/teshsuite/simdag/platforms/bob2_state_file.trace
deleted file mode 100644 (file)
index 019c2c8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-PERIODICITY 1.0
-0.0 1.0
-11.0 0.5
-20.0 0.8
diff --git a/teshsuite/simdag/platforms/bogus_two_hosts_asymetric-2.xml b/teshsuite/simdag/platforms/bogus_two_hosts_asymetric-2.xml
deleted file mode 100644 (file)
index 10c9d3b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-<!-- THIS FILE IS INVALID.
-
-It declares a route alice->bob and another bob->alice, both being different.
-It is used to check that this (bogus) file is detected as is (see two_hosts_asymetric.tesh) -->
-
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
- <AS  id="AS0"  routing="Full">
-    <host id="bob" speed="1Gf"/>
-    <host id="alice" speed="500Mf"/>
-
-    <link id="link1" bandwidth="125MBps" latency="50us"/>
-    <link id="link2" bandwidth="125MBps" latency="50us"/>
-    <link id="link3" bandwidth="125MBps" latency="50us"/>
-    <link id="link4" bandwidth="125MBps" latency="50us"/>
-
-   <route src="bob"   dst="alice"><link_ctn id="link1"/><link_ctn id="link2"/><link_ctn id="link4"/></route>
-   <route src="alice" dst="bob">  <link_ctn id="link4"/><link_ctn id="link3"/><link_ctn id="link1"/></route>
-  </AS>
-</platform>
index efcf85d..e3381ed 100644 (file)
@@ -2,8 +2,3 @@
 $ ${bindir:=.}/flatifier bogus_two_hosts_asymetric.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > [  0.000000] [0:maestro@] Error while loading bogus_two_hosts_asymetric.xml: The route between alice and bob already exists (Rq: routes are symmetrical by default).
-
-! expect signal SIGABRT
-$ ${bindir:=.}/flatifier bogus_two_hosts_asymetric-2.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> [  0.000000] [0:maestro@] Error while loading bogus_two_hosts_asymetric-2.xml: The route between alice and bob already exists (Rq: routes are symmetrical by default).
index c46abfc..6b347b7 100644 (file)
 #include "surf/surf.h"
 #include "src/surf/surf_private.h"
 
-static const char link_ctn_v2[] =  "link:ctn";
-static const char link_ctn_v3[] = "link_ctn";
-
-XBT_LOG_NEW_DEFAULT_CATEGORY(flatifier,
-                             "Logging specific to this platform parsing tool");
+XBT_LOG_NEW_DEFAULT_CATEGORY(flatifier, "Logging specific to this platform parsing tool");
 
 static int name_compare_hosts(const void *n1, const void *n2)
 {
-  return strcmp(
-      sg_host_get_name(*(sg_host_t *) n1),
-      sg_host_get_name(*(sg_host_t *) n2)
-  );
+  return strcmp(sg_host_get_name(*(sg_host_t *) n1), sg_host_get_name(*(sg_host_t *) n2));
 }
 
 static int name_compare_links(const void *n1, const void *n2)
 {
-  return strcmp(
-      sg_link_name(*(SD_link_t *) n1),
-      sg_link_name(*(SD_link_t *) n2)
-  );
+  return strcmp(sg_link_name(*(SD_link_t *) n1),sg_link_name(*(SD_link_t *) n2));
 }
 
-static int parse_cmdline(int *timings, int *downgrade, char **platformFile, int argc, char **argv)
+static int parse_cmdline(int *timings, char **platformFile, int argc, char **argv)
 {
   int wrong_option = 0;
   int i;
@@ -54,12 +44,8 @@ static int parse_cmdline(int *timings, int *downgrade, char **platformFile, int
       if (!strcmp(argv[i], "--timings")) {
         *timings = 1;
       } else {
-        if (!strcmp(argv[i], "--downgrade")) {
-          *downgrade = 1;
-        } else {
           wrong_option = 1;
           break;
-        }
       }
     } else {
       *platformFile = argv[i];
@@ -86,9 +72,8 @@ int main(int argc, char **argv)
   char *platformFile = NULL;
   unsigned int totalHosts, totalLinks;
   int timings=0;
-  int downgrade = 0;
-  int version = 3;
-  const char *link_ctn = link_ctn_v3;
+  int version = 4;
+  const char *link_ctn = "link_ctn";
   unsigned int i;
   xbt_dict_t props = NULL;
   xbt_dict_cursor_t cursor = NULL;
@@ -104,40 +89,30 @@ int main(int argc, char **argv)
 
   SD_init(&argc, argv);
 
-  if (parse_cmdline(&timings, &downgrade, &platformFile, argc, argv) || !platformFile) {
-    xbt_die("Invalid command line arguments: expected [--timings|--downgrade] platformFile");
+  if (parse_cmdline(&timings, &platformFile, argc, argv) || !platformFile) {
+    xbt_die("Invalid command line arguments: expected [--timings] platformFile");
   }
 
-  XBT_DEBUG("%d,%d,%s", timings, downgrade, platformFile);
-
-  if (downgrade) {
-    version = 2;
-    link_ctn = link_ctn_v2;
-  }
+  XBT_DEBUG("%d,%s", timings, platformFile);
 
   create_environment(parse_time, platformFile);
 
   if (timings) {
-    XBT_INFO("Parsing time: %fs (%zu hosts, %d links)",
-          xbt_os_timer_elapsed(parse_time),sg_host_count(),
-          sg_link_count());
+    XBT_INFO("Parsing time: %fs (%zu hosts, %d links)", xbt_os_timer_elapsed(parse_time),
+             sg_host_count(), sg_link_count());
   } else {
     printf("<?xml version='1.0'?>\n");
-    printf("<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n");
+    printf("<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd\">\n");
     printf("<platform version=\"%d\">\n", version);
-    if (!downgrade)
-      printf("<AS id=\"AS0\" routing=\"Full\">\n");
+    printf("<AS id=\"AS0\" routing=\"Full\">\n");
 
     // Hosts
     totalHosts = sg_host_count();
     hosts = sg_host_list();
-    qsort((void *) hosts, totalHosts, sizeof(sg_host_t),
-        name_compare_hosts);
+    qsort((void *) hosts, totalHosts, sizeof(sg_host_t), name_compare_hosts);
 
     for (i = 0; i < totalHosts; i++) {
-      printf("  <host id=\"%s\" power=\"%.0f\"",
-          sg_host_get_name(hosts[i]),
-          sg_host_speed(hosts[i]));
+      printf("  <host id=\"%s\" speed=\"%.0f\"", sg_host_get_name(hosts[i]), sg_host_speed(hosts[i]));
       props = sg_host_get_properties(hosts[i]);
       if (sg_host_core_count(hosts[i])>1) {
         printf(" core=\"%d\"", sg_host_core_count(hosts[i]));
@@ -156,8 +131,7 @@ int main(int argc, char **argv)
     // Routers
     xbt_lib_foreach(as_router_lib, cursor_src, key, value1) {
       value1 = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib, key, ROUTING_ASR_LEVEL);
-      if(value1->getRcType() == SURF_NETWORK_ELEMENT_ROUTER)
-      {
+      if(value1->getRcType() == SURF_NETWORK_ELEMENT_ROUTER) {
         printf("  <router id=\"%s\"/>\n",key);
       }
     }
@@ -171,10 +145,8 @@ int main(int argc, char **argv)
     for (i = 0; i < totalLinks; i++) {
       printf("  <link id=\"");
 
-      printf("%s\" bandwidth=\"%.0f\" latency=\"%.9f\"",
-          sg_link_name(links[i]),
-          sg_link_bandwidth(links[i]),
-          sg_link_latency(links[i]));
+      printf("%s\" bandwidth=\"%.0f\" latency=\"%.9f\"", sg_link_name(links[i]),
+             sg_link_bandwidth(links[i]), sg_link_latency(links[i]));
       if (sg_link_is_shared(links[i])) {
         printf("/>\n");
       } else {
@@ -183,36 +155,32 @@ int main(int argc, char **argv)
     }
 
     sg_host_t host1, host2;
-    xbt_dict_foreach(host_list, cursor_src, src, host1) // Routes from host
-    {
+    xbt_dict_foreach(host_list, cursor_src, src, host1){ // Routes from host
       value1 = sg_host_by_name(src)->pimpl_netcard;
-      xbt_dict_foreach(host_list, cursor_dst, dst, host2) //to host
-      {
-        printf("  <route src=\"%s\" dst=\"%s\">\n  ", src, dst);
+      xbt_dict_foreach(host_list, cursor_dst, dst, host2){ //to host
         xbt_dynar_t route=NULL;
         value2 = sg_host_by_name(dst)->pimpl_netcard;
         routing_platf->getRouteAndLatency(value1, value2, &route,NULL);
-        for(i=0;i<xbt_dynar_length(route) ;i++)
-        {
-          void *link = xbt_dynar_get_as(route,i,void *);
+        if (!xbt_dynar_is_empty(route)){
+          printf("  <route src=\"%s\" dst=\"%s\">\n  ", src, dst);
+          for(i=0;i<xbt_dynar_length(route) ;i++){
+            void *link = xbt_dynar_get_as(route,i,void *);
 
-          char *link_name = xbt_strdup(surf_resource_name((surf_cpp_resource_t)link));
-          printf("<%s id=\"%s\"/>",link_ctn,link_name);
-          free(link_name);
+            char *link_name = xbt_strdup(surf_resource_name((surf_cpp_resource_t)link));
+            printf("<%s id=\"%s\"/>",link_ctn,link_name);
+            free(link_name);
+          }
+          printf("\n  </route>\n");
         }
-        printf("\n  </route>\n");
       }
-      xbt_lib_foreach(as_router_lib, cursor_dst, dst, value2) //to router
-      {
+      xbt_lib_foreach(as_router_lib, cursor_dst, dst, value2){ //to router
         value2 = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
         if(value2->getRcType() == SURF_NETWORK_ELEMENT_ROUTER){
           printf("  <route src=\"%s\" dst=\"%s\">\n  ", src, dst);
           xbt_dynar_t route=NULL;
           routing_platf->getRouteAndLatency((sg_netcard_t)value1,(sg_netcard_t)value2,&route,NULL);
-          for(i=0;i<xbt_dynar_length(route) ;i++)
-          {
+          for(i=0;i<xbt_dynar_length(route) ;i++){
             void *link = xbt_dynar_get_as(route,i,void *);
-
             printf("<%s id=\"%s\"/>",link_ctn,surf_resource_name((surf_cpp_resource_t)link));
           }
           printf("\n  </route>\n");
@@ -220,19 +188,16 @@ int main(int argc, char **argv)
       }
     }
 
-    xbt_lib_foreach(as_router_lib, cursor_src, src, value1) // Routes from router
-    {
+    xbt_lib_foreach(as_router_lib, cursor_src, src, value1){ // Routes from router
       value1 = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib,src,ROUTING_ASR_LEVEL);
       if (value1->getRcType() == SURF_NETWORK_ELEMENT_ROUTER){
-        xbt_lib_foreach(as_router_lib, cursor_dst, dst, value2) //to router
-          {
+        xbt_lib_foreach(as_router_lib, cursor_dst, dst, value2){ //to router
           value2 = (sg_netcard_t)xbt_lib_get_or_null(as_router_lib,dst,ROUTING_ASR_LEVEL);
           if(value2->getRcType() == SURF_NETWORK_ELEMENT_ROUTER){
             printf("  <route src=\"%s\" dst=\"%s\">\n  ", src, dst);
             xbt_dynar_t route=NULL;
             routing_platf->getRouteAndLatency((sg_netcard_t)value1,(sg_netcard_t)value2,&route,NULL);
-            for(i=0;i<xbt_dynar_length(route) ;i++)
-            {
+            for(i=0;i<xbt_dynar_length(route) ;i++){
               void *link = xbt_dynar_get_as(route,i,void *);
 
               char *link_name = xbt_strdup(surf_resource_name((surf_cpp_resource_t)link));
@@ -241,16 +206,13 @@ int main(int argc, char **argv)
             }
             printf("\n  </route>\n");
           }
-          }
-        xbt_dict_foreach(host_list, cursor_dst, dst, value2) //to host
-        {
-          printf("  <route src=\"%s\" dst=\"%s\">\n  "
-              ,src, dst);
+        }
+        xbt_dict_foreach(host_list, cursor_dst, dst, value2){ //to host
+          printf("  <route src=\"%s\" dst=\"%s\">\n  ",src, dst);
           xbt_dynar_t route=NULL;
           value2 = sg_host_by_name(dst)->pimpl_netcard;
           routing_platf->getRouteAndLatency((sg_netcard_t)value1,(sg_netcard_t)value2,&route, NULL);
-          for(i=0;i<xbt_dynar_length(route) ;i++)
-          {
+          for(i=0;i<xbt_dynar_length(route) ;i++){
             void *link = xbt_dynar_get_as(route,i,void *);
 
             char *link_name = xbt_strdup(surf_resource_name((surf_cpp_resource_t)link));
@@ -262,8 +224,7 @@ int main(int argc, char **argv)
       }
     }
 
-    if (!downgrade)
-      printf("</AS>\n");
+    printf("</AS>\n");
     printf("</platform>\n");
   }
   SD_exit();
index 7991374..fcab6a7 100644 (file)
@@ -3,14 +3,14 @@
 $ ${bindir:=.}/flatifier$EXEEXT one_cluster.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="bob0.hamburger.edu" power="1000000000"/>
->   <host id="bob2.hamburger.edu" power="1000000000"/>
->   <host id="bob3.hamburger.edu" power="1000000000"/>
->   <host id="bob4.hamburger.edu" power="1000000000"/>
->   <host id="bob6.hamburger.edu" power="1000000000"/>
+>   <host id="bob0.hamburger.edu" speed="1000000000"/>
+>   <host id="bob2.hamburger.edu" speed="1000000000"/>
+>   <host id="bob3.hamburger.edu" speed="1000000000"/>
+>   <host id="bob4.hamburger.edu" speed="1000000000"/>
+>   <host id="bob6.hamburger.edu" speed="1000000000"/>
 >   <router id="bobbob_cluster_router.hamburger.edu"/>
 >   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
 >   <link id="bob_cluster_backbone" bandwidth="2250000000" latency="0.000500000"/>
@@ -138,14 +138,14 @@ $ ${bindir:=.}/flatifier$EXEEXT one_cluster.xml "--log=root.fmt:[%10.6r]%e[%i:%P
 $ ${bindir:=.}/flatifier$EXEEXT one_cluster_multicore.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="bob0.hamburger.edu" power="1000000000" core="6"/>
->   <host id="bob2.hamburger.edu" power="1000000000" core="6"/>
->   <host id="bob3.hamburger.edu" power="1000000000" core="6"/>
->   <host id="bob4.hamburger.edu" power="1000000000" core="6"/>
->   <host id="bob6.hamburger.edu" power="1000000000" core="6"/>
+>   <host id="bob0.hamburger.edu" speed="1000000000" core="6"/>
+>   <host id="bob2.hamburger.edu" speed="1000000000" core="6"/>
+>   <host id="bob3.hamburger.edu" speed="1000000000" core="6"/>
+>   <host id="bob4.hamburger.edu" speed="1000000000" core="6"/>
+>   <host id="bob6.hamburger.edu" speed="1000000000" core="6"/>
 >   <router id="bobbob_cluster_router.hamburger.edu"/>
 >   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
 >   <link id="bob_cluster_link_0_DOWN" bandwidth="125000000" latency="0.000050000"/>
@@ -269,176 +269,52 @@ $ ${bindir:=.}/flatifier$EXEEXT one_cluster_multicore.xml "--log=root.fmt:[%10.6
 > </AS>
 > </platform>
 
-$ ${bindir:=.}/flatifier$EXEEXT one_host_availability.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
+$ ${bindir:=.}/flatifier$EXEEXT host_attributes.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="bob" power="500000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <route src="bob" dst="bob">
->   <link_ctn id="__loopback__"/>
->   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_host_properties.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="1000000000">
+>   <host id="alice" speed="1000000000"/>
+>   <host id="bob" speed="1000000000"/>
+>   <host id="carol" speed="500000000"/>
+>   <host id="dave" speed="1000000000">
 >     <prop id="OS" value="Linux 2.6.22-14"/>
 >     <prop id="disk" value="80E9"/>
 >     <prop id="memory" value="1000000000"/>
 >   </host>
+>   <host id="erin" speed="500000000"/>
 >   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <route src="bob" dst="bob">
->   <link_ctn id="__loopback__"/>
->   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_host_state_file.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="500000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <route src="bob" dst="bob">
+>   <route src="dave" dst="dave">
 >   <link_ctn id="__loopback__"/>
 >   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_host_state_off.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="500000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <route src="bob" dst="bob">
+>   <route src="erin" dst="erin">
 >   <link_ctn id="__loopback__"/>
 >   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_host_state_on.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="500000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <route src="bob" dst="bob">
->   <link_ctn id="__loopback__"/>
->   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_host_trace_file.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="1000000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <route src="bob" dst="bob">
->   <link_ctn id="__loopback__"/>
->   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_host_trace_inside.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="1000000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <route src="bob" dst="bob">
->   <link_ctn id="__loopback__"/>
->   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_host.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="500000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <route src="bob" dst="bob">
+>   <route src="alice" dst="alice">
 >   <link_ctn id="__loopback__"/>
 >   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_link_availability.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="500000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <link id="link1" bandwidth="80000000" latency="0.000100000"/>
->   <route src="bob" dst="bob">
+>   <route src="carol" dst="carol">
 >   <link_ctn id="__loopback__"/>
 >   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_link_fatpipe.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="500000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <link id="link1" bandwidth="125000000" latency="0.000050000" sharing_policy="FATPIPE"/>
 >   <route src="bob" dst="bob">
 >   <link_ctn id="__loopback__"/>
 >   </route>
 > </AS>
 > </platform>
 
-$ ${bindir:=.}/flatifier$EXEEXT one_link_shared.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
+$ ${bindir:=.}/flatifier$EXEEXT link_attributes.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="bob" power="500000000"/>
+>   <host id="bob" speed="500000000"/>
 >   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
 >   <link id="link1" bandwidth="125000000" latency="0.000050000"/>
->   <route src="bob" dst="bob">
->   <link_ctn id="__loopback__"/>
->   </route>
-> </AS>
-> </platform>
-
-$ ${bindir:=.}/flatifier$EXEEXT one_link_state_file.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
-> [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
-> <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
-> <AS id="AS0" routing="Full">
->   <host id="bob" power="500000000"/>
->   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
->   <link id="link1" bandwidth="80000000" latency="0.000100000"/>
+>   <link id="link2" bandwidth="125000000" latency="0.000050000" sharing_policy="FATPIPE"/>
+>   <link id="link3" bandwidth="80000000" latency="0.000100000"/>
+>   <link id="link4" bandwidth="80000000" latency="0.000100000"/>
 >   <route src="bob" dst="bob">
 >   <link_ctn id="__loopback__"/>
 >   </route>
@@ -448,12 +324,12 @@ $ ${bindir:=.}/flatifier$EXEEXT one_link_state_file.xml "--log=root.fmt:[%10.6r]
 $ ${bindir:=.}/flatifier$EXEEXT three_hosts_non_symmetric_route.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="alice" power="500000000"/>
->   <host id="bob" power="1000000000"/>
->   <host id="trudy" power="250000000"/>
+>   <host id="alice" speed="500000000"/>
+>   <host id="bob" speed="1000000000"/>
+>   <host id="trudy" speed="250000000"/>
 >   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
 >   <link id="link1" bandwidth="125000000" latency="0.000050000"/>
 >   <link id="link2" bandwidth="125000000" latency="0.000050000"/>
@@ -491,19 +367,13 @@ $ ${bindir:=.}/flatifier$EXEEXT three_hosts_non_symmetric_route.xml "--log=root.
 $ ${bindir:=.}/flatifier$EXEEXT two_clusters.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="alice0.crepe.fr" power="1000000000"/>
->   <host id="alice1.crepe.fr" power="1000000000"/>
->   <host id="alice2.crepe.fr" power="1000000000"/>
->   <host id="alice3.crepe.fr" power="1000000000"/>
->   <host id="alice4.crepe.fr" power="1000000000"/>
->   <host id="bob0.hamburger.edu" power="1000000000"/>
->   <host id="bob1.hamburger.edu" power="1000000000"/>
->   <host id="bob2.hamburger.edu" power="1000000000"/>
->   <host id="bob3.hamburger.edu" power="1000000000"/>
->   <host id="bob4.hamburger.edu" power="1000000000"/>
+>   <host id="alice0.crepe.fr" speed="1000000000"/>
+>   <host id="alice1.crepe.fr" speed="1000000000"/>
+>   <host id="bob0.hamburger.edu" speed="1000000000"/>
+>   <host id="bob1.hamburger.edu" speed="1000000000"/>
 >   <router id="bobbob_cluster_router.hamburger.edu"/>
 >   <router id="alicealice_cluster_router.crepe.fr"/>
 >   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
@@ -512,51 +382,21 @@ $ ${bindir:=.}/flatifier$EXEEXT two_clusters.xml "--log=root.fmt:[%10.6r]%e[%i:%
 >   <link id="alice_cluster_link_0_UP" bandwidth="125000000" latency="0.000050000"/>
 >   <link id="alice_cluster_link_1_DOWN" bandwidth="125000000" latency="0.000050000"/>
 >   <link id="alice_cluster_link_1_UP" bandwidth="125000000" latency="0.000050000"/>
->   <link id="alice_cluster_link_2_DOWN" bandwidth="125000000" latency="0.000050000"/>
->   <link id="alice_cluster_link_2_UP" bandwidth="125000000" latency="0.000050000"/>
->   <link id="alice_cluster_link_3_DOWN" bandwidth="125000000" latency="0.000050000"/>
->   <link id="alice_cluster_link_3_UP" bandwidth="125000000" latency="0.000050000"/>
->   <link id="alice_cluster_link_4_DOWN" bandwidth="125000000" latency="0.000050000"/>
->   <link id="alice_cluster_link_4_UP" bandwidth="125000000" latency="0.000050000"/>
 >   <link id="backbone" bandwidth="1250000000" latency="0.000500000"/>
 >   <link id="bob_cluster_backbone" bandwidth="2250000000" latency="0.000500000"/>
 >   <link id="bob_cluster_link_0_DOWN" bandwidth="125000000" latency="0.000050000"/>
 >   <link id="bob_cluster_link_0_UP" bandwidth="125000000" latency="0.000050000"/>
 >   <link id="bob_cluster_link_1_DOWN" bandwidth="125000000" latency="0.000050000"/>
 >   <link id="bob_cluster_link_1_UP" bandwidth="125000000" latency="0.000050000"/>
->   <link id="bob_cluster_link_2_DOWN" bandwidth="125000000" latency="0.000050000"/>
->   <link id="bob_cluster_link_2_UP" bandwidth="125000000" latency="0.000050000"/>
->   <link id="bob_cluster_link_3_DOWN" bandwidth="125000000" latency="0.000050000"/>
->   <link id="bob_cluster_link_3_UP" bandwidth="125000000" latency="0.000050000"/>
->   <link id="bob_cluster_link_4_DOWN" bandwidth="125000000" latency="0.000050000"/>
->   <link id="bob_cluster_link_4_UP" bandwidth="125000000" latency="0.000050000"/>
 >   <route src="bob1.hamburger.edu" dst="bob1.hamburger.edu">
 >   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
 >   </route>
->   <route src="bob1.hamburger.edu" dst="bob3.hamburger.edu">
->   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="bob1.hamburger.edu" dst="alice2.crepe.fr">
->   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob1.hamburger.edu" dst="alice3.crepe.fr">
->   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
 >   <route src="bob1.hamburger.edu" dst="bob0.hamburger.edu">
 >   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="bob1.hamburger.edu" dst="bob2.hamburger.edu">
->   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob1.hamburger.edu" dst="bob4.hamburger.edu">
->   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="bob1.hamburger.edu" dst="alice0.crepe.fr">
 >   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="bob1.hamburger.edu" dst="alice4.crepe.fr">
->   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="bob1.hamburger.edu" dst="alice1.crepe.fr">
 >   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
 >   </route>
@@ -566,141 +406,15 @@ $ ${bindir:=.}/flatifier$EXEEXT two_clusters.xml "--log=root.fmt:[%10.6r]%e[%i:%
 >   <route src="bob1.hamburger.edu" dst="alicealice_cluster_router.crepe.fr">
 >   <link_ctn id="bob_cluster_link_1_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/>
 >   </route>
->   <route src="bob3.hamburger.edu" dst="bob1.hamburger.edu">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="bob3.hamburger.edu">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="alice2.crepe.fr">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="alice3.crepe.fr">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="bob0.hamburger.edu">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="bob2.hamburger.edu">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="bob4.hamburger.edu">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="alice0.crepe.fr">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="alice4.crepe.fr">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="alice1.crepe.fr">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="bobbob_cluster_router.hamburger.edu">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/>
->   </route>
->   <route src="bob3.hamburger.edu" dst="alicealice_cluster_router.crepe.fr">
->   <link_ctn id="bob_cluster_link_3_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="bob1.hamburger.edu">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="bob3.hamburger.edu">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="alice2.crepe.fr">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="alice3.crepe.fr">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="bob0.hamburger.edu">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="bob2.hamburger.edu">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="bob4.hamburger.edu">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="alice0.crepe.fr">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="alice4.crepe.fr">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="alice1.crepe.fr">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="bobbob_cluster_router.hamburger.edu">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/>
->   </route>
->   <route src="alice2.crepe.fr" dst="alicealice_cluster_router.crepe.fr">
->   <link_ctn id="alice_cluster_link_2_UP"/><link_ctn id="alice_cluster_backbone"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="bob1.hamburger.edu">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="bob3.hamburger.edu">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="alice2.crepe.fr">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="alice3.crepe.fr">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="bob0.hamburger.edu">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="bob2.hamburger.edu">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="bob4.hamburger.edu">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="alice0.crepe.fr">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="alice4.crepe.fr">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="alice1.crepe.fr">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="bobbob_cluster_router.hamburger.edu">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/>
->   </route>
->   <route src="alice3.crepe.fr" dst="alicealice_cluster_router.crepe.fr">
->   <link_ctn id="alice_cluster_link_3_UP"/><link_ctn id="alice_cluster_backbone"/>
->   </route>
 >   <route src="bob0.hamburger.edu" dst="bob1.hamburger.edu">
 >   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
 >   </route>
->   <route src="bob0.hamburger.edu" dst="bob3.hamburger.edu">
->   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="bob0.hamburger.edu" dst="alice2.crepe.fr">
->   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob0.hamburger.edu" dst="alice3.crepe.fr">
->   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
 >   <route src="bob0.hamburger.edu" dst="bob0.hamburger.edu">
 >   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="bob0.hamburger.edu" dst="bob2.hamburger.edu">
->   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob0.hamburger.edu" dst="bob4.hamburger.edu">
->   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="bob0.hamburger.edu" dst="alice0.crepe.fr">
 >   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="bob0.hamburger.edu" dst="alice4.crepe.fr">
->   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="bob0.hamburger.edu" dst="alice1.crepe.fr">
 >   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
 >   </route>
@@ -710,105 +424,15 @@ $ ${bindir:=.}/flatifier$EXEEXT two_clusters.xml "--log=root.fmt:[%10.6r]%e[%i:%
 >   <route src="bob0.hamburger.edu" dst="alicealice_cluster_router.crepe.fr">
 >   <link_ctn id="bob_cluster_link_0_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/>
 >   </route>
->   <route src="bob2.hamburger.edu" dst="bob1.hamburger.edu">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="bob3.hamburger.edu">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="alice2.crepe.fr">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="alice3.crepe.fr">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="bob0.hamburger.edu">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="bob2.hamburger.edu">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="bob4.hamburger.edu">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="alice0.crepe.fr">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="alice4.crepe.fr">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="alice1.crepe.fr">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="bobbob_cluster_router.hamburger.edu">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/>
->   </route>
->   <route src="bob2.hamburger.edu" dst="alicealice_cluster_router.crepe.fr">
->   <link_ctn id="bob_cluster_link_2_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="bob1.hamburger.edu">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="bob3.hamburger.edu">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="alice2.crepe.fr">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="alice3.crepe.fr">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="bob0.hamburger.edu">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="bob2.hamburger.edu">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="bob4.hamburger.edu">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="alice0.crepe.fr">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="alice4.crepe.fr">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="alice1.crepe.fr">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="bobbob_cluster_router.hamburger.edu">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/>
->   </route>
->   <route src="bob4.hamburger.edu" dst="alicealice_cluster_router.crepe.fr">
->   <link_ctn id="bob_cluster_link_4_UP"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="backbone"/>
->   </route>
 >   <route src="alice0.crepe.fr" dst="bob1.hamburger.edu">
 >   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
 >   </route>
->   <route src="alice0.crepe.fr" dst="bob3.hamburger.edu">
->   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="alice0.crepe.fr" dst="alice2.crepe.fr">
->   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice0.crepe.fr" dst="alice3.crepe.fr">
->   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
 >   <route src="alice0.crepe.fr" dst="bob0.hamburger.edu">
 >   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="alice0.crepe.fr" dst="bob2.hamburger.edu">
->   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice0.crepe.fr" dst="bob4.hamburger.edu">
->   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="alice0.crepe.fr" dst="alice0.crepe.fr">
 >   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="alice0.crepe.fr" dst="alice4.crepe.fr">
->   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="alice0.crepe.fr" dst="alice1.crepe.fr">
 >   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
 >   </route>
@@ -818,69 +442,15 @@ $ ${bindir:=.}/flatifier$EXEEXT two_clusters.xml "--log=root.fmt:[%10.6r]%e[%i:%
 >   <route src="alice0.crepe.fr" dst="alicealice_cluster_router.crepe.fr">
 >   <link_ctn id="alice_cluster_link_0_UP"/><link_ctn id="alice_cluster_backbone"/>
 >   </route>
->   <route src="alice4.crepe.fr" dst="bob1.hamburger.edu">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="bob3.hamburger.edu">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="alice2.crepe.fr">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="alice3.crepe.fr">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="bob0.hamburger.edu">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="bob2.hamburger.edu">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="bob4.hamburger.edu">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="alice0.crepe.fr">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="alice4.crepe.fr">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="alice1.crepe.fr">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="bobbob_cluster_router.hamburger.edu">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/>
->   </route>
->   <route src="alice4.crepe.fr" dst="alicealice_cluster_router.crepe.fr">
->   <link_ctn id="alice_cluster_link_4_UP"/><link_ctn id="alice_cluster_backbone"/>
->   </route>
 >   <route src="alice1.crepe.fr" dst="bob1.hamburger.edu">
 >   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
 >   </route>
->   <route src="alice1.crepe.fr" dst="bob3.hamburger.edu">
->   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="alice1.crepe.fr" dst="alice2.crepe.fr">
->   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice1.crepe.fr" dst="alice3.crepe.fr">
->   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
 >   <route src="alice1.crepe.fr" dst="bob0.hamburger.edu">
 >   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="alice1.crepe.fr" dst="bob2.hamburger.edu">
->   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alice1.crepe.fr" dst="bob4.hamburger.edu">
->   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="alice1.crepe.fr" dst="alice0.crepe.fr">
 >   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="alice1.crepe.fr" dst="alice4.crepe.fr">
->   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="alice1.crepe.fr" dst="alice1.crepe.fr">
 >   <link_ctn id="alice_cluster_link_1_UP"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
 >   </route>
@@ -899,30 +469,12 @@ $ ${bindir:=.}/flatifier$EXEEXT two_clusters.xml "--log=root.fmt:[%10.6r]%e[%i:%
 >   <route src="bobbob_cluster_router.hamburger.edu" dst="bob1.hamburger.edu">
 >   <link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
 >   </route>
->   <route src="bobbob_cluster_router.hamburger.edu" dst="bob3.hamburger.edu">
->   <link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="bobbob_cluster_router.hamburger.edu" dst="alice2.crepe.fr">
->   <link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bobbob_cluster_router.hamburger.edu" dst="alice3.crepe.fr">
->   <link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
 >   <route src="bobbob_cluster_router.hamburger.edu" dst="bob0.hamburger.edu">
 >   <link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="bobbob_cluster_router.hamburger.edu" dst="bob2.hamburger.edu">
->   <link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="bobbob_cluster_router.hamburger.edu" dst="bob4.hamburger.edu">
->   <link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="bobbob_cluster_router.hamburger.edu" dst="alice0.crepe.fr">
 >   <link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="bobbob_cluster_router.hamburger.edu" dst="alice4.crepe.fr">
->   <link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="bobbob_cluster_router.hamburger.edu" dst="alice1.crepe.fr">
 >   <link_ctn id="backbone"/><link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
 >   </route>
@@ -935,30 +487,12 @@ $ ${bindir:=.}/flatifier$EXEEXT two_clusters.xml "--log=root.fmt:[%10.6r]%e[%i:%
 >   <route src="alicealice_cluster_router.crepe.fr" dst="bob1.hamburger.edu">
 >   <link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_1_DOWN"/>
 >   </route>
->   <route src="alicealice_cluster_router.crepe.fr" dst="bob3.hamburger.edu">
->   <link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_3_DOWN"/>
->   </route>
->   <route src="alicealice_cluster_router.crepe.fr" dst="alice2.crepe.fr">
->   <link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alicealice_cluster_router.crepe.fr" dst="alice3.crepe.fr">
->   <link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_3_DOWN"/>
->   </route>
 >   <route src="alicealice_cluster_router.crepe.fr" dst="bob0.hamburger.edu">
 >   <link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="alicealice_cluster_router.crepe.fr" dst="bob2.hamburger.edu">
->   <link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_2_DOWN"/>
->   </route>
->   <route src="alicealice_cluster_router.crepe.fr" dst="bob4.hamburger.edu">
->   <link_ctn id="backbone"/><link_ctn id="bob_cluster_backbone"/><link_ctn id="bob_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="alicealice_cluster_router.crepe.fr" dst="alice0.crepe.fr">
 >   <link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_0_DOWN"/>
 >   </route>
->   <route src="alicealice_cluster_router.crepe.fr" dst="alice4.crepe.fr">
->   <link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_4_DOWN"/>
->   </route>
 >   <route src="alicealice_cluster_router.crepe.fr" dst="alice1.crepe.fr">
 >   <link_ctn id="alice_cluster_backbone"/><link_ctn id="alice_cluster_link_1_DOWN"/>
 >   </route>
@@ -968,11 +502,11 @@ $ ${bindir:=.}/flatifier$EXEEXT two_clusters.xml "--log=root.fmt:[%10.6r]%e[%i:%
 $ ${bindir:=.}/flatifier$EXEEXT two_hosts_multi_hop.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="alice" power="500000000"/>
->   <host id="bob" power="1000000000"/>
+>   <host id="alice" speed="500000000"/>
+>   <host id="bob" speed="1000000000"/>
 >   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
 >   <link id="link_alice" bandwidth="125000000" latency="0.000050000"/>
 >   <link id="link_bob" bandwidth="125000000" latency="0.000050000"/>
@@ -995,11 +529,11 @@ $ ${bindir:=.}/flatifier$EXEEXT two_hosts_multi_hop.xml "--log=root.fmt:[%10.6r]
 $ ${bindir:=.}/flatifier$EXEEXT two_hosts_one_link.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="alice" power="500000000"/>
->   <host id="bob" power="1000000000"/>
+>   <host id="alice" speed="500000000"/>
+>   <host id="bob" speed="1000000000"/>
 >   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
 >   <link id="link1" bandwidth="125000000" latency="0.000050000"/>
 >   <route src="alice" dst="alice">
@@ -1020,12 +554,12 @@ $ ${bindir:=.}/flatifier$EXEEXT two_hosts_one_link.xml "--log=root.fmt:[%10.6r]%
 $ ${bindir:=.}/flatifier$EXEEXT ${srcdir:=.}/examples/platforms/bypassASroute.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="1" power="1000000000"/>
->   <host id="2" power="1000000000"/>
->   <host id="3" power="1000000000"/>
+>   <host id="1" speed="1000000000"/>
+>   <host id="2" speed="1000000000"/>
+>   <host id="3" speed="1000000000"/>
 >   <router id="my_cluster_2_router"/>
 >   <router id="my_cluster_1_router"/>
 >   <router id="my_cluster_3_router"/>
@@ -1155,21 +689,21 @@ $ ${bindir:=.}/flatifier$EXEEXT ${srcdir:=.}/examples/platforms/bypassASroute.xm
 $ ${bindir:=.}/flatifier$EXEEXT ${srcdir:=.}/examples/platforms/torus_cluster.xml "--log=root.fmt:[%10.6r]%e[%i:%P@%h]%e%m%n"
 > [  0.000000] [0:maestro@] Switching to the L07 model to handle parallel tasks.
 > <?xml version='1.0'?>
-> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid.dtd">
-> <platform version="3">
+> <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+> <platform version="4">
 > <AS id="AS0" routing="Full">
->   <host id="node-0.acme.org" power="1000000000"/>
->   <host id="node-1.acme.org" power="1000000000"/>
->   <host id="node-10.acme.org" power="1000000000"/>
->   <host id="node-11.acme.org" power="1000000000"/>
->   <host id="node-2.acme.org" power="1000000000"/>
->   <host id="node-3.acme.org" power="1000000000"/>
->   <host id="node-4.acme.org" power="1000000000"/>
->   <host id="node-5.acme.org" power="1000000000"/>
->   <host id="node-6.acme.org" power="1000000000"/>
->   <host id="node-7.acme.org" power="1000000000"/>
->   <host id="node-8.acme.org" power="1000000000"/>
->   <host id="node-9.acme.org" power="1000000000"/>
+>   <host id="node-0.acme.org" speed="1000000000"/>
+>   <host id="node-1.acme.org" speed="1000000000"/>
+>   <host id="node-10.acme.org" speed="1000000000"/>
+>   <host id="node-11.acme.org" speed="1000000000"/>
+>   <host id="node-2.acme.org" speed="1000000000"/>
+>   <host id="node-3.acme.org" speed="1000000000"/>
+>   <host id="node-4.acme.org" speed="1000000000"/>
+>   <host id="node-5.acme.org" speed="1000000000"/>
+>   <host id="node-6.acme.org" speed="1000000000"/>
+>   <host id="node-7.acme.org" speed="1000000000"/>
+>   <host id="node-8.acme.org" speed="1000000000"/>
+>   <host id="node-9.acme.org" speed="1000000000"/>
 >   <router id="node-bob_cluster_router.acme.org"/>
 >   <link id="__loopback__" bandwidth="498000000" latency="0.000015000" sharing_policy="FATPIPE"/>
 >   <link id="bob_cluster_link_0_loopback" bandwidth="100000000" latency="0.000000000" sharing_policy="FATPIPE"/>
index 58ca334..b293a8a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
 <platform version="4">
-  <AS  id="AS0"  routing="Dijkstra">
+  <AS id="AS0" routing="Dijkstra">
     <host id="host1" speed="1Gf"/>
     <host id="host2" speed="1Gf"/>
     <host id="host3" speed="1Gf"/>
     <link id="link1" bandwidth="125GBps" latency="50us"/>
     <link id="link2" bandwidth="125MBps" latency="5us"/>
     <link id="link3" bandwidth="125kBps" latency="500ns"/>
-    <link id="link4" bandwidth="125Bps" latency="5ns"/>  
+    <link id="link4" bandwidth="125Bps" latency="5ns"/>
 
-    <route src="host1" dst="host2" symmetrical="NO"><link_ctn id="link1"/></route>
-    <route src="host2" dst="host1" symmetrical="NO"><link_ctn id="link1"/></route> 
-    <route src="host1" dst="host3" symmetrical="NO"><link_ctn id="link2"/></route>
-    <route src="host3" dst="host1" symmetrical="NO"><link_ctn id="link2"/></route>
+    <route src="host1" dst="host2"><link_ctn id="link1"/></route>
+    <route src="host1" dst="host3"><link_ctn id="link2"/></route>
   </AS>
 </platform>
diff --git a/teshsuite/simdag/platforms/four_hosts_floyd_bis.xml b/teshsuite/simdag/platforms/four_hosts_floyd_bis.xml
deleted file mode 100644 (file)
index c93c4e2..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Floyd">
-    <host id="host1" speed="1Gf"/>
-    <host id="host2" speed="1Gf"/>
-    <host id="host3" speed="1Gf"/>
-    <host id="host4" speed="1Gf"/>
-    <host id="host5" speed="1Gf"/>
-
-    <link id="link1" bandwidth="125MBps" latency="50us"/>
-    <link id="link2" bandwidth="125MBps" latency="50us"/>
-    <link id="link3" bandwidth="125MBps" latency="50us"/>
-    <link id="link4" bandwidth="125MBps" latency="50us"/>  
-    <link id="link5" bandwidth="125MBps" latency="50us"/>
-    <link id="link6" bandwidth="125MBps" latency="50us"/> 
-
-    <route src="host1" dst="host2"><link_ctn id="link1"/></route>
-    <route src="host1" dst="host3"><link_ctn id="link2"/></route>
-    <route src="host2" dst="host3"><link_ctn id="link3"/></route>
-    <route src="host3" dst="host4"><link_ctn id="link4"/></route>
-    <route src="host2" dst="host5"><link_ctn id="link5"/></route>
-    <route src="host3" dst="host5"><link_ctn id="link6"/></route>
-  </AS>
-</platform>
index 17b7ad4..894323d 100644 (file)
@@ -72,115 +72,3 @@ $ ${bindir:=.}/basic_parsing_test ./four_hosts_floyd.xml FULL_LINK
 >   Route size 1
 >   Link __loopback__: latency = 0.000015, bandwidth = 498000000.000000
 >   Route latency = 0.000015, route bandwidth = 498000000.000000
-
-$ ${bindir:=.}/basic_parsing_test ./four_hosts_floyd_bis.xml FULL_LINK
-> [0.000000] [xbt_cfg/INFO] Switching to the L07 model to handle parallel tasks.
-> Workstation number: 5, link number: 7
-> Route between host1 and host1
->   Route size 1
->   Link __loopback__: latency = 0.000015, bandwidth = 498000000.000000
->   Route latency = 0.000015, route bandwidth = 498000000.000000
-> Route between host1 and host2
->   Route size 1
->   Link link1: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host1 and host3
->   Route size 1
->   Link link2: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host1 and host4
->   Route size 2
->   Link link2: latency = 0.000050, bandwidth = 125000000.000000
->   Link link4: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000100, route bandwidth = 125000000.000000
-> Route between host1 and host5
->   Route size 2
->   Link link1: latency = 0.000050, bandwidth = 125000000.000000
->   Link link5: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000100, route bandwidth = 125000000.000000
-> Route between host2 and host1
->   Route size 1
->   Link link1: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host2 and host2
->   Route size 1
->   Link __loopback__: latency = 0.000015, bandwidth = 498000000.000000
->   Route latency = 0.000015, route bandwidth = 498000000.000000
-> Route between host2 and host3
->   Route size 1
->   Link link3: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host2 and host4
->   Route size 2
->   Link link3: latency = 0.000050, bandwidth = 125000000.000000
->   Link link4: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000100, route bandwidth = 125000000.000000
-> Route between host2 and host5
->   Route size 1
->   Link link5: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host3 and host1
->   Route size 1
->   Link link2: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host3 and host2
->   Route size 1
->   Link link3: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host3 and host3
->   Route size 1
->   Link __loopback__: latency = 0.000015, bandwidth = 498000000.000000
->   Route latency = 0.000015, route bandwidth = 498000000.000000
-> Route between host3 and host4
->   Route size 1
->   Link link4: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host3 and host5
->   Route size 1
->   Link link6: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host4 and host1
->   Route size 2
->   Link link4: latency = 0.000050, bandwidth = 125000000.000000
->   Link link2: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000100, route bandwidth = 125000000.000000
-> Route between host4 and host2
->   Route size 2
->   Link link4: latency = 0.000050, bandwidth = 125000000.000000
->   Link link3: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000100, route bandwidth = 125000000.000000
-> Route between host4 and host3
->   Route size 1
->   Link link4: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host4 and host4
->   Route size 1
->   Link __loopback__: latency = 0.000015, bandwidth = 498000000.000000
->   Route latency = 0.000015, route bandwidth = 498000000.000000
-> Route between host4 and host5
->   Route size 2
->   Link link4: latency = 0.000050, bandwidth = 125000000.000000
->   Link link6: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000100, route bandwidth = 125000000.000000
-> Route between host5 and host1
->   Route size 2
->   Link link5: latency = 0.000050, bandwidth = 125000000.000000
->   Link link1: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000100, route bandwidth = 125000000.000000
-> Route between host5 and host2
->   Route size 1
->   Link link5: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host5 and host3
->   Route size 1
->   Link link6: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000050, route bandwidth = 125000000.000000
-> Route between host5 and host4
->   Route size 2
->   Link link6: latency = 0.000050, bandwidth = 125000000.000000
->   Link link4: latency = 0.000050, bandwidth = 125000000.000000
->   Route latency = 0.000100, route bandwidth = 125000000.000000
-> Route between host5 and host5
->   Route size 1
->   Link __loopback__: latency = 0.000015, bandwidth = 498000000.000000
->   Route latency = 0.000015, route bandwidth = 498000000.000000
\ No newline at end of file
diff --git a/teshsuite/simdag/platforms/host_attributes.xml b/teshsuite/simdag/platforms/host_attributes.xml
new file mode 100644 (file)
index 0000000..b0d28e0
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4">
+  <AS  id="AS0"  routing="Full">
+    <host id="alice" speed="1Gf"/> <!-- connected to an in-file speed trace --> 
+    <host id="bob" speed="1Gf"/>   <!-- connected to an out-file speed trace -->
+    <host id="carol" speed="500Mf" state_file="carol.fail"/>  <!-- out-file state trace as attribute -->
+    <host id="dave" speed="1Gf">
+      <prop id="memory" value="1000000000"/>
+      <prop id="disk" value="80E9"/>
+      <prop id="OS" value="Linux 2.6.22-14"/>
+    </host>
+    <host id="erin" speed="500Mf" availability_file="erin.avail"/> <!--uses someone else's trace --> 
+  </AS>
+
+  <trace id="myTrace" periodicity="1.0">
+    0.0 1.0
+    11.0 0.5
+    20.0 0.8
+  </trace>
+
+  <trace_connect trace="myTrace" element="alice" kind="SPEED"/>
+
+  <trace id="myTrace" file="bob.trace" periodicity="1.0"/>
+  <trace_connect trace="myTrace" element="bob" kind="SPEED"/>
+</platform>
diff --git a/teshsuite/simdag/platforms/link_attributes.xml b/teshsuite/simdag/platforms/link_attributes.xml
new file mode 100644 (file)
index 0000000..ee94405
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version='1.0'?>
+<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+<platform version="4">
+<AS  id="AS0"  routing="Full">
+  <host id="bob" speed="500Mf"/>
+
+  <link id="link1" bandwidth="125MBps" latency="50us"/>
+  <link id="link2" bandwidth="125MBps" latency="50us" sharing_policy="FATPIPE"/>
+  <link id="link3" bandwidth="80MBps" latency="100us" bandwidth_file="link.bw" latency_file="link.lat"/>
+  <link id="link4" bandwidth="80MBps" latency="100us" state_file="link.fail"/>
+</AS>
+</platform>
diff --git a/teshsuite/simdag/platforms/one_host.xml b/teshsuite/simdag/platforms/one_host.xml
deleted file mode 100644 (file)
index 9d07959..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Full">
-    <host id="bob" speed="500Mf"/>
-  </AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_host_availability.xml b/teshsuite/simdag/platforms/one_host_availability.xml
deleted file mode 100644 (file)
index 7845c7d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-<AS  id="AS0"  routing="Full">
-  <host id="bob" speed="500Mf" availability_file="bob.trace"/>
-</AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_host_properties.xml b/teshsuite/simdag/platforms/one_host_properties.xml
deleted file mode 100644 (file)
index 3691ccd..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-<AS  id="AS0"  routing="Full">
-  <host id="bob" speed="1Gf">
-    <prop id="memory" value="1000000000"/>
-    <prop id="disk" value="80E9"/>
-    <prop id="OS" value="Linux 2.6.22-14"/>
-  </host>
-</AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_host_state_file.xml b/teshsuite/simdag/platforms/one_host_state_file.xml
deleted file mode 100644 (file)
index b2402d9..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Full">
-    <host id="bob" speed="500Mf" state_file="bob.fail"/>
-  </AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_host_state_off.xml b/teshsuite/simdag/platforms/one_host_state_off.xml
deleted file mode 100644 (file)
index 07aa26b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Full">
-     <host id="bob" speed="500Mf" state="OFF"/>
-  </AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_host_state_on.xml b/teshsuite/simdag/platforms/one_host_state_on.xml
deleted file mode 100644 (file)
index 115e742..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Full">
-    <host id="bob" speed="500Mf" state="ON"/>
-  </AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_host_trace_file.xml b/teshsuite/simdag/platforms/one_host_trace_file.xml
deleted file mode 100644 (file)
index 081295e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Full">
-    <host id="bob" speed="1Gf"/>  
-  </AS>
-  <trace id="myTrace" file="bob.trace" periodicity="1.0"/>
-  <trace_connect trace="myTrace" element="bob" kind="SPEED"/>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_host_trace_inside.xml b/teshsuite/simdag/platforms/one_host_trace_inside.xml
deleted file mode 100644 (file)
index b558d30..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-<AS  id="AS0"  routing="Full">
-  <host id="bob" speed="1Gf"/>
-</AS>
-  <trace id="myTrace" periodicity="1.0">
-    0.0 1.0
-    11.0 0.5
-    20.0 0.8
-  </trace>
-
-  <trace_connect trace="myTrace" element="bob" kind="SPEED"/>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_link_availability.xml b/teshsuite/simdag/platforms/one_link_availability.xml
deleted file mode 100644 (file)
index 85dd598..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-<AS  id="AS0"  routing="Full">
-  <host id="bob" speed="500Mf"/>
-  <link id="link1" bandwidth="80MBps" latency="100us" bandwidth_file="link1.bw" latency_file="link1.lat"/>
-</AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_link_fatpipe.xml b/teshsuite/simdag/platforms/one_link_fatpipe.xml
deleted file mode 100644 (file)
index 103a540..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Full">
-    <host id="bob" speed="500Mf"/>
-    <link id="link1" bandwidth="125MBps" latency="50us" sharing_policy="FATPIPE"/>
-  </AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_link_shared.xml b/teshsuite/simdag/platforms/one_link_shared.xml
deleted file mode 100644 (file)
index 1b427f0..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Full">
-    <host id="bob" speed="500Mf"/>
-    <link id="link1" bandwidth="125MBps" latency="50us"/>
-  </AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/one_link_state_file.xml b/teshsuite/simdag/platforms/one_link_state_file.xml
deleted file mode 100644 (file)
index 7eeea58..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Full">
-    <host id="bob" speed="500Mf"/>
-    <link id="link1" bandwidth="80MBps" latency="100us" state_file="link1.fail"/>
-  </AS>
-</platform>
diff --git a/teshsuite/simdag/platforms/random.xml b/teshsuite/simdag/platforms/random.xml
deleted file mode 100644 (file)
index 573c424..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-
-<config id="General">
-  <prop id="rngstream/seed" value="12345;12345;12345;12345;12345;12345"></prop>
-</config>
-
-<random_law_type id="Core2010" type="discrete_explicite" value="1:0.1;2:0.4;23=0.00001"/>
-<random_law_type id="Core2012" type="discrete_explicite" value="1:0.01;2:0.8;23=0.00001"/>
-
-<random_law_type id="CustomBandwidth" type="uniform" min="1000" max="10000"/>
-<random_law_type id="CustomLatency" type="uniform" min="0.0001" max="0.0002"/>
-<random_law_type id="CustomAvail" type="uniform" min="0" max="1"/>
-
-<random_law_type id="expo01" type="exponential" rate="0.1"/>
-<random_law_type id="wei01" type="weibull" shape="1" scale=".4"/>
-
-<random_state_trace_type id="mystate" availa="expo01" unavail="wei01"/>
-<random_availability_trace_type id="mypow_avail" duration="expo01" value="CustomAvail"/>
-<random_availability_trace_type id="mybw" duration="expo01" value="CustomBandwidth"/>
-<random_availability_trace_type id="mylat" duration="expo01" value="CustomLatency"/>
-
-<random_law_type id="CustomPower" type="uniform" min="10000" max="400000"/>
-<random_law_type id="CustomBWval" type="uniform" min="1000" max="10000"/>
-
-<!--  tentative de description de variables linéairement corrélées. Ã€ revoir et confirmer... -->
-<random_law_type id="white" type="Gaussion" mean="1000" max="10000"/>
-<random_core_and_power_type id_core="foo"id_power="Core2010" mode="linear" base="NBcore" 
-                            linear_a="0.5" linear_b="1000" noise="white"/>
-
-<AS  id="AS0"  routing="Full">
-  <!-- Horizontal streams -->
-  <host id="foo" speed="123.121kf" state_trace="mystate" availability_trace="mypow_avail"/> 
-  <link id="bar" bandwidth=""   bandwidth_trace="mybw" latency_trace="mylat"/>
-  <cluster  id="bob_cluster" prefix="bob" suffix=".hamburger.edu" radical="0-1" speed="100kf"
-        bw="" lat="50us" bb_bw="2.25GBps"  bb_lat="500us"
-        bw_trace="mybw"
-        availability_trace="mywpow_avail"
-        state_trace="mystate"
-   />
-
-  <!-- Vertical stream ? -->
-  <peer_set id="peer_home" prefix="home" suffix=".edu" radical="1-10000"
-        speed="CustomPower"
-        bw_in_trace="mybw"
-        bw_out="CustomBWval"
-        lat="50us"
-  />
-  <peer_set/>
-</AS>
-</platform>
index e40b830..5fa2b2b 100644 (file)
@@ -2,9 +2,9 @@
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
 <platform version="4">
   <AS  id="AS0"  routing="Full">
-    <cluster id="bob_cluster" prefix="bob" suffix=".hamburger.edu" radical="0-4" speed="1Gf" bw="125MBps" lat="50us"
+    <cluster id="bob_cluster" prefix="bob" suffix=".hamburger.edu" radical="0-1" speed="1Gf" bw="125MBps" lat="50us"
              bb_bw="2.25GBps" bb_lat="500us"/>
-    <cluster id="alice_cluster" prefix="alice" suffix=".crepe.fr" radical="0-4" speed="1Gf" bw="125MBps" lat="50us"
+    <cluster id="alice_cluster" prefix="alice" suffix=".crepe.fr" radical="0-1" speed="1Gf" bw="125MBps" lat="50us"
              bb_bw="2.25GBps" bb_lat="500us"/>  
 
      <link id="backbone" bandwidth="1.25GBps" latency="500us"/>  
diff --git a/teshsuite/simdag/platforms/two_clusters_symmetric.xml b/teshsuite/simdag/platforms/two_clusters_symmetric.xml
deleted file mode 100644 (file)
index 9afb8cf..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
-<platform version="4">
-  <AS  id="AS0"  routing="Full">
-    <cluster id="bob_cluster" prefix="bob" suffix=".hamburger.edu" radical="0-1" speed="1Gf" bw="125MBps" lat="50us"
-             bb_bw="2.25GBps" bb_lat="500us"/>
-    <cluster id="alice_cluster" prefix="alice" suffix=".crepe.fr" radical="0-1" speed="1Gf" bw="125MBps" lat="50us"
-             bb_bw="2.25GBps" bb_lat="500us"/>  
-
-     <link id="backbone" bandwidth="1.25GBps" latency="500us"/>  
-
-     <ASroute src="bob_cluster" dst="alice_cluster" gw_src="bobbob_cluster_router.hamburger.edu" 
-              gw_dst="alicealice_cluster_router.crepe.fr" symmetrical="YES">
-        <link_ctn id="backbone"/>
-     </ASroute>
-  </AS>
-</platform>
-
index 4fcacc6..956573c 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(check_defaults check_defaults.c)
+add_executable       (check_defaults check_defaults.c)
 target_link_libraries(check_defaults simgrid)
 
 set(tesh_files
index ed9b2cc..4547f05 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(stack_overflow stack_overflow.c)
+add_executable       (stack_overflow stack_overflow.c)
 target_link_libraries(stack_overflow simgrid)
 
 set(tesh_files
index 0f9d37f..00b7004 100644 (file)
@@ -4,7 +4,6 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
 endif()
 
 set(bin_files
index 461a767..115a521 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(allgather_coll allgather_coll.c)
+
+  add_executable       (allgather_coll allgather_coll.c)
   target_link_libraries(allgather_coll simgrid)
 endif()
 
index 357400d..e5f1e63 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(allgatherv_coll allgatherv_coll.c)
+
+  add_executable       (allgatherv_coll allgatherv_coll.c)
   target_link_libraries(allgatherv_coll simgrid)
 endif()
 
index da60278..257aaee 100644 (file)
@@ -4,13 +4,11 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(allreduce allreduce.c)
-  add_executable(allreduce_coll allreduce_coll.c)
-  target_link_libraries(allreduce simgrid)
+
+  add_executable       (allreduce      allreduce.c)
+  target_link_libraries(allreduce      simgrid)
+  add_executable       (allreduce_coll allreduce_coll.c)
   target_link_libraries(allreduce_coll simgrid)
 endif()
 
@@ -18,6 +16,7 @@ set(tesh_files
   ${tesh_files}
   ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll.tesh
   ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll_large.tesh
+  ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll_automatic.tesh
   PARENT_SCOPE)
 set(examples_src
   ${examples_src}
diff --git a/teshsuite/smpi/allreduce/allreduce_coll_automatic.tesh b/teshsuite/smpi/allreduce/allreduce_coll_automatic.tesh
new file mode 100644 (file)
index 0000000..0d77eb9
--- /dev/null
@@ -0,0 +1,71 @@
+# Smpi Allreduce collectives tests
+! setenv LD_LIBRARY_PATH=../../lib
+! output sort 19
+
+p Test allreduce
+$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/allreduce_coll --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error --cfg=smpi/allreduce:automatic --cfg=smpi/async_small_thresh:65536 --cfg=smpi/send_is_detached_thresh:128000 --cfg=smpi/running_power:-1 "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [  0.420130] (5:4@Jupiter) The quickest allreduce was redbcast on rank 4 and took 0.007482
+> [  0.420130] (6:5@Jupiter) The quickest allreduce was redbcast on rank 5 and took 0.007513
+> [  0.420130] (7:6@Jupiter) The quickest allreduce was redbcast on rank 6 and took 0.007513
+> [  0.420130] (8:7@Jupiter) The quickest allreduce was redbcast on rank 7 and took 0.007543
+> [  0.420342] (13:12@Ginette) The quickest allreduce was mvapich2_two_level on rank 12 and took 0.007247
+> [  0.420342] (14:13@Ginette) The quickest allreduce was mvapich2_two_level on rank 13 and took 0.007278
+> [  0.420342] (15:14@Ginette) The quickest allreduce was mvapich2_two_level on rank 14 and took 0.007278
+> [  0.420342] (16:15@Ginette) The quickest allreduce was ompi on rank 15 and took 0.007263
+> [  0.421734] (2:1@Tremblay) The quickest allreduce was redbcast on rank 1 and took 0.006004
+> [  0.421734] (3:2@Tremblay) The quickest allreduce was redbcast on rank 2 and took 0.006004
+> [  0.421734] (4:3@Tremblay) The quickest allreduce was redbcast on rank 3 and took 0.006034
+> [  0.422884] (10:9@Fafard) The quickest allreduce was mvapich2_two_level on rank 9 and took 0.006492
+> [  0.422884] (11:10@Fafard) The quickest allreduce was mvapich2_two_level on rank 10 and took 0.006492
+> [  0.422884] (12:11@Fafard) The quickest allreduce was mvapich2_two_level on rank 11 and took 0.006523
+> [  0.422884] (9:8@Fafard) The quickest allreduce was mvapich2_two_level on rank 8 and took 0.006462
+> [  0.426869] (1:0@Tremblay) For rank 0, the quickest was redbcast : 0.005988 , but global was mvapich2_two_level : 0.008672 at max
+> [0] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [0] sndbuf=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ]
+> [10] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [10] sndbuf=[160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 ]
+> [11] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [11] sndbuf=[176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 ]
+> [12] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [12] sndbuf=[192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 ]
+> [13] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [13] sndbuf=[208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 ]
+> [14] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [14] sndbuf=[224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 ]
+> [15] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [15] sndbuf=[240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 ]
+> [1] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [1] sndbuf=[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ]
+> [2] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [2] sndbuf=[32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 ]
+> [3] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [3] sndbuf=[48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 ]
+> [4] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [4] sndbuf=[64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 ]
+> [5] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [5] sndbuf=[80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 ]
+> [6] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [6] sndbuf=[96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 ]
+> [7] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [7] sndbuf=[112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 ]
+> [8] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [8] sndbuf=[128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 ]
+> [9] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ]
+> [9] sndbuf=[144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 ]
+> [rank 0] -> Tremblay
+> [rank 10] -> Fafard
+> [rank 11] -> Fafard
+> [rank 12] -> Ginette
+> [rank 13] -> Ginette
+> [rank 14] -> Ginette
+> [rank 15] -> Ginette
+> [rank 1] -> Tremblay
+> [rank 2] -> Tremblay
+> [rank 3] -> Tremblay
+> [rank 4] -> Jupiter
+> [rank 5] -> Jupiter
+> [rank 6] -> Jupiter
+> [rank 7] -> Jupiter
+> [rank 8] -> Fafard
+> [rank 9] -> Fafard
+
index 52177af..d1d082c 100644 (file)
@@ -4,53 +4,17 @@
 
 ! timeout 20
 p Test allreduce
-$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile_coll -platform ../../../examples/platforms/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/allreduce_coll 30000 --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
+$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/platforms/small_platform.xml -np 4 --log=xbt_cfg.thres:critical ${bindir:=.}/allreduce_coll 300000 --log=smpi_kernel.thres:warning --log=smpi_coll.thres:error
 > [rank 0] -> Tremblay
-> [rank 1] -> Tremblay
-> [rank 2] -> Tremblay
-> [rank 3] -> Tremblay
-> [rank 4] -> Jupiter
-> [rank 5] -> Jupiter
-> [rank 6] -> Jupiter
-> [rank 7] -> Jupiter
-> [rank 8] -> Fafard
-> [rank 9] -> Fafard
-> [rank 10] -> Fafard
-> [rank 11] -> Fafard
-> [rank 12] -> Ginette
-> [rank 13] -> Ginette
-> [rank 14] -> Ginette
-> [rank 15] -> Ginette
-> [0] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [0] sndbuf=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 ]
-> [10] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [10] sndbuf=[160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 ]
-> [11] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [11] sndbuf=[176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 ]
-> [12] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [12] sndbuf=[192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 ]
-> [13] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [13] sndbuf=[208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 ]
-> [14] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [14] sndbuf=[224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 ]
-> [15] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [15] sndbuf=[240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 ]
-> [1] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [1] sndbuf=[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 ]
-> [2] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [2] sndbuf=[32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 ]
-> [3] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [3] sndbuf=[48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 ]
-> [4] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [4] sndbuf=[64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 ]
-> [5] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [5] sndbuf=[80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 ]
-> [6] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [6] sndbuf=[96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 ]
-> [7] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [7] sndbuf=[112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 ]
-> [8] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [8] sndbuf=[128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 ]
-> [9] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 2176 2192 2208 2224 2240 2256 2272 2288 2304 2320 2336 2352 2368 2384 2400 2416 2432 2448 2464 2480 2496 2512 2528 2544 2560 2576 2592 2608 2624 2640 2656 2672 2688 2704 2720 2736 2752 2768 2784 2800 2816 2832 2848 2864 2880 2896 2912 2928 2944 2960 2976 2992 3008 3024 3040 3056 3072 3088 3104 3120 3136 3152 3168 3184 3200 3216 3232 3248 3264 3280 3296 3312 3328 3344 3360 3376 3392 3408 3424 3440 3456 3472 3488 3504 3520 3536 3552 3568 3584 3600 3616 3632 3648 3664 3680 3696 3712 3728 3744 3760 3776 3792 3808 3824 3840 3856 3872 3888 3904 3920 3936 3952 3968 3984 4000 4016 4032 4048 4064 4080 4096 4112 4128 4144 4160 4176 4192 4208 4224 4240 4256 4272 4288 4304 4320 4336 4352 4368 4384 4400 4416 4432 4448 4464 4480 4496 4512 4528 4544 4560 4576 4592 4608 4624 4640 4656 4672 4688 4704 4720 4736 4752 4768 4784 4800 4816 4832 4848 4864 4880 4896 4912 4928 4944 4960 4976 4992 5008 5024 5040 5056 5072 5088 5104 5120 5136 5152 5168 5184 5200 5216 5232 5248 5264 5280 5296 5312 5328 5344 5360 5376 5392 5408 5424 5440 5456 5472 5488 5504 5520 5536 5552 5568 5584 5600 5616 5632 5648 5664 5680 5696 5712 5728 5744 5760 5776 5792 5808 5824 5840 5856 5872 5888 5904 5920 5936 5952 5968 5984 6000 ]
-> [9] sndbuf=[144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 ]
+> [rank 1] -> Jupiter
+> [rank 2] -> Fafard
+> [rank 3] -> Ginette
+> [0] sndbuf=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ]
+> [1] sndbuf=[4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ]
+> [2] sndbuf=[8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ]
+> [3] sndbuf=[12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ]
+> [1] rcvbuf=[24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 ]
+> [0] rcvbuf=[24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 ]
+> [2] rcvbuf=[24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 ]
+> [3] rcvbuf=[24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 ]
 
index e4d3721..be01542 100644 (file)
@@ -4,16 +4,14 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(alltoall2 alltoall2.c)
-  add_executable(alltoall_basic alltoall_basic.c)
-  add_executable(alltoall_coll alltoall_coll.c)
-  target_link_libraries(alltoall2 simgrid)
+
+  add_executable       (alltoall2      alltoall2.c)
+  target_link_libraries(alltoall2      simgrid)
+  add_executable       (alltoall_basic alltoall_basic.c)
   target_link_libraries(alltoall_basic simgrid)
-  target_link_libraries(alltoall_coll simgrid)
+  add_executable       (alltoall_coll  alltoall_coll.c)
+  target_link_libraries(alltoall_coll  simgrid)
 endif()
 
 
index b4b1f75..513de64 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(alltoallv_coll alltoallv_coll.c)
+
+  add_executable       (alltoallv_coll alltoallv_coll.c)
   target_link_libraries(alltoallv_coll simgrid)
 endif()
 
index 6bef622..fffb3ad 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(barrier_coll barrier.c )
+
+  add_executable       (barrier_coll barrier.c)
   target_link_libraries(barrier_coll simgrid)
 endif()
 
index 8082f5b..9789588 100644 (file)
@@ -4,13 +4,11 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(bcast bcast.c)
-  add_executable(bcast_coll bcast_coll.c)
+
+  add_executable       (bcast bcast.c)
   target_link_libraries(bcast simgrid)
+  add_executable       (bcast_coll bcast_coll.c)
   target_link_libraries(bcast_coll simgrid)
 endif()
 
index d3d1510..51849df 100644 (file)
@@ -4,15 +4,13 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(compute compute.c)
-  add_executable(compute2 compute2.c)
-  add_executable(compute3 compute3.c)
-  target_link_libraries(compute simgrid)
+
+  add_executable       (compute  compute.c)
+  target_link_libraries(compute  simgrid)
+  add_executable       (compute2 compute2.c)
   target_link_libraries(compute2 simgrid)
+  add_executable       (compute3 compute3.c)
   target_link_libraries(compute3 simgrid)
 endif()
 
index 24e2bfa..4918607 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(gather_coll gather_coll.c)
+
+  add_executable       (gather_coll gather_coll.c)
   target_link_libraries(gather_coll simgrid)
 endif()
 
index 30f167a..5bea7ba 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(hvector_test hvector_test.c)
+
+  add_executable       (hvector_test hvector_test.c)
   target_link_libraries(hvector_test simgrid)
 endif()
 
index 116a9de..c0b9b2e 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(indexed_test indexed_test.c)
+
+  add_executable       (indexed_test indexed_test.c)
   target_link_libraries(indexed_test simgrid)
 endif()
 
index 1200f99..5402549 100644 (file)
@@ -193,8 +193,6 @@ if(enable_smpi AND enable_model-checking AND enable_smpi_ISP_testsuite)
   set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
   foreach (test ${umpire_tests_passing} ${umpire_tests_deadlock} ${umpire_tests_problematic} )
index af1878e..4e912b9 100644 (file)
@@ -3,12 +3,6 @@ set(bin_files
   ${CMAKE_CURRENT_SOURCE_DIR}/generate_report
   PARENT_SCOPE)
 
-#set(stdo_std_smpi
-#  ${CMAKE_CURRENT_SOURCE_DIR}/topol/cartmap.std
-#  ${CMAKE_CURRENT_SOURCE_DIR}/topol/graphtest.std
-#  ${CMAKE_CURRENT_SOURCE_DIR}/topol/cartf.std
-#)
-
 if("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_HOME_DIRECTORY}")
 else()
     foreach(srcfile ${stdo_std_smpi})
@@ -46,7 +40,6 @@ else()
   set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
 endif()
 
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
 include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi")
 include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include/")
 
index 6b0070d..90eba93 100644 (file)
@@ -6,8 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 50c3974..5357639 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 0621e16..07b3936 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 7c92987..f5229fc 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index f15b0cd..013b1c2 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../../include/")
 
index 74459dc..d8e0cd7 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 9882a17..7ec483b 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index fc2942a..26b871a 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 6de863c..858c661 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index d47edb7..312c945 100644 (file)
@@ -7,7 +7,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   endif()
 
   set(CMAKE_INCLUDE_CURRENT_DIR ON)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 6d7fda3..d96353a 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 3dfc6c4..db09537 100644 (file)
@@ -7,7 +7,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
   endif()
 
   set(CMAKE_INCLUDE_CURRENT_DIR ON)
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index d5b57fd..5231aa5 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 1258e4a..8ec623e 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index e853598..15a52a7 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 7d29837..247b492 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
 #  add_executable(allredint8f90 allredint8f90.f90)
index cdedaad..e7f7e95 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
 #  add_executable(allctypesf90 allctypesf90.f90)
index b782197..e70c7a0 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
   add_executable(infotest2f90 infotest2f90.f90 ../util/mtestf90.f90)
index de127c5..1cb8e90 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
   add_executable(baseenvf90 baseenvf90.f90)
index d293207..5045e56 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
   add_executable(allpairf90 allpairf90.f90)
index 720c473..2572c4b 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 9abba67..a488dab 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite AND SMPI_FORTRAN)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
 
   #F90 version of the mtest library
index 4752ea1..0f890fe 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 259cdd9..e2528f5 100644 (file)
@@ -6,8 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 9066dc2..8a0e2d3 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 686fe1b..60ab82a 100644 (file)
@@ -6,8 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index 4ca54a0..3fe7256 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index ec4fdaa..ae1f882 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   set(MPICH_FLAGS "-DHAVE_STDLIB_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STRING_H=1 -DUSE_STDARG=1 -DHAVE_LONG_DOUBLE=1 -DHAVE_PROTOTYPES=1 -DHAVE_SIGNAL_H=1 -DHAVE_SIGACTION=1 -DHAVE_SLEEP=1 -DHAVE_SYSCONF=1  -Wno-error=unused-variable")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
index 3a9fd06..3677016 100644 (file)
@@ -6,7 +6,6 @@ if(enable_smpi AND enable_smpi_MPICH3_testsuite)
     set(CMAKE_Fortran_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff")
   endif()
 
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
   include_directories("${CMAKE_CURRENT_SOURCE_DIR}/../include/")
 
index dc15032..f4d90cb 100644 (file)
@@ -4,14 +4,12 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(pingpong pingpong.c)
-  add_executable(dsend dsend.c)
+
+  add_executable       (pingpong pingpong.c)
   target_link_libraries(pingpong simgrid)
-  target_link_libraries(dsend simgrid)
+  add_executable       (dsend    dsend.c)
+  target_link_libraries(dsend    simgrid)
 endif()
 
 set(tesh_files
index 651fa42..af3df4d 100644 (file)
@@ -4,15 +4,13 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(reduce reduce.c)
-  add_executable(reduce_coll reduce_coll.c)
-  add_executable(reduce_scatter_coll reduce_scatter_coll.c)
-  target_link_libraries(reduce simgrid)
-  target_link_libraries(reduce_coll simgrid)
+
+  add_executable       (reduce              reduce.c)
+  target_link_libraries(reduce              simgrid)
+  add_executable       (reduce_coll         reduce_coll.c)
+  target_link_libraries(reduce_coll         simgrid)
+  add_executable       (reduce_scatter_coll reduce_scatter_coll.c)
   target_link_libraries(reduce_scatter_coll simgrid)
 endif()
 
index 7388027..001cd62 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(scatter scatter.c)
+
+  add_executable       (scatter scatter.c)
   target_link_libraries(scatter simgrid)
 endif()
 
index 517ce09..2c9be7d 100644 (file)
@@ -4,12 +4,10 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
+
   if(NOT WIN32)
-    add_executable(shared shared.c)
+    add_executable       (shared shared.c)
     target_link_libraries(shared simgrid)
   endif()
 endif()
index a410060..3f0cb7e 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(struct_test struct_test.c)
+
+  add_executable       (struct_test struct_test.c)
   target_link_libraries(struct_test simgrid)
 endif()
 
index b356e78..9d8960c 100644 (file)
@@ -4,11 +4,9 @@ if(enable_smpi)
   else()
     set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc")
   endif()
-
-  set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
   include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi")
-  add_executable(vector_test vector_test.c)
+
+  add_executable       (vector_test vector_test.c)
   target_link_libraries(vector_test simgrid)
 endif()
 
index 0f1b817..78d0d16 100644 (file)
@@ -1,13 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(lmm_usage ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/lmm_usage/lmm_usage.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(lmm_usage simgrid m )
-else()
-  target_link_libraries(lmm_usage simgrid )
-endif()
+add_executable       (lmm_usage lmm_usage.c)
+target_link_libraries(lmm_usage simgrid)
 
 set(tesh_files
   ${tesh_files}
index 9868e4e..c1b0bdc 100644 (file)
 #include "xbt/module.h"
 #include <math.h>
 
-XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test,
-                             "Messages specific for surf example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test, "Messages specific for surf example");
 
 #define PRINT_VAR(var) XBT_DEBUG(#var " = %g",lmm_variable_getvalue(var));
 #define SHOW_EXPR(expr) XBT_DEBUG(#expr " = %g",expr);
 
-/*                               */
 /*        ______                 */
 /*  ==l1==  L2  ==L3==           */
 /*        ------                 */
-/*                               */
 
 typedef enum {
   MAXMIN,
@@ -30,16 +27,12 @@ typedef enum {
   LAGRANGE_VEGAS
 } method_t;
 
-static double dichotomy(double func(double), double min, double max,
-                        double min_error)
+static double dichotomy(double func(double), double min, double max, double min_error)
 {
-  double middle;
-  double min_func, max_func, middle_func;
-
   double overall_error = 2 * min_error;
 
-  min_func = func(min);
-  max_func = func(max);
+  double min_func = func(min);
+  double max_func = func(max);
 
   if ((min_func > 0 && max_func > 0))
     return min - 1.0;
@@ -52,21 +45,20 @@ static double dichotomy(double func(double), double min, double max,
 
   while (overall_error > min_error) {
     SHOW_EXPR(overall_error);
-    if ((min_func > 0 && max_func > 0) ||
-        (min_func < 0 && max_func < 0) || (min_func > 0 && max_func < 0)) {
+    if ((min_func > 0 && max_func > 0) || (min_func < 0 && max_func < 0) || (min_func > 0 && max_func < 0)) {
       abort();
-    }
+    } //TODO replace by xbt_assert
 
     SHOW_EXPR(min);
     SHOW_EXPR(min_func);
     SHOW_EXPR(max);
     SHOW_EXPR(max_func);
 
-    middle = (max + min) / 2.0;
+    double middle = (max + min) / 2.0;
     if ((min == middle) || (max == middle)) {
       break;
     }
-    middle_func = func(middle);
+    double middle_func = func(middle);
     SHOW_EXPR(middle);
     SHOW_EXPR(middle_func);
 
@@ -89,11 +81,8 @@ double a_test_1 = 0;
 double b_test_1 = 0;
 static double diff_lagrange_test_1(double x)
 {
-  return -(3 / (1 + 3 * x * x / 2) -
-           3 / (2 * (3 * (a_test_1 - x) * (a_test_1 - x) / 2 + 1)) +
-           3 / (2 *
-                (3 * (b_test_1 - a_test_1 + x) *
-                 (b_test_1 - a_test_1 + x) / 2 + 1)));
+  return -(3 / (1 + 3 * x * x / 2) - 3 / (2 * (3 * (a_test_1 - x) * (a_test_1 - x) / 2 + 1)) +
+           3 / (2 * (3 * (b_test_1 - a_test_1 + x) * (b_test_1 - a_test_1 + x) / 2 + 1)));
 }
 
 void test1(method_t method);
@@ -112,11 +101,9 @@ void test1(method_t method)
   double a = 1.0, b = 10.0;
 
   if (method == LAGRANGE_VEGAS)
-    lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
-                                      func_vegas_fpi);
+    lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi);
   else if (method == LAGRANGE_RENO)
-    lmm_set_default_protocol_function(func_reno_f, func_reno_fpi,
-                                      func_reno_fpi);
+    lmm_set_default_protocol_function(func_reno_f, func_reno_fpi, func_reno_fpi);
 
   Sys = lmm_system_new(1);
   L1 = lmm_constraint_new(Sys, (void *) "L1", a);
@@ -138,17 +125,13 @@ void test1(method_t method)
   lmm_expand(Sys, L3, R_1_2_3, 1.0);
 
   lmm_expand(Sys, L1, R_1, 1.0);
-
   lmm_expand(Sys, L2, R_2, 1.0);
-
   lmm_expand(Sys, L3, R_3, 1.0);
 
-
   if (method == MAXMIN) {
     lmm_solve(Sys);
   } else if (method == LAGRANGE_VEGAS) {
-    double x = 3 * a / 4 - 3 * b / 8 +
-        sqrt(9 * b * b + 4 * a * a - 4 * a * b) / 8;
+    double x = 3 * a / 4 - 3 * b / 8 + sqrt(9 * b * b + 4 * a * a - 4 * a * b) / 8;
     /* Computed with mupad and D_f=1.0 */
     double max_deviation = 0.0;
     if (x > a) {
@@ -160,26 +143,20 @@ void test1(method_t method)
 
     lagrange_solve(Sys);
 
-    max_deviation =
-        MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
-    max_deviation =
-        MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
-    max_deviation =
-        MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
-    max_deviation =
-        MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
+    max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
+    max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
+    max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
+    max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
 
     if (max_deviation > 0.00001) { // Legacy value used in lagrange.c
       XBT_WARN("Max Deviation from optimal solution : %g", max_deviation);
       XBT_WARN("Found x = %1.20f", x);
-      XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x,
-            lmm_variable_getvalue(R_1) - x);
-      XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f",
-            b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
-      XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x,
-            lmm_variable_getvalue(R_3) - x);
-      XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
-            a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
+      XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x, lmm_variable_getvalue(R_1) - x);
+      XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f", b - a + x,
+               lmm_variable_getvalue(R_2) - (b - a + x));
+      XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x, lmm_variable_getvalue(R_3) - x);
+      XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f", a - x,
+               lmm_variable_getvalue(R_1_2_3) - (a - x));
     }
   } else if (method == LAGRANGE_RENO) {
     double x;
@@ -195,26 +172,20 @@ void test1(method_t method)
       x = a;
     lagrange_solve(Sys);
 
-    max_deviation =
-        MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
-    max_deviation =
-        MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
-    max_deviation =
-        MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
-    max_deviation =
-        MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
+    max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_1) - x));
+    max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_3) - x));
+    max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_2) - (b - a + x)));
+    max_deviation = MAX(max_deviation, fabs(lmm_variable_getvalue(R_1_2_3) - (a - x)));
 
     if (max_deviation > 0.00001) { // Legacy value used in lagrange.c
       XBT_WARN("Max Deviation from optimal solution : %g", max_deviation);
       XBT_WARN("Found x = %1.20f", x);
-      XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x,
-            lmm_variable_getvalue(R_1) - x);
-      XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f",
-            b - a + x, lmm_variable_getvalue(R_2) - (b - a + x));
-      XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x,
-            lmm_variable_getvalue(R_3) - x);
-      XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f",
-            a - x, lmm_variable_getvalue(R_1_2_3) - (a - x));
+      XBT_WARN("Deviation from optimal solution (R_1 = %g): %1.20f", x, lmm_variable_getvalue(R_1) - x);
+      XBT_WARN("Deviation from optimal solution (R_2 = %g): %1.20f", b - a + x,
+               lmm_variable_getvalue(R_2) - (b - a + x));
+      XBT_WARN("Deviation from optimal solution (R_3 = %g): %1.20f", x, lmm_variable_getvalue(R_3) - x);
+      XBT_WARN("Deviation from optimal solution (R_1_2_3 = %g): %1.20f", a - x,
+               lmm_variable_getvalue(R_1_2_3) - (a - x));
     }
   } else {
     xbt_die( "Invalid method");
@@ -242,13 +213,10 @@ void test2(method_t method)
   lmm_variable_t T1 = NULL;
   lmm_variable_t T2 = NULL;
 
-
   if (method == LAGRANGE_VEGAS)
-    lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
-                                      func_vegas_fpi);
+    lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi);
   else if (method == LAGRANGE_RENO)
-    lmm_set_default_protocol_function(func_reno_f, func_reno_fp,
-                                      func_reno_fpi);
+    lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi);
 
   Sys = lmm_system_new(1);
   CPU1 = lmm_constraint_new(Sys, (void *) "CPU1", 200.0);
@@ -260,12 +228,9 @@ void test2(method_t method)
   lmm_update_variable_weight(Sys, T1, 1.0);
   lmm_update_variable_weight(Sys, T2, 1.0);
 
-
   lmm_expand(Sys, CPU1, T1, 1.0);
   lmm_expand(Sys, CPU2, T2, 1.0);
 
-
-
   if (method == MAXMIN) {
     lmm_solve(Sys);
   } else if (method == LAGRANGE_VEGAS) {
@@ -284,8 +249,6 @@ void test2(method_t method)
   lmm_system_free(Sys);
 }
 
-
-
 void test3(method_t method);
 void test3(method_t method)
 {
@@ -303,11 +266,8 @@ void test3(method_t method)
   char **tmp_name;
 
 
-  /*array to add the the constraints of fictiv variables */
-  double B[15] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
-
-    1, 1, 1, 1, 1
-  };
+  /*array to add the the constraints of fictitious variables */
+  double B[15] = { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 1, 1, 1, 1, 1 };
 
   A = xbt_new0(double *, links + 5);
 
@@ -322,113 +282,48 @@ void test3(method_t method)
     }
   }
 
-  /*matrix that store the constraints/topollogy */
-  /*double A[15][16]=
-     {{0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0,    0, 0, 0, 0, 0},
-     {0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0,    0, 0, 0, 0, 0},
-     {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,    0, 0, 0, 0, 0},
-     {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,    0, 0, 0, 0, 0},
-     {1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0,    0, 0, 0, 0, 0},
-     {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0,    0, 0, 0, 0, 0},
-     {1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1,    0, 0, 0, 0, 0},
-     {0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1,    0, 0, 0, 0, 0},
-     {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1,    0, 0, 0, 0, 0},
-     {0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0,    0, 0, 0, 0, 0},
-
-     {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    1, 0, 0, 0, 0},
-     {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 1, 0, 0, 0},
-     {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 1, 0, 0},
-     {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 1, 0},
-     {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,    0, 0, 0, 0, 1}
-     }; */
-
-  A[0][1] = 1.0;
-  A[0][7] = 1.0;
-
-  A[1][1] = 1.0;
-  A[1][7] = 1.0;
-  A[1][8] = 1.0;
-
-  A[2][1] = 1.0;
-  A[2][8] = 1.0;
-
-  A[2][1] = 1.0;
-  A[2][8] = 1.0;
-
-  A[3][8] = 1.0;
-
-  A[4][0] = 1.0;
-  A[4][3] = 1.0;
-  A[4][9] = 1.0;
-
-  A[5][0] = 1.0;
-  A[5][3] = 1.0;
-  A[5][4] = 1.0;
-  A[5][9] = 1.0;
-
-  A[6][0] = 1.0;
-  A[6][4] = 1.0;
-  A[6][9] = 1.0;
-  A[6][10] = 1.0;
-
-  A[7][2] = 1.0;
-  A[7][4] = 1.0;
-  A[7][6] = 1.0;
-  A[7][9] = 1.0;
-  A[7][10] = 1.0;
-
-  A[8][2] = 1.0;
-  A[8][10] = 1.0;
-
-  A[9][5] = 1.0;
-  A[9][6] = 1.0;
-  A[9][9] = 1.0;
-
-
-  A[10][11] = 1.0;
-  A[11][12] = 1.0;
-  A[12][13] = 1.0;
-  A[13][14] = 1.0;
-  A[14][15] = 1.0;
-
+  /*matrix that store the constraints/topology */
+  A[0][1] = A[0][7] =                                1.0;
+  A[1][1] = A[1][7] = A[1][8] =                      1.0;
+  A[2][1] = A[2][8] =                                1.0;
+  A[3][8] =                                          1.0;
+  A[4][0] = A[4][3] = A[4][9] =                      1.0;
+  A[5][0] = A[5][3] = A[5][4] = A[5][9] =            1.0;
+  A[6][0] = A[6][4] = A[6][9] = A[6][10] =           1.0;
+  A[7][2] = A[7][4] = A[7][6] = A[7][9] = A[7][10] = 1.0;
+  A[8][2] = A[8][10] =                               1.0;
+  A[9][5] = A[9][6] = A[9][9] =                      1.0;
+  A[10][11] =                                        1.0;
+  A[11][12] =                                        1.0;
+  A[12][13] =                                        1.0;
+  A[13][14] =                                        1.0;
+  A[14][15] =                                        1.0;
 
   if (method == LAGRANGE_VEGAS)
-    lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp,
-                                      func_vegas_fpi);
+    lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi);
   else if (method == LAGRANGE_RENO)
-    lmm_set_default_protocol_function(func_reno_f, func_reno_fp,
-                                      func_reno_fpi);
+    lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi);
 
   Sys = lmm_system_new(1);
 
-
-
   tmp_name = xbt_new0(char *, 31);
 
-  /*
-   * Creates the constraints
-   */
+  /* Creates the constraints */
   tmp_cnst = xbt_new0(lmm_constraint_t, 15);
   for (i = 0; i < 15; i++) {
     tmp_name[i] = bprintf("C_%03d", i);
     tmp_cnst[i] = lmm_constraint_new(Sys, (void *) tmp_name[i], B[i]);
   }
 
-
-  /*
-   * Creates the variables
-   */
+  /* Creates the variables */
   tmp_var = xbt_new0(lmm_variable_t, 16);
   for (j = 0; j < 16; j++) {
     tmp_name[i + j] = bprintf("X_%03d", j);
-    tmp_var[j] =
-        lmm_variable_new(Sys, (void *) tmp_name[i + j], 1.0, -1.0, 15);
+    tmp_var[j] = lmm_variable_new(Sys, (void *) tmp_name[i + j], 1.0, -1.0, 15);
     lmm_update_variable_weight(Sys, tmp_var[j], 1.0);
   }
 
-  /*
-   * Link constraints and variables
-   */
+  /* Link constraints and variables */
   for (i = 0; i < 15; i++) {
     for (j = 0; j < 16; j++) {
       if (A[i][j]) {
@@ -437,8 +332,6 @@ void test3(method_t method)
     }
   }
 
-
-
   if (method == MAXMIN) {
     lmm_solve(Sys);
   } else if (method == LAGRANGE_VEGAS) {
@@ -477,8 +370,6 @@ int main(int argc, char **argv)
   XBT_INFO("***** Test 1 (Lagrange - Reno)");
   test1(LAGRANGE_RENO);
 
-
-
   XBT_INFO("***** Test 2 (Max-Min)");
   test2(MAXMIN);
   XBT_INFO("***** Test 2 (Lagrange - Vegas)");
@@ -486,7 +377,6 @@ int main(int argc, char **argv)
   XBT_INFO("***** Test 2 (Lagrange - Reno)");
   test2(LAGRANGE_RENO);
 
-
   XBT_INFO("***** Test 3 (Max-Min)");
   test3(MAXMIN);
   XBT_INFO("***** Test 3 (Lagrange - Vegas)");
index 429e117..17752d7 100644 (file)
@@ -1,14 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(maxmin_bench ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/maxmin_bench/maxmin_bench.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(maxmin_bench simgrid m )
-else()
-  target_link_libraries(maxmin_bench simgrid )
-  set_target_properties(maxmin_bench PROPERTIES COMPILE_FLAGS "-DDLL_STATIC")
-endif()
+add_executable       (maxmin_bench maxmin_bench.c)
+target_link_libraries(maxmin_bench simgrid)
 
 set(tesh_files
   ${tesh_files}
index 1ac7848..76f38b4 100644 (file)
@@ -1,16 +1,7 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(surf_usage ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/surf_usage/surf_usage.cpp)
-add_executable(surf_usage2 ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/surf_usage/surf_usage2.cpp)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(surf_usage simgrid m )
-  target_link_libraries(surf_usage2 simgrid m )
-else()
-  target_link_libraries(surf_usage simgrid )
-  target_link_libraries(surf_usage2 simgrid )
-endif()
+add_executable       (surf_usage  surf_usage.cpp)
+target_link_libraries(surf_usage  simgrid)
+add_executable       (surf_usage2 surf_usage2.cpp)
+target_link_libraries(surf_usage2 simgrid )
 
 set(tesh_files
   ${tesh_files}
index c05e66b..e0ec894 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <stdio.h>
 #include "simgrid/sg_config.h"
+#include "simgrid/host.h"
 #include "surf/surf.h"
 #include "src/surf/surf_interface.hpp"
 #include "src/surf/cpu_interface.hpp"
@@ -35,95 +36,76 @@ const char *string_action(e_surf_action_state_t state)
   }
 }
 
-void test(char *platform);
-void test(char *platform)
+int main(int argc, char **argv)
 {
-  sg_host_t hostA = NULL;
-  sg_host_t hostB = NULL;
-  surf_action_t actionA = NULL;
-  surf_action_t actionB = NULL;
-  surf_action_t actionC = NULL;
-  e_surf_action_state_t stateActionA;
-  e_surf_action_state_t stateActionB;
-  e_surf_action_state_t stateActionC;
   double now = -1.0;
+  surf_init(&argc, argv);       /* Initialize some common structures */
   xbt_cfg_set_parse(_sg_cfg_set, "cpu/model:Cas01");
   xbt_cfg_set_parse(_sg_cfg_set, "network/model:CM02");
-  parse_platform_file(platform);
 
-  /*********************** CPU ***********************************/
-  XBT_DEBUG("%p", surf_cpu_model_pm);
-  hostA = sg_host_by_name("Cpu A");
-  hostB = sg_host_by_name("Cpu B");
+  xbt_assert(argc >1, "Usage : %s platform.txt\n", argv[0]);
+  parse_platform_file(argv[1]);
+
+  XBT_DEBUG("CPU model: %p", surf_cpu_model_pm);
+  XBT_DEBUG("Network model: %p", surf_network_model);
+  sg_host_t hostA = sg_host_by_name("Cpu A");
+  sg_host_t hostB = sg_host_by_name("Cpu B");
 
   /* Let's check that those two processors exist */
   XBT_DEBUG("%s : %p", sg_host_get_name(hostA), hostA);
   XBT_DEBUG("%s : %p", sg_host_get_name(hostB), hostB);
 
   /* Let's do something on it */
-  actionA = hostA->pimpl_cpu->execution_start(1000.0);
-  actionB = hostB->pimpl_cpu->execution_start(1000.0);
-  actionC = surf_host_sleep(hostB, 7.32);
+  surf_action_t actionA = hostA->pimpl_cpu->execution_start(1000.0);
+  surf_action_t actionB = hostB->pimpl_cpu->execution_start(1000.0);
+  surf_action_t actionC = surf_host_sleep(hostB, 7.32);
 
   /* Use whatever calling style you want... */
-  stateActionA = actionA->getState(); /* When you know actionA model type */
-  stateActionB = actionB->getState(); /* If you're unsure about it's model type */
-  stateActionC = actionC->getState(); /* When you know actionA model type */
+  e_surf_action_state_t stateActionA = actionA->getState(); /* When you know actionA model type */
+  e_surf_action_state_t stateActionB = actionB->getState(); /* If you're unsure about it's model type */
+  e_surf_action_state_t stateActionC = actionC->getState(); /* When you know actionA model type */
 
   /* And just look at the state of these tasks */
-  XBT_DEBUG("actionA : %p (%s)", actionA, string_action(stateActionA));
-  XBT_DEBUG("actionB : %p (%s)", actionB, string_action(stateActionB));
-  XBT_DEBUG("actionC : %p (%s)", actionB, string_action(stateActionC));
+  XBT_INFO("actionA state: %s", string_action(stateActionA));
+  XBT_INFO("actionB state: %s", string_action(stateActionB));
+  XBT_INFO("actionC state: %s", string_action(stateActionC));
 
-  /*********************** Network *******************************/
-  XBT_DEBUG("%p", surf_network_model);
 
   /* Let's do something on it */
   surf_network_model_communicate(surf_network_model, hostA, hostB, 150.0, -1.0);
 
-  surf_solve(-1.0);                 /* Takes traces into account. Returns 0.0 */
+  surf_solve(-1.0);
   do {
     surf_action_t action = NULL;
     now = surf_get_clock();
-    XBT_DEBUG("Next Event : %g", now);
+    XBT_INFO("Next Event : %g", now);
     XBT_DEBUG("\t CPU actions");
-    while ((action =
-            surf_model_extract_failed_action_set((surf_model_t)surf_cpu_model_pm))) {
-      XBT_DEBUG("\t * Failed : %p", action);
-      action->unref();
+    while ((action = surf_model_extract_failed_action_set((surf_model_t)surf_cpu_model_pm))) {
+       XBT_INFO("   CPU Failed action");
+       XBT_DEBUG("\t * Failed : %p", action);
+       action->unref();
     }
-    while ((action =
-            surf_model_extract_done_action_set((surf_model_t)surf_cpu_model_pm))) {
+    while ((action = surf_model_extract_done_action_set((surf_model_t)surf_cpu_model_pm))) {
+      XBT_INFO("   CPU Done action");
       XBT_DEBUG("\t * Done : %p", action);
       action->unref();
     }
     XBT_DEBUG("\t Network actions");
-    while ((action =
-            surf_model_extract_failed_action_set((surf_model_t)surf_network_model))) {
+    while ((action = surf_model_extract_failed_action_set((surf_model_t)surf_network_model))) {
+      XBT_INFO("   Network Failed action");
       XBT_DEBUG("\t * Failed : %p", action);
       action->unref();
     }
-    while ((action =
-            surf_model_extract_done_action_set((surf_model_t)surf_network_model))) {
+    while ((action = surf_model_extract_done_action_set((surf_model_t)surf_network_model))) {
+      XBT_INFO("   Network Failed action");
       XBT_DEBUG("\t * Done : %p", action);
       action->unref();
     }
 
   } while ((surf_model_running_action_set_size((surf_model_t)surf_network_model) ||
-            surf_model_running_action_set_size((surf_model_t)surf_cpu_model_pm)) &&
-           surf_solve(-1.0) >= 0.0);
+            surf_model_running_action_set_size((surf_model_t)surf_cpu_model_pm)) && surf_solve(-1.0) >= 0.0);
 
   XBT_DEBUG("Simulation Terminated");
-}
-
-int main(int argc, char **argv)
-{
-  surf_init(&argc, argv);       /* Initialize some common structures */
-  if (argc == 1) {
-    fprintf(stderr, "Usage : %s platform.xml\n", argv[0]);
-    return 1;
-  }
-  test(argv[1]);
 
   surf_exit();
   return 0;
index e380a3c..c51400e 100644 (file)
@@ -3,7 +3,59 @@
 $ $SG_TEST_EXENV ${bindir:=.}/surf_usage ../../examples/platforms/two_hosts_platform_with_availability.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'cpu/model' to 'Cas01'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'CM02'
+> [0.000000] [surf_test/INFO] actionA state: SURF_ACTION_RUNNING
+> [0.000000] [surf_test/INFO] actionB state: SURF_ACTION_RUNNING
+> [0.000000] [surf_test/INFO] actionC state: SURF_ACTION_RUNNING
+> [0.000000] [surf_test/INFO] Next Event : 0
+> [0.000000] [surf_test/INFO]    CPU Failed action
+> [0.200000] [surf_test/INFO] Next Event : 0.2
+> [0.200015] [surf_test/INFO] Next Event : 0.200015
+> [0.200015] [surf_test/INFO]    Network Failed action
+> [7.320000] [surf_test/INFO] Next Event : 7.32
+> [7.320000] [surf_test/INFO]    CPU Done action
+> [10.000000] [surf_test/INFO] Next Event : 10
+> [20.000000] [surf_test/INFO] Next Event : 20
+> [30.000000] [surf_test/INFO] Next Event : 30
+> [40.000000] [surf_test/INFO] Next Event : 40
+> [50.000000] [surf_test/INFO] Next Event : 50
+> [60.000000] [surf_test/INFO] Next Event : 60
+> [70.000000] [surf_test/INFO] Next Event : 70
+> [80.000000] [surf_test/INFO] Next Event : 80
+> [90.000000] [surf_test/INFO] Next Event : 90
+> [100.000000] [surf_test/INFO] Next Event : 100
+> [110.000000] [surf_test/INFO] Next Event : 110
+> [120.000000] [surf_test/INFO] Next Event : 120
+> [130.000000] [surf_test/INFO] Next Event : 130
+> [140.000000] [surf_test/INFO] Next Event : 140
+> [150.000000] [surf_test/INFO] Next Event : 150
+> [157.500000] [surf_test/INFO] Next Event : 157.5
+> [157.500000] [surf_test/INFO]    CPU Done action
 
 $ $SG_TEST_EXENV ${bindir:=.}/surf_usage2  ../../examples/platforms/two_hosts_platform_with_availability.xml
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'CM02'
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'cpu/model' to 'Cas01'
+> [0.000000] [surf_test/INFO] Next Event : 0
+> [0.000000] [surf_test/INFO]    * Done Action
+> [0.200000] [surf_test/INFO] Next Event : 0.2
+> [0.200015] [surf_test/INFO] Next Event : 0.200015
+> [0.200015] [surf_test/INFO]    * Done Action
+> [7.320000] [surf_test/INFO] Next Event : 7.32
+> [7.320000] [surf_test/INFO]    * Done Action
+> [10.000000] [surf_test/INFO] Next Event : 10
+> [20.000000] [surf_test/INFO] Next Event : 20
+> [30.000000] [surf_test/INFO] Next Event : 30
+> [40.000000] [surf_test/INFO] Next Event : 40
+> [50.000000] [surf_test/INFO] Next Event : 50
+> [60.000000] [surf_test/INFO] Next Event : 60
+> [70.000000] [surf_test/INFO] Next Event : 70
+> [80.000000] [surf_test/INFO] Next Event : 80
+> [90.000000] [surf_test/INFO] Next Event : 90
+> [100.000000] [surf_test/INFO] Next Event : 100
+> [110.000000] [surf_test/INFO] Next Event : 110
+> [120.000000] [surf_test/INFO] Next Event : 120
+> [130.000000] [surf_test/INFO] Next Event : 130
+> [140.000000] [surf_test/INFO] Next Event : 140
+> [150.000000] [surf_test/INFO] Next Event : 150
+> [157.500000] [surf_test/INFO] Next Event : 157.5
+> [157.500000] [surf_test/INFO]    * Done Action
+> [157.500000] [surf_test/INFO] Simulation Terminated
index 3230aa2..0fc3a43 100644 (file)
@@ -6,47 +6,29 @@
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-#include <stdio.h>
 #include "simgrid/sg_config.h"
+#include "simgrid/host.h"
 #include "surf/surf.h"
 #include "src/surf/surf_interface.hpp"
 #include "src/surf/cpu_interface.hpp"
 
 #include "xbt/log.h"
-XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test,
-                             "Messages specific for surf example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test, "Messages specific for surf example");
 
-const char *string_action(e_surf_action_state_t state);
-const char *string_action(e_surf_action_state_t state)
-{
-  switch (state) {
-  case (SURF_ACTION_READY):
-    return "SURF_ACTION_READY";
-  case (SURF_ACTION_RUNNING):
-    return "SURF_ACTION_RUNNING";
-  case (SURF_ACTION_FAILED):
-    return "SURF_ACTION_FAILED";
-  case (SURF_ACTION_DONE):
-    return "SURF_ACTION_DONE";
-  case (SURF_ACTION_NOT_IN_THE_SYSTEM):
-    return "SURF_ACTION_NOT_IN_THE_SYSTEM";
-  default:
-    return "INVALID STATE";
-  }
-}
-
-
-void test(char *platform);
-void test(char *platform)
+int main(int argc, char **argv)
 {
   sg_host_t hostA = NULL;
   sg_host_t hostB = NULL;
   double now = -1.0;
   int running;
 
+  surf_init(&argc, argv);       /* Initialize some common structures */
+
   xbt_cfg_set_parse(_sg_cfg_set, "network/model:CM02");
   xbt_cfg_set_parse(_sg_cfg_set, "cpu/model:Cas01");
-  parse_platform_file(platform);
+
+  xbt_assert(argc >1, "Usage : %s platform.txt\n", argv[0]);
+  parse_platform_file(argv[1]);
 
   /*********************** HOST ***********************************/
   hostA = sg_host_by_name("Cpu A");
@@ -71,39 +53,27 @@ void test(char *platform)
     running = 0;
 
     now = surf_get_clock();
-    XBT_DEBUG("Next Event : %g", now);
+    XBT_INFO("Next Event : %g", now);
 
     xbt_dynar_foreach(all_existing_models, iter, model) {
-      XBT_DEBUG("\t Actions");
+      if (surf_model_running_action_set_size((surf_model_t)model)) {
+        XBT_DEBUG("\t Running that model");
+        running = 1;
+      }
       while ((action = surf_model_extract_failed_action_set((surf_model_t)model))) {
-        XBT_DEBUG("\t * Failed : %p", action);
+        XBT_INFO("   * Done Action");
+        XBT_DEBUG("\t * Failed Action: %p", action);
         action->unref();
       }
       while ((action = surf_model_extract_done_action_set((surf_model_t)model))) {
-        XBT_DEBUG("\t * Done : %p", action);
+        XBT_INFO("   * Done Action");
+        XBT_DEBUG("\t * Done Action: %p", action);
         action->unref();
       }
-      if (surf_model_running_action_set_size((surf_model_t)model)) {
-        XBT_DEBUG("running that model");
-        running = 1;
-      }
     }
   } while (running && surf_solve(-1.0) >= 0.0);
 
-  XBT_DEBUG("Simulation Terminated");
-
-}
-
-int main(int argc, char **argv)
-{
-  surf_init(&argc, argv);       /* Initialize some common structures */
-  if (argc == 1) {
-    fprintf(stderr, "Usage : %s platform.txt\n", argv[0]);
-    surf_exit();
-    return 1;
-  }
-  test(argv[1]);
-
+  XBT_INFO("Simulation Terminated");
   surf_exit();
   return 0;
 }
index 09c918a..1bf1224 100644 (file)
@@ -1,13 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(trace_usage ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/trace_usage/trace_usage.cpp)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(trace_usage simgrid m)
-else()
-  target_link_libraries(trace_usage simgrid )
-endif()
+add_executable(trace_usage trace_usage.cpp)
+target_link_libraries(trace_usage simgrid)
 
 set(tesh_files
   ${tesh_files}
index d6f648c..8341c2f 100644 (file)
@@ -7,17 +7,11 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "surf/surf.h"
-
 #include "xbt/log.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
 #include "src/surf/network_cm02.hpp"
 #include "src/surf/trace_mgr.hpp"
 
-XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test,
-                             "Messages specific for surf example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test, "Messages specific for surf example");
 
 class DummyTestResource
     : public simgrid::surf::Resource {
@@ -27,8 +21,10 @@ public:
   void apply_event(tmgr_trace_iterator_t it, double value) override {}
 };
 
-static void test(void)
+int main(int argc, char **argv)
 {
+  surf_init(&argc, argv);
+
   simgrid::trace_mgr::future_evt_set *fes = new simgrid::trace_mgr::future_evt_set();
   tmgr_trace_t trace_A = tmgr_trace_new_from_file("trace_A.txt");
   tmgr_trace_t trace_B = tmgr_trace_new_from_file("trace_B.txt");
@@ -42,23 +38,18 @@ static void test(void)
   fes->add_trace(trace_B, 0.0, hostB);
 
   while ((next_event_date = fes->next_date()) != -1.0) {
-    XBT_DEBUG("%g" " : \n", next_event_date);
+    XBT_INFO("%g:", next_event_date);
     while (fes->pop_leq(next_event_date, &value, &resource)) {
-      XBT_DEBUG("\t %s : " "%g" "\n", resource->getName(), value);
+      XBT_INFO("   %s: %g", resource->getName(), value);
     }
-    if (next_event_date > 1000)
+    if (next_event_date > 100)
       break;
   }
 
   delete fes;
   delete hostA;
   delete hostB;
-}
 
-int main(int argc, char **argv)
-{
-  surf_init(&argc, argv);
-  test();
   surf_exit();
   return 0;
 }
index 4a5fed3..46ebd63 100644 (file)
@@ -1,3 +1,63 @@
 #! ./tesh
 
 $ $SG_TEST_EXENV ${bindir:=.}/trace_usage --cfg=path:../../examples/platforms/trace/
+> [0.000000] [surf_test/INFO] 0:
+> [0.000000] [surf_test/INFO]    Host B: 1
+> [0.000000] [surf_test/INFO] 1:
+> [0.000000] [surf_test/INFO]    Host A: 1
+> [0.000000] [surf_test/INFO] 10:
+> [0.000000] [surf_test/INFO]    Host B: 0.8
+> [0.000000] [surf_test/INFO] 12:
+> [0.000000] [surf_test/INFO]    Host A: 0.5
+> [0.000000] [surf_test/INFO] 20:
+> [0.000000] [surf_test/INFO]    Host B: 0.4
+> [0.000000] [surf_test/INFO] 21:
+> [0.000000] [surf_test/INFO]    Host A: 0.9
+> [0.000000] [surf_test/INFO] 22:
+> [0.000000] [surf_test/INFO]    Host A: 0.5
+> [0.000000] [surf_test/INFO] 30:
+> [0.000000] [surf_test/INFO]    Host B: 0.8
+> [0.000000] [surf_test/INFO] 31:
+> [0.000000] [surf_test/INFO]    Host A: 0.9
+> [0.000000] [surf_test/INFO] 32:
+> [0.000000] [surf_test/INFO]    Host A: 0.5
+> [0.000000] [surf_test/INFO] 40:
+> [0.000000] [surf_test/INFO]    Host B: 0.4
+> [0.000000] [surf_test/INFO] 41:
+> [0.000000] [surf_test/INFO]    Host A: 0.9
+> [0.000000] [surf_test/INFO] 42:
+> [0.000000] [surf_test/INFO]    Host A: 0.5
+> [0.000000] [surf_test/INFO] 50:
+> [0.000000] [surf_test/INFO]    Host B: 0.8
+> [0.000000] [surf_test/INFO] 51:
+> [0.000000] [surf_test/INFO]    Host A: 0.9
+> [0.000000] [surf_test/INFO] 52:
+> [0.000000] [surf_test/INFO]    Host A: 0.5
+> [0.000000] [surf_test/INFO] 60:
+> [0.000000] [surf_test/INFO]    Host B: 0.4
+> [0.000000] [surf_test/INFO] 61:
+> [0.000000] [surf_test/INFO]    Host A: 0.9
+> [0.000000] [surf_test/INFO] 62:
+> [0.000000] [surf_test/INFO]    Host A: 0.5
+> [0.000000] [surf_test/INFO] 70:
+> [0.000000] [surf_test/INFO]    Host B: 0.8
+> [0.000000] [surf_test/INFO] 71:
+> [0.000000] [surf_test/INFO]    Host A: 0.9
+> [0.000000] [surf_test/INFO] 72:
+> [0.000000] [surf_test/INFO]    Host A: 0.5
+> [0.000000] [surf_test/INFO] 80:
+> [0.000000] [surf_test/INFO]    Host B: 0.4
+> [0.000000] [surf_test/INFO] 81:
+> [0.000000] [surf_test/INFO]    Host A: 0.9
+> [0.000000] [surf_test/INFO] 82:
+> [0.000000] [surf_test/INFO]    Host A: 0.5
+> [0.000000] [surf_test/INFO] 90:
+> [0.000000] [surf_test/INFO]    Host B: 0.8
+> [0.000000] [surf_test/INFO] 91:
+> [0.000000] [surf_test/INFO]    Host A: 0.9
+> [0.000000] [surf_test/INFO] 92:
+> [0.000000] [surf_test/INFO]    Host A: 0.5
+> [0.000000] [surf_test/INFO] 100:
+> [0.000000] [surf_test/INFO]    Host B: 0.4
+> [0.000000] [surf_test/INFO] 101:
+> [0.000000] [surf_test/INFO]    Host A: 0.9
diff --git a/teshsuite/xbt/graphxml_usage/CMakeLists.txt b/teshsuite/xbt/graphxml_usage/CMakeLists.txt
deleted file mode 100644 (file)
index 1d6f8b3..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(graphxml_usage ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/graphxml_usage/graphxml_usage.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(graphxml_usage simgrid m )
-else()
-  target_link_libraries(graphxml_usage simgrid )
-endif()
-
-set(tesh_files
-  ${tesh_files}
-  ${CMAKE_CURRENT_SOURCE_DIR}/graphxml_usage.tesh
-  PARENT_SCOPE)
-set(xml_files
-  ${xml_files}
-  ${CMAKE_CURRENT_SOURCE_DIR}/graph.xml
-  PARENT_SCOPE)
-set(testsuite_src
-  ${testsuite_src}
-  ${CMAKE_CURRENT_SOURCE_DIR}/graphxml_usage.c
-  PARENT_SCOPE)
diff --git a/teshsuite/xbt/graphxml_usage/graph.xml b/teshsuite/xbt/graphxml_usage/graph.xml
deleted file mode 100644 (file)
index a137935..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version='1.0'?>
-<!DOCTYPE graph SYSTEM "graphxml.dtd">
-<graph>
-  <node name="A" label="A"/>
-  <node name="B" label="B"/>
-  <node name="C" label="C"/>
-  <node name="D" label="D"/>
- <node name="E" label="E" />
- <node name="F" label="F"/>
- <node name="M" label="M" />
- <node name="P" label="P"/>
-  <edge name="AB"  source="A" target="B" length="0.41" />
- <edge name="BC" source="B" target="C" length="0.51" />
- <edge  name="CD"  source="C" target="D" length="0.50" />
- <edge name="ED" source="E" target="D" length="0.36" />
- <edge  name="DF" source="D" target="F"  length="0.38"/>
- <edge  name="ME" source="M" target="E"  length="0.38"/>
- <!--edge  name="FE" source="F" target="E"  length="0.38"/-->
- <!--edge  name="BP" source="B" target="P"  length="0.38"/-->
- <!--edge  name="DA"  source="D" target="A" length="0.45" /-->
- <!--edge  name="AF"  source="A" target="F" length="0.29" /-->
- <!--edge  name="FE"  source="F" target="E" length="0.21" /-->
- <!--edge  name="BE"  source="B" target="E" length="0.32" /-->
- <!--edge  name="EC"  source="E" target="C" length="0.32" /-->
- <!--edge  name="FB"  source="F" target="B" length="0.29" /-->
-</graph>
diff --git a/teshsuite/xbt/graphxml_usage/graphxml_usage.c b/teshsuite/xbt/graphxml_usage/graphxml_usage.c
deleted file mode 100644 (file)
index d46a1c4..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/* A few basic tests for the graphxml library                               */
-
-/* Copyright (c) 2006-2015. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include <stdio.h>
-
-#ifdef _MSC_VER
-#define snprintf  _snprintf
-#endif
-
-#include "xbt/module.h"
-#include "xbt/sysdep.h"
-#include "xbt/graph.h"
-#include "xbt/graphxml.h"
-#include "xbt/log.h"
-
-XBT_LOG_NEW_DEFAULT_CATEGORY(test, "Logging specific to graphxml test");
-
-
-static void *node_label_and_data(xbt_node_t node, const char *label,
-                                 const char *data)
-{
-  char *lbl = xbt_strdup(label);
-  return lbl;
-}
-
-#define free_label free
-
-static const char *node_name(xbt_node_t n)
-{
-  return xbt_graph_node_get_data(n);
-}
-
-void test(char *graph_file);
-void test(char *graph_file)
-{
-  int test_node_deletion = 0;
-  int test_edge_deletion = 0;
-  int test_export_xml = 1;
-  int test_export_dot = 1;
-  int test_export_length = 1;
-  int test_shortest_paths = 1;
-  int test_topo_sort = 1;
-
-  unsigned long i, j;
-  unsigned long n;
-
-  xbt_dynar_t edges = NULL;
-  xbt_dynar_t nodes = NULL;
-
-  xbt_graph_t graph =
-      xbt_graph_read(graph_file, &node_label_and_data, NULL);
-
-  n = xbt_dynar_length(xbt_graph_get_nodes(graph));
-
-  if (test_export_xml) {
-    XBT_INFO("---- Testing XML export. Exporting to testgraph.xml ----");
-    xbt_graph_export_graphxml(graph, "testgraph.xml", NULL, NULL, NULL,
-                              NULL);
-  }
-  if (test_export_dot) {
-    XBT_INFO("---- Testing GraphViz export. Exporting to testgraph.dot ----");
-    xbt_graph_export_graphviz(graph, "testgraph.dot", node_name, NULL);
-  }
-
-  if (test_export_length) {
-    char *buf = NULL;
-    double *adj = NULL;
-
-    XBT_INFO("---- Dumping Edge lengths ----");
-    adj = xbt_graph_get_length_matrix(graph);
-    buf = xbt_new0(char, n * 20);
-    for (i = 0; i < n; i++) {
-      for (j = 0; j < n; j++) {
-        sprintf(buf + strlen(buf), "%6.3f\t", adj[i * n + j]);
-      }
-      XBT_INFO("%s", buf);
-      buf[0] = '\000';
-    }
-    free(buf);
-    free(adj);
-  }
-
-  if (test_shortest_paths) {
-    char *buf = NULL;
-    xbt_node_t *route = NULL;
-
-    XBT_INFO("---- Testing Shortest Paths ----");
-    route = xbt_graph_shortest_paths(graph);
-    buf = xbt_new0(char, n * 40);
-    for (i = 0; i < n; i++) {
-      for (j = 0; j < n; j++) {
-        if (route[i * n + j])
-          snprintf(buf + strlen(buf), 40, "%s\t",
-                   node_name(route[i * n + j]));
-      }
-      XBT_INFO("%s", buf);
-      buf[0] = '\000';
-    }
-    free(buf);
-    free(route);
-  }
-
-  if (test_topo_sort) {
-    xbt_node_t *sorted = NULL;
-
-    XBT_INFO("---- Testing Topological Sort ----");
-    sorted = xbt_graph_topo_sort(graph);
-    for (i = 0; i < n; i++) {
-      if (sorted[i]) {
-        XBT_INFO("sorted[%lu] = %s", i, node_name(sorted[i]));
-      }
-    }
-    free(sorted);
-  }
-
-
-  if (test_node_deletion) {
-    XBT_INFO("---- Testing Node Deletion ----");
-    nodes = xbt_graph_get_nodes(graph);
-    edges = xbt_graph_get_edges(graph);
-    XBT_INFO("Before Node deletion: %lu nodes, %lu edges",
-          xbt_dynar_length(nodes), xbt_dynar_length(edges));
-
-    while (!xbt_dynar_is_empty(nodes))
-      xbt_graph_free_node(graph,
-                          *((xbt_node_t *) xbt_dynar_get_ptr(nodes, 0)),
-                          free_label, NULL);
-    XBT_INFO("After Node deletion:  %lu nodes, %lu edges",
-          xbt_dynar_length(nodes), xbt_dynar_length(edges));
-  }
-
-  if (test_edge_deletion) {
-    XBT_INFO("---- Testing Edge Deletion ----");
-    nodes = xbt_graph_get_nodes(graph);
-    edges = xbt_graph_get_edges(graph);
-    XBT_INFO("Before Edge deletion: %lu nodes, %lu edges",
-          xbt_dynar_length(nodes), xbt_dynar_length(edges));
-
-    while (!xbt_dynar_is_empty(edges))
-      xbt_graph_free_edge(graph,
-                          *((xbt_edge_t *) xbt_dynar_get_ptr(edges, 0)),
-                          NULL);
-
-    XBT_INFO("After Edge deletion:  %lu nodes, %lu edges",
-          xbt_dynar_length(nodes), xbt_dynar_length(edges));
-  }
-
-  xbt_graph_free_graph(graph, free_label, NULL, NULL);
-
-}
-
-int main(int argc, char **argv)
-{
-  xbt_init(&argc, argv);
-  if (argc == 1) {
-    fprintf(stderr, "Usage : %s graph.xml\n", argv[0]);
-
-    return 1;
-  }
-  test(argv[1]);
-  return 0;
-}
diff --git a/teshsuite/xbt/graphxml_usage/graphxml_usage.tesh b/teshsuite/xbt/graphxml_usage/graphxml_usage.tesh
deleted file mode 100644 (file)
index 18798bc..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#! ./tesh
-
-$ $SG_TEST_EXENV ${bindir:=.}/graphxml_usage graph.xml
-> [0.000000] [test/INFO] ---- Testing XML export. Exporting to testgraph.xml ----
-> [0.000000] [test/INFO] ---- Testing GraphViz export. Exporting to testgraph.dot ----
-> [0.000000] [test/INFO] ---- Dumping Edge lengths ----
-> [0.000000] [test/INFO]  0.000         0.410  -1.000  -1.000  -1.000  -1.000  -1.000  -1.000  
-> [0.000000] [test/INFO] -1.000         0.000   0.510  -1.000  -1.000  -1.000  -1.000  -1.000  
-> [0.000000] [test/INFO] -1.000        -1.000   0.000   0.500  -1.000  -1.000  -1.000  -1.000  
-> [0.000000] [test/INFO] -1.000        -1.000  -1.000   0.000  -1.000   0.380  -1.000  -1.000  
-> [0.000000] [test/INFO] -1.000        -1.000  -1.000   0.360   0.000  -1.000  -1.000  -1.000  
-> [0.000000] [test/INFO] -1.000        -1.000  -1.000  -1.000  -1.000   0.000  -1.000  -1.000  
-> [0.000000] [test/INFO] -1.000        -1.000  -1.000  -1.000   0.380  -1.000   0.000  -1.000  
-> [0.000000] [test/INFO] -1.000        -1.000  -1.000  -1.000  -1.000  -1.000  -1.000   0.000  
-> [0.000000] [test/INFO] ---- Testing Shortest Paths ----
-> [0.000000] [test/INFO] A     B       B       B       B       
-> [0.000000] [test/INFO] B     C       C       C       
-> [0.000000] [test/INFO] C     D       D       
-> [0.000000] [test/INFO] D     F       
-> [0.000000] [test/INFO] D     E       D       
-> [0.000000] [test/INFO] F     
-> [0.000000] [test/INFO] E     E       E       M       
-> [0.000000] [test/INFO] P     
-> [0.000000] [test/INFO] ---- Testing Topological Sort ----
-> [0.000000] [test/INFO] sorted[0] = P
-> [0.000000] [test/INFO] sorted[1] = M
-> [0.000000] [test/INFO] sorted[2] = E
-> [0.000000] [test/INFO] sorted[3] = A
-> [0.000000] [test/INFO] sorted[4] = B
-> [0.000000] [test/INFO] sorted[5] = C
-> [0.000000] [test/INFO] sorted[6] = D
-> [0.000000] [test/INFO] sorted[7] = F
index d4cf170..c4f0451 100644 (file)
@@ -1,13 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(heap_bench ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/heap_bench/heap_bench.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(heap_bench simgrid m )
-else()
-  target_link_libraries(heap_bench simgrid )
-endif()
+add_executable       (heap_bench heap_bench.c)
+target_link_libraries(heap_bench simgrid)
 
 set(tesh_files
   ${tesh_files}
index 319a260..71ad5a3 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(log_large_test log_large_test.c)
+add_executable       (log_large_test log_large_test.c)
 target_link_libraries(log_large_test simgrid)
 
 set(tesh_files
index 977aa2d..5f56e30 100644 (file)
@@ -1,13 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(log_usage ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_usage/log_usage.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(log_usage simgrid m )
-else()
-  target_link_libraries(log_usage simgrid )
-endif()
+add_executable       (log_usage log_usage.c)
+target_link_libraries(log_usage simgrid)
 
 set(tesh_files
   ${tesh_files}
index 8981832..889c93e 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(mallocator mallocator_test.c)
+add_executable       (mallocator mallocator_test.c)
 target_link_libraries(mallocator simgrid)
 
 set(tesh_files
index 12ef3cd..e288687 100644 (file)
@@ -1,7 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
 if(HAVE_MMALLOC)
-  add_executable(mmalloc_test mmalloc_test.c)
+  add_executable       (mmalloc_test mmalloc_test.c)
   target_link_libraries(mmalloc_test simgrid)
 endif()
 
index 37672a0..8a4907a 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(parallel_log_crashtest parallel_log_crashtest.c)
+add_executable       (parallel_log_crashtest parallel_log_crashtest.c)
 target_link_libraries(parallel_log_crashtest simgrid)
 
 set(tesh_files
index d82fe5b..87a8ce7 100644 (file)
@@ -1,13 +1,5 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(parmap_bench ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_bench/parmap_bench.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(parmap_bench simgrid m )
-else()
-  target_link_libraries(parmap_bench simgrid )
-endif()
+add_executable       (parmap_bench parmap_bench.c)
+target_link_libraries(parmap_bench simgrid)
 
 set(tesh_files
   ${tesh_files}
index d75f385..2301a0c 100644 (file)
@@ -1,6 +1,4 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}")
-
-add_executable(parmap_test parmap_test.c)
+add_executable       (parmap_test parmap_test.c)
 target_link_libraries(parmap_test simgrid)
 
 set(tesh_files
index 30701d8..6765bf9 100644 (file)
@@ -13,10 +13,8 @@ set(EXTRA_DIST
   src/include/surf/datatypes.h
   src/include/surf/maxmin.h
   src/include/surf/surf.h
-  src/include/surf/surfxml_parse_values.h
   src/include/xbt/win32_ucontext.h
   src/include/xbt/wine_dbghelp.h
-  src/msg/msg_mailbox.h
   src/msg/msg_private.h
   src/portable.h
   src/probes.tp
@@ -77,13 +75,12 @@ set(EXTRA_DIST
   src/surf/surf_routing_full.hpp
   src/surf/surf_routing_RoutedGraph.hpp
   src/surf/surf_routing_none.hpp
-  src/surf/surf_routing_private.hpp
   src/surf/surf_routing_vivaldi.hpp
   src/surf/vm_hl13.hpp
   src/surf/PropertyHolder.hpp
   src/surf/virtual_machine.hpp
   src/surf/host_clm03.hpp
-  src/surf/host_interface.hpp
+  src/surf/HostImpl.hpp
   src/surf/ptask_L07.hpp
   src/xbt/automaton/automaton_lexer.yy.c
   src/xbt/automaton/parserPromela.lex
@@ -97,9 +94,6 @@ set(EXTRA_DIST
   src/xbt/ex_interface.h
   src/xbt/fifo_private.h
   src/xbt/graph_private.h
-  src/xbt/graphxml.c
-  src/xbt/graphxml.dtd
-  src/xbt/graphxml_parse.c
   src/xbt/heap_private.h
   src/xbt/log_private.h
   src/xbt/mallocator_private.h
@@ -118,6 +112,7 @@ set(EXTRA_DIST
   src/xbt/win32_ucontext.c
   tools/tesh/generate_tesh
   tools/lualib.patch
+  teshsuite/lua/lua_platforms.tesh
   examples/smpi/mc/only_send_deterministic.tesh
   examples/smpi/mc/non_deterministic.tesh
   )
@@ -259,7 +254,6 @@ set(XBT_SRC
   src/xbt/ex.c
   src/xbt/fifo.c
   src/xbt/graph.c
-  src/xbt/graphxml_parse.c
   src/xbt/heap.c
   src/xbt/lib.c
   src/xbt/log.c
@@ -303,8 +297,6 @@ set(NS3_SRC
   )
 
 set(SURF_SRC
-  src/surf/callbacks.h
-  src/surf/callbacks.cpp
   src/surf/cpu_cas01.cpp
   src/surf/cpu_interface.cpp
   src/surf/cpu_ti.cpp
@@ -344,7 +336,7 @@ set(SURF_SRC
   src/surf/vm_hl13.cpp
   src/surf/virtual_machine.cpp
   src/surf/host_clm03.cpp
-  src/surf/host_interface.cpp
+  src/surf/HostImpl.cpp
   src/surf/ptask_L07.cpp
   src/xbt/xbt_sg_stubs.c
   )
@@ -563,6 +555,7 @@ set(MC_SRC_BASE
   )
 
 set(MC_SRC
+  src/mc/remote_ptr.hpp
   src/mc/AddressSpace.hpp
   src/mc/AddressSpace.cpp
   src/mc/Frame.hpp
@@ -588,7 +581,6 @@ set(MC_SRC
   src/mc/mc_unw.h
   src/mc/mc_unw.cpp
   src/mc/mc_unw_vmread.cpp
-  src/mc/mc_mmalloc.h
   src/mc/mc_object_info.h
   src/mc/mc_checkpoint.cpp
   src/mc/mc_snapshot.h
@@ -609,6 +601,7 @@ set(MC_SRC
   src/mc/mc_hash.cpp
   src/mc/mc_ignore.cpp
   src/mc/mc_ignore.h
+  src/mc/mc_mmalloc.h
   src/mc/mc_liveness.h
   src/mc/LocationList.hpp
   src/mc/LocationList.cpp
@@ -690,8 +683,6 @@ set(headers_to_install
   include/xbt/file.h
   include/xbt/function_types.h
   include/xbt/graph.h
-  include/xbt/graphxml.h
-  include/xbt/graphxml_parse.h
   include/xbt/hash.h
   include/xbt/heap.h
   include/xbt/lib.h
@@ -710,6 +701,7 @@ set(headers_to_install
   include/xbt/swag.h
   include/xbt/synchro_core.h
   include/xbt/sysdep.h
+  include/xbt/system_error.hpp
   include/xbt/virtu.h
   include/xbt/xbt_os_thread.h
   include/xbt/xbt_os_time.h
@@ -961,8 +953,9 @@ set(txt_files
   TODO
   )
 
-set(EXAMPLES_CMAKEFILES_TXT
-  examples/java/CMakeLists.txt
+# The list of cmake build directories is constructed from the following list. 
+# Add your CMakeLists file here to see your subdir built.
+set(CMAKEFILES_TXT
   examples/java/async/CMakeLists.txt
   examples/java/bittorrent/CMakeLists.txt
   examples/java/chord/CMakeLists.txt
@@ -983,6 +976,7 @@ set(EXAMPLES_CMAKEFILES_TXT
   examples/java/startKillTime/CMakeLists.txt
   examples/java/suspend/CMakeLists.txt
   examples/java/tracing/CMakeLists.txt
+  
   examples/msg/CMakeLists.txt
   examples/msg/actions/CMakeLists.txt
   examples/msg/bittorrent/CMakeLists.txt
@@ -1014,9 +1008,11 @@ set(EXAMPLES_CMAKEFILES_TXT
   examples/msg/suspend/CMakeLists.txt
   examples/msg/token_ring/CMakeLists.txt
   examples/msg/tracing/CMakeLists.txt
+  
   examples/s4u/CMakeLists.txt
   examples/s4u/basic/CMakeLists.txt
   examples/s4u/io/CMakeLists.txt
+  
   examples/simdag/CMakeLists.txt
   examples/simdag/dax/CMakeLists.txt
   examples/simdag/dot/CMakeLists.txt
@@ -1024,6 +1020,7 @@ set(EXAMPLES_CMAKEFILES_TXT
   examples/simdag/io/CMakeLists.txt
   examples/simdag/properties/CMakeLists.txt
   examples/simdag/scheduling/CMakeLists.txt
+  
   examples/smpi/CMakeLists.txt
   examples/smpi/smpi_msg_masterslave/CMakeLists.txt
   examples/smpi/replay_multiple/CMakeLists.txt
@@ -1031,13 +1028,10 @@ set(EXAMPLES_CMAKEFILES_TXT
   examples/smpi/energy/CMakeLists.txt
   examples/smpi/energy/f77/CMakeLists.txt
   examples/smpi/energy/f90/CMakeLists.txt
-  )
 
-set(TESHSUITE_CMAKEFILES_TXT
   teshsuite/bug-17132/CMakeLists.txt
   teshsuite/java/semaphore/CMakeLists.txt
   teshsuite/java/sleep_host_off/CMakeLists.txt
-  teshsuite/lua/lua_platforms.tesh
   teshsuite/mc/CMakeLists.txt
   teshsuite/mc/dwarf/CMakeLists.txt
   teshsuite/mc/dwarf_expression/CMakeLists.txt
@@ -1060,6 +1054,7 @@ set(TESHSUITE_CMAKEFILES_TXT
   teshsuite/simdag/platforms/CMakeLists.txt
   teshsuite/simix/check_defaults/CMakeLists.txt
   teshsuite/simix/stack_overflow/CMakeLists.txt
+  
   teshsuite/smpi/CMakeLists.txt
   teshsuite/smpi/allgather/CMakeLists.txt
   teshsuite/smpi/allgatherv/CMakeLists.txt
@@ -1109,11 +1104,12 @@ set(TESHSUITE_CMAKEFILES_TXT
   teshsuite/smpi/mpich3-test/topo/CMakeLists.txt
   teshsuite/smpi/mpich3-test/rma/CMakeLists.txt
   teshsuite/smpi/mpich3-test/perf/CMakeLists.txt
+  
   teshsuite/surf/lmm_usage/CMakeLists.txt
   teshsuite/surf/maxmin_bench/CMakeLists.txt
   teshsuite/surf/surf_usage/CMakeLists.txt
   teshsuite/surf/trace_usage/CMakeLists.txt
-  teshsuite/xbt/graphxml_usage/CMakeLists.txt
+  
   teshsuite/xbt/heap_bench/CMakeLists.txt
   teshsuite/xbt/log_large/CMakeLists.txt
   teshsuite/xbt/log_usage/CMakeLists.txt
@@ -1122,9 +1118,7 @@ set(TESHSUITE_CMAKEFILES_TXT
   teshsuite/xbt/parallel_log/CMakeLists.txt
   teshsuite/xbt/parmap_bench/CMakeLists.txt
   teshsuite/xbt/parmap_test/CMakeLists.txt
-  )
 
-set(TOOLS_CMAKEFILES_TXT
   tools/CMakeLists.txt
   tools/graphicator/CMakeLists.txt
   tools/tesh/CMakeLists.txt
@@ -1140,7 +1134,6 @@ set(CMAKE_SOURCE_FILES
   tools/cmake/GCCFlags.cmake
   tools/cmake/Documentation.cmake
   tools/cmake/MaintainerMode.cmake
-  tools/cmake/MakeExe.cmake
   tools/cmake/Java.cmake
   tools/cmake/MakeLib.cmake
   tools/cmake/MakeLibWin.cmake
@@ -1202,9 +1195,9 @@ set(PLATFORMS_EXAMPLES
   examples/platforms/cluster_no_backbone.xml
   examples/platforms/clusters_routing_full.xml
   examples/platforms/crosstraffic.xml
-  examples/platforms/conf/gridpp_grid_2004.conf
-  examples/platforms/conf/lcg_sept2004_grid.conf
-  examples/platforms/conf/transform_optorsim_platform.pl
+  examples/platforms/optorsim/gridpp_grid_2004.conf
+  examples/platforms/optorsim/lcg_sept2004_grid.conf
+  examples/platforms/optorsim/transform_optorsim_platform.pl
   examples/platforms/config.xml
   examples/platforms/config_tracing.xml
   examples/platforms/trace/faulty_host.trace
@@ -1241,11 +1234,8 @@ set(PLATFORMS_EXAMPLES
   examples/platforms/small_platform_with_routers.xml
   examples/platforms/syscoord/generate_peer_platform.pl
   examples/platforms/syscoord/median_harvard.syscoord
-  examples/platforms/syscoord/median_harvard.xml
   examples/platforms/syscoord/median_meridian.syscoord
-  examples/platforms/syscoord/median_meridian.xml
   examples/platforms/syscoord/median_p2psim.syscoord
-  examples/platforms/syscoord/median_p2psim.xml
   examples/platforms/torus_cluster.xml
   examples/platforms/two_hosts.xml
   examples/platforms/two_hosts_platform.xml
index 8f5338d..fbcc115 100644 (file)
@@ -168,9 +168,7 @@ set(source_to_pack
   ${XBT_SRC}
   ${EXTRA_DIST}
   ${CMAKE_SOURCE_FILES}
-  ${EXAMPLES_CMAKEFILES_TXT}
-  ${TESHSUITE_CMAKEFILES_TXT}
-  ${TOOLS_CMAKEFILES_TXT}
+  ${CMAKEFILES_TXT}
   ${DOC_FIGS}
   ${DOC_IMG}
   ${DOC_SOURCES}
index 9ba2824..91f86d6 100644 (file)
@@ -145,15 +145,12 @@ if(enable_maintainer_mode AND NOT WIN32)
 
     ADD_CUSTOM_COMMAND(
       OUTPUT   ${CMAKE_HOME_DIRECTORY}/src/surf/xml/simgrid_dtd.h
-      ${CMAKE_HOME_DIRECTORY}/include/xbt/graphxml.h
-      ${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.h
-      ${CMAKE_HOME_DIRECTORY}/src/surf/xml/simgrid_dtd.c
-      ${CMAKE_HOME_DIRECTORY}/src/xbt/graphxml.c
-      ${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.c
+                ${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.h
+                ${CMAKE_HOME_DIRECTORY}/src/surf/xml/simgrid_dtd.c
+                ${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.c
 
       DEPENDS  ${CMAKE_HOME_DIRECTORY}/src/surf/xml/simgrid.dtd
-      ${CMAKE_HOME_DIRECTORY}/src/xbt/graphxml.dtd
-      ${CMAKE_HOME_DIRECTORY}/src/simdag/dax.dtd
+                ${CMAKE_HOME_DIRECTORY}/src/simdag/dax.dtd
 
       #${CMAKE_HOME_DIRECTORY}/src/surf/xml/simgrid_dtd.l: ${CMAKE_HOME_DIRECTORY}/src/surf/xml/simgrid.dtd
       COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_HOME_DIRECTORY}/src/surf/xml
@@ -161,11 +158,6 @@ if(enable_maintainer_mode AND NOT WIN32)
       COMMAND ${SED_EXE} -i ${string14} src/surf/xml/simgrid_dtd.l
       COMMAND ${CMAKE_COMMAND} -E echo "       Generated src/surf/xml/simgrid_dtd.l"
 
-      #${CMAKE_HOME_DIRECTORY}/src/xbt/graphxml.l: ${CMAKE_HOME_DIRECTORY}/src/xbt/graphxml.dtd
-      COMMAND ${FLEXML_EXE} -b 1000000 -P graphxml --sysid=graphxml.dtd -S src/xbt/graphxml.l -L src/xbt/graphxml.dtd
-      COMMAND ${SED_EXE} -i ${string14} src/xbt/graphxml.l
-      COMMAND ${CMAKE_COMMAND} -E echo "       Generated src/xbt/graphxml.l"
-
       #${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.l: ${CMAKE_HOME_DIRECTORY}/src/simdag/dax.dtd
       COMMAND ${FLEXML_EXE} -b 1000000 --root-tags adag -P dax_ --sysid=dax.dtd -S src/simdag/dax_dtd.l -L src/simdag/dax.dtd
       COMMAND ${SED_EXE} -i ${string5} src/simdag/dax_dtd.l
@@ -180,14 +172,6 @@ if(enable_maintainer_mode AND NOT WIN32)
       COMMAND ${SED_EXE} -i ${string14} src/surf/xml/simgrid_dtd.h
       COMMAND ${CMAKE_COMMAND} -E echo "       Generated src/surf/xml/simgrid_dtd.h"
 
-      #${CMAKE_HOME_DIRECTORY}/include/xbt/graphxml.h: ${CMAKE_HOME_DIRECTORY}/src/xbt/graphxml.dtd
-      COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_HOME_DIRECTORY}/include/xbt/graphxml.h
-      COMMAND ${FLEXML_EXE} -P graphxml --sysid=graphxml.dtd -H include/xbt/graphxml.h -L src/xbt/graphxml.dtd
-      COMMAND ${SED_EXE} -i ${string1} include/xbt/graphxml.h
-      COMMAND ${SED_EXE} -i ${string2} include/xbt/graphxml.h
-      COMMAND ${SED_EXE} -i ${string14} include/xbt/graphxml.h
-      COMMAND ${CMAKE_COMMAND} -E echo "       Generated include/xbt/graphxml.h"
-
       #${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.h: ${CMAKE_HOME_DIRECTORY}/src/simdag/dax.dtd
       COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.h
       COMMAND ${FLEXML_EXE} --root-tags adag -P dax_ --sysid=dax.dtd -H src/simdag/dax_dtd.h -L src/simdag/dax.dtd
@@ -206,16 +190,6 @@ if(enable_maintainer_mode AND NOT WIN32)
       COMMAND ${SED_EXE} -i "s/register //" src/surf/xml/simgrid_dtd.c
       COMMAND ${CMAKE_COMMAND} -E echo "       Generated surf/xml/simgrid_dtd.c"
 
-      #xbt/graphxml.c: xbt/graphxml.l
-      COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_HOME_DIRECTORY}/src/xbt/graphxml.c
-      COMMAND ${SED_EXE} -i ${string8} src/xbt/graphxml.l
-      COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_HOME_DIRECTORY}/src/xbt
-      COMMAND ${FLEX_EXE} -o src/xbt/graphxml.c -Pxbt_graph_parse_ --noline src/xbt/graphxml.l
-      COMMAND ${SED_EXE} -i ${string9} src/xbt/graphxml.c
-      COMMAND ${SED_EXE} -i 's/int yyl\;/unsigned int yyl\;/' src/xbt/graphxml.c
-      COMMAND ${SED_EXE} -i "s/register //" src/xbt/graphxml.c
-      COMMAND ${CMAKE_COMMAND} -E echo "       Generated xbt/graphxml.c"
-
       #simdag/dax_dtd.c: simdag/dax_dtd.l
       COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.c
       COMMAND ${SED_EXE} -i ${string8} src/simdag/dax_dtd.l
@@ -248,8 +222,6 @@ endif()
     add_custom_target(maintainer_files
       DEPENDS ${CMAKE_HOME_DIRECTORY}/src/surf/xml/simgrid_dtd.h
               ${CMAKE_HOME_DIRECTORY}/src/surf/xml/simgrid_dtd.c
-              ${CMAKE_HOME_DIRECTORY}/include/xbt/graphxml.h
-              ${CMAKE_HOME_DIRECTORY}/src/xbt/graphxml.c
               ${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.h
               ${CMAKE_HOME_DIRECTORY}/src/simdag/dax_dtd.c
       )
diff --git a/tools/cmake/MakeExe.cmake b/tools/cmake/MakeExe.cmake
deleted file mode 100644 (file)
index 43efa54..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-###################################################################
-### Load all files declaring binaries (tools, examples and tests) #
-###################################################################
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/async)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/bittorrent)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/chord)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/cloud)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/cloud/energy)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/cloud/migration)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/commTime)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/energy)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/io)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/kademlia)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/master_slave_bypass)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/master_slave_kill)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/masterslave)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/migration)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/mutualExclusion)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/pingPong)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/priority)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/startKillTime)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/suspend)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/java/tracing)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/actions)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/bittorrent)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/chainsend)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/chord)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/cloud)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/consumption)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/onoff)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/pstate)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/energy/vm)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/exception)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gpu)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/icomms)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/io)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/kademlia)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/mc)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/migration)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/ns3)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/pastry)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/pmm)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/priority)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/properties)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/semaphores)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/start_kill_time)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/suspend)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/token_ring)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/msg/tracing)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/s4u)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/s4u/basic)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/s4u/io)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/dax)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/dot)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/goal)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/io)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/properties)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/simdag/scheduling)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/smpi)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/smpi/MM)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_msg_masterslave)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay_multiple)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/smpi/energy)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/f77)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/f90)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/java/semaphore)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/java/sleep_host_off)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/mc)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf_expression)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/mc/replay)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/get_sender)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/host_on_off)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/host_on_off_processes)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/pid)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process_join)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/storage)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/task_destroy_cancel)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/availability)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/incomplete)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/partask)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simix/check_defaults)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simix/stack_overflow)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgather)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgatherv)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allreduce)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoall)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoallv)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/barrier)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/compute)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/gather)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hvector)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/indexed)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pingpong)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/scatter)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/shared)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/struct)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/vector)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/isp/umpire)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/attr)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/comm)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/datatype)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/group)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/topo)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/init)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/pt2pt)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/rma)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/perf)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/info)
-
-#add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/attr)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/util)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/coll)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/comm)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/datatype)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/ext)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/init)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/info)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/pt2pt)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/topo)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/rma)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/util)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/rma)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/coll)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/datatype)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/info)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/init)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/pt2pt)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/surf/lmm_usage)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/surf/maxmin_bench)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/surf/surf_usage)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/surf/trace_usage)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/graphxml_usage)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/heap_bench)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_large)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_usage)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mallocator)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mmalloc)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parallel_log)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_bench)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_test)
-
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools/graphicator)
-add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools/tesh)
index 2a2a69a..67bc91e 100644 (file)
@@ -4,11 +4,11 @@ add_library(simgrid SHARED ${simgrid_sources})
 
 if(MSVC)
   set_target_properties(simgrid  PROPERTIES 
-       COMPILE_FLAGS "/D_XBT_DLL_EXPORT /DDLL_EXPORT" 
+       COMPILE_FLAGS "/DDLL_EXPORT" 
        VERSION ${libsimgrid_version} )
 else()
   set_target_properties(simgrid  PROPERTIES 
-       COMPILE_FLAGS "-D_XBT_DLL_EXPORT -DDLL_EXPORT" 
+       COMPILE_FLAGS "-DDLL_EXPORT" 
        LINK_FLAGS "-shared" 
        VERSION ${libsimgrid_version} 
        PREFIX "lib" SUFFIX ".dll" 
index 949a643..e991a29 100644 (file)
@@ -4,11 +4,7 @@ if(enable_print_message)
   message("______________________________________________________________________ DEBUG")
   message("CMAKE_HOME_DIRECTORY ........: ${CMAKE_HOME_DIRECTORY}")
   message("")
-  message("SIZEOF_MAX ..................: ${SIZEOF_MAX}")
   message("PTH_STACKGROWTH .............: ${PTH_STACKGROWTH}")
-  message("need_asprintf ...............: ${simgrid_need_asprintf}")
-  message("need_vasprintf ..............: ${simgrid_need_vasprintf}")
-  message("PREFER_PORTABLE_SNPRINTF ....: ${PREFER_PORTABLE_SNPRINTF}")
   message("HAVE_VA_COPY ................: ${HAVE_VA_COPY}")
   message("")
   message("\#define pth_skaddr_makecontext(skaddr,sksize) (${makecontext_addr})")
@@ -24,8 +20,6 @@ if(enable_print_message)
   message("")
   message("STDC_HEADERS ................: ${STDC_HEADERS}")
   message("HAVE_VALGRIND_VALGRIND_H ....: ${HAVE_VALGRIND_VALGRIND_H}")
-  message("HAVE_SOCKET_H ...............: ${HAVE_SOCKET_H}")
-  message("HAVE_STAT_H .................: ${HAVE_STAT_H}")
   message("HAVE_SYS_STAT_H .............: ${HAVE_SYS_STAT_H}")
   message("HAVE_WINDOWS_H ..............: ${HAVE_WINDOWS_H}")
   message("HAVE_ERRNO_H ................: ${HAVE_ERRNO_H}")
@@ -35,21 +29,14 @@ if(enable_print_message)
   message("HAVE_SYS_TIME_H .............: ${HAVE_SYS_TIME_H}")
   message("HAVE_TIME_H .................: ${HAVE_TIME_H}")
   message("HAVE_DLFCN_H ................: ${HAVE_DLFCN_H}")
-  message("HAVE_STRING_H ...............: ${HAVE_STRING_H}")
-  message("HAVE_STDIO_H ................: ${HAVE_STDIO_H}")
 
   message("")
   message("HAVE_GETTIMEOFDAY ...........: ${HAVE_GETTIMEOFDAY}")
   message("HAVE_NANOSLEEP ..............: ${HAVE_NANOSLEEP}")
   message("HAVE_GETDTABLESIZE ..........: ${HAVE_GETDTABLESIZE}")
   message("HAVE_SYSCONF ................: ${HAVE_SYSCONF}")
-  message("HAVE_READV ..................: ${HAVE_READV}")
   message("HAVE_POPEN ..................: ${HAVE_POPEN}")
-  message("HAVE_SIGNAL .................: ${HAVE_SIGNAL}")
   message("HAVE_MAKECONTEXT ............: ${HAVE_MAKECONTEXT}")
-  message("HAVE_SNPRINTF ...............: ${HAVE_SNPRINTF}")
-  message("HAVE_VSNPRINTF ..............: ${HAVE_VSNPRINTF}")
-  message("HAVE_ASPRINTF ...............: ${HAVE_ASPRINTF}")
   message("HAVE_VASPRINTF ..............: ${HAVE_VASPRINTF}")
   message("HAVE_MMAP ...................: ${HAVE_MMAP}")
   message("HAVE_PRIVATIZATION ..........: ${HAVE_PRIVATIZATION}")
index bf7c6ba..bdacb15 100644 (file)
@@ -183,7 +183,6 @@ IF(NOT enable_memcheck)
   ELSE()
     ADD_TESH(tesh-xbt-log                          --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/log_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_usage log_usage_ndebug.tesh)
   ENDIF()
-  ADD_TESH(tesh-xbt-graphxml                     --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/graphxml_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/graphxml_usage graphxml_usage.tesh)
   ADD_TESH(tesh-xbt-heap                         --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/heap_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/heap_bench heap_bench.tesh)
   #ADD_TESH(test-xbt-parmap                         --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/parmap_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_bench parmap_bench.tesh)
   # END TESH TESTS
@@ -389,6 +388,7 @@ IF(NOT enable_memcheck)
     FOREACH (ALLREDUCE_COLL_LARGE ompi_ring_segmented)
       ADD_TESH(tesh-smpi-allreduce-coll-large-${ALLREDUCE_COLL_LARGE} --cfg smpi/allreduce:${ALLREDUCE_COLL_LARGE} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allreduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allreduce allreduce_coll_large.tesh)
     ENDFOREACH()
+    ADD_TESH(tesh-smpi-allreduce-coll-automatic --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allreduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allreduce allreduce_coll_automatic.tesh)
     FOREACH (ALLTOALL_COLL 2dmesh 3dmesh pair pair_rma pair_one_barrier pair_light_barrier
                            pair_mpi_barrier rdb ring ring_light_barrier
                            ring_mpi_barrier ring_one_barrier
@@ -527,7 +527,7 @@ ENDIF()
 
 
   ## OTHER ##
-ADD_TEST(testall                                 ${CMAKE_BINARY_DIR}/src/testall)
+ADD_TEST(testall                                 ${CMAKE_BINARY_DIR}/testall)
 
 IF(enable_auto_install)
   ADD_TEST(simgrid_install                       make install)
index b3ee032..cbbd15c 100644 (file)
@@ -58,12 +58,6 @@ ADD_CUSTOM_COMMAND(
 
 set_source_files_properties(${TEST_UNITS} PROPERTIES GENERATED true)
 
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}/src/")
-add_executable(testall ${TEST_UNITS})
+add_executable       (testall ${TEST_UNITS})
+target_link_libraries(testall simgrid)
 
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(testall simgrid m)
-else()
-  target_link_libraries(testall simgrid)
-endif()
index a014fba..de04a60 100644 (file)
@@ -3,30 +3,12 @@
 /* Warning: The file internal_config.h is AUTOMATICALLY GENERATED by Cmake. 
  * Edit the template instead: tools/cmake/src/internal_config.h.in          */
 
-/* Copyright (c) 2004-2014. The SimGrid Team.
+/* Copyright (c) 2004-2016. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-/* Set somes variables for Windows compilation */
-
-#ifdef _XBT_DLL_EXPORT
-       #ifndef DLL_EXPORT
-               #define DLL_EXPORT
-       #endif
-#else
-       #ifdef _XBT_DLL_STATIC
-               #ifndef DLL_STATIC
-                       #define DLL_STATIC
-               #endif
-       #else
-               #ifndef DLL_EXPORT
-                       #define DLL_IMPORT
-               #endif
-       #endif
-#endif
-
 /* If __thread is available */
 #cmakedefine HAVE_THREAD_LOCAL_STORAGE @HAVE_THREAD_LOCAL_STORAGE@
 
 #ifndef _M_IX86
        #cmakedefine _M_IX86 @_M_IX86@
 #endif
-#cmakedefine _XBT_WIN32 @_XBT_WIN32@   //this variable is set if it is a windows platform
-#cmakedefine _WIN32 @_WIN32@                   //this variable is set if it is a 32 bits windows platform
-#cmakedefine _WIN64 @_WIN64@                   //this variable is set if it is a 64 bits  windows platform
-#cmakedefine __VISUALC__ @__VISUALC__@
-#cmakedefine __BORLANDC__ @__BORLANDC__@
+#cmakedefine _XBT_WIN32 @_XBT_WIN32@   // this variable is set if it is a windows platform
+#cmakedefine _WIN32 @_WIN32@           // this variable is set if it is a 32 bits windows platform
+#cmakedefine _WIN64 @_WIN64@           // this variable is set if it is a 64 bits  windows platform
 #cmakedefine APPLE @APPLE@
 /* Set to true if enable_model-checking is true */
 #cmakedefine MMALLOC_WANT_OVERRIDE_LEGACY @MMALLOC_WANT_OVERRIDE_LEGACY@
 #cmakedefine HAVE_CGRAPH_H @CGRAPH_H@
 #cmakedefine HAVE_AGRAPH_H @AGRAPH_H@
 
-/* Define if building universal (internal helper macro) */
-#cmakedefine AC_APPLE_UNIVERSAL_BUILD @AC_APPLE_UNIVERSAL_BUILD@
-
-/* Arguments passed to the configure script */
-#cmakedefine AC_CONFIGURE_ARGS @AC_CONFIGURE_ARGS@
-
 /* Path to the addr2line tool */
 #cmakedefine ADDR2LINE "@ADDR2LINE@"
 
@@ -83,9 +57,6 @@
 #cmakedefine HAVE_RAW_CONTEXTS @HAVE_RAW_CONTEXTS@
 #cmakedefine HAVE_BOOST_CONTEXTS @HAVE_BOOST_CONTEXTS@
 
-/* Define to 1 if you have the GNU ld library */
-#cmakedefine HAVE_GNU_LD @HAVE_GNU_LD@
-
 /* Define to 1 if you have the <errno.h> header file. */
 #cmakedefine HAVE_ERRNO_H @HAVE_ERRNO_H@
 
 /* We have mmap and objdump to handle privatization */
 #cmakedefine HAVE_PRIVATIZATION @HAVE_PRIVATIZATION@
 
-/* Indicates that we have NS3 support */
-#cmakedefine HAVE_NS3 @HAVE_NS3@
-
-/* defines whether Lua bindings must be compiled or not */
-#cmakedefine HAVE_LUA @HAVE_LUA@
-
-/* Define to 1 if you have the <lua5.1/lualib.h> header file. */
-#cmakedefine HAVE_LUA5_1_LUALIB_H @HAVE_LUA5_1_LUALIB_H@
-
 /* Define to 1 if you have the `makecontext' function. */
 #cmakedefine HAVE_MAKECONTEXT @HAVE_MAKECONTEXT@
 
 /* Define to 1 if threads are usable . */
 #cmakedefine HAVE_PTHREAD @HAVE_PTHREAD@
 
-/* Define to 1 if you have the `readv' function. */
-#cmakedefine HAVE_READV @HAVE_READV@
-
 /* Define if sem_init() is avaible or not (part of XPG6 standard only) */
 #cmakedefine HAVE_SEM_INIT @HAVE_SEM_INIT@
 
 /* Define if sem_timedwait() is avaible or not (part of XPG6 standard only) */
 #cmakedefine HAVE_SEM_TIMEDWAIT @HAVE_SEM_TIMEDWAIT@
 
-/* Define to 1 if you have the `signal' function. */
-#cmakedefine HAVE_SIGNAL @HAVE_SIGNAL@
-
 /* Define to 1 if you have the <signal.h> header file. */
 #cmakedefine HAVE_SIGNAL_H @HAVE_SIGNAL_H@
 
-/* Define to 1 if you have the `snprintf' function. */
-#cmakedefine HAVE_SNPRINTF @HAVE_SNPRINTF@
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#cmakedefine HAVE_STDINT_H @HAVE_STDINT_H@
-
-/* Define to 1 if you have the <string.h> header file. */
-#cmakedefine HAVE_STRING_H @HAVE_STRING_H@
-
 /* Define to 1 if you have the `sysconf' function. */
 #cmakedefine HAVE_SYSCONF @HAVE_SYSCONF@
 
 /* Define to 1 if you have the <valgrind/valgrind.h> header file. */
 #cmakedefine HAVE_VALGRIND_VALGRIND_H @HAVE_VALGRIND_VALGRIND_H@
 
-/* Define to 1 if you have the `vsnprintf' function. */
-#cmakedefine HAVE_VSNPRINTF @HAVE_VSNPRINTF@
-
 /* Define to 1 if you have the <windows.h> header file. */
 #cmakedefine HAVE_WINDOWS_H @HAVE_WINDOWS_H@
 
-/* Define to the sub-directory in which libtool stores uninstalled libraries.*/
-#cmakedefine LT_OBJDIR @LT_OBJDIR@
-
-/* enable the asprintf replacement */
-#cmakedefine NEED_ASPRINTF @NEED_ASPRINTF@
-
-/* enable the vasprintf replacement */
-#cmakedefine NEED_VASPRINTF @NEED_VASPRINTF@
-
-/* Name of package */
-#cmakedefine PACKAGE @PACKAGE@
-
-/* Define to the address where bug reports for this package should be sent. */
-#cmakedefine PACKAGE_BUGREPORT @PACKAGE_BUGREPORT@ 
-
-/* Define to the full name of this package. */
-#cmakedefine PACKAGE_NAME @PACKAGE_NAME@
-
-/* Define to the full name and version of this package. */
-#cmakedefine PACKAGE_STRING @PACKAGE_STRING@
-
-/* Define to the one symbol short name of this package. */
-#cmakedefine PACKAGE_TARNAME @PACKAGE_TARNAME@
-
-/* Define to the home page for this package. */
-#cmakedefine PACKAGE_URL @PACKAGE_URL@
-
-/* Define to the version of this package. */
-#cmakedefine PACKAGE_VERSION @PACKAGE_VERSION@
-
-/* "enable replacement (v)snprintf if system (v)snprintf is broken" */
-#cmakedefine PREFER_PORTABLE_SNPRINTF @PREFER_PORTABLE_SNPRINTF@
+#cmakedefine HAVE_VASPRINTF @HAVE_VASPRINTF@
 
 /* define for stack growth */
 #cmakedefine PTH_STACKGROWTH @PTH_STACKGROWTH@
 
-/* The maximal size of any scalar on this arch */
-#cmakedefine SIZEOF_MAX @SIZEOF_MAX@
-
 /* Define to 1 if you have the ANSI C header files. */
 #cmakedefine STDC_HEADERS @STDC_HEADERS@
 
index 7b8fe65..cfd98f1 100644 (file)
@@ -1,13 +1,6 @@
-set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin")
-
-add_executable(graphicator graphicator.c)
-
-### Add definitions for compile
-if(NOT WIN32)
-  target_link_libraries(graphicator simgrid m pthread )
-else()
-  target_link_libraries(graphicator simgrid )
-endif()
+add_executable       (graphicator graphicator.c)
+target_link_libraries(graphicator simgrid)
+set_target_properties(graphicator PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
 
 ## Clean generated files
 get_directory_property(extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)
index 3b93bbd..bffc21a 100644 (file)
@@ -19,18 +19,11 @@ int main(int argc, char **argv)
   XBT_LOG_CONNECT(graphicator);
   MSG_init(&argc, argv);
 
-  if (argc < 3){
-    XBT_INFO("Usage: %s <platform_file.xml> <graphviz_file.dot>", argv[0]);
-    return 1;
-  }
-  char *platformFile = argv[1];
-  char *graphvizFile = argv[2];
-
-  MSG_create_environment(platformFile);
-
-  int status = TRACE_platform_graph_export_graphviz (graphvizFile);
-  if (status == 0){
-    XBT_INFO ("%s expects --cfg=tracing:yes --cfg=tracing/platform:yes", argv[0]);
-  }
+  xbt_assert(argc == 3, "Usage: %s <platform_file.xml> <graphviz_file.dot>", argv[0]);
+
+  MSG_create_environment(argv[1]);
+  int status = TRACE_platform_graph_export_graphviz (argv[2]);
+
+  xbt_assert(status != 0, "%s expects --cfg=tracing:yes --cfg=tracing/platform:yes", argv[0]);
   return 0;
 }