Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branches 'master' and 'master' of github.com:simgrid/simgrid
authorTakishipp <toufik.boubehziz@gmail.com>
Mon, 29 May 2017 13:28:40 +0000 (15:28 +0200)
committerTakishipp <toufik.boubehziz@gmail.com>
Mon, 29 May 2017 13:28:40 +0000 (15:28 +0200)
427 files changed:
.appveyor.yml
.gitignore
.travis.yml
CMakeLists.txt
ChangeLog
README [deleted file]
README.md [new file with mode: 0644]
circle.yml
doc/doxygen/ns3.doc
doc/doxygen/options.doc
doc/doxygen/platform.doc
doc/manpage/tesh.pod
examples/java/app/bittorrent/Peer.java
examples/java/app/centralizedmutex/Coordinator.java
examples/java/app/centralizedmutex/GrantTask.java
examples/java/app/centralizedmutex/Main.java
examples/java/app/centralizedmutex/Node.java
examples/java/app/centralizedmutex/ReleaseTask.java
examples/java/app/centralizedmutex/RequestTask.java
examples/java/cloud/migration/Daemon.java
examples/java/cloud/migration/XVM.java
examples/java/dht/chord/ChordTask.java
examples/java/dht/chord/Node.java
examples/java/dht/kademlia/Answer.java
examples/msg/CMakeLists.txt
examples/msg/README.doc
examples/msg/app-bittorrent/peer.c
examples/msg/app-chainsend/broadcaster.c
examples/msg/app-chainsend/iterator.c
examples/msg/app-pingpong/app-pingpong.c
examples/msg/app-pmm/app-pmm.c [deleted file]
examples/msg/app-pmm/app-pmm.tesh [deleted file]
examples/msg/async-yield/async-yield.tesh [deleted file]
examples/msg/cloud-masterworker/cloud-masterworker.c
examples/msg/dht-chord/dht-chord.c
examples/msg/dht-kademlia/answer.c
examples/msg/dht-kademlia/dht-kademlia.c
examples/msg/dht-pastry/dht-pastry.c
examples/msg/energy-vm/energy-vm.c
examples/msg/io-file/io-file.tesh
examples/msg/io-remote/io-remote.tesh
examples/msg/io-storage/io-storage.tesh
examples/msg/mc/electric_fence.c
examples/msg/network-ns3/network-ns3.c
examples/msg/network-ns3/network-ns3.tesh
examples/msg/process-yield/process-yield.c [moved from examples/msg/async-yield/async-yield.c with 100% similarity]
examples/msg/process-yield/process-yield.tesh [new file with mode: 0644]
examples/msg/process-yield/process-yield_d.xml [moved from examples/msg/async-yield/async-yield_d.xml with 100% similarity]
examples/msg/trace-masterworker/trace-masterworker.c
examples/platforms/dogbone.xml
examples/platforms/small_platform_one_link_routes.xml
examples/platforms/storage/remote_io.xml
examples/platforms/storage/storage.xml
examples/s4u/dht-chord/node.cpp
examples/s4u/dht-chord/s4u_dht-chord.cpp
examples/s4u/dht-chord/s4u_dht-chord.hpp
examples/smpi/energy/f77/energy.tesh
examples/smpi/energy/f77/sef.f
examples/smpi/energy/f90/energy.tesh
examples/smpi/energy/f90/sef90.f90
examples/smpi/mc/bugged1.c
examples/smpi/mc/bugged1_liveness.c
examples/smpi/mc/only_send_deterministic.c
examples/smpi/replay/replay.c
examples/smpi/replay_multiple/generate_multiple_deployment.sh
examples/smpi/replay_multiple/replay_multiple.tesh
examples/smpi/smpi_msg_masterslave/masterslave_mailbox_smpi.c
include/simgrid/forward.h
include/simgrid/kernel/future.hpp
include/simgrid/modelchecker.h
include/simgrid/msg.h
include/simgrid/s4u.hpp
include/simgrid/s4u/Activity.hpp
include/simgrid/s4u/Actor.hpp
include/simgrid/s4u/Comm.hpp
include/simgrid/s4u/ConditionVariable.hpp
include/simgrid/s4u/Host.hpp
include/simgrid/s4u/Mutex.hpp
include/simgrid/s4u/forward.hpp
include/simgrid/simix.h
include/simgrid/simix.hpp
include/simgrid/simix/blocking_simcall.hpp
include/smpi/smpi.h
include/smpi/smpi_shared_malloc.hpp [deleted file]
include/surf/surf_routing.h
include/xbt/automaton.hpp
include/xbt/config.hpp
include/xbt/exception.hpp
include/xbt/functional.hpp
include/xbt/matrix.h [deleted file]
include/xbt/str.h
include/xbt/string.hpp
sonar-project.properties
src/bindings/java/jmsg.cpp
src/bindings/java/jmsg_as.cpp
src/bindings/java/jmsg_comm.cpp
src/bindings/java/jmsg_host.cpp
src/bindings/java/jmsg_process.cpp
src/bindings/java/jmsg_rngstream.cpp
src/bindings/java/jmsg_storage.cpp
src/bindings/java/jmsg_task.cpp
src/bindings/java/jmsg_vm.cpp
src/bindings/java/jxbt_utilities.cpp
src/bindings/java/org/simgrid/NativeLib.java
src/bindings/java/org/simgrid/msg/Process.java
src/bindings/java/org/simgrid/msg/Storage.java
src/bindings/java/org/simgrid/msg/Task.java
src/bindings/lua/lua_debug.cpp
src/bindings/lua/lua_host.cpp
src/bindings/lua/lua_platf.cpp
src/include/surf/maxmin.h
src/include/surf/surf.h
src/instr/instr_config.cpp
src/instr/instr_interface.cpp
src/instr/instr_paje_containers.cpp
src/instr/instr_paje_trace.cpp
src/instr/instr_paje_types.cpp
src/instr/instr_private.h
src/instr/instr_resource_utilization.cpp
src/instr/jedule/jedule.cpp
src/instr/jedule/jedule_events.cpp
src/instr/jedule/jedule_platform.cpp
src/instr/jedule/jedule_sd_binding.cpp
src/kernel/activity/ActivityImpl.cpp
src/kernel/activity/ActivityImpl.hpp
src/kernel/activity/CommImpl.cpp [moved from src/kernel/activity/SynchroComm.cpp with 68% similarity]
src/kernel/activity/CommImpl.hpp [new file with mode: 0644]
src/kernel/activity/ExecImpl.cpp [moved from src/kernel/activity/SynchroExec.cpp with 67% similarity]
src/kernel/activity/ExecImpl.hpp [new file with mode: 0644]
src/kernel/activity/MailboxImpl.cpp
src/kernel/activity/MailboxImpl.hpp
src/kernel/activity/SleepImpl.cpp [moved from src/kernel/activity/SynchroSleep.cpp with 80% similarity]
src/kernel/activity/SleepImpl.hpp [moved from src/kernel/activity/SynchroSleep.hpp with 56% similarity]
src/kernel/activity/SynchroComm.hpp [deleted file]
src/kernel/activity/SynchroExec.hpp [deleted file]
src/kernel/context/Context.cpp
src/kernel/context/ContextBoost.cpp
src/kernel/context/ContextRaw.cpp
src/kernel/context/ContextThread.cpp
src/kernel/routing/ClusterZone.cpp
src/kernel/routing/DijkstraZone.cpp
src/kernel/routing/FatTreeZone.cpp
src/kernel/routing/FloydZone.cpp
src/kernel/routing/FullZone.cpp
src/kernel/routing/NetPoint.cpp
src/kernel/routing/NetZoneImpl.cpp
src/kernel/routing/RoutedZone.cpp
src/kernel/routing/TorusZone.cpp
src/kernel/routing/VivaldiZone.cpp
src/mc/AddressSpace.cpp [deleted file]
src/mc/AddressSpace.hpp
src/mc/ChunkedData.cpp
src/mc/ChunkedData.hpp
src/mc/DwarfExpression.cpp
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/ObjectInformation.hpp
src/mc/PageStore.cpp
src/mc/PageStore.hpp
src/mc/Process.cpp
src/mc/Process.hpp
src/mc/RegionSnapshot.hpp
src/mc/Session.cpp
src/mc/Session.hpp
src/mc/Type.hpp
src/mc/Variable.cpp [deleted file]
src/mc/Variable.hpp
src/mc/VisitedState.cpp
src/mc/checker/CommunicationDeterminismChecker.cpp
src/mc/checker/CommunicationDeterminismChecker.hpp
src/mc/checker/LivenessChecker.cpp
src/mc/checker/LivenessChecker.hpp
src/mc/checker/SafetyChecker.cpp
src/mc/checker/SafetyChecker.hpp
src/mc/checker/simgrid_mc.cpp
src/mc/compare.cpp
src/mc/mc_base.cpp
src/mc/mc_base.h
src/mc/mc_checkpoint.cpp
src/mc/mc_client_api.cpp
src/mc/mc_comm_pattern.cpp
src/mc/mc_comm_pattern.h
src/mc/mc_config.cpp
src/mc/mc_dwarf.cpp
src/mc/mc_dwarf.hpp
src/mc/mc_dwarf_attrnames.cpp
src/mc/mc_dwarf_tagnames.cpp
src/mc/mc_global.cpp
src/mc/mc_hash.cpp
src/mc/mc_hash.hpp
src/mc/mc_ignore.h
src/mc/mc_memory.cpp
src/mc/mc_mmu.h
src/mc/mc_private.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.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_xbt.cpp
src/mc/mc_xbt.hpp
src/mc/remote/Client.cpp
src/mc/remote/Client.hpp
src/mc/remote/RemotePtr.hpp
src/msg/instr_msg_task.cpp
src/msg/msg_actions.cpp
src/msg/msg_global.cpp
src/msg/msg_gos.cpp
src/msg/msg_io.cpp
src/msg/msg_private.h
src/msg/msg_process.cpp
src/msg/msg_vm.cpp
src/plugins/vm/VirtualMachineImpl.cpp
src/plugins/vm/VmHostExt.cpp
src/s4u/s4u_actor.cpp
src/s4u/s4u_comm.cpp
src/s4u/s4u_engine.cpp
src/s4u/s4u_host.cpp
src/s4u/s4u_mailbox.cpp
src/s4u/s4u_storage.cpp
src/simdag/dax_dtd.c
src/simdag/sd_daxloader.cpp
src/simdag/sd_dotloader.cpp
src/simdag/sd_global.cpp
src/simdag/sd_task.cpp
src/simgrid/host.cpp
src/simgrid/sg_config.cpp
src/simix/ActorImpl.cpp
src/simix/ActorImpl.hpp
src/simix/libsmx.cpp
src/simix/popping.cpp
src/simix/popping_accessors.h
src/simix/popping_bodies.cpp
src/simix/popping_enum.h
src/simix/popping_generated.cpp
src/simix/simcalls.py
src/simix/smx_context.cpp
src/simix/smx_deployment.cpp
src/simix/smx_global.cpp
src/simix/smx_host.cpp
src/simix/smx_host_private.h
src/simix/smx_network.cpp
src/simix/smx_synchro.cpp
src/simix/smx_synchro_private.h
src/smpi/SmpiHost.cpp
src/smpi/colls/allgather/allgather-2dmesh.cpp
src/smpi/colls/allgather/allgather-3dmesh.cpp
src/smpi/colls/allgather/allgather-SMP-NTS.cpp
src/smpi/colls/allgather/allgather-bruck.cpp
src/smpi/colls/allgather/allgather-loosely-lr.cpp
src/smpi/colls/allgather/allgather-mvapich-smp.cpp
src/smpi/colls/allgather/allgather-ompi-neighborexchange.cpp
src/smpi/colls/allgather/allgather-rhv.cpp
src/smpi/colls/allgather/allgather-spreading-simple.cpp
src/smpi/colls/allgatherv/allgatherv-GB.cpp
src/smpi/colls/allgatherv/allgatherv-mpich-ring.cpp
src/smpi/colls/allreduce/allreduce-lr.cpp
src/smpi/colls/allreduce/allreduce-smp-rsag-lr.cpp
src/smpi/colls/allreduce/allreduce-smp-rsag.cpp
src/smpi/colls/alltoall/alltoall-2dmesh.cpp
src/smpi/colls/alltoall/alltoall-3dmesh.cpp
src/smpi/colls/alltoall/alltoall-pair.cpp
src/smpi/colls/alltoallv/alltoallv-pair.cpp
src/smpi/colls/alltoallv/alltoallv-ring.cpp
src/smpi/colls/barrier/barrier-ompi.cpp
src/smpi/colls/bcast/bcast-NTSB.cpp
src/smpi/colls/bcast/bcast-NTSL-Isend.cpp
src/smpi/colls/bcast/bcast-SMP-binary.cpp
src/smpi/colls/bcast/bcast-SMP-linear.cpp
src/smpi/colls/bcast/bcast-arrival-pattern-aware-wait.cpp
src/smpi/colls/bcast/bcast-arrival-pattern-aware.cpp
src/smpi/colls/bcast/bcast-mvapich-smp.cpp
src/smpi/colls/bcast/bcast-ompi-split-bintree.cpp
src/smpi/colls/bcast/bcast-scatter-rdb-allgather.cpp
src/smpi/colls/coll_tuned_topo.cpp
src/smpi/colls/coll_tuned_topo.h
src/smpi/colls/gather/gather-mvapich.cpp
src/smpi/colls/gather/gather-ompi.cpp
src/smpi/colls/reduce/reduce-NTSL.cpp
src/smpi/colls/reduce/reduce-arrival-pattern-aware.cpp
src/smpi/colls/reduce/reduce-binomial.cpp
src/smpi/colls/reduce/reduce-mvapich-two-level.cpp
src/smpi/colls/reduce/reduce-ompi.cpp
src/smpi/colls/reduce/reduce-scatter-gather.cpp
src/smpi/colls/reduce_scatter/reduce_scatter-mpich.cpp
src/smpi/colls/reduce_scatter/reduce_scatter-ompi.cpp
src/smpi/colls/scatter/scatter-mvapich-two-level.cpp
src/smpi/colls/scatter/scatter-ompi.cpp
src/smpi/colls/smpi_automatic_selector.cpp
src/smpi/colls/smpi_default_selector.cpp
src/smpi/colls/smpi_mpich_selector.cpp
src/smpi/colls/smpi_mvapich2_selector.cpp
src/smpi/colls/smpi_openmpi_selector.cpp
src/smpi/instr_smpi.cpp
src/smpi/smpi_coll.cpp
src/smpi/smpi_comm.cpp
src/smpi/smpi_datatype.cpp
src/smpi/smpi_datatype_derived.cpp
src/smpi/smpi_deployment.cpp
src/smpi/smpi_global.cpp
src/smpi/smpi_group.cpp
src/smpi/smpi_group.hpp
src/smpi/smpi_info.cpp
src/smpi/smpi_keyvals.hpp
src/smpi/smpi_memory.cpp
src/smpi/smpi_op.cpp
src/smpi/smpi_pmpi.cpp
src/smpi/smpi_process.cpp
src/smpi/smpi_process.hpp
src/smpi/smpi_replay.cpp
src/smpi/smpi_request.cpp
src/smpi/smpi_request.hpp
src/smpi/smpi_shared.cpp
src/smpi/smpi_static_variables.cpp
src/smpi/smpi_win.cpp
src/smpi/smpif90.in
src/smpi/smpiff.in
src/surf/HostImpl.cpp
src/surf/HostImpl.hpp
src/surf/PropertyHolder.cpp
src/surf/StorageImpl.cpp [moved from src/surf/storage_interface.cpp with 67% similarity]
src/surf/StorageImpl.hpp [moved from src/surf/storage_interface.hpp with 66% similarity]
src/surf/cpu_cas01.cpp
src/surf/cpu_ti.cpp
src/surf/cpu_ti.hpp
src/surf/fair_bottleneck.cpp
src/surf/host_clm03.hpp
src/surf/instr_routing.cpp
src/surf/instr_surf.cpp
src/surf/lagrange.cpp
src/surf/maxmin.cpp
src/surf/maxmin_private.hpp
src/surf/network_cm02.cpp
src/surf/network_cm02.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/ns3/ns3_interface.h
src/surf/plugins/host_energy.cpp
src/surf/ptask_L07.cpp
src/surf/sg_platf.cpp
src/surf/storage_n11.cpp
src/surf/storage_n11.hpp
src/surf/surf_c_bindings.cpp
src/surf/surf_interface.cpp
src/surf/surf_interface.hpp
src/surf/trace_mgr.cpp
src/surf/trace_mgr.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/automaton/automaton.c
src/xbt/automaton/automaton_lexer.yy.c
src/xbt/automaton/automatonparse_promela.c
src/xbt/backtrace_linux.cpp
src/xbt/config.cpp
src/xbt/cunit.cpp
src/xbt/dict.cpp
src/xbt/dict_cursor.c
src/xbt/dynar.cpp
src/xbt/ex.cpp
src/xbt/log.c
src/xbt/memory_map.cpp
src/xbt/mmalloc/mfree.c
src/xbt/mmalloc/mm_module.c
src/xbt/parmap.cpp
src/xbt/xbt_log_layout_format.c
src/xbt/xbt_log_layout_simple.c
src/xbt/xbt_main.cpp
src/xbt/xbt_matrix.c [deleted file]
src/xbt/xbt_os_thread.c
src/xbt/xbt_replay.cpp
src/xbt/xbt_str.cpp
teshsuite/java/CMakeLists.txt
teshsuite/java/semaphoreGC/SemaphoreGC.java [moved from teshsuite/java/SemaphoreGC/SemaphoreGC.java with 82% similarity]
teshsuite/java/semaphoreGC/semaphoreGC.tesh [moved from teshsuite/java/SemaphoreGC/SemaphoreGC.tesh with 86% similarity]
teshsuite/java/sleepHostOff/SleepHostOff.java [moved from teshsuite/java/SleepHostOff/SleepHostOff.java with 88% similarity]
teshsuite/java/sleepHostOff/sleepHostOff.tesh [moved from teshsuite/java/SleepHostOff/SleepHostOff.tesh with 93% similarity]
teshsuite/mc/dwarf/dwarf.cpp
teshsuite/msg/host_on_off/host_on_off.c
teshsuite/msg/task_destroy_cancel/task_destroy_cancel.cpp
teshsuite/s4u/listen_async/listen_async.cpp
teshsuite/s4u/listen_async/listen_async.tesh
teshsuite/s4u/storage_client_server/storage_client_server.cpp
teshsuite/simdag/flatifier/flatifier.cpp
teshsuite/simdag/is-router/is-router.cpp
teshsuite/smpi/isp/umpire/CMakeLists.txt
teshsuite/smpi/privatization/privatization.tesh
teshsuite/surf/maxmin_bench/maxmin_bench.cpp
teshsuite/xbt/mmalloc/mmalloc_test.cpp
tools/cmake/DefinePackages.cmake
tools/cmake/GCCFlags.cmake
tools/cmake/MaintainerMode.cmake
tools/cmake/MakeLib.cmake
tools/cmake/Tests.cmake
tools/cmake/test_prog/prog_stackgrowth.c
tools/fix-paje-trace.sh
tools/git-hooks/clang-format.pre-commit
tools/internal/travis-sonarqube.sh
tools/jenkins/Coverage.sh
tools/jenkins/DynamicAnalysis.sh
tools/jenkins/DynamicAnalysis_description.sh
tools/jenkins/Flags.sh
tools/jenkins/Sanitizers.sh
tools/jenkins/build.sh
tools/sg_xml_unit_converter.py
tools/simgrid.supp
tools/tesh/tesh.py

index 72d470e..e1ae3f1 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Build logs: https://ci.appveyor.com/project/simgrid/simgrid
 
-# Documentation: https://www.appveyor.com/docs/
+# Documentation: https://www.appveyor.com/docs/
 #                https://www.appveyor.com/docs/installed-software/
 
 os: Visual Studio 2015
index 725236b..c5eea27 100644 (file)
@@ -173,7 +173,6 @@ examples/msg/mc/test/snapshot_comparison4
 examples/msg/mc/test/snapshot_comparison5
 examples/msg/ms.trace
 examples/msg/network-ns3/network-ns3
-examples/msg/app-pmm/app-pmm
 examples/msg/task-priority/task-priority
 examples/msg/procmig.trace
 examples/msg/platform-properties/platform-properties
@@ -242,8 +241,8 @@ examples/smpi/trace_simple/smpi_trace_simple
 examples/smpi/trace_call_location/smpi_trace_call_location
 testall
 teshsuite/datadesc_usage.out
-teshsuite/java/SemaphoreGC/SemaphoreGC_compiled
-teshsuite/java/SleepHostOff/SleepHostOff_compiled
+teshsuite/java/semaphoreGC/semaphoreGC_compiled
+teshsuite/java/sleepHostOff/sleepHostOff_compiled
 teshsuite/mc/dwarf/dwarf
 teshsuite/mc/dwarf-expression/dwarf-expression
 teshsuite/mc/random-bug/random-bug
index 5f89b91..b53e23e 100644 (file)
@@ -47,14 +47,12 @@ addons:
 #   - ls -lR $TRAVIS_BUILD_DIR/LuaInstall
 
 script:
-   - test "$TRAVIS_OS_NAME" == "osx"   && brew update
-   - test "$TRAVIS_OS_NAME" == "osx"   && brew install python3
-   - test "$TRAVIS_OS_NAME" == "osx"   && cmake -Denable_model-checking=OFF -Denable_documentation=OFF -Denable_coverage=ON -Denable_java=ON -Denable_lua=OFF -Denable_compile_optimizations=ON -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=OFF -Denable_compile_warnings=ON .
-   - test "$TRAVIS_OS_NAME" == "linux" && cmake -Denable_model-checking=ON  -Denable_documentation=OFF -Denable_coverage=ON -Denable_java=ON -Denable_lua=OFF -Denable_compile_optimizations=ON -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=OFF -Denable_compile_warnings=ON .
-   # run make in the sonar wrapper && run the tests before sonar to get coverage info
-   - ./tools/internal/travis-sonarqube.sh make VERBOSE=1
-   # if sonar was not run (and if the build succeeded), run the tests manually
-   - if [[ "$TRAVIS_OS_NAME" == "osx" && -e bin/graphicator ]]; then ctest --output-on-failure --timeout 100 ; fi
+   - if [[ "$TRAVIS_OS_NAME" == "osx"   ]]; then brew update; fi
+   - if [[ "$TRAVIS_OS_NAME" == "osx"   ]]; then brew install python3; fi
+   - if [[ "$TRAVIS_OS_NAME" == "osx"   ]]; then cmake -Denable_model-checking=OFF -Denable_documentation=OFF -Denable_coverage=ON -Denable_java=ON -Denable_lua=OFF -Denable_compile_optimizations=ON -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=OFF -Denable_compile_warnings=ON .; fi
+   - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then cmake -Denable_model-checking=ON  -Denable_documentation=OFF -Denable_coverage=ON -Denable_java=ON -Denable_lua=OFF -Denable_compile_optimizations=ON -Denable_smpi=ON -Denable_smpi_MPICH3_testsuite=OFF -Denable_compile_warnings=ON .; fi
+   # run make and ctest in the sonar wrapper on master/linux; run it directly in PR or OSX
+   - if [[ "$TRAVIS_OS_NAME" == "linux" ]] && [[ "${TRAVIS_PULL_REQUEST}" == "false" ]]; then ./tools/internal/travis-sonarqube.sh make VERBOSE=1; else make VERBOSE=1 && ctest --output-on-failure --timeout 100; fi
 notifications:
   recipients:
     - martin.quinson@ens-rennes.fr
index d99da0d..8fede4c 100644 (file)
@@ -60,6 +60,9 @@ if(APPLE AND (CMAKE_C_COMPILER_VERSION VERSION_LESS "4.6"))
   set(HAVE_UCONTEXT_H 0)
 endif()
 
+### Check threading support
+set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
+find_package(Threads)
 
 ### Setup Options
 include(${CMAKE_HOME_DIRECTORY}/tools/cmake/Option.cmake)
@@ -77,8 +80,21 @@ if ((NOT DEFINED enable_smpi) OR enable_smpi)
   
   if(CMAKE_Fortran_COMPILER)
     # Fortran compiler detected: save it, then replace by smpiff
-    set(SAVED_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
+    set(SMPI_Fortran_COMPILER "${CMAKE_Fortran_COMPILER}" CACHE FILEPATH "The real Fortran compiler")
     set(CMAKE_Fortran_COMPILER smpiff)
+
+       # Set flags/libs to be used in smpiff
+    if(CMAKE_Fortran_COMPILER_ID MATCHES "GNU")
+      set(SMPI_Fortran_FLAGS "\"-fpic\" \"-ff2c\" \"-fno-second-underscore\"")
+      set(SMPI_Fortran_LIBS "\"-lgfortran\"")
+    elseif(CMAKE_Fortran_COMPILER_ID MATCHES "Intel")
+      set(SMPI_Fortran_FLAGS "\"-fPIC\" \"-nofor-main\"")
+      set(SMPI_Fortran_LIBS "\"-lifcore\"")
+    elseif(CMAKE_Fortran_COMPILER_ID MATCHES "PGI") # flang
+      set(SMPI_Fortran_FLAGS "\"-fPIC\"")
+      set(SMPI_Fortran_LIBS "")
+    endif()
+
     set(SMPI_FORTRAN 1)
   endif(CMAKE_Fortran_COMPILER)
 
@@ -274,7 +290,6 @@ endif()
 # Checks for header libraries functions.
 CHECK_LIBRARY_EXISTS(rt      clock_gettime           "" HAVE_POSIX_GETTIME)
 
-CHECK_LIBRARY_EXISTS(pthread pthread_create          "" HAVE_PTHREAD)
 if(NOT APPLE) # OS X El Capitan deprecates this function
   CHECK_LIBRARY_EXISTS(pthread sem_init                "" HAVE_SEM_INIT_LIB)
 endif()
@@ -388,7 +403,7 @@ if(HAVE_LIBUNWIND)
   endif()
 else()
   if(enable_model-checking)
-    message(FATAL_ERROR "Please either install the libunwind7-dev package (or equivalent) or turn off the model-checking option of SimGrid.")
+    message(FATAL_ERROR "Please install libunwind-dev libdw-dev libevent-dev if you want to compile the SimGrid model checker.")
   endif()
 endif()
 
@@ -460,7 +475,7 @@ endif()
 ### Initialize of CONTEXT THREADS
 
 set(HAVE_THREAD_CONTEXTS 0)
-if(HAVE_PTHREAD)
+if(CMAKE_USE_PTHREADS_INIT)
   ### Test that we have a way to create semaphores
 
   if(HAVE_SEM_OPEN_LIB)
@@ -941,7 +956,7 @@ else()
 endif()
 endif()
 if(CMAKE_Fortran_COMPILER)
-  message("        Compiler: Fortran ...........: ${SAVED_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
+  message("        Compiler: Fortran ...........: ${SMPI_Fortran_COMPILER} (id: ${CMAKE_Fortran_COMPILER_ID})")
   message("                version .............: ${CMAKE_Fortran_COMPILER_VERSION}")
 endif()
 message("        Linker: .....................: ${CMAKE_LINKER}")
index 6ca3d3e..449c17d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,13 +5,18 @@ SimGrid (3.16) UNRELEASED
   - Mac, BSD: dlopen+thread broken, switch automatically to raw contexts.
 
  XML platforms: Switch to platform v4.1 format.
- * This is a backward compatible change: v4 are valid v4.1 files
+ * This is (mainly) a backward compatible change: v4 are valid v4.1 files
    - <zone> can be used as a synonym for the now deprecated <as>
    - <zoneZoute> an be used as a synonym for the now deprecated <asroute>
    - <bypassZoneRoute> an be used as a synonym for the now deprecated <bypassAsRoute>
    - <actor> can be used as a synonym for the now deprecated <process>
    - state_file and avail_file periodicity is now easier to express
      (check the documentation) the old behavior should still work.
+ * Storage: not backward compatible, but it seems that nobody ever used it
+   - Remove attribute 'content_type' of <storage_type>: was never used
+   - Make attribute 'model' of <storage_type> optional: for future usage
+   - Remove Bconnection model property: was never (in)validated. Replaced by
+      the maximum of the read and write bandwidth as a resource constraint. 
 
  SimDag
   - New and Backwards Compatibility break: 
@@ -27,12 +32,14 @@ SimGrid (3.16) UNRELEASED
  SMPI
   - New algorithm to privatize globals: dlopen, with dynamic loading tricks
   - New option: smpi/keep-temps to not cleanup temp files
+  - Support for sparse privatized malloc with SMPI_PARTIAL_SHARED_MALLOC()
 
  XBT
   - Replay: New function xbt_replay_action_get():
     Retrieve the function previously associated to an event type.
   - DROPPED FUNCTION: xbt_str_varsubst()
   - DROPPED MODULE: strbuff. We don't need it anymore.
+  - DROPPED MODULE: matrix. We don't need it anymore.
 
  -- Release target: June 21 2017   -- Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>
 
diff --git a/README b/README
deleted file mode 100644 (file)
index 1b62155..0000000
--- a/README
+++ /dev/null
@@ -1,26 +0,0 @@
-
-Welcome to the SimGrid project!
-
-SimGrid is a scientific instrument to study the behavior of 
-large-scale distributed systems such as Grids, Clouds, HPC or P2P
-systems. It can be used to evaluate heuristics, prototype applications 
-or even assess legacy MPI applications.
-
-More documentation is included in this archive (doc/html/index.html)
-or online at http://simgrid.gforge.inria.fr/ 
-
-In any case, you may want to subscribe to the user mailing list 
-(http://lists.gforge.inria.fr/mailman/listinfo/simgrid-user). There,
-you can find answers to your questions, or simply discuss with people
-doing the same kind of research than you do, in an active and friendly
-community.
-
-Thanks for using our software. Please do great things with it and tell
-the world about it. Tell us, too, because we love to have positive
-feedback.
-
-Cheers,
-Da SimGrid Team.
-
-
-https://travis-ci.org/simgrid/simgrid.svg?branch=master
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..dc87a47
--- /dev/null
+++ b/README.md
@@ -0,0 +1,31 @@
+[![Travis Status](https://travis-ci.org/simgrid/simgrid.svg?branch=master)](https://travis-ci.org/simgrid/simgrid)
+[![AppVeyor Status](https://ci.appveyor.com/api/projects/status/gvcssh340fwtoc35?svg=true)](https://ci.appveyor.com/project/mquinson/simgrid)
+[![Codacy Badge](https://api.codacy.com/project/badge/Grade/bf1bdba50440485fbda2ac19f462ccc7)](https://www.codacy.com/app/mquinson/simgrid?utm_source=github.com&amp)
+[![Doc](https://readthedocs.org/projects/pip/badge/?version=stable)](http://simgrid.gforge.inria.fr/simgrid/latest/doc/)
+[![License: LGPL v3][license-badge]](COPYING)
+
+# Welcome to the SimGrid project!
+
+SimGrid is a scientific instrument to study the behavior of 
+large-scale distributed systems such as Grids, Clouds, HPC or P2P
+systems. It can be used to evaluate heuristics, prototype applications 
+or even assess legacy MPI applications.
+
+More documentation is included in this archive (doc/html/index.html)
+or [online](http://simgrid.gforge.inria.fr/)
+
+In any case, you may want to subscribe to the [user mailing list](http://lists.gforge.inria.fr/mailman/listinfo/simgrid-user). 
+There, you can find answers to your questions, or simply discuss with
+people doing the same kind of research than you do, in an active and
+friendly community.
+
+Thanks for using our software. Please do great things with it and tell
+the world about it. Tell us, too, because we love to have positive
+feedback.
+
+Cheers,
+Da SimGrid Team.
+
+[license-badge]: https://img.shields.io/badge/License-LGPL%20v3-blue.svg
+[release-badge]: https://img.shields.io/github/release/simgrid/simgrid.svg
+[release-link]:  https://gforge.inria.fr/frs/?group_id=12
index 3faf143..253cfa2 100644 (file)
@@ -1,6 +1,6 @@
 # This is the configuration file for the https://circleci.com/ continuous integration server
 #
-# Copyright (C) 2017. The SimGrid team. All rights reserved.
+# Copyright (C) 2017. 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.
index 5022462..c91fa55 100644 (file)
@@ -43,7 +43,7 @@ cmake . -Denable_ns3=ON -DNS3_HINT=/opt/ns3 # or change the path if needed
 
 By the end of the configuration, cmake reports whether ns-3 was found,
 and this information is also available in <tt>include/simgrid_config.h</tt>
-If your local copy defines the variable \c SIMGRID_HAVE_NS3 to 1, then NS3
+If your local copy defines the variable \c SIMGRID_HAVE_NS3 to 1, then ns-3
 was correctly detected. If it's defined to 0, then something went
 wrong. Explore <tt>CMakeFiles/CMakeOutput.log</tt> and
 <tt>CMakeFiles/CMakeError.log</tt> to diagnose the problem.
@@ -54,17 +54,6 @@ Afterward, you can test your installation as follows:
 $ ctest -R ns3
 \endverbatim
 
-\subsection pls_ns3_config_trouble Troubleshooting
-
-If you have a ns-3 version that is not known to SimGrid yet, edit \c
-tools/cmake/Modules/FindNS3.cmake in your SimGrid tree, according to
-the comments on top of this file.
-
-If the compilation fails on Debian/Ubuntu when linking the library
-because of some .a file that cannot be used dynamically, then you are
-probably using a very old (and buggy) <tt>libns3-dev</tt>
-package. Update it, or install <tt>libns3-3</tt> manually.
-
 \section pls_ns3_use Using ns-3 from SimGrid
 
 The SimGrid-ns3 binding only contains features that are common to both
@@ -72,26 +61,66 @@ systems: ns-3 wireless models are not available, while SimGrid routes
 cannot be longer than 1. Also, the platform built in ns-3 from the
 SimGrid description is very basic.
 
-If your platform have longer routes, simply add some routers to break
-these routes. SimGrid's routers are similar to hosts, without
-computational abilities.
+Any route longer than one will be ignored when using ns-3. They are
+harmless, but you still need to connect your hosts using one-hop routes.
+The best solution is to add routers to split your route. Here is an
+example of invalid platform:
+
+@code{.xml}
+<platform>
+  <host id="alice" speed="1Gf" />
+  <host id="bob"   speed="1Gf" />
+  
+  <link id="l1" bw="1Mbps" />
+  <link id="l2" bw="1Mbps" />
+
+  <route src="alice" dst="bob">
+    <link_ctn id="l1"/> <!-- INVALID WITH NS-3 -->
+    <link_ctn id="l2"/> <!-- length=2 IS TOO MUCH -->
+  </route>
+</platform>
+@endcode
+  
+Here is the same platform expressed in a way that ns-3 will understand.
+There is no direct connexion from alice to bob, but that's OK because
+ns-3 will find the path from point to point.
+
+@code{.xml}
+<platform>
+  <host id="alice" speed="1Gf" />
+  <host id="bob"   speed="1Gf" />
+
+  <router id="r1" /> <!-- routers are compute-less hosts -->
+
+  <link id="l1" bw="1Mbps" />
+  <link id="l2" bw="1Mbps" />
+
+  <route src="alice" dst="r1">
+    <link_ctn id="l1"/> 
+  </route>
+  
+  <route src="r1" dst="bob">
+    <link_ctn id="l2"/> 
+  </route>
+</platform>
+@endcode
 
-Once your platform is OK, just change the "network/model"
-configuration option to "NS3". The rest remains unchanged.
 
-The following should work from the examples/msg/network-ns3 folder,
-where the \c network-ns3 binary example lives. 
+Once your platform is OK, just change the "network/model"
+configuration option to "NS3" as follows. The rest remains unchanged.
 
 \verbatim
-./network-ns3 ../../platforms/small_platform_one_link_routes.xml 3hosts_2links_d.xml --cfg=network/model:NS3 --log=root.threshold:info
+./network-ns3 ../../platforms/small_platform_one_link_routes.xml 3hosts_2links_d.xml --cfg=network/model:NS3
 \endverbatim
 
 Many other files from the examples/platform directory are usable with
-the ns-3 model. Check the file
+the ns-3 model, such as @ref examples/platforms/dogbone.xml. Check the file
 examples/msg/network-ns3/network-ns3.tesh to see which ones are used
 in our regression tests. You may also be interested in the
 @ref msg_ex_ns3 "ns-3/SimGrid examples".
 
+@subsection pls_ns3_shortcomings Shortcomings of the ns-3 bindings in SimGrid
+
 A ns-3 platform is automatically created from the provided SimGrid
 platform. However, there are some known caveats:
 
@@ -115,4 +144,33 @@ readable) as possible. If the current state does not fit your needs,
 you should modify this plugin, and/or create your own plugin from the
 existing one.
 
+@section pls_trouble Troubleshooting with ns-3 and SimGrid
+
+@subsection pls_ns3_config_trouble I fail to compile ns-3 within SimGrid
+
+If you have a ns-3 version that is not known to SimGrid yet, edit \c
+tools/cmake/Modules/FindNS3.cmake in your SimGrid tree, according to
+the comments on top of this file.
+
+If the compilation fails on Debian/Ubuntu when linking the library
+because of some .a file that cannot be used dynamically, then you are
+probably using a very old (and buggy) <tt>libns3-dev</tt>
+package. Update it, or install <tt>libns3-3</tt> manually.
+
+@subsection pls_trouble_hang The simulation hangs at some point
+
+If your simulation hangs in a communication, this is probably because
+one host is sending data that is not routable in your platform. Make
+sure that you only use routes of length 1, and that any host is
+connected to the platform.
+
+Arguably, SimGrid could detect this situation and report it, but
+unfortunately, this is still to be done.
+
+@subsection pls_trouble_warning I get a warning that some routes are ignored
+
+Please read again the @ref pls_ns3_use section.
+
+
+@example examples/platforms/dogbone.xml
 */
index d75d27e..3fad32c 100644 (file)
@@ -1110,11 +1110,42 @@ returns a new adress, but it only points to a shadow bloc: its memory
 area is mapped on a 1MiB file on disk. If the returned bloc is of size
 N MiB, then the same file is mapped N times to cover the whole bloc. 
 At the end, no matter how many SMPI_SHARED_MALLOC you do, this will
-only consume 1 MiB in memory.
+only consume 1 MiB in memory. 
 
 You can disable this behavior and come back to regular mallocs (for
 example for debugging purposes) using \c "no" as a value.
 
+If you want to keep private some parts of the buffer, for instance if these
+parts are used by the application logic and should not be corrupted, you
+can use SMPI_PARTIAL_SHARED_MALLOC(size, offsets, offsets_count).
+
+As an example,
+
+\code{.C}
+    mem = SMPI_PARTIAL_SHARED_MALLOC(500, {27,42 , 100,200}, 2);
+\endcode
+
+will allocate 500 bytes to mem, such that mem[27..41] and mem[100..199]
+are shared and other area remain private.
+
+Then, it can be deallocated by calling SMPI_SHARED_FREE(mem).
+
+When smpi/shared-malloc:global is used, the memory consumption problem
+is solved, but it may induce too much load on the kernel's pages table. 
+In this case, you should use huge pages so that we create only one
+entry per Mb of malloced data instead of one entry per 4k.
+To activate this, you must mount a hugetlbfs on your system and allocate
+at least one huge page:
+
+\code{.sh}
+    mkdir /home/huge
+    sudo mount none /home/huge -t hugetlbfs -o rw,mode=0777
+    sudo sh -c 'echo 1 > /proc/sys/vm/nr_hugepages' # echo more if you need more
+\endcode
+
+Then, you can pass the option --cfg=smpi/shared-malloc-hugepage:/home/huge
+to smpirun to actually activate the huge page support in shared mallocs.
+
 \subsection options_model_smpi_wtime smpi/wtime: Inject constant times for calls to MPI_Wtime
 
 \b Default value: 0
@@ -1273,6 +1304,7 @@ It can be done by using XBT. Go to \ref XBT_log for more details.
 - \c smpi/privatization: \ref options_smpi_privatization
 - \c smpi/send-is-detached-thresh: \ref options_model_smpi_detached
 - \c smpi/shared-malloc: \ref options_model_smpi_shared_malloc
+- \c smpi/shared-malloc-hugepage: \ref options_model_smpi_shared_malloc
 - \c smpi/simulate-computation: \ref options_smpi_bench
 - \c smpi/test: \ref options_model_smpi_test
 - \c smpi/wtime: \ref options_model_smpi_wtime
index 89ee5f6..1ef202b 100644 (file)
@@ -682,10 +682,9 @@ these might also help you to get started.
 Attribute name  | Mandatory | Values | Description
 --------------- | --------- | ------ | -----------
 id              | yes       | string | Identifier of this storage_type; used when referring to it
-model           | yes       | string | For reasons of future backwards compatibility only; specifies the name of the model for the storage that should be used
+model           | no        | string | In the future, this will allow to change the performance model to use
 size            | yes       | string | Specifies the amount of available storage space; you can specify storage like "500GiB" or "500GB" if you want. (TODO add a link to all the available abbreviations)
 content         | yes       | string | Path to a \ref pf_storage_content_file "Storage Content File" on your system. This file must exist.
-content_type    | no        | ("txt_unix"\|"txt_win") | Determines which kind of filesystem you're using; make sure the filenames (stored in that file, see \ref pf_storage_content_file_structure "Storage Content File Structure"!)
 
 This tag must contain some predefined model properties, specified via the &lt;model_prop&gt; tag. Here is a list,
 see below for an example:
@@ -694,7 +693,6 @@ Property id     | Mandatory | Values | Description
 --------------- | --------- | ------ | -----------
 Bwrite          | yes       | string | Bandwidth for write access; in B/s (but you can also specify e.g. "30MBps")
 Bread           | yes       | string | Bandwidth for read access; in B/s (but you can also specify e.g. "30MBps")
-Bconnexion      | yes       | string | Throughput (of the storage connector) in B/s.
 
 \note
      A storage_type can also contain the <b>&lt;prop&gt;</b> tag. The &lt;prop&gt; tag allows you
@@ -704,10 +702,9 @@ Bconnexion      | yes       | string | Throughput (of the storage connector) in
 
 Here is a complete example for the ``storage_type`` tag:
 \verbatim
-<storage_type id="single_HDD" model="linear_no_lat" size="4000" content_type="txt_unix">
+<storage_type id="single_HDD" size="4000">
   <model_prop id="Bwrite" value="30MBps" />
   <model_prop id="Bread" value="100MBps" />
-  <model_prop id="Bconnection" value="150MBps" />
   <prop id="Brand" value="Western Digital" />
 </storage_type>
 \endverbatim
@@ -720,7 +717,6 @@ id             | yes       | string | Identifier of this ``storage``; used when
 typeId         | yes       | string | Here you need to refer to an already existing \ref pf_storage_entity_storage_type "\<storage_type\>"; the storage entity defined by this tag will then inherit the properties defined there.
 attach         | yes       | string | Name of a host (see Section \ref pf_host) to which this storage is <i>physically</i> attached to (e.g., a hard drive in a computer)
 content        | no        | string | When specified, overwrites the content attribute of \ref pf_storage_entity_storage_type "\<storage_type\>"
-content_type   | no        | string | When specified, overwrites the content_type attribute of \ref pf_storage_entity_storage_type "\<storage_type\>"
 
 Here are two examples:
 
@@ -728,8 +724,7 @@ Here are two examples:
      <storage id="Disk1" typeId="single_HDD" attach="bob" />
 
      <storage id="Disk2" typeId="single_SSD"
-              content="content/win_storage_content.txt"
-              content_type="txt_windows" attach="alice" />
+              content="content/win_storage_content.txt" />
 \endverbatim
 
 The first example is straightforward: A disk is defined and called "Disk1"; it is
@@ -754,18 +749,17 @@ is; this location is specified by the ``name`` attribute.
 Here is a simple example, taken from the file ``examples/platform/storage.xml``:
 
 \verbatim
-    <storage_type id="single_SSD" model="linear_no_lat" size="500GiB">
+    <storage_type id="single_SSD" size="500GiB">
        <model_prop id="Bwrite" value="60MBps" />
        <model_prop id="Bread" value="200MBps" />
-       <model_prop id="Bconnection" value="220MBps" />
     </storage_type>
 
     <storage id="Disk2" typeId="single_SSD"
               content="content/win_storage_content.txt"
-              content_type="txt_windows" attach="alice" />
+              attach="alice" />
     <storage id="Disk4" typeId="single_SSD"
              content="content/small_content.txt"
-             content_type="txt_unix" attach="denise"/>
+             attach="denise"/>
 
     <host id="alice" speed="1Gf">
       <mount storageId="Disk2" name="c:"/>
index 7d9130c..0a9ef6c 100755 (executable)
@@ -22,7 +22,7 @@ they produce the expected output and return the expected value.
   --setenv var=value  : set a specific environment variable
   --cfg arg           : add parameter --cfg=arg to each command line
   --log arg           : add parameter --log=arg to each command line
-  --ignore-jenkins    : ignore all cruft generated on SimGrid
+  --ignore-jenkins    : ignore all cruft generated on SimGrid
                         continuous integration servers
 
 
index 3a2e19e..94d0a68 100644 (file)
@@ -216,7 +216,7 @@ public class Peer extends Process {
     return success;
   }
 
-  void handleMessage(Task task) {
+  private void handleMessage(Task task) {
     MessageTask message = (MessageTask)task;
     Connection remotePeer = peers.get(message.peerId);
     switch (message.type) {
@@ -332,7 +332,7 @@ public class Peer extends Process {
     beginReceiveTime = Msg.getClock();
   }
 
-  void waitForPieces() {
+  private void waitForPieces() {
     boolean finished = false;
     while (Msg.getClock() < deadline && !finished) {
       if (commReceived == null) {
@@ -380,7 +380,7 @@ public class Peer extends Process {
    * If the peer has more than pieces, he downloads the pieces that are the less
    * replicated
    */
-  void updateCurrentPiece() {
+  private void updateCurrentPiece() {
     if (currentPieces.size() >= (Common.FILE_PIECES - pieces)) {
       return;
     }
index 1931293..22b3cfd 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2012-2014, 2016. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2012-2017. 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. */
@@ -14,18 +13,16 @@ import org.simgrid.msg.Process;
 import org.simgrid.msg.MsgException;
 
 public class Coordinator extends Process {
-  LinkedList<RequestTask> waitingQueue=new LinkedList<>();
-  int csToServe;
-
   public Coordinator(Host host, String name, String[]args) {
     super(host,name,args);
   }
 
   public void main(String[] args) throws MsgException {
-    csToServe = Integer.parseInt(args[0]);
-    Task task;
+    int csToServe = Integer.parseInt(args[0]);
+    LinkedList<RequestTask> waitingQueue=new LinkedList<>();
+     
     while (csToServe >0) {
-      task = Task.receive("coordinator");
+      Task task = Task.receive("coordinator");
       if (task instanceof RequestTask) {
         RequestTask t = (RequestTask) task;
         if (waitingQueue.isEmpty()) {
index ff21e2a..e80bbc4 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2012-2014, 2016. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2012-2017. 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. */
index 24da241..cb0a4e5 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2012-2014, 2016. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2012-2017. 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. */
index 43ed0cf..a1495a0 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2012-2014, 2016. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2012-2017. 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. */
index ebc2286..37c2c7a 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2012-2014, 2016. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2012-2017. 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. */
index adfc3a7..c8f4c5c 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2012-2014, 2016. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2012-2017. 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. */
@@ -8,7 +7,7 @@ package app.centralizedmutex;
 import org.simgrid.msg.Task;
 
 public class RequestTask extends Task {
-  String from;
+  protected String from;
   public RequestTask(String name) {
     super();
     from=name;
index d03d09a..d3c2af2 100644 (file)
@@ -11,7 +11,7 @@ import org.simgrid.msg.Process;
 
 public class Daemon extends Process {
   private Task currentTask;
-  public Daemon(VM vm, int load) {
+  public Daemon(VM vm) {
     super((Host)vm,"Daemon");
     currentTask = new Task(this.getHost().getName()+"-daemon-0", this.getHost().getSpeed()*100, 0);
   }
index 756b753..3cc30ea 100644 (file)
@@ -24,7 +24,7 @@ public class XVM extends VM {
     this.currentLoad = 0;
     this.dpIntensity = dpIntensity ;
     this.ramsize= ramsize;
-    this.daemon = new Daemon(this, 100);
+    this.daemon = new Daemon(this);
   }
 
   public void setLoad(int load){  
index e17a19b..04fde06 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2006-2014. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2006-2017. 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. */
index 835c316..1817ab3 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2006-2014. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2006-2017. 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. */
@@ -22,7 +21,7 @@ public class Node extends Process {
   protected Comm commReceive;
   ///Last time I changed a finger or my predecessor
   protected double lastChangeDate;
-  int[] fingers;
+  private int[] fingers;
 
   public Node(Host host, String name, String[] args) {
     super(host,name,args);
@@ -109,7 +108,7 @@ public class Node extends Process {
     }
   }
 
-  void handleTask(Task task) {
+  private void handleTask(Task task) {
     if (task instanceof FindSuccessorTask) {
       FindSuccessorTask fTask = (FindSuccessorTask)task;
       Msg.debug("Receiving a 'Find Successor' request from " + fTask.getIssuerHostName() + " for id " + 
@@ -138,30 +137,19 @@ public class Node extends Process {
     }
   }
 
-  void leave() {
+  private void leave() {
     Msg.debug("Well Guys! I Think it's time for me to quit ;)");
-    quitNotify(1); //Notify my successor
-    quitNotify(-1); //Notify my predecessor.
+    // TODO: Notify my successor and predecessor.
   }
 
-  /**
-   * @brief Notifies the successor or the predecessor of the current node of the departure
-   * @param to 1 to notify the successor, -1 to notify the predecessor
-   */
-  static void quitNotify( int to) {
-    //TODO
-  }
-
-  /**
-   * @brief Initializes the current node as the first one of the system.
-   */
-  void create() {
+  /** @brief Initializes the current node as the first one of the system  */
+  private void create() {
     Msg.debug("Create a new Chord ring...");
     setPredecessor(-1);
   }
 
   // Makes the current node join the ring, knowing the id of a node already in the ring 
-  boolean join(int knownId) {
+  private boolean join(int knownId) {
     Msg.info("Joining the ring with id " + this.id + " knowing node " + knownId);
     setPredecessor(-1);
     int successorId = remoteFindSuccessor(knownId, this.id);
@@ -173,7 +161,7 @@ public class Node extends Process {
     return successorId != -1;
   }
 
-  void setPredecessor(int predecessorId) {
+  private void setPredecessor(int predecessorId) {
     if (predecessorId != predId) {
       predId = predecessorId;
       if (predecessorId != -1) {
@@ -188,7 +176,7 @@ public class Node extends Process {
    * @param askTo the node to ask to
    * @return the id of its predecessor node, or -1 if the request failed(or if the node does not know its predecessor)
    */
-  int remoteGetPredecessor(int askTo) {
+  private int remoteGetPredecessor(int askTo) {
     int predecessorId = -1;
     boolean stop = false;
     Msg.debug("Sending a 'Get Predecessor' request to " + askTo);
@@ -229,7 +217,7 @@ public class Node extends Process {
    * @param id the id to find
    * @return the id of the successor node, or -1 if the request failed
    */
-  int findSuccessor(int id) {
+  private int findSuccessor(int id) {
     if (isInInterval(id, this.id + 1, fingers[0])) {
       return fingers[0];
     }
@@ -239,7 +227,7 @@ public class Node extends Process {
   }
 
   // Asks another node the successor node of an id.
-  int remoteFindSuccessor(int askTo, int id) {
+  private int remoteFindSuccessor(int askTo, int id) {
     int successor = -1;
     boolean stop = false;
     String askToMailbox = Integer.toString(askTo);
@@ -281,7 +269,7 @@ public class Node extends Process {
   }
 
   // This function is called periodically. It checks the immediate successor of the current node.
-  void stabilize() {
+  private void stabilize() {
     Msg.debug("Stabilizing node");
     int candidateId;
     int successorId = fingers[0];
@@ -303,7 +291,7 @@ public class Node extends Process {
    * @brief Notifies the current node that its predecessor may have changed.
    * @param candidate_id the possible new predecessor
    */
-  void notify(int predecessorCandidateId) {
+  private void notify(int predecessorCandidateId) {
     if (predId == -1 || isInInterval(predecessorCandidateId, predId + 1, this.id - 1 )) {
       setPredecessor(predecessorCandidateId);
     }
@@ -314,7 +302,7 @@ public class Node extends Process {
    * @param notify_id id of the node to notify
    * @param candidate_id the possible new predecessor
    */
-  void remoteNotify(int notifyId, int predecessorCandidateId) {
+  private void remoteNotify(int notifyId, int predecessorCandidateId) {
     Msg.debug("Sending a 'Notify' request to " + notifyId);
     Task sentTask = new NotifyTask(getHost().getName(), this.mailbox, predecessorCandidateId);
     sentTask.dsend(Integer.toString(notifyId));
@@ -322,7 +310,7 @@ public class Node extends Process {
 
   // This function is called periodically.
   // It refreshes the finger table of the current node.
-  void fixFingers() {
+  private void fixFingers() {
     Msg.debug("Fixing fingers");
     int i = this.nextFingerToFix;
     int successorId = this.findSuccessor(this.id + (int)Math.pow(2,i)); //FIXME: SLOW
@@ -336,12 +324,12 @@ public class Node extends Process {
 
   // This function is called periodically.
   // It checks whether the predecessor has failed
-  void checkPredecessor() {
+  private void checkPredecessor() {
     //TODO
   }
 
   // Performs a find successor request to a random id.
-  void randomLookup() {
+  private void randomLookup() {
     int id = 1337;
     //Msg.info("Making a lookup request for id " + id);
     findSuccessor(id);
@@ -352,7 +340,7 @@ public class Node extends Process {
    * @param id the id to find
    * @return the closest preceding finger of that id
    */
-  int closestPrecedingNode(int id) {
+  private int closestPrecedingNode(int id) {
     for (int i = Common.NB_BITS - 1; i >= 0; i--) {
       if (isInInterval(fingers[i], this.id + 1, id - 1)) {
         return fingers[i];
@@ -377,7 +365,7 @@ public class Node extends Process {
    * @param end upper bound
    * @return a non-zero value if id in in [start, end]
    */
-  static boolean isInInterval(int id, int start, int end) {
+  private static boolean isInInterval(int id, int start, int end) {
     int normId = normalize(id);
     int normStart = normalize(start);
     int normEnd = normalize(end);
@@ -397,7 +385,7 @@ public class Node extends Process {
    * @param id an id
    * @return the corresponding normalized id
    */
-  static int normalize(int id) {
+  private static int normalize(int id) {
     return id & (Common.NB_KEYS - 1);
   }
 
@@ -406,7 +394,7 @@ public class Node extends Process {
    * @param finger_index index of the finger to set (0 to nb_bits - 1)
    * @param id the id to set for this finger
    */
-  void setFinger(int fingerIndex, int id) {
+  private void setFinger(int fingerIndex, int id) {
     if (id != fingers[fingerIndex]) {
       fingers[fingerIndex] = id;
       lastChangeDate = Msg.getClock();
index a18bc2a..c339c3b 100644 (file)
@@ -19,15 +19,15 @@ public class Answer {
     nodes = new ArrayList<>();
   }
 
-  int getDestinationId() {
+  protected int getDestinationId() {
     return destinationId;
   }
 
-  ArrayList<Contact> getNodes() {
+  protected ArrayList<Contact> getNodes() {
     return nodes;
   }
 
-  int size() {
+  protected int size() {
     return nodes.size();
   }
 
index 15c5b87..001abed 100644 (file)
@@ -1,9 +1,10 @@
 # C examples
-foreach(x actions-comm actions-storage app-masterworker app-pingpong app-pmm app-token-ring async-yield async-wait async-waitall 
+foreach(x actions-comm actions-storage app-masterworker app-pingpong app-token-ring async-wait async-waitall 
           async-waitany cloud-capping cloud-masterworker cloud-migration cloud-simple cloud-two-tasks
           dht-chord dht-pastry energy-consumption energy-onoff energy-pstate energy-ptask energy-vm platform-failures 
           io-file io-remote io-storage task-priority 
-          plugin-hostload process-create process-daemon process-join process-kill process-migration process-suspend 
+          plugin-hostload 
+         process-create process-daemon process-join process-kill process-migration process-suspend process-yield 
           platform-properties process-startkilltime synchro-semaphore trace-categories 
           trace-route-user-variables trace-link-user-variables trace-masterworker trace-platform 
           trace-process-migration trace-host-user-variables)
@@ -50,8 +51,8 @@ foreach (file answer dht-kademlia node routing_table task)
   set(examples_src  ${examples_src}  ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/${file}.c  ${CMAKE_CURRENT_SOURCE_DIR}/dht-kademlia/${file}.h)
 endforeach()
 
-foreach (file actions-comm actions-storage app-bittorrent app-chainsend app-masterworker app-pingpong async-yield async-wait
-         async-waitall async-waitany dht-chord dht-kademlia io-remote platform-properties
+foreach (file actions-comm actions-storage app-bittorrent app-chainsend app-masterworker app-pingpong async-wait
+         async-waitall async-waitany dht-chord dht-kademlia io-remote platform-properties process-yield 
          task-priority)
   set(xml_files    ${xml_files}     ${CMAKE_CURRENT_SOURCE_DIR}/${file}/${file}_d.xml)
 endforeach()
@@ -95,9 +96,9 @@ set(xml_files    ${xml_files}     ${CMAKE_CURRENT_SOURCE_DIR}/actions-comm/actio
                                   ${CMAKE_CURRENT_SOURCE_DIR}/process-startkilltime/start_kill_d.xml       PARENT_SCOPE)
 
 foreach(x actions-comm actions-storage app-bittorrent app-chainsend app-masterworker app-pingpong app-token-ring
-          async-yield async-wait async-waitall async-waitany cloud-capping cloud-masterworker cloud-migration cloud-simple 
+          async-wait async-waitall async-waitany cloud-capping cloud-masterworker cloud-migration cloud-simple 
           cloud-two-tasks dht-chord dht-pastry dht-kademlia platform-failures io-file io-remote io-storage task-priority 
-          process-create process-daemon process-join process-kill process-migration process-startkilltime process-suspend
+          process-create process-daemon process-join process-kill process-migration process-startkilltime process-suspend process-yield
          platform-properties synchro-semaphore)
   ADD_TESH_FACTORIES(msg-${x} "thread;ucontext;raw;boost" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/${x} ${x}.tesh)
 endforeach()
@@ -126,8 +127,6 @@ endif()
 ADD_TESH_FACTORIES(app-masterworker-multicore   "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/app-masterworker/app-masterworker-multicore.tesh)
 ADD_TESH_FACTORIES(app-masterworker-vivaldi     "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/app-masterworker/app-masterworker-vivaldi.tesh)
 
-ADD_TESH(msg-app-pmm  --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/app-pmm/app-pmm.tesh)
-
 if(SIMGRID_HAVE_NS3)
   ADD_TESH_FACTORIES(msg-network-ns3 "thread;ucontext;raw;boost" --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/network-ns3/network-ns3.tesh)
 endif()
index 1687897..522000b 100644 (file)
@@ -65,12 +65,6 @@ shipped in the archive:
    until one activity of the set completes, no matter which terminates
    first.
    
- - <b>Yielding to other processes</b>.
-   @ref examples/msg/async-yield/async-yield.c\n
-   The @ref MSG_process_yield function interrupts the execution of the
-   current process, leaving a chance to run to the other processes
-   that are ready to run at the exact same timestamp
-
 @section msg_ex_process Acting on Processes
 
   - <b>Creating processes</b>. 
@@ -91,6 +85,12 @@ shipped in the archive:
     @ref examples/msg/process-migration/process-migration.c \n
     Processes can move or be moved from a host to another with the @ref MSG_process_migrate function.
     
+  - <b>Yielding to other processes</b>.
+    @ref examples/msg/process-yield/process-yield.c\n
+    The @ref MSG_process_yield function interrupts the execution of the
+    current process, leaving a chance to run to the other processes
+    that are ready to run at the exact same timestamp
+
   - <b>Controling the process life cycle from the XML</b>.
     @ref examples/msg/process-startkilltime/process-startkilltime.c \n
     You can specify a start time and a kill time in the deployment
@@ -233,14 +233,6 @@ also the tesh files in the example directories for details.
 
 @section msg_ex_apps Examples of Full Applications
  
-  - <b>Parallel Matrix Multiplication</b>.
-    @ref examples/msg/app-pmm/app-pmm.c \n
-    This little application multiplies two matrices in parallel. Each
-    of the 9 processes computes a sub-block of the result, with the
-    sub-blocks of the input matrices exchanged between the processes. \n
-    This is a classical assignment in MPI lectures, here implemented
-    in MSG.
-
   - <b>Chord P2P protocol</b>.
     @ref examples/msg/dht-chord/dht-chord.c \n
     This example implements the well known Chord protocol,
@@ -307,7 +299,6 @@ top of the example file).
 @example examples/msg/actions-comm/actions-comm.c
 @example examples/msg/actions-storage/actions-storage.c
 
-@example examples/msg/app-pmm/app-pmm.c
 @example examples/msg/dht-chord/dht-chord.c
 
 @example examples/msg/task-priority/task-priority.c
index ee19ff2..40a8256 100644 (file)
@@ -167,7 +167,7 @@ void seed_loop(peer_t peer, double deadline)
   }
 }
 
-/** @brief Retrieves the peer list from the tracker
+/** @brief Retrieves the peer list from the tracker
  *  @param peer current peer data
  */
 int get_peers_data(peer_t peer)
@@ -263,7 +263,7 @@ void peer_free(peer_t peer)
   xbt_free(peer);
 }
 
-/** @brief Returns if a peer has finished downloading the file
+/** @brief Returns if a peer has finished downloading the file
  *  @param bitfield peer bitfield
  */
 int has_finished(unsigned int bitfield)
@@ -672,10 +672,9 @@ void update_interested_after_receive(peer_t peer)
   char *key;
   xbt_dict_cursor_t cursor;
   connection_t connection;
-  int interested;
   xbt_dict_foreach(peer->peers, cursor, key, connection) {
-    interested = 0;
     if (connection->am_interested != 0) {
+      int interested = 0;
       //Check if the peer still has a piece we want.
       for (int i = 0; i < FILE_PIECES; i++) {
         if (peer_has_not_piece(peer, i) && connection_has_piece(connection,i)) {
index f17ed64..61a1aca 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2012-2014. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2012-2017. 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. */
@@ -105,15 +104,12 @@ static void broadcaster_destroy(broadcaster_t bc)
 /** Emitter function  */
 int broadcaster(int argc, char *argv[])
 {
-  broadcaster_t bc = NULL;
-  xbt_dynar_t host_list = NULL;
-  int status;
   unsigned int piece_count = PIECE_COUNT;
 
   XBT_DEBUG("broadcaster");
 
   /* Add every mailbox given by the hostcount in argv[1] to a dynamic array */
-  host_list = build_hostlist_from_hostcount(xbt_str_parse_int(argv[1], "Invalid number of peers: %s"));
+  xbt_dynar_t host_list = build_hostlist_from_hostcount(xbt_str_parse_int(argv[1], "Invalid number of peers: %s"));
 
   /* argv[2] is the number of pieces */
   if (argc > 2) {
@@ -122,10 +118,10 @@ int broadcaster(int argc, char *argv[])
   } else {
     XBT_DEBUG("No piece_count specified, defaulting to %d", piece_count);
   }
-  bc = broadcaster_init(host_list, piece_count);
+  broadcaster_t bc = broadcaster_init(host_list, piece_count);
 
   /* TODO: Error checking */
-  status = broadcaster_send_file(bc);
+  int status = broadcaster_send_file(bc);
 
   broadcaster_destroy(bc);
 
index e36ab5d..a6f7e44 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2012, 2014. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2012-2017. 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. */
@@ -27,11 +26,10 @@ xbt_dynar_iterator_t xbt_dynar_iterator_new(xbt_dynar_t list, xbt_dynar_t (*crit
 /* Returns the next element iterated by iterator it, NULL if there are no more elements */
 void *xbt_dynar_iterator_next(xbt_dynar_iterator_t it)
 {
-  int *next;
   if (it->current >= it->length) {
     return NULL;
   } else {
-    next = xbt_dynar_get_ptr(it->indices_list, it->current);
+    int* next = xbt_dynar_get_ptr(it->indices_list, it->current);
     it->current++;
     return xbt_dynar_get_ptr(it->list, *next);
   }
index bd5d39b..9687ce7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2016. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2007-2017. 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. */
@@ -69,7 +69,7 @@ int main(int argc, char *argv[])
   MSG_init(&argc, argv);
 
   xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
-             "\tExample: %s ../../platform/small_platform.xml app-pingpong_d.xml\n", argv[0], argv[0]);
+             "\tExample: %s ../../platforms/small_platform.xml app-pingpong_d.xml\n", argv[0], argv[0]);
 
   MSG_create_environment(argv[1]);          /* - Load the platform description */
 
diff --git a/examples/msg/app-pmm/app-pmm.c b/examples/msg/app-pmm/app-pmm.c
deleted file mode 100644 (file)
index e68636f..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-/* pmm - double broadcast parallel matrix multiplication                    */
-
-/* Copyright (c) 2006-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 "simgrid/msg.h"
-#include "xbt/matrix.h"
-#include "xbt/xbt_os_time.h"
-
-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. */
-#define GRID_SIZE 3           /* Modify to adjust the grid's size */
-#define NODE_MATRIX_SIZE 300  /* Amount of work done by each node*/
-
-#define GRID_NUM_NODES GRID_SIZE * GRID_SIZE
-#define MATRIX_SIZE NODE_MATRIX_SIZE * GRID_SIZE
-#define MAILBOX_NAME_SIZE 10
-#define NEIGHBOURS_COUNT GRID_SIZE - 1
-
-/* The job sent to every node */
-typedef struct s_node_job{
-  int row;
-  int col;
-  int nodes_in_row[NEIGHBOURS_COUNT];
-  int nodes_in_col[NEIGHBOURS_COUNT];
-  xbt_matrix_t A;
-  xbt_matrix_t B;
-} s_node_job_t;
-
-typedef s_node_job_t *node_job_t;
-
-/* Structure for recovering results */
-typedef struct s_result {
-  int row;
-  int col;
-  xbt_matrix_t sC;
-} s_result_t;
-
-typedef s_result_t *result_t;
-
-int node(int argc, char **argv);
-static void create_jobs(xbt_matrix_t A, xbt_matrix_t B, node_job_t *jobs);
-static void broadcast_jobs(node_job_t *jobs);
-static node_job_t wait_job(int selfid);
-static void broadcast_matrix(xbt_matrix_t M, int num_nodes, int *nodes);
-static void get_sub_matrix(xbt_matrix_t *sM, int selfid);
-static void receive_results(result_t *results);
-static void task_cleanup(void *arg);
-
-int node(int argc, char **argv)
-{
-  char my_mbox[MAILBOX_NAME_SIZE];
-  node_job_t myjob;
-  node_job_t jobs[GRID_NUM_NODES];
-  xbt_matrix_t A = NULL;
-  xbt_matrix_t B = NULL;
-  xbt_matrix_t C = NULL;
-  result_t result;
-
-  xbt_assert(argc != 1, "Wrong number of arguments for this node");
-
-  /* Initialize the node's data-structures */
-  int myid = xbt_str_parse_int(argv[1], "Invalid ID received as first node parameter: %s");
-  snprintf(my_mbox, MAILBOX_NAME_SIZE - 1, "%d", myid);
-  xbt_matrix_t sC = xbt_matrix_double_new_zeros(NODE_MATRIX_SIZE, NODE_MATRIX_SIZE);
-
-  if (myid == 0){
-    /* Create the matrices to multiply and one to store the result */
-    A = xbt_matrix_double_new_id(MATRIX_SIZE, MATRIX_SIZE);
-    B = xbt_matrix_double_new_seq(MATRIX_SIZE, MATRIX_SIZE);
-    C = xbt_matrix_double_new_zeros(MATRIX_SIZE, MATRIX_SIZE);
-
-    /* Create the nodes' jobs */
-    create_jobs(A, B, jobs);
-
-    /* Get own job first */
-    myjob = jobs[0];
-
-    /* Broadcast the rest of the jobs to the other nodes */
-    broadcast_jobs(jobs + 1);
-
-  } else {
-    myjob = wait_job(myid);
-  }
-
-  /* Multiplication main-loop */
-  XBT_VERB("Start Multiplication's Main-loop");
-  for (int k=0; k < GRID_SIZE; k++){
-    xbt_matrix_t sA;
-    xbt_matrix_t sB;
-
-    if(k == myjob->col){
-      XBT_VERB("Broadcast sA(%d,%d) to row %d", myjob->row, k, myjob->row);
-      broadcast_matrix(myjob->A, NEIGHBOURS_COUNT, myjob->nodes_in_row);
-    }
-
-    if(k == myjob->row){
-      XBT_VERB("Broadcast sB(%d,%d) to col %d", k, myjob->col, myjob->col);
-      broadcast_matrix(myjob->B, NEIGHBOURS_COUNT, myjob->nodes_in_col);
-    }
-
-    if(myjob->row == k && myjob->col == k){
-      xbt_matrix_double_addmult(myjob->A, myjob->B, sC);
-    }else if(myjob->row == k){
-      get_sub_matrix(&sA, myid);
-      xbt_matrix_double_addmult(sA, myjob->B, sC);
-      xbt_matrix_free(sA);
-    }else if(myjob->col == k){
-      get_sub_matrix(&sB, myid);
-      xbt_matrix_double_addmult(myjob->A, sB, sC);
-      xbt_matrix_free(sB);
-    }else{
-      get_sub_matrix(&sA, myid);
-      get_sub_matrix(&sB, myid);
-      xbt_matrix_double_addmult(sA, sB, sC);
-      xbt_matrix_free(sA);
-      xbt_matrix_free(sB);
-    }
-  }
-
-  /* Node 0: gather the results and reconstruct the final matrix */
-  if(myid == 0){
-    int node;
-    result_t results[GRID_NUM_NODES] = {0};
-
-    XBT_VERB("Multiplication done.");
-
-    /* Get the result from the nodes in the GRID */
-    receive_results(results);
-
-    /* First add our results */
-    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,
-                             0, 0, NULL);
-      xbt_matrix_free(results[node]->sC);
-      xbt_free(results[node]);
-    }
-
-    //xbt_matrix_dump(C, "C:res", 0, xbt_matrix_dump_display_double);
-
-    xbt_matrix_free(A);
-    xbt_matrix_free(B);
-    xbt_matrix_free(C);
-
-  /* The rest: return the result to node 0 */
-  }else{
-    msg_task_t task;
-
-    XBT_VERB("Multiplication done. Send the sub-result.");
-
-    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);
-    task = MSG_task_create("result",100,100,result);
-    MSG_task_send(task, "0");
-  }
-
-  /* Clean up and finish*/
-  xbt_matrix_free(sC);
-  xbt_matrix_free(myjob->A);
-  xbt_matrix_free(myjob->B);
-  xbt_free(myjob);
-  return 0;
-}
-
-/*
- * Broadcast the jobs to the nodes of the grid (except to node 0)
- */
-static void broadcast_jobs(node_job_t *jobs)
-{
-  char node_mbox[MAILBOX_NAME_SIZE];
-  msg_comm_t comms[GRID_NUM_NODES - 1] = {0};
-
-  XBT_VERB("Broadcast Jobs");
-  for (int node = 1; node < GRID_NUM_NODES; node++){
-    msg_task_t task  = MSG_task_create("Job", 100, 100, jobs[node-1]);
-    snprintf(node_mbox, MAILBOX_NAME_SIZE - 1, "%d", node);
-    comms[node-1] = MSG_task_isend(task, node_mbox);
-  }
-
-  MSG_comm_waitall(comms, GRID_NUM_NODES-1, -1);
-  for (int node = 1; node < GRID_NUM_NODES; node++)
-    MSG_comm_destroy(comms[node - 1]);
-}
-
-static node_job_t wait_job(int selfid)
-{
-  msg_task_t task = NULL;
-  char self_mbox[MAILBOX_NAME_SIZE];
-  snprintf(self_mbox, MAILBOX_NAME_SIZE - 1, "%d", selfid);
-  msg_error_t err = MSG_task_receive(&task, self_mbox);
-  xbt_assert(err == MSG_OK, "Error while receiving from %s (%d)", self_mbox, (int)err);
-  node_job_t job  = (node_job_t)MSG_task_get_data(task);
-  MSG_task_destroy(task);
-  XBT_VERB("Got Job (%d,%d)", job->row, job->col);
-
-  return job;
-}
-
-static void broadcast_matrix(xbt_matrix_t M, int num_nodes, int *nodes)
-{
-  char node_mbox[MAILBOX_NAME_SIZE];
-
-  for(int node=0; node < num_nodes; node++){
-    snprintf(node_mbox, MAILBOX_NAME_SIZE - 1, "%d", nodes[node]);
-    xbt_matrix_t sM  = xbt_matrix_new_sub(M, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE, 0, 0, NULL);
-    msg_task_t task = MSG_task_create("sub-matrix", 100, 100, sM);
-    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)
-{
-  msg_task_t task = NULL;
-  char node_mbox[MAILBOX_NAME_SIZE];
-
-  XBT_VERB("Get sub-matrix");
-
-  snprintf(node_mbox, MAILBOX_NAME_SIZE - 1, "%d", selfid);
-  msg_error_t err = MSG_task_receive(&task, node_mbox);
-  xbt_assert(err == MSG_OK, "Error while receiving from %s (%d)", node_mbox, (int)err);
-  *sM = (xbt_matrix_t)MSG_task_get_data(task);
-  MSG_task_destroy(task);
-}
-
-static void task_cleanup(void *arg){
-  msg_task_t task = (msg_task_t)arg;
-  xbt_matrix_t m = (xbt_matrix_t)MSG_task_get_data(task);
-  xbt_matrix_free(m);
-  MSG_task_destroy(task);
-}
-
-int main(int argc, char *argv[])
-{
-  MSG_init(&argc, argv);
-  const char *platform = "../../platforms/cluster.xml";
-  if (argc > 1)
-     platform = argv[1];
-  MSG_create_environment(platform);
-
-  MSG_function_register("node", node);
-  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);
-  }
-
-  msg_error_t res = MSG_main();
-  XBT_INFO("Simulated time: %g", MSG_get_clock());
-
-  return res != MSG_OK;
-}
-
-static void create_jobs(xbt_matrix_t A, xbt_matrix_t B, node_job_t *jobs)
-{
-  int row = 0;
-  int col = 0;
-
-  for (int node = 0; node < GRID_NUM_NODES; node++){
-    XBT_VERB("Create job %d", node);
-    jobs[node] = xbt_new0(s_node_job_t, 1);
-    jobs[node]->row = row;
-    jobs[node]->col = col;
-
-    /* Compute who are the nodes in the same row and column than the node receiving this job */
-    int k=0;
-    for (int j = 0; j < GRID_SIZE; j++) {
-      if (node != (GRID_SIZE * row) + j) {
-        jobs[node]->nodes_in_row[k] = (GRID_SIZE * row) + j;
-        k++;
-      }
-    }
-
-    k=0;
-    for (int j = 0; j < GRID_SIZE; j++) {
-      if (node != (GRID_SIZE * j) + col) {
-        jobs[node]->nodes_in_col[k] = (GRID_SIZE * j) + col;
-        k++;
-      }
-    }
-
-    /* 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);
-    jobs[node]->B =
-      xbt_matrix_new_sub(B, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE, NODE_MATRIX_SIZE * row, NODE_MATRIX_SIZE * col, NULL);
-
-    col++;
-    if (col >= GRID_SIZE){
-      col = 0;
-      row++;
-    }
-  }
-}
-
-static void receive_results(result_t *results) {
-  msg_comm_t comms[GRID_NUM_NODES-1] = {0};
-  msg_task_t tasks[GRID_NUM_NODES-1] = {0};
-
-  XBT_VERB("Receive Results.");
-
-  /* Get the result from the nodes in the GRID */
-  for (int node = 1; node < GRID_NUM_NODES; node++)
-   comms[node-1] = MSG_task_irecv(&tasks[node-1], "0");
-
-  MSG_comm_waitall(comms, GRID_NUM_NODES - 1, -1);
-  for (int node = 1; node < GRID_NUM_NODES; node++)
-    MSG_comm_destroy(comms[node - 1]);
-
-  /* Reconstruct the result matrix */
-  for (int node = 1; node < GRID_NUM_NODES; node++){
-    results[node] = (result_t)MSG_task_get_data(tasks[node-1]);
-    MSG_task_destroy(tasks[node-1]);
-  }
-}
diff --git a/examples/msg/app-pmm/app-pmm.tesh b/examples/msg/app-pmm/app-pmm.tesh
deleted file mode 100644 (file)
index 0912eb8..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-#! ./tesh
-
-p Testing the Parallel Matrix Multiplication 
-
-! timeout 120
-$ ./app-pmm/app-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
-> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 3
-> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 4
-> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 5
-> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 6
-> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 7
-> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Create job 8
-> [node-0.acme.org:node:(1) 0.000000] [msg_pmm/VERBOSE] Broadcast Jobs
-> [node-2.acme.org:node:(3) 0.007813] [msg_pmm/VERBOSE] Got Job (0,2)
-> [node-2.acme.org:node:(3) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [node-2.acme.org:node:(3) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,2) to col 2
-> [node-1.acme.org:node:(2) 0.007813] [msg_pmm/VERBOSE] Got Job (0,1)
-> [node-1.acme.org:node:(2) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [node-1.acme.org:node:(2) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,1) to col 1
-> [node-8.acme.org:node:(9) 0.007813] [msg_pmm/VERBOSE] Got Job (2,2)
-> [node-8.acme.org:node:(9) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [node-8.acme.org:node:(9) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-7.acme.org:node:(8) 0.007813] [msg_pmm/VERBOSE] Got Job (2,1)
-> [node-7.acme.org:node:(8) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [node-7.acme.org:node:(8) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-6.acme.org:node:(7) 0.007813] [msg_pmm/VERBOSE] Got Job (2,0)
-> [node-6.acme.org:node:(7) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [node-6.acme.org:node:(7) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(2,0) to row 2
-> [node-5.acme.org:node:(6) 0.007813] [msg_pmm/VERBOSE] Got Job (1,2)
-> [node-5.acme.org:node:(6) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [node-5.acme.org:node:(6) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-4.acme.org:node:(5) 0.007813] [msg_pmm/VERBOSE] Got Job (1,1)
-> [node-4.acme.org:node:(5) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [node-4.acme.org:node:(5) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-3.acme.org:node:(4) 0.007813] [msg_pmm/VERBOSE] Got Job (1,0)
-> [node-3.acme.org:node:(4) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [node-3.acme.org:node:(4) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(1,0) to row 1
-> [node-2.acme.org:node:(3) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-1.acme.org:node:(2) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-6.acme.org:node:(7) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-3.acme.org:node:(4) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-0.acme.org:node:(1) 0.007813] [msg_pmm/VERBOSE] Start Multiplication's Main-loop
-> [node-0.acme.org:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sA(0,0) to row 0
-> [node-0.acme.org:node:(1) 0.007813] [msg_pmm/VERBOSE] Broadcast sB(0,0) to col 0
-> [node-0.acme.org:node:(1) 0.007813] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-7.acme.org:node:(8) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-4.acme.org:node:(5) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-8.acme.org:node:(9) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-5.acme.org:node:(6) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-6.acme.org:node:(7) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-2.acme.org:node:(3) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-3.acme.org:node:(4) 0.015619] [msg_pmm/VERBOSE] Broadcast sB(1,0) to col 0
-> [node-1.acme.org:node:(2) 0.015619] [msg_pmm/VERBOSE] Broadcast sA(0,1) to row 0
-> [node-3.acme.org:node:(4) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-1.acme.org:node:(2) 0.015619] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-8.acme.org:node:(9) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-2.acme.org:node:(3) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-7.acme.org:node:(8) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(2,1) to row 2
-> [node-5.acme.org:node:(6) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,2) to col 2
-> [node-6.acme.org:node:(7) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-4.acme.org:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sA(1,1) to row 1
-> [node-0.acme.org:node:(1) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-7.acme.org:node:(8) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-5.acme.org:node:(6) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-4.acme.org:node:(5) 0.023426] [msg_pmm/VERBOSE] Broadcast sB(1,1) to col 1
-> [node-4.acme.org:node:(5) 0.023426] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-2.acme.org:node:(3) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(0,2) to row 0
-> [node-0.acme.org:node:(1) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-6.acme.org:node:(7) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,0) to col 0
-> [node-8.acme.org:node:(9) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-5.acme.org:node:(6) 0.031233] [msg_pmm/VERBOSE] Broadcast sA(1,2) to row 1
-> [node-3.acme.org:node:(4) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-1.acme.org:node:(2) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-7.acme.org:node:(8) 0.031233] [msg_pmm/VERBOSE] Broadcast sB(2,1) to col 1
-> [node-2.acme.org:node:(3) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-6.acme.org:node:(7) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-5.acme.org:node:(6) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-7.acme.org:node:(8) 0.031233] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-0.acme.org:node:(1) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-1.acme.org:node:(2) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-8.acme.org:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sA(2,2) to row 2
-> [node-3.acme.org:node:(4) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-4.acme.org:node:(5) 0.039040] [msg_pmm/VERBOSE] Get sub-matrix
-> [node-8.acme.org:node:(9) 0.039040] [msg_pmm/VERBOSE] Broadcast sB(2,2) to col 2
-> [node-8.acme.org:node:(9) 0.039040] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [node-1.acme.org:node:(2) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [node-4.acme.org:node:(5) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [node-3.acme.org:node:(4) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [node-0.acme.org:node:(1) 0.046847] [msg_pmm/VERBOSE] Multiplication done.
-> [node-0.acme.org:node:(1) 0.046847] [msg_pmm/VERBOSE] Receive Results.
-> [node-6.acme.org:node:(7) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [node-2.acme.org:node:(3) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [node-5.acme.org:node:(6) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [node-7.acme.org:node:(8) 0.046847] [msg_pmm/VERBOSE] Multiplication done. Send the sub-result.
-> [0.054659] [msg_pmm/INFO] Simulated time: 0.0546594
diff --git a/examples/msg/async-yield/async-yield.tesh b/examples/msg/async-yield/async-yield.tesh
deleted file mode 100644 (file)
index e5aef16..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#! ./tesh
-
-$ $SG_TEST_EXENV ${bindir:=.}/async-yield ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../msg/async-yield/async-yield_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
-> [  0.000000] (1:yielder@Tremblay) I yielded 10 times. Goodbye now!
-> [  0.000000] (2:yielder@Ruby) I yielded 15 times. Goodbye now!
index 0c13cc2..41fa989 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2007-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2007-2017. 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. */
@@ -152,7 +151,7 @@ static int master_fun(int argc, char *argv[])
   XBT_INFO("# Shutdown the half of worker processes gracefully. The remaining half will be forcibly killed.");
   for (i = 0; i < nb_workers; i++) {
     char mbox[MAXMBOXLEN];
-    snprintf(mbox, MAXMBOXLEN, "MBOX:WRK%02d", i);
+    snprintf(mbox, MAXMBOXLEN, "MBOX:WRK%02u", i);
     msg_task_t finalize = MSG_task_create("finalize", 0, 0, 0);
     MSG_task_send(finalize, mbox);
   }
index 717b19d..66faa97 100644 (file)
@@ -327,7 +327,6 @@ void quit_notify(node_t node)
   get_mailbox(node->pred_id, mailbox);
   task_data_t req_data_s = xbt_new0(s_task_data_t,1);
   req_data_s->type = TASK_SUCCESSOR_LEAVING;
-  req_data_s->request_id = node->fingers[0].id;
   req_data_s->request_id = node->pred_id;
   get_mailbox(node->id, req_data_s->answer_to);
   req_data_s->issuer_host_name = MSG_host_get_name(MSG_host_self());
index 1cd48a0..6fb5f75 100644 (file)
@@ -109,15 +109,14 @@ void answer_trim(answer_t answer)
   */
 void answer_add_bucket(bucket_t bucket, answer_t answer)
 {
-  unsigned int cpt;
-  unsigned int id;
-  unsigned int distance;
-  node_contact_t contact;
   xbt_assert((bucket != NULL), "Provided a NULL bucket");
   xbt_assert((bucket->nodes != NULL), "Provided a bucket which nodes are NULL");
+
+  unsigned int cpt;
+  unsigned int id;
   xbt_dynar_foreach(bucket->nodes, cpt, id) {
-    distance = id ^ answer->destination_id;
-    contact = node_contact_new(id, distance);
+    unsigned int distance  = id ^ answer->destination_id;
+    node_contact_t contact = node_contact_new(id, distance);
     xbt_dynar_push(answer->nodes, &contact);
     answer->size++;
   }
index 463fd01..c0c6999 100644 (file)
@@ -183,13 +183,9 @@ unsigned int find_node(node_t node, unsigned int id_to_find, unsigned int count_
   unsigned int answers;
   unsigned int destination_found = 0;
   unsigned int nodes_added = 0;
-  double time_beginreceive;
-  double timeout;
   double global_timeout = MSG_get_clock() + find_node_global_timeout;
   unsigned int steps = 0;
 
-  xbt_assert((id_to_find >= 0), "Id supplied incorrect");
-
   /* First we build a list of who we already know */
   answer_t node_list = node_find_closest(node, id_to_find);
   xbt_assert((node_list != NULL), "node_list incorrect");
@@ -203,9 +199,9 @@ unsigned int find_node(node_t node, unsigned int id_to_find, unsigned int count_
     answers = 0;
     queries = send_find_node_to_best(node, node_list);
     nodes_added = 0;
-    timeout = MSG_get_clock() + find_node_timeout;
+    double timeout = MSG_get_clock() + find_node_timeout;
     steps++;
-    time_beginreceive = MSG_get_clock();
+    double time_beginreceive = MSG_get_clock();
     do {
       if (node->receive_comm == NULL) {
         node->task_received = NULL;
@@ -278,7 +274,7 @@ unsigned int find_node(node_t node, unsigned int id_to_find, unsigned int count_
 unsigned int ping(node_t node, unsigned int id_to_ping)
 {
   char mailbox[MAILBOX_NAME_SIZE];
-  snprintf(mailbox,MAILBOX_NAME_SIZE, "%d", id_to_ping);
+  snprintf(mailbox, MAILBOX_NAME_SIZE, "%u", id_to_ping);
 
   double timeout = MSG_get_clock() + ping_timeout;
 
@@ -360,11 +356,10 @@ unsigned int send_find_node_to_best(node_t node, answer_t node_list)
   unsigned int i = 0;
   unsigned int j = 0;
   unsigned int destination = node_list->destination_id;
-  node_contact_t node_to_query;
   while (j < kademlia_alpha && i < node_list->size) {
     /* We need to have at most "kademlia_alpha" requests each time, according to the protocol */
     /* Gets the node we want to send the query to */
-    node_to_query = xbt_dynar_get_as(node_list->nodes, i, node_contact_t);
+    node_contact_t node_to_query = xbt_dynar_get_as(node_list->nodes, i, node_contact_t);
     if (node_to_query->id != node->id) {        /* No need to query ourselves */
       send_find_node(node, node_to_query->id, destination);
       j++;
index 12d13da..b9cac1e 100644 (file)
@@ -230,7 +230,6 @@ static void handle_task(node_t node, msg_task_t task) {
   int j;
   int min;
   int max;
-  int d;
   int next;
   msg_task_t task_sent;
   task_data_t req_data;
@@ -280,7 +279,7 @@ static void handle_task(node_t node, msg_task_t task) {
     /* Join reply from all the node touched by the join  */
     case TASK_JOIN_LAST_REPLY:
       // if last node touched reply, copy its namespace set
-      // TODO: it works only if the two nodes are side to side (is it really the case ?)
+      // TODO: it works only if the two nodes are side to side (is it really the case ?)
       j = (task_data->sender_id < node->id) ? -1 : 0;
       for (i=0; i<NAMESPACE_SIZE/2; i++) {
         node->namespace_set[i] = task_data->state->namespace_set[i-j];
@@ -303,11 +302,11 @@ static void handle_task(node_t node, msg_task_t task) {
       min = (node->id==task_data->answer_id) ? 0 : shl(node->id, task_data->answer_id);
       max = shl(node->id, task_data->sender_id)+1;
       for (i=min;i<max;i++) {
-        d = domain(node->id, i); 
+        int d = domain(node->id, i);
         for (j=0; j<LEVEL_SIZE; j++)
           if (d!=j)
             node->routing_table[i][j] =  task_data->state->routing_table[i][j];
-          }
+      }
 
       node->ready--;
       // if the node is ready, do all the pending tasks and send update to known nodes
index 8a2011d..0ec0344 100644 (file)
@@ -9,7 +9,7 @@
 
 XBT_LOG_NEW_DEFAULT_CATEGORY(energy_vm, "Messages of this example");
 
-static int worker_func() {
+static int worker_func(int argc, char *argv[]) {
   msg_task_t task1 = MSG_task_create("t1", 300E6, 0, NULL);
   MSG_task_execute (task1);
   MSG_task_destroy(task1);
index 95f41b1..c6915ff 100644 (file)
@@ -14,7 +14,6 @@ $ ${bindir:=.}/io-file ${srcdir:=.}/storage/storage.xml "--log=root.fmt:[%10.6r]
 >              Mount point: '/home'
 >              Storage Id: 'Disk4'
 >              Storage Type: 'single_SSD'
->              Content Type: 'txt_unix'
 >              File Descriptor Id: 0
 > [  0.000000] (4:host@denise)         Open file '/home/doc/simgrid/examples/platforms/g5k.xml'
 > [  0.000000] (4:host@denise)         Capacity of the storage element '/home/doc/simgrid/examples/platforms/g5k.xml' is stored on: 13221994 / 536870912000
index 6d04727..46b251e 100644 (file)
@@ -13,7 +13,6 @@ $ ${bindir:=.}/io-remote$EXEEXT ${srcdir:=.}/storage/remote_io.xml ${srcdir:=.}/
 >              Mount point: 'c:'
 >              Storage Id: 'Disk2'
 >              Storage Type: 'SATA-II_HDD'
->              Content Type: 'txt_windows'
 >              File Descriptor Id: 0
 > [  0.000000] (2@  bob) File Descriptor information:
 >              Full path: '/scratch/lib/libsimgrid.so.3.6.2'
@@ -21,7 +20,6 @@ $ ${bindir:=.}/io-remote$EXEEXT ${srcdir:=.}/storage/remote_io.xml ${srcdir:=.}/
 >              Mount point: '/scratch'
 >              Storage Id: 'Disk1'
 >              Storage Type: 'SATA-II_HDD'
->              Content Type: 'txt_unix'
 >              File Descriptor Id: 0
 > [  0.000000] (3@ carl) File Descriptor information:
 >              Full path: '/scratch/lib/libsimgrid.so.3.6.2'
@@ -29,7 +27,6 @@ $ ${bindir:=.}/io-remote$EXEEXT ${srcdir:=.}/storage/remote_io.xml ${srcdir:=.}/
 >              Mount point: '/scratch'
 >              Storage Id: 'Disk1'
 >              Storage Type: 'SATA-II_HDD'
->              Content Type: 'txt_unix'
 >              File Descriptor Id: 0
 > [  0.000000] (4@ dave) File Descriptor information:
 >              Full path: 'c:\Windows\bootstat.dat'
@@ -37,7 +34,6 @@ $ ${bindir:=.}/io-remote$EXEEXT ${srcdir:=.}/storage/remote_io.xml ${srcdir:=.}/
 >              Mount point: 'c:'
 >              Storage Id: 'Disk2'
 >              Storage Type: 'SATA-II_HDD'
->              Content Type: 'txt_windows'
 >              File Descriptor Id: 0
 > [  0.000000] (1@alice) Try to read 101663 from 'c:\Windows\setupact.log'
 > [  0.000000] (2@  bob) Try to read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'
@@ -48,9 +44,9 @@ $ ${bindir:=.}/io-remote$EXEEXT ${srcdir:=.}/storage/remote_io.xml ${srcdir:=.}/
 > [  0.001469] (4@ dave) Offset is now at: 0
 > [  0.001469] (4@ dave) Opened file 'c:\Windows\Professional.xml'
 > [  0.001469] (4@ dave) Try to write 31 MiB to 'c:\Windows\Professional.xml'
-> [  0.003559] (1@alice) Have read 101663 from 'c:\Windows\setupact.log'. Offset is now at: 101663
-> [  0.003559] (1@alice) Seek back to the begining of the stream...
-> [  0.003559] (1@alice) Offset is now at: 0
+> [  0.003741] (1@alice) Have read 101663 from 'c:\Windows\setupact.log'. Offset is now at: 101663
+> [  0.003741] (1@alice) Seek back to the begining of the stream...
+> [  0.003741] (1@alice) Offset is now at: 0
 > [  0.276315] (3@ carl) Have read 12710497 from '/scratch/lib/libsimgrid.so.3.6.2'. Offset is now at: 12710497
 > [  0.276315] (3@ carl) Seek back to the begining of the stream...
 > [  0.276315] (3@ carl) Offset is now at: 0
@@ -59,10 +55,10 @@ $ ${bindir:=.}/io-remote$EXEEXT ${srcdir:=.}/storage/remote_io.xml ${srcdir:=.}/
 > [  0.387036] (2@  bob) Offset is now at: 0
 > [  0.387036] (2@  bob) Opened file '/scratch/doc/simgrid/examples/platforms/g5k.xml'
 > [  0.387036] (2@  bob) Try to write 16 MiB to '/scratch/doc/simgrid/examples/platforms/g5k.xml'
-> [  0.528029] (4@ dave) Have written 32646144 bytes to 'c:\Windows\Professional.xml'.
-> [  0.528029] (4@ dave) Move 'c:\Windows\Professional.xml' (of size 32646144) from 'dave' to 'carl'
+> [  0.528211] (4@ dave) Have written 32646144 bytes to 'c:\Windows\Professional.xml'.
+> [  0.528211] (4@ dave) Move 'c:\Windows\Professional.xml' (of size 32646144) from 'dave' to 'carl'
 > [  0.819921] (2@  bob) Have written 17436672 bytes to '/scratch/doc/simgrid/examples/platforms/g5k.xml'.
 > [  0.819921] (2@  bob) Copy '/scratch/doc/simgrid/examples/platforms/g5k.xml' (of size 17436672) from 'bob' to 'alice'
-> [  1.843786] (0@     ) Init: 60 MiB used on 'Disk1'
-> [  1.843786] (0@     ) Init: 2297 MiB used on 'Disk2'
-> [  1.843786] (0@     ) Simulation time 1.84379
+> [  1.843969] (0@     ) Init: 60 MiB used on 'Disk1'
+> [  1.843969] (0@     ) Init: 2297 MiB used on 'Disk2'
+> [  1.843969] (0@     ) Simulation time 1.84397
index 90d6b07..78cc08d 100644 (file)
@@ -17,7 +17,6 @@ $ ${bindir:=.}/io-storage$EXEEXT ${srcdir:=.}/storage/storage.xml "--log=root.fm
 >              Mount point: '/home'
 >              Storage Id: 'Disk4'
 >              Storage Type: 'single_SSD'
->              Content Type: 'txt_unix'
 >              File Descriptor Id: 0
 > [  0.003333] (1:@denise) Free size: 536857490006 bytes
 > [  0.003333] (1:@denise) Used size: 13421994 bytes
@@ -29,7 +28,6 @@ $ ${bindir:=.}/io-storage$EXEEXT ${srcdir:=.}/storage/storage.xml "--log=root.fm
 >              Mount point: '/home'
 >              Storage Id: 'Disk4'
 >              Storage Type: 'single_SSD'
->              Content Type: 'txt_unix'
 >              File Descriptor Id: 0
 > [  0.006000] (1:@denise) *** Move '/tmp/data.txt' into '/tmp/simgrid.readme'
 > [  0.006000] (1:@denise) User data attached to the file: 777
index f260cd9..7d32c04 100644 (file)
@@ -22,10 +22,9 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(electric_fence, "Example to check the soundness of
 static int server(int argc, char *argv[])
 {
   msg_task_t task1 = NULL, task2 = NULL;
-  msg_comm_t comm_received1 = NULL, comm_received2 = NULL;
 
-  comm_received1 = MSG_task_irecv(&task1, "mymailbox");
-  comm_received2 = MSG_task_irecv(&task2, "mymailbox");
+  msg_comm_t comm_received1 = MSG_task_irecv(&task1, "mymailbox");
+  msg_comm_t comm_received2 = MSG_task_irecv(&task2, "mymailbox");
 
   MSG_comm_wait(comm_received1, -1);
   MSG_comm_wait(comm_received2, -1);
index c422f5c..390ca97 100644 (file)
@@ -11,7 +11,6 @@ int timer_start; //set as 1 in the master process
 
 //keep a pointer to all surf running tasks.
 #define NTASKS 1500
-int bool_printed = 0;
 double start_time, end_time, elapsed_time;
 double gl_data_size[NTASKS];
 msg_task_t gl_task_array[NTASKS];
@@ -126,9 +125,6 @@ static int worker(int argc, char *argv[])
 
 int main(int argc, char *argv[])
 {
-  msg_error_t res = MSG_OK;
-  bool_printed = 0;
-
   MSG_init(&argc, argv);
   xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n"
              "\tExample: %s platform.xml deployment.xml\n", argv[0], argv[0]);
@@ -142,7 +138,7 @@ int main(int argc, char *argv[])
 
   MSG_launch_application(argv[2]);
 
-  res = MSG_main();
+  msg_error_t res = MSG_main();
 
   return res != MSG_OK;
 }
index 7175037..56410a0 100644 (file)
@@ -41,6 +41,9 @@ p Dogbone
 ! timeout 10
 $ ${bindir:=.}/network-ns3/network-ns3 ${srcdir:=.}/examples/platforms/dogbone.xml ${srcdir:=.}/examples/msg/network-ns3/dogbone_d.xml --cfg=network/model:NS3 "--log=root.fmt:[%h:%P(%i)]%e[%c/%p]%e%m%n"
 > [:maestro(0)] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'NS3'
+> [:maestro(0)] [ns3/WARNING] Ignoring a route between S1 and C1 of length 3: Only routes of length 1 are considered with NS3.
+> WARNING: You can ignore this warning if your hosts can still communicate when only considering routes of length 1.
+> WARNING: Remove long routes to avoid this harmless message; subsequent long routes will be silently ignored.
 > [C1:worker(3)] [msg_test/INFO] FLOW[0] : Receive 10000 bytes from S1 to C1
 > [C2:worker(4)] [msg_test/INFO] FLOW[1] : Receive 10000 bytes from S2 to C2
 
diff --git a/examples/msg/process-yield/process-yield.tesh b/examples/msg/process-yield/process-yield.tesh
new file mode 100644 (file)
index 0000000..e39b2b9
--- /dev/null
@@ -0,0 +1,5 @@
+#! ./tesh
+
+$ $SG_TEST_EXENV ${bindir:=.}/process-yield ${srcdir:=.}/small_platform_fatpipe.xml ${srcdir:=.}/../msg/process-yield/process-yield_d.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+> [  0.000000] (1:yielder@Tremblay) I yielded 10 times. Goodbye now!
+> [  0.000000] (2:yielder@Ruby) I yielded 15 times. Goodbye now!
index 651d968..2ebf78d 100644 (file)
@@ -19,8 +19,7 @@ static int master(int argc, char *argv[])
 
   TRACE_mark("msmark", "start_send_tasks");
   for (int i = 0; i < number_of_tasks; i++) {
-    msg_task_t task = NULL;
-    task = MSG_task_create("task", task_comp_size, task_comm_size, NULL);
+    msg_task_t task = MSG_task_create("task", task_comp_size, task_comm_size, NULL);
 
     //setting the variable "task_creation" to value i
     TRACE_host_variable_set(MSG_host_get_name(MSG_host_self()), "task_creation", i);
index 6587933..0b6086f 100644 (file)
@@ -1,5 +1,25 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+
+<!-- Describe a dogbone graph, with 4 hosts:
+  --
+  -- S1 ---[ 1 ]---                 ---[ 3 ]--- C1
+  --               \               /
+  --                R1 --[ 2 ]-- R2
+  --               /               \
+  -- S2 ---[ 4 ]---                 ---[ 5 ]--- C2
+  --
+  --
+  -- This platform is a valid NS3 platform, even if it exhibits routes of length >1,
+  -- because when you only keep the routes of length 1,
+  -- you get a graph where every host can speak to any other host.
+  --
+  -- For example, S1--C1 is (l1,l2,l3) of length >1
+  -- But it's also S1--C1 = S1--R1, R1--R2, R2--C1 which are all of length 1
+  --
+  -- http://simgrid.gforge.inria.fr/simgrid/latest/doc/pls_ns3.html
+  -->
+
 <platform version="4.1">
   <zone  id="AS0"  routing="Full">
     <host id="S1" speed="1Gf"/>
index faaad67..3902e78 100644 (file)
@@ -1,5 +1,9 @@
 <?xml version='1.0'?>
 <!DOCTYPE platform SYSTEM "http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd">
+
+<!-- All routes of this platform are of length 1, so you can use it with the NS3 model
+     http://simgrid.gforge.inria.fr/simgrid/latest/doc/pls_ns3.html -->
+
 <platform version="4.1">
   <zone  id="AS0"  routing="Full">
     <host id="Tremblay" speed="98.095Mf"/>
index b654b9c..16a0dfd 100644 (file)
@@ -6,17 +6,15 @@
   </config>
 
   <zone id="AS0" routing="Full">
-    <storage_type id="SATA-II_HDD" size="500GB" model="linear_no_lat"
-                  content_type="txt_unix" content="content/small_content.txt">
+    <storage_type id="SATA-II_HDD" size="500GB" content="content/small_content.txt">
       <model_prop id="Bread" value="92MBps"/> 
       <model_prop id="Bwrite" value="62MBps"/> 
-      <model_prop id="Bconnection" value="122MBps"/> 
     </storage_type>
 
     <storage id="Disk1" typeId="SATA-II_HDD" attach="carl"/>
 
     <storage id="Disk2" typeId="SATA-II_HDD" attach="dave"
-             content_type="txt_windows" content="content/win_storage_content.txt" />
+             content="content/win_storage_content.txt" />
 
     <host id="alice" speed="1Gf">
       <mount storageId="Disk2" name="c:"/>
index 449438e..1402e68 100644 (file)
@@ -6,26 +6,22 @@
   </config>
 
   <zone id="AS0" routing="Full">
-    <storage_type id="single_HDD" size="500GiB" model="linear_no_lat" 
-                  content="content/storage_content.txt" content_type="txt_unix">
+    <storage_type id="single_HDD" size="500GiB" content="content/storage_content.txt">
       <model_prop id="Bwrite" value="30MBps" />
       <model_prop id="Bread" value="100MBps" />
-      <model_prop id="Bconnection" value="120MBps" />
     </storage_type>
 
-    <storage_type id="single_SSD" size="500GiB" model="linear_no_lat"
-                  content="content/storage_content.txt" content_type="txt_unix">
+    <storage_type id="single_SSD" size="500GiB" content="content/storage_content.txt">
       <model_prop id="Bwrite" value="60MBps" />
       <model_prop id="Bread" value="200MBps" />
-      <model_prop id="Bconnection" value="220MBps" />
     </storage_type>
 
     <storage id="Disk1" typeId="single_HDD" attach="bob" />
     <storage id="Disk2" typeId="single_SSD" attach="alice"
-             content="content/win_storage_content.txt" content_type="txt_windows" />
+             content="content/win_storage_content.txt"/>
     <storage id="Disk3" typeId="single_HDD" attach="carl" />
     <storage id="Disk4" typeId="single_SSD" attach="denise"
-             content="content/small_content.txt" content_type="txt_unix" />
+             content="content/small_content.txt" />
 
     <host id="bob" speed="1Gf">
       <mount storageId="Disk1" name="/home"/>
index f9ed22a..d0ee0e9 100644 (file)
@@ -229,10 +229,10 @@ void Node::checkPredecessor()
   // receive the answer
   XBT_DEBUG("Sent 'Predecessor Alive' request to %d, waiting for the answer on my mailbox '%s'", pred_id_,
             message->answer_to->name());
-  simgrid::s4u::Comm& comm = simgrid::s4u::this_actor::irecv(return_mailbox, &data);
+  simgrid::s4u::CommPtr comm = simgrid::s4u::this_actor::irecv(return_mailbox, &data);
 
   try {
-    comm.wait(timeout);
+    comm->wait(timeout);
     XBT_DEBUG("Received the answer to my 'Predecessor Alive': my predecessor %d is alive", pred_id_);
     delete message;
   } catch (xbt_ex& e) {
@@ -274,10 +274,10 @@ int Node::remoteGetPredecessor(int ask_to)
   // receive the answer
   XBT_DEBUG("Sent 'Get Predecessor' request to %d, waiting for the answer on my mailbox '%s'", ask_to,
             message->answer_to->name());
-  simgrid::s4u::Comm& comm = simgrid::s4u::this_actor::irecv(return_mailbox, &data);
+  simgrid::s4u::CommPtr comm = simgrid::s4u::this_actor::irecv(return_mailbox, &data);
 
   try {
-    comm.wait(timeout);
+    comm->wait(timeout);
     ChordMessage* answer = static_cast<ChordMessage*>(data);
     XBT_DEBUG("Received the answer to my 'Get Predecessor' request: the predecessor of node %d is %d", ask_to,
               answer->answer_id);
@@ -348,10 +348,10 @@ int Node::remoteFindSuccessor(int ask_to, int id)
   }
   // receive the answer
   XBT_DEBUG("Sent a 'Find Successor' request to %d for key %d, waiting for the answer", ask_to, id);
-  simgrid::s4u::Comm& comm = simgrid::s4u::this_actor::irecv(return_mailbox, &data);
+  simgrid::s4u::CommPtr comm = simgrid::s4u::this_actor::irecv(return_mailbox, &data);
 
   try {
-    comm.wait(timeout);
+    comm->wait(timeout);
     ChordMessage* answer = static_cast<ChordMessage*>(data);
     XBT_DEBUG("Received the answer to my 'Find Successor' request for id %d: the successor of key %d is %d",
               answer->request_id, id_, answer->answer_id);
@@ -387,15 +387,7 @@ void Node::remoteNotify(int notify_id, int predecessor_candidate_id)
   // send a "Notify" request to notify_id
   XBT_DEBUG("Sending a 'Notify' request to %d", notify_id);
   simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName(std::to_string(notify_id));
-  try {
-    // TODO make it a dsend
-    simgrid::s4u::this_actor::isend(mailbox, message, 10);
-  } catch (xbt_ex& e) {
-    if (e.category == timeout_error) {
-      XBT_DEBUG("Send of 'Notify' failed due to an expired timeout on receiver side");
-      delete message;
-    }
-  }
+  simgrid::s4u::this_actor::dsend(mailbox, message, 10);
 }
 
 /* This function is called periodically. It checks the immediate successor of the current node. */
@@ -437,28 +429,14 @@ void Node::handleMessage(ChordMessage* message)
       message->answer_id = fingers_[0];
       XBT_DEBUG("Sending back a 'Find Successor Answer' to %s (mailbox %s): the successor of %d is %d",
           message->issuer_host_name.c_str(), message->answer_to->name(), message->request_id, message->answer_id);
-      // TODO Replace by dsend
-      try {
-        simgrid::s4u::this_actor::isend(message->answer_to, message, 10);
-      } catch(xbt_ex& e) {
-        if (e.category == timeout_error) {
-          XBT_DEBUG("Send of 'Find Successor Answer' failed due du an expired timeout on receiver side");
-        }
-      }
+      simgrid::s4u::this_actor::dsend(message->answer_to, message, 10);
     } else {
       // otherwise, forward the request to the closest preceding finger in my table
       int closest = closestPrecedingFinger(message->request_id);
       XBT_DEBUG("Forwarding the 'Find Successor' request for id %d to my closest preceding finger %d",
           message->request_id, closest);
       simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName(std::to_string(closest));
-      //TODO make it a dsend
-      try{
-        simgrid::s4u::this_actor::isend(mailbox, message, 10);
-      } catch (xbt_ex& e) {
-        if (e.category == timeout_error) {
-          XBT_DEBUG("Forward of 'Find Successor' failed due du an expired timeout on receiver side");
-        }
-      }
+      simgrid::s4u::this_actor::dsend(mailbox, message, 10);
     }
     break;
 
@@ -468,14 +446,7 @@ void Node::handleMessage(ChordMessage* message)
     message->answer_id = pred_id_;
     XBT_DEBUG("Sending back a 'Get Predecessor Answer' to %s via mailbox '%s': my predecessor is %d",
         message->issuer_host_name.c_str(), message->answer_to->name(), message->answer_id);
-    //TODO make it a dsend
-    try{
-      simgrid::s4u::this_actor::isend(message->answer_to, message, 10);
-    } catch (xbt_ex& e) {
-      if (e.category == timeout_error) {
-        XBT_DEBUG("Send of 'Get Predecessor Answer' failed due du an expired timeout on receiver side");
-      }
-    }
+    simgrid::s4u::this_actor::dsend(message->answer_to, message, 10);
     break;
 
   case NOTIFY:
@@ -513,14 +484,7 @@ void Node::handleMessage(ChordMessage* message)
     message->type = PREDECESSOR_ALIVE_ANSWER;
     XBT_DEBUG("Sending back a 'Predecessor Alive Answer' to %s (mailbox %s)",
         message->issuer_host_name.c_str(), message->answer_to->name());
-    //TODO Make it a dsend
-    try{
-      simgrid::s4u::this_actor::isend(message->answer_to, message, 10);
-    } catch (xbt_ex& e) {
-      if (e.category == timeout_error) {
-        XBT_DEBUG("Send of 'Predecessor Alive' failed due du an expired timeout on receiver side");
-      }
-    }
+    simgrid::s4u::this_actor::dsend(message->answer_to, message, 10);
     break;
 
   default:
index 6823989..db79af6 100644 (file)
@@ -46,14 +46,14 @@ int main(int argc, char* argv[])
                        "\tExample: %s ../msg_platform.xml chord.xml\n",
              argv[0], argv[0]);
   char** options = &argv[1];
-  while (!strncmp(options[0], "-", 1)) {
+  while (not strncmp(options[0], "-", 1)) {
     unsigned int length = strlen("-nb_bits=");
-    if (!strncmp(options[0], "-nb_bits=", length) && strlen(options[0]) > length) {
+    if (not strncmp(options[0], "-nb_bits=", length) && strlen(options[0]) > length) {
       nb_bits = xbt_str_parse_int(options[0] + length, "Invalid nb_bits parameter: %s");
       XBT_DEBUG("Set nb_bits to %d", nb_bits);
     } else {
       length = strlen("-timeout=");
-      if (!strncmp(options[0], "-timeout=", length) && strlen(options[0]) > length) {
+      if (not strncmp(options[0], "-timeout=", length) && strlen(options[0]) > length) {
         timeout = xbt_str_parse_int(options[0] + length, "Invalid timeout parameter: %s");
         XBT_DEBUG("Set timeout to %d", timeout);
       } else {
index 7b64d2c..60f3d6b 100644 (file)
@@ -118,9 +118,8 @@ public:
       join(known_id_);
     }
 
-    if (!joined)
+    if (not joined)
       return;
-    ChordMessage* message              = nullptr;
     void* data                         = nullptr;
     double now                         = simgrid::s4u::Engine::getClock();
     double next_stabilize_date         = start_time_ + PERIODIC_STABILIZE_DELAY;
@@ -129,9 +128,9 @@ public:
     double next_lookup_date            = start_time_ + PERIODIC_LOOKUP_DELAY;
 
     while ((now < (start_time_ + deadline_)) && now < MAX_SIMULATION_TIME) {
-      data                             = nullptr;
-      simgrid::s4u::Comm& comm_receive = simgrid::s4u::this_actor::irecv(mailbox_, &data);
-      while ((now < (start_time_ + deadline_)) && now < MAX_SIMULATION_TIME && !comm_receive.test()) {
+      data                               = nullptr;
+      simgrid::s4u::CommPtr comm_receive = simgrid::s4u::this_actor::irecv(mailbox_, &data);
+      while ((now < (start_time_ + deadline_)) && now < MAX_SIMULATION_TIME && not comm_receive->test()) {
         // no task was received: make some periodic calls
         if (now >= next_stabilize_date) {
           stabilize();
@@ -153,8 +152,10 @@ public:
       }
 
       if (data != nullptr) {
-        message = static_cast<ChordMessage*>(data);
+        ChordMessage* message = static_cast<ChordMessage*>(data);
         handleMessage(message);
+      } else {
+        comm_receive->cancel();
       }
       now = simgrid::s4u::Engine::getClock();
     }
index b6a69d8..3ea74d9 100644 (file)
@@ -1,26 +1,26 @@
 p Test smpi bindings for dvfs functions (Fortran 77 example)
 
 $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platform ${srcdir:=.}/../../platforms/energy_platform.xml --cfg=smpi/simulate-computation:no ${bindir:=.}/f77/sef --cfg=plugin:Energy --log=smpi_kernel.thres:warning --log=xbt_cfg.thres:warning
->  [   0.0000000000000000      ] [rank            0 ]           3  pstates available
->  [   0.0000000000000000      ] [rank            1 ]           3  pstates available
->  [   0.0000000000000000      ] [rank            0 ] Power:    100000000.00000000     
->  [   0.0000000000000000      ] [rank            1 ] Power:    100000000.00000000     
->  [   0.0000000000000000      ] [rank            0 ] Power:    50000000.000000000     
->  [   0.0000000000000000      ] [rank            1 ] Power:    50000000.000000000     
->  [   0.0000000000000000      ] [rank            0 ] Power:    20000000.000000000     
->  [   0.0000000000000000      ] [rank            1 ] Power:    20000000.000000000     
->  [   0.0000000000000000      ] [rank            0 ] Current pstate:            0 ; Current power:    100000000.00000000     
->  [   0.0000000000000000      ] [rank            1 ] Current pstate:            0 ; Current power:    100000000.00000000     
->  [   10.000000000000000      ] [rank            0 ] Energy consumed (Joules):    1200.0000000000000     
->  [   10.000000000000000      ] [rank            1 ] Energy consumed (Joules):    1200.0000000000000     
->  [   10.000000000000000      ] [rank            0 ] Current pstate:            1 ; Current power:    50000000.000000000     
->  [   10.000000000000000      ] [rank            1 ] Current pstate:            1 ; Current power:    50000000.000000000     
->  [   30.000000000000000      ] [rank            0 ] Energy consumed (Joules):    3400.0000000000000     
->  [   30.000000000000000      ] [rank            1 ] Energy consumed (Joules):    3400.0000000000000     
->  [   30.000000000000000      ] [rank            0 ] Current pstate:            2 ; Current power:    20000000.000000000     
->  [   30.000000000000000      ] [rank            1 ] Current pstate:            2 ; Current power:    20000000.000000000     
->  [   80.000000000000000      ] [rank            0 ] Energy consumed (Joules):    8650.0000000000000     
->  [   80.000000000000000      ] [rank            1 ] Energy consumed (Joules):    8650.0000000000000     
+> [     0.00000000] [rank  0]  3 pstates available
+> [     0.00000000] [rank  1]  3 pstates available
+> [     0.00000000] [rank  0] Power:  100000000.0000
+> [     0.00000000] [rank  1] Power:  100000000.0000
+> [     0.00000000] [rank  0] Power:   50000000.0000
+> [     0.00000000] [rank  1] Power:   50000000.0000
+> [     0.00000000] [rank  0] Power:   20000000.0000
+> [     0.00000000] [rank  1] Power:   20000000.0000
+> [     0.00000000] [rank  0] Current pstate:  0; Current power:  100000000.0000
+> [     0.00000000] [rank  1] Current pstate:  0; Current power:  100000000.0000
+> [    10.00000000] [rank  0] Energy consumed (Joules):       1200.0000
+> [    10.00000000] [rank  1] Energy consumed (Joules):       1200.0000
+> [    10.00000000] [rank  0] Current pstate:  1; Current power:   50000000.0000
+> [    10.00000000] [rank  1] Current pstate:  1; Current power:   50000000.0000
+> [    30.00000000] [rank  0] Energy consumed (Joules):       3400.0000
+> [    30.00000000] [rank  1] Energy consumed (Joules):       3400.0000
+> [    30.00000000] [rank  0] Current pstate:  2; Current power:   20000000.0000
+> [    30.00000000] [rank  1] Current pstate:  2; Current power:   20000000.0000
+> [    80.00000000] [rank  0] Energy consumed (Joules):       8650.0000
+> [    80.00000000] [rank  1] Energy consumed (Joules):       8650.0000
 > [80.000000] [surf_energy/INFO] Total energy consumption: 25300.000000 Joules (used hosts: 17300.000000 Joules; unused/idle hosts: 8000.000000)
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost1: 8650.000000 Joules
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 8650.000000 Joules
index 1c00d59..4cbc5a3 100644 (file)
 
       t = MPI_Wtime()
 
-      print *, '[', t, '] [rank ', rank, ']',
+      print '(1a,F15.8,1a,i2,1a,i2,1a)', '[', t, '] [rank ', rank, '] ',
      &     pstates, ' pstates available'
 
       do i = 0, pstates - 1
          p = smpi_get_host_power_peak_at(i)
-         print *, '[', t, '] [rank ', rank, '] Power: ', p
+         print '(1a,F15.8,1a,i2,1a,F15.4)', '[', t, '] [rank ',
+     &     rank, '] Power: ', p
       end do
 
       do i = 0, pstates - 1
          call smpi_set_host_pstate(i)
          t = MPI_Wtime()
          p = smpi_get_host_current_power_peak()
-         print *, '[', t, '] [rank ', rank, '] Current pstate: ', i,
-     &        '; Current power: ', p
+         print '(1a,F15.8,1a,i2,1a,i2,1a,F15.4)', '[', t, '] [rank ',
+     &         rank,'] Current pstate: ', i,'; Current power: ', p
 
          e = 1e9
          call smpi_execute_flops(e)
 
          t = MPI_Wtime()
          e = smpi_get_host_consumed_energy()
-         print *, '[', t, '] [rank ', rank, ']',
-     &        ' Energy consumed (Joules): ', e
+         print '(1a,F15.8,1a,i2,1a,1a,F15.4)', '[', t, '] [rank ',
+     &         rank, ']',' Energy consumed (Joules): ', e
       end do
 
+      flush(6)
+
       call MPI_Finalize(ierr)
       if (ierr .ne. MPI_SUCCESS) then
          print *, 'MPI_Finalize failed:', ierr
index deff318..aa6cd21 100644 (file)
@@ -1,26 +1,26 @@
 p Test smpi bindings for dvfs functions (Fortran 90 example)
 ! output sort 1
 $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile  -platform ${srcdir:=.}/../../platforms/energy_platform.xml --cfg=smpi/simulate-computation:no ${bindir:=.}/f90/sef90 --cfg=plugin:Energy  --log=smpi_kernel.thres:warning --log=xbt_cfg.thres:warning
->  [   0.0000000000000000      ] [rank            0 ]           3 pstates available
->  [   0.0000000000000000      ] [rank            1 ]           3 pstates available
->  [   0.0000000000000000      ] [rank            0 ] Power:    100000000.00000000     
->  [   0.0000000000000000      ] [rank            1 ] Power:    100000000.00000000     
->  [   0.0000000000000000      ] [rank            0 ] Power:    50000000.000000000     
->  [   0.0000000000000000      ] [rank            1 ] Power:    50000000.000000000     
->  [   0.0000000000000000      ] [rank            0 ] Power:    20000000.000000000     
->  [   0.0000000000000000      ] [rank            1 ] Power:    20000000.000000000     
->  [   0.0000000000000000      ] [rank            0 ] Current pstate:            0 ; Current power:    100000000.00000000     
->  [   0.0000000000000000      ] [rank            1 ] Current pstate:            0 ; Current power:    100000000.00000000     
->  [   10.000000000000000      ] [rank            0 ] Energy consumed (Joules):    1200.0000000000000     
->  [   10.000000000000000      ] [rank            1 ] Energy consumed (Joules):    1200.0000000000000     
->  [   10.000000000000000      ] [rank            0 ] Current pstate:            1 ; Current power:    50000000.000000000     
->  [   10.000000000000000      ] [rank            1 ] Current pstate:            1 ; Current power:    50000000.000000000     
->  [   30.000000000000000      ] [rank            0 ] Energy consumed (Joules):    3400.0000000000000     
->  [   30.000000000000000      ] [rank            1 ] Energy consumed (Joules):    3400.0000000000000     
->  [   30.000000000000000      ] [rank            0 ] Current pstate:            2 ; Current power:    20000000.000000000     
->  [   30.000000000000000      ] [rank            1 ] Current pstate:            2 ; Current power:    20000000.000000000     
->  [   80.000000000000000      ] [rank            0 ] Energy consumed (Joules):    8650.0000000000000     
->  [   80.000000000000000      ] [rank            1 ] Energy consumed (Joules):    8650.0000000000000     
+> [     0.00000000] [rank  0]  3 pstates available
+> [     0.00000000] [rank  1]  3 pstates available
+> [     0.00000000] [rank  0] Power:  100000000.0000
+> [     0.00000000] [rank  1] Power:  100000000.0000
+> [     0.00000000] [rank  0] Power:   50000000.0000
+> [     0.00000000] [rank  1] Power:   50000000.0000
+> [     0.00000000] [rank  0] Power:   20000000.0000
+> [     0.00000000] [rank  1] Power:   20000000.0000
+> [     0.00000000] [rank  0] Current pstate:  0; Current power:  100000000.0000
+> [     0.00000000] [rank  1] Current pstate:  0; Current power:  100000000.0000
+> [    10.00000000] [rank  0] Energy consumed (Joules):       1200.0000
+> [    10.00000000] [rank  1] Energy consumed (Joules):       1200.0000
+> [    10.00000000] [rank  0] Current pstate:  1; Current power:   50000000.0000
+> [    10.00000000] [rank  1] Current pstate:  1; Current power:   50000000.0000
+> [    30.00000000] [rank  0] Energy consumed (Joules):       3400.0000
+> [    30.00000000] [rank  1] Energy consumed (Joules):       3400.0000
+> [    30.00000000] [rank  0] Current pstate:  2; Current power:   20000000.0000
+> [    30.00000000] [rank  1] Current pstate:  2; Current power:   20000000.0000
+> [    80.00000000] [rank  0] Energy consumed (Joules):       8650.0000
+> [    80.00000000] [rank  1] Energy consumed (Joules):       8650.0000
 > [80.000000] [surf_energy/INFO] Total energy consumption: 25300.000000 Joules (used hosts: 17300.000000 Joules; unused/idle hosts: 8000.000000)
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost1: 8650.000000 Joules
 > [80.000000] [surf_energy/INFO] Energy consumption of host MyHost2: 8650.000000 Joules
index 14e3a71..e4f04a3 100644 (file)
@@ -28,26 +28,32 @@ program main
 
   t = MPI_Wtime()
 
-  print *, '[', t, '] [rank ', rank, ']', pstates, 'pstates available'
+  print '(1a,F15.8,1a,i2,1a,i2,1a)', '[', t, '] [rank ', rank, '] ',&
+    pstates, ' pstates available'
   do i = 0, pstates - 1
      p = smpi_get_host_power_peak_at(i)
-     print *, '[', t, '] [rank ', rank, '] Power: ', p
+     print '(1a,F15.8,1a,i2,1a,F15.4)', '[', t, '] [rank ', rank, &
+    '] Power: ', p
   end do
 
   do i = 0, pstates - 1
      call smpi_set_host_pstate(i)
      t = MPI_Wtime()
      p = smpi_get_host_current_power_peak()
-     print *, '[', t, '] [rank ', rank, '] Current pstate: ', i, '; Current power: ', p
+     print '(1a,F15.8,1a,i2,1a,i2,1a,F15.4)', '[', t, '] [rank ', &
+    rank, '] Current pstate: ', i, '; Current power: ', p
 
      e = 1e9
      call smpi_execute_flops(e)
 
      t = MPI_Wtime()
      e = smpi_get_host_consumed_energy()
-     print *, '[', t, '] [rank ', rank, '] Energy consumed (Joules): ', e
+     print '(1a,F15.8,1a,i2,1a,F15.4)', '[', t, '] [rank ', &
+    rank, '] Energy consumed (Joules): ', e
   end do
 
+  flush(6)
+
   call MPI_Finalize(ierr)
   if (ierr .ne. MPI_SUCCESS) then
      print *, 'MPI_Finalize failed:', ierr
index 8815dd3..3d2e0e9 100644 (file)
@@ -12,7 +12,7 @@
 
 int main(int argc, char **argv)
 {
-  int recv_buff, err, size, rank, i;
+  int recv_buff, err, size, rank;
   MPI_Status status;
 
   /* Initialize MPI */
@@ -33,7 +33,7 @@ int main(int argc, char **argv)
   if (rank == 0) {
     printf("MPI_ISend / MPI_IRecv Test \n");
 
-    for(i=0; i < size - 1; i++){
+    for (int i = 0; i < size - 1; i++) {
       MPI_Recv(&recv_buff, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
       printf("Message received from %d\n", recv_buff);
     }
index 213c888..5ec2c2b 100644 (file)
@@ -27,7 +27,6 @@ int main(int argc, char **argv){
   int err, size, rank;
   int recv_buff;
   MPI_Status status;
-  int CS_used = 0;
   xbt_dynar_t requests = xbt_dynar_new(sizeof(int), NULL);
 
   /* Initialize MPI */
@@ -48,6 +47,7 @@ int main(int argc, char **argv){
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
   if(rank == 0){ /* Coordinator */
+    int CS_used = 0;
     while(1){
       MPI_Recv(&recv_buff, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
       if(status.MPI_TAG == REQUEST_TAG){
index ffc0131..01188f1 100644 (file)
@@ -12,7 +12,7 @@
 
 int main(int argc, char **argv)
 {
-  int recv_buff, err, size, rank, i;
+  int recv_buff, err, size, rank;
   MPI_Status status;
 
   /* Initialize MPI */
@@ -33,7 +33,7 @@ int main(int argc, char **argv)
   if (rank == 0) {
     //printf("MPI_ISend / MPI_IRecv Test \n");
 
-    for(i=0; i < size - 1; i++){
+    for (int i = 0; i < size - 1; i++) {
       MPI_Recv(&recv_buff, 1, MPI_INT, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD, &status);
       //printf("Message received from %d\n", recv_buff);
     }
index ea0d438..078385a 100644 (file)
@@ -14,11 +14,24 @@ static void action_blah(const char* const* args)
      args is a strings array containing the blank-separated parameters found in the trace for this event instance. */
 }
 
+action_fun previous_send;
+static void overriding_send(const char* const* args)
+{
+  (*previous_send)(args); // Just call the overriden symbol. That's a toy example.
+}
+
 int main(int argc, char *argv[]) {
+  /* Setup things and register default actions */
+  smpi_replay_init(&argc, &argv);
+
   /* Connect your callback function to the "blah" event in the trace files */
   xbt_replay_action_register("blah", action_blah);
 
+  /* The send action is an override, so we have to first save its previous value in a global */
+  previous_send = xbt_replay_action_get("send");
+  xbt_replay_action_register("send", overriding_send);
+
   /* The regular run of the replayer */
-  smpi_replay_run(&argc, &argv);
+  smpi_replay_main(&argc, &argv);
   return 0;
 }
index e454081..134c852 100755 (executable)
@@ -20,8 +20,6 @@ then
     exit
 fi
 
-EXTOPT=""
-WRAPPER=""
 HOSTFILE=""
 
 while true; do
@@ -29,7 +27,7 @@ while true; do
         "-platform")
            PLATFORM="$2"
             if [ ! -f "${PLATFORM}" ]; then
-               echo "[`basename $0`] ** error: the file '${PLATFORM}' does not exist. Aborting."
+               echo "["$(basename $0)"] ** error: the file \'${PLATFORM}\' does not exist. Aborting."
                exit 1
             fi
            shift 2
@@ -37,7 +35,7 @@ while true; do
         "-hostfile")
            HOSTFILE="$2"
             if [ ! -f "${HOSTFILE}" ]; then
-               echo "[`basename $0`] ** error: the file '${HOSTFILE}' does not exist. Aborting."
+               echo "["$(basename $0)"] ** error: the file \'${HOSTFILE}\' does not exist. Aborting."
                exit 1
             fi
            shift 2
@@ -45,7 +43,7 @@ while true; do
         "-machinefile")
            HOSTFILE="$2"
             if [ ! -f "${HOSTFILE}" ]; then
-               echo "[`basename $0`] ** error: the file '${HOSTFILE}' does not exist. Aborting."
+               echo "["$(basename $0)"] ** error: the file \'${HOSTFILE}\' does not exist. Aborting."
                exit 1
             fi
            shift 2
@@ -88,7 +86,7 @@ fi
 UNROLLEDHOSTFILETMP=0
 
 #parse if our lines are terminated by :num_process
-multiple_processes=`grep -c ":" $HOSTFILE`
+multiple_processes=$(grep -c ":" $HOSTFILE)
 if [ "${multiple_processes}" -gt 0 ] ; then
     UNROLLEDHOSTFILETMP=1
     UNROLLEDHOSTFILE="$(mktemp tmphostXXXXXX)"
@@ -101,9 +99,9 @@ if [ "${multiple_processes}" -gt 0 ] ; then
 fi
 
 # Don't use wc -l to compute it to avoid issues with trailing \n at EOF
-hostfile_procs=`grep -c "[a-zA-Z0-9]" $HOSTFILE`
+hostfile_procs=$(grep -c "[a-zA-Z0-9]" $HOSTFILE)
 if [ ${hostfile_procs} = 0 ] ; then
-   echo "[`basename $0`] ** error: the hostfile '${HOSTFILE}' is empty. Aborting." >&2
+   echo "["$(basename $0)"] ** error: the hostfile \'${HOSTFILE}\' is empty. Aborting." >&2
    exit 1
 fi
 
@@ -119,15 +117,13 @@ APPLICATIONHEAD
 
 ##---- cache hostnames of hostfile---------------
 if [ -n "${HOSTFILE}" ] && [ -f ${HOSTFILE} ]; then
-    hostnames=$(cat ${HOSTFILE} | tr '\n\r' '  ')
-    NUMHOSTS=$(cat ${HOSTFILE} | wc -l)
+    hostnames=$(tr '\n\r' '  ' < ${HOSTFILE})
+    NUMHOSTS=$(wc -l < ${HOSTFILE})
 fi
 
 DESCRIPTIONFILE=$(echo $PROC_ARGS|cut -d' ' -f1)
 
 if [ -n "${DESCRIPTIONFILE}" ] && [ -f "${DESCRIPTIONFILE}" ]; then
-    NUMINSTANCES=$(cat ${DESCRIPTIONFILE} | wc -l)
-    replayinstances=$(cat ${DESCRIPTIONFILE})
     IFS_OLD=$IFS
     IFS=$'\n'
     set -f
@@ -148,10 +144,10 @@ if [ -n "${DESCRIPTIONFILE}" ] && [ -f "${DESCRIPTIONFILE}" ]; then
         fi
         
         sleeptime=$(echo "$line"|cut -d' ' -f4)
-        HAVE_SEQ="`which seq 2>/dev/null`"
+        HAVE_SEQ=$(which seq 2>/dev/null)
 
         if [ -n "${HAVE_SEQ}" ]; then
-            SEQ1=`${HAVE_SEQ} 0 $((${NUMPROCSMINE}-1))`
+            SEQ1=$( ${HAVE_SEQ} 0 $((${NUMPROCSMINE}-1)) )
         else
             cnt=0
             while (( $cnt < ${NUMPROCSMINE} )) ; do
index 72f83bb..a8816fd 100644 (file)
@@ -3,7 +3,7 @@ p Test the replay with multiple instances
 p first generate the deployment file
 $ ${srcdir:=.}/generate_multiple_deployment.sh -platform ${srcdir:=.}/../../platforms/small_platform_with_routers.xml -hostfile ${srcdir:=.}/../hostfile  ${srcdir:=.}/description_file ${srcdir:=.}/deployment.xml
 
-p This test needs maxmin/concurrency-limit=100 because it stats 64 hosts on 5 machines.
+p This test needs maxmin/concurrency-limit=100 because it starts 64 hosts on 5 machines.
 ! timeout 120
 $ ./replay_multiple description_file ${srcdir:=.}/../../platforms/small_platform_with_routers.xml ${srcdir:=.}/deployment.xml --log=smpi.:info --cfg=maxmin/concurrency-limit:100
 > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/concurrency-limit' to '100'
index 7180271..51cc923 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2010-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2010-2017. 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. */
@@ -15,18 +14,15 @@ static int master(int argc, char *argv[])
   double task_comm_size = xbt_str_parse_double(argv[3], "Invalid communication size: %s");
   long slaves_count = xbt_str_parse_int(argv[4], "Invalid amount of slaves: %s");
 
-  int i;
-
   XBT_INFO("Got %ld slaves and %ld tasks to process", slaves_count, number_of_tasks);
 
-  for (i = 0; i < number_of_tasks; i++) {
+  for (int i = 0; i < number_of_tasks; i++) {
     char mailbox[256];
     char sprintf_buffer[256];
-    msg_task_t task = NULL;
 
     snprintf(mailbox,256, "slave-%ld", i % slaves_count);
     snprintf(sprintf_buffer,256, "Task_%d", i);
-    task = MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size, NULL);
+    msg_task_t task = MSG_task_create(sprintf_buffer, task_comp_size, task_comm_size, NULL);
     if (number_of_tasks < 10000 || i % 10000 == 0)
       XBT_INFO("Sending \"%s\" (of %ld) to mailbox \"%s\"", task->name, number_of_tasks, mailbox);
 
@@ -34,7 +30,7 @@ static int master(int argc, char *argv[])
   }
 
   XBT_INFO("All tasks have been dispatched. Let's tell everybody the computation is over.");
-  for (i = 0; i < slaves_count; i++) {
+  for (int i = 0; i < slaves_count; i++) {
     char mailbox[80];
 
     snprintf(mailbox,80, "slave-%ld", i % slaves_count);
index 628f1e5..9515436 100644 (file)
@@ -9,19 +9,24 @@
 
 #ifdef __cplusplus
 
+#include "xbt/base.h"
 #include <boost/intrusive_ptr.hpp>
 
 namespace simgrid {
-  namespace s4u {
-  class Actor;
-  class Host;
-  class Link;
-  class Mailbox;
-  class NetZone;
-  }
-  namespace kernel {
-     namespace activity {
-       class ActivityImpl;
+namespace s4u {
+class Actor;
+class Comm;
+class Host;
+class Link;
+class Mailbox;
+class NetZone;
+
+XBT_PUBLIC(void) intrusive_ptr_release(Comm* c);
+XBT_PUBLIC(void) intrusive_ptr_add_ref(Comm* c);
+}
+namespace kernel {
+namespace activity {
+class ActivityImpl;
      }
      namespace routing {
      class NetPoint;
@@ -35,7 +40,7 @@ namespace simgrid {
     class Cpu;
     class LinkImpl;
     class HostImpl;
-    class Storage;
+    class StorageImpl;
   }
   namespace trace_mgr {
     class trace;
index da5bd08..777a9f4 100644 (file)
@@ -61,7 +61,7 @@ public:
 
   void set_continuation(simgrid::xbt::Task<void()>&& continuation)
   {
-    xbt_assert(!continuation_);
+    xbt_assert(not continuation_);
     switch (status_) {
     case FutureStatus::done:
       // This is not supposed to happen if continuation is set
@@ -282,7 +282,7 @@ template<class T>
 class Future {
 public:
   Future() = default;
-  Future(std::shared_ptr<FutureState<T>> state): state_(std::move(state)) {}
+  Future(std::shared_ptr<FutureState<T>> state) : state_(std::move(state)) {}
 
   // Move type:
   Future(Future&) = delete;
@@ -369,12 +369,9 @@ public:
    *                     the future is ready
    * @exception std::future_error no state is associated with the future
    */
-  template<class F>
-  auto then(F continuation)
-  -> typename std::enable_if<
-       !is_future<decltype(continuation(std::move(*this)))>::value,
-       Future<decltype(continuation(std::move(*this)))>
-     >::type
+  template <class F>
+  auto then(F continuation) -> typename std::enable_if<not is_future<decltype(continuation(std::move(*this)))>::value,
+                                                       Future<decltype(continuation(std::move(*this)))>>::type
   {
     return this->thenNoUnwrap(std::move(continuation));
   }
index 0b920bb..c362f99 100644 (file)
@@ -1,7 +1,6 @@
 /* simgrid/modelchecker.h - Formal Verification made possible in SimGrid    */
 
-/* Copyright (c) 2008-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2008-2017. 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. */
@@ -15,7 +14,6 @@
 #ifndef SIMGRID_MODELCHECKER_H
 #define SIMGRID_MODELCHECKER_H
 
-#include <stdbool.h>
 #include <stddef.h> /* size_t */
 
 #include <simgrid_config.h> /* SIMGRID_HAVE_MC ? */
@@ -49,6 +47,11 @@ XBT_PUBLIC(void) MC_automaton_new_propositional_symbol_pointer(const char *id, i
 XBT_PUBLIC(void) MC_cut(void);
 XBT_PUBLIC(void) MC_ignore(void *addr, size_t size);
 
+XBT_PUBLIC(void) MC_ignore_heap(void* address, size_t size);
+XBT_PUBLIC(void) MC_remove_ignore_heap(void* address, size_t size);
+XBT_PUBLIC(void) MC_ignore_local_variable(const char* var_name, const char* frame);
+XBT_PUBLIC(void) MC_ignore_global_variable(const char* var_name);
+
 #else
 
 #define MC_is_active()                  0
@@ -60,6 +63,11 @@ XBT_PUBLIC(void) MC_ignore(void *addr, size_t size);
 #define MC_cut()                        ((void)0)
 #define MC_ignore(a, b)                 ((void)0)
 
+#define MC_ignore_heap(a,s)             ((void)0)
+#define MC_remove_ignore_heap(a,s)      ((void)0)
+#define MC_ignore_local_variable(n,f)   ((void)0)
+#define MC_ignore_global_variable(v)    ((void)0)
+
 #endif
 
 SG_END_DECL()
index a96060d..9a6efb7 100644 (file)
@@ -7,7 +7,6 @@
 #ifndef MSG_H
 #define MSG_H
 
-#include "xbt.h"
 #include "xbt/lib.h"
 #include "simgrid/forward.h"
 #include "simgrid/simix.h"
@@ -68,7 +67,6 @@ typedef struct msg_file_priv {
   char* mount_point;
   char* storageId;
   char* storage_type;
-  char* content_type;
   int desc_id;
   void *data;
   simdata_file_t simdata;
index fe0ec58..ee32b44 100644 (file)
@@ -8,6 +8,7 @@
 
 #include <simgrid/s4u/Activity.hpp>
 #include <simgrid/s4u/Actor.hpp>
+#include <simgrid/s4u/Comm.hpp>
 #include <simgrid/s4u/Engine.hpp>
 #include <simgrid/s4u/Host.hpp>
 #include <simgrid/s4u/Link.hpp>
index 1cdd79e..b85daaa 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2006-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2006-2017. 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. */
@@ -7,17 +6,10 @@
 #ifndef SIMGRID_S4U_ACTIVITY_HPP
 #define SIMGRID_S4U_ACTIVITY_HPP
 
-#include <cstdlib>
-
-#include <xbt/base.h>
-#include <xbt/misc.h>
-
 #include <simgrid/s4u/forward.hpp>
 #include <simgrid/forward.h>
 
-typedef enum {
-  inited, started, finished
-} e_s4u_activity_state_t;
+typedef enum { inited = 0, started, canceled, errored, finished } e_s4u_activity_state_t;
 
 namespace simgrid {
 namespace s4u {
@@ -28,6 +20,9 @@ namespace s4u {
  */
 XBT_PUBLIC_CLASS Activity {
   friend Comm;
+  friend void intrusive_ptr_release(Comm * c);
+  friend void intrusive_ptr_add_ref(Comm * c);
+
 protected:
   Activity();
   virtual ~Activity();
index bef7072..5517dc6 100644 (file)
 #include <utility>
 #include <vector>
 
-#include <boost/intrusive_ptr.hpp>
-
 #include <xbt/Extendable.hpp>
-#include <xbt/base.h>
 #include <xbt/functional.hpp>
 #include <xbt/string.hpp>
 
 #include <simgrid/chrono.hpp>
-#include <simgrid/simix.h>
 #include <simgrid/s4u/forward.hpp>
 
 namespace simgrid {
@@ -310,7 +306,7 @@ namespace this_actor {
    * See \ref Comm for the full communication API (including non blocking communications).
    */
   XBT_PUBLIC(void*) recv(MailboxPtr chan);
-  XBT_PUBLIC(Comm&) irecv(MailboxPtr chan, void** data);
+  XBT_PUBLIC(CommPtr) irecv(MailboxPtr chan, void** data);
 
   /** Block the actor until it delivers a message of the given simulated size to the given mailbox
    *
@@ -319,7 +315,8 @@ namespace this_actor {
   XBT_PUBLIC(void) send(MailboxPtr chan, void* payload, double simulatedSize);
   XBT_PUBLIC(void) send(MailboxPtr chan, void* payload, double simulatedSize, double timeout);
 
-  XBT_PUBLIC(Comm&) isend(MailboxPtr chan, void* payload, double simulatedSize);
+  XBT_PUBLIC(CommPtr) isend(MailboxPtr chan, void* payload, double simulatedSize);
+  XBT_PUBLIC(void) dsend(MailboxPtr chan, void* payload, double simulatedSize);
 
   /** @brief Returns the actor ID of the current actor (same as pid). */
   XBT_PUBLIC(aid_t) pid();
@@ -351,7 +348,7 @@ namespace this_actor {
   XBT_PUBLIC(void) migrate(Host* new_host);
 };
 
-/** @} */
+/** @} */
 
 }} // namespace simgrid::s4u
 
index e2db122..d889b61 100644 (file)
@@ -14,7 +14,6 @@
 
 namespace simgrid {
 namespace s4u {
-
 /** @brief Communication async
  *
  * Represents all asynchronous communications, that you can test or wait onto.
@@ -23,7 +22,10 @@ XBT_PUBLIC_CLASS Comm : public Activity
 {
   Comm() : Activity() {}
 public:
-  virtual ~Comm() = default;
+  friend void intrusive_ptr_release(simgrid::s4u::Comm * c);
+  friend void intrusive_ptr_add_ref(simgrid::s4u::Comm * c);
+
+  virtual ~Comm();
 
   /*! take a range of s4u::Comm* (last excluded) and return when one of them is finished. The return value is an
    * iterator on the finished Comms. */
@@ -73,13 +75,16 @@ public:
     return res;
   }
   /** Creates (but don't start) an async send to the mailbox @p dest */
-  static Comm& send_init(MailboxPtr dest);
+  static CommPtr send_init(MailboxPtr dest);
   /** Creates and start an async send to the mailbox @p dest */
-  static Comm& send_async(MailboxPtr dest, void* data, int simulatedByteAmount);
+  static CommPtr send_async(MailboxPtr dest, void* data, int simulatedByteAmount);
   /** Creates (but don't start) an async recv onto the mailbox @p from */
-  static Comm& recv_init(MailboxPtr from);
+  static CommPtr recv_init(MailboxPtr from);
   /** Creates and start an async recv to the mailbox @p from */
-  static Comm& recv_async(MailboxPtr from, void** data);
+  static CommPtr recv_async(MailboxPtr from, void** data);
+  /** Creates and start a detached send to the mailbox @p dest
+   *  TODO: make it possible to detach an already created comm */
+  static void send_detached(MailboxPtr dest, void* data, int simulatedSize);
 
   void start() override;
   void wait() override;
@@ -103,6 +108,7 @@ public:
   size_t getDstDataSize();
 
   bool test();
+  void cancel();
 
 private:
   double rate_        = -1;
@@ -120,6 +126,8 @@ private:
   smx_actor_t sender_   = nullptr;
   smx_actor_t receiver_ = nullptr;
   MailboxPtr mailbox_   = nullptr;
+
+  std::atomic_int_fast32_t refcount_{0};
 };
 }
 } // namespace simgrid::s4u
index c087a0e..b1e2be3 100644 (file)
@@ -52,7 +52,7 @@ public:
   void wait(std::unique_lock<Mutex> & lock);
   template <class P> void wait(std::unique_lock<Mutex> & lock, P pred)
   {
-    while (!pred())
+    while (not pred())
       wait(lock);
   }
 
@@ -62,7 +62,7 @@ public:
   std::cv_status wait_for(std::unique_lock<Mutex> & lock, double duration);
   template <class P> bool wait_until(std::unique_lock<Mutex> & lock, double timeout_time, P pred)
   {
-    while (!pred())
+    while (not pred())
       if (this->wait_until(lock, timeout_time) == std::cv_status::timeout)
         return pred();
     return true;
index 999098f..665f2c8 100644 (file)
@@ -83,7 +83,7 @@ public:
   /** Returns if that host is currently up and running */
   bool isOn();
   /** Returns if that host is currently down and offline */
-  bool isOff() { return !isOn(); }
+  bool isOff() { return not isOn(); }
 
   double speed();
   int coreCount();
index 3603d18..05199bd 100644 (file)
@@ -35,9 +35,9 @@ class ConditionVariable;
  */
 XBT_PUBLIC_CLASS Mutex {
   friend ConditionVariable;
-  friend simgrid::simix::Mutex;
-  simgrid::simix::Mutex* mutex_;
-  Mutex(simgrid::simix::Mutex* mutex) : mutex_(mutex) {}
+  friend simgrid::simix::MutexImpl;
+  simgrid::simix::MutexImpl* mutex_;
+  Mutex(simgrid::simix::MutexImpl * mutex) : mutex_(mutex) {}
 
   /* refcounting of the intrusive_ptr is delegated to the implementation object */
   friend void intrusive_ptr_add_ref(Mutex* mutex)
index 8341632..10c8d85 100644 (file)
@@ -16,6 +16,7 @@ using ActorPtr = boost::intrusive_ptr<Actor>;
 
 class Activity;
 class Comm;
+using CommPtr = boost::intrusive_ptr<Comm>;
 class Engine;
 class Host;
 class Mailbox;
index 02fdab7..78dbe75 100644 (file)
@@ -34,13 +34,13 @@ namespace context {
       \see m_process_management
     @{ */
   class ActorImpl;
-  class Mutex;
+  class MutexImpl;
 }
 }
 
 typedef simgrid::kernel::context::Context* smx_context_t;
 typedef simgrid::simix::ActorImpl* smx_actor_t;
-typedef simgrid::simix::Mutex* smx_mutex_t;
+typedef simgrid::simix::MutexImpl* smx_mutex_t;
 typedef simgrid::kernel::activity::MailboxImpl* smx_mailbox_t;
 
 #else
@@ -226,6 +226,8 @@ XBT_PUBLIC(smx_activity_t) SIMIX_comm_get_send_match(smx_mailbox_t mbox, int (*m
 XBT_PUBLIC(int) SIMIX_comm_has_send_match(smx_mailbox_t mbox, int (*match_fun)(void*, void*), void* data);
 XBT_PUBLIC(int) SIMIX_comm_has_recv_match(smx_mailbox_t mbox, int (*match_fun)(void*, void*), void* data);
 XBT_PUBLIC(void) SIMIX_comm_finish(smx_activity_t synchro);
+XBT_PUBLIC(smx_activity_t) SIMIX_comm_ref(smx_activity_t comm);
+XBT_PUBLIC(void) SIMIX_comm_unref(smx_activity_t comm);
 
 /******************************************************************************/
 /*                            SIMIX simcalls                                  */
index a09f323..7e0e9e3 100644 (file)
@@ -7,14 +7,7 @@
 #ifndef SIMGRID_SIMIX_HPP
 #define SIMGRID_SIMIX_HPP
 
-#include <cstddef>
-
-#include <string>
-#include <utility>
-#include <memory>
-#include <functional>
-
-#include <xbt/function_types.h>
+//#include <xbt/function_types.h>
 #include <xbt/future.hpp>
 #include <xbt/functional.hpp>
 #include <xbt/signal.hpp>
index 6341521..88e522c 100644 (file)
@@ -87,7 +87,7 @@ public:
   bool valid() const { return future_.valid(); }
   T get()
   {
-    if (!valid())
+    if (not valid())
       throw std::future_error(std::future_errc::no_state);
     smx_actor_t self = SIMIX_process_self();
     simgrid::xbt::Result<T> result;
@@ -109,7 +109,7 @@ public:
   }
   bool is_ready() const
   {
-    if (!valid())
+    if (not valid())
       throw std::future_error(std::future_errc::no_state);
     return future_.is_ready();
   }
index 2b54c71..11c67ee 100644 (file)
@@ -918,7 +918,9 @@ XBT_PUBLIC(int) smpi_process_index();
 XBT_PUBLIC(void) smpi_process_init(int *argc, char ***argv);
 
 /* Trace replay specific stuff */
-XBT_PUBLIC(void) smpi_replay_run(int *argc, char***argv);
+XBT_PUBLIC(void) smpi_replay_init(int* argc, char*** argv); // Only initialization
+XBT_PUBLIC(void) smpi_replay_main(int* argc, char*** argv); // Launch the replay once init is done
+XBT_PUBLIC(void) smpi_replay_run(int* argc, char*** argv);  // Both init and start
 
 XBT_PUBLIC(void) SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_processes);
 XBT_PUBLIC(void) SMPI_init();
@@ -987,4 +989,17 @@ if(!name) {                                         \
 
 
 SG_END_DECL()
+
+/* C++ declarations for shared_malloc */
+#ifdef __cplusplus
+#include <vector>
+
+XBT_PUBLIC(int) smpi_is_shared(void* ptr, std::vector<std::pair<size_t, size_t>>& private_blocks, size_t* offset);
+
+std::vector<std::pair<size_t, size_t>> shift_and_frame_private_blocks(const std::vector<std::pair<size_t, size_t>> vec,
+                                                                      size_t offset, size_t buff_size);
+std::vector<std::pair<size_t, size_t>> merge_private_blocks(std::vector<std::pair<size_t, size_t>> src,
+                                                            std::vector<std::pair<size_t, size_t>> dst);
+#endif
+
 #endif
diff --git a/include/smpi/smpi_shared_malloc.hpp b/include/smpi/smpi_shared_malloc.hpp
deleted file mode 100644 (file)
index a047bf8..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef SMPI_SHARED_HPP
-#define SMPI_SHARED_HPP
-#include <xbt/function_types.h>
-#include <xbt/misc.h>
-#include <vector>
-
-
-/*
- * We cannot put this declaration in smpi.h, since we use C++ features.
- */
-
-
-XBT_PUBLIC(int) smpi_is_shared(void* ptr, std::vector<std::pair<size_t, size_t>> &private_blocks, size_t *offset);
-
-std::vector<std::pair<size_t, size_t>> shift_and_frame_private_blocks(const std::vector<std::pair<size_t, size_t>> vec, size_t offset, size_t buff_size);
-std::vector<std::pair<size_t, size_t>> merge_private_blocks(std::vector<std::pair<size_t, size_t>> src, std::vector<std::pair<size_t, size_t>> dst);
-
-#endif
index 83fa79e..2d19df1 100644 (file)
@@ -14,7 +14,6 @@ SG_BEGIN_DECL()
 // FIXME: this header file should die
 
 XBT_PUBLIC_DATA(xbt_lib_t) storage_lib;
-XBT_PUBLIC_DATA(int) ROUTING_STORAGE_LEVEL;        //Routing storage level
 XBT_PUBLIC_DATA(int) SURF_STORAGE_LEVEL;  // Surf storage level
 
 SG_END_DECL()
index 1c78e9a..5c3dad8 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. */
 
-#ifndef _XBT_AUTOMATON_HPP
-#define _XBT_AUTOMATON_HPP
+#ifndef XBT_AUTOMATON_HPP
+#define XBT_AUTOMATON_HPP
 
 #include <utility>
 
index 4e0e222..f5b3c95 100644 (file)
@@ -168,8 +168,8 @@ typename std::enable_if<std::is_same<
 bindFlag(T& value, const char* name, const char* description,
   F callback)
 {
-  declareFlag(name, description, value, [&value,callback](const T& val) {
-    if (!callback(val))
+  declareFlag(name, description, value, [&value, callback](const T& val) {
+    if (not callback(val))
       throw std::range_error("invalid value");
     value = std::move(val);
   });
index 9be76a2..ea18bc0 100644 (file)
@@ -104,9 +104,7 @@ template<class E>
 class WithContext : public E, public WithContextException
 {
 public:
-
-  static_assert(!std::is_base_of<WithContextException,E>::value,
-    "Trying to appli WithContext twice");
+  static_assert(not std::is_base_of<WithContextException, E>::value, "Trying to appli WithContext twice");
 
   WithContext(E exception) :
     E(std::move(exception)) {}
index 10c16bf..ca034ba 100644 (file)
@@ -21,8 +21,8 @@
 #include <utility>
 #include <vector>
 
-#include <xbt/sysdep.h>
-#include <xbt/utility.hpp>
+#include "xbt/sysdep.h"
+#include "xbt/utility.hpp"
 
 namespace simgrid {
 namespace xbt {
@@ -232,9 +232,7 @@ private:
     vtable_ = &vtable;
   }
 
-  template<class F>
-  typename std::enable_if<!canSBO<F>()>::type
-  init(F code)
+  template <class F> typename std::enable_if<not canSBO<F>()>::type init(F code)
   {
     const static TaskVtable vtable {
       // Call:
diff --git a/include/xbt/matrix.h b/include/xbt/matrix.h
deleted file mode 100644 (file)
index 6d0d3cb..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* xbt_matrix_t management functions                                        */
-
-/* Copyright (c) 2006-2007, 2009-2010, 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_MATRIX_H
-#define XBT_MATRIX_H
-
-#include "xbt/misc.h"
-#include "xbt/function_types.h"
-
-SG_BEGIN_DECL()
-
-typedef struct {
-  unsigned int lines;
-  unsigned int rows;
-  unsigned long elmsize;
-
-  char *data;
-  void_f_pvoid_t free_f;
-} s_xbt_matrix_t;
-typedef s_xbt_matrix_t* xbt_matrix_t;
-
-  /** @brief Retrieve the address of a cell (not its content)
-   *  @hideinitializer */
-#define xbt_matrix_get_ptr(mat,l,c) \
-  ((void*)&(mat)->data[(c)*(mat)->lines*(mat)->elmsize + (l)*(mat)->elmsize])
-
-  /** @brief Quick retrieval of scalar content
-   *  @hideinitializer */
-#define xbt_matrix_get_as(mat,l,c,type) *(type*)xbt_matrix_get_ptr(mat,l,c)
-
-XBT_PUBLIC(xbt_matrix_t) xbt_matrix_new(int lines, int rows, const unsigned long elmsize, void_f_pvoid_t const free_f);
-XBT_PUBLIC(xbt_matrix_t) xbt_matrix_new_sub(xbt_matrix_t from, int lsize, int rsize, int lpos, int rpos,
-                                            pvoid_f_pvoid_t const cpy_f);
-XBT_PUBLIC(void) xbt_matrix_free(xbt_matrix_t matrix);
-
-XBT_PUBLIC(void) xbt_matrix_copy_values(xbt_matrix_t dest, xbt_matrix_t src, unsigned int lsize, unsigned int rsize,
-                                        unsigned int lpos_dst, unsigned int rpos_dst, unsigned int lpos_src,
-                                        unsigned int rpos_src, pvoid_f_pvoid_t const cpy_f);
-
-XBT_PUBLIC(void) xbt_matrix_dump(xbt_matrix_t matrix, const char *name, int coords, void_f_pvoid_t display_fun);
-
-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_seq(int lines, int rows);
-XBT_PUBLIC(void) xbt_matrix_double_addmult(xbt_matrix_t A, xbt_matrix_t B, /*OUT*/ xbt_matrix_t C);
-SG_END_DECL()
-#endif                          /* XBT_MATRIX_H */
index 0f10bef..c89cf98 100644 (file)
@@ -55,11 +55,10 @@ static inline unsigned int xbt_str_hash_ext(const char *str, int str_len)
 {
 #ifdef XBT_DJB2_HASH_FUNCTION
   /* fast implementation of djb2 algorithm */
-  int c;
   unsigned int hash = 5381;
 
   while (str_len--) {
-    c = *str++;
+    int c = *str++;
     hash = ((hash << 5) + hash) + c;    /* hash * 33 + c */
   }
 # elif defined(XBT_FNV_HASH_FUNCTION)
index b163867..9343ce6 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2015-2017. 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. */
@@ -209,7 +208,7 @@ public:
   template<class X>
   bool operator!=(X const& that) const
   {
-    return !((*this) == that);
+    return not (*this == that);
   }
 
   // Compare:
index 80b897e..2151a65 100644 (file)
@@ -3,7 +3,7 @@
 
 sonar.projectKey=simgrid
 sonar.projectName=SimGrid
-sonar.projectVersion=3.15
+sonar.projectVersion=3.16
 
 sonar.links.homepage=http://simgrid.org
 sonar.links.issue=https://github.com/simgrid/simgrid/issues
@@ -13,7 +13,7 @@ sonar.sources=src,examples,include,teshsuite
 
 
 # Disable some rules on some files
-sonar.issue.ignore.multicriteria=j1,jni1,jni2,c1,c2a,c2b,c3,c4a,c4b,f1
+sonar.issue.ignore.multicriteria=j1,jni1,jni2,c1,c2a,c2b,c3,c4a,c4b,c5a,c5b,f1
 
 # The Object.finalize() method should not be overriden
 # But we need to clean the native memory with JNI
@@ -55,6 +55,13 @@ sonar.issue.ignore.multicriteria.c4a.resourceKey=examples/**/*.cpp
 sonar.issue.ignore.multicriteria.c4b.ruleKey=cpp:GlobalNamespaceMembers 
 sonar.issue.ignore.multicriteria.c4b.resourceKey=examples/**/*.hpp
 
+# Replace alternative operator "not" with "!"
+# I like it better so please leave me alone
+sonar.issue.ignore.multicriteria.c5a.ruleKey=cpp:S3659
+sonar.issue.ignore.multicriteria.c5a.resourceKey=**/*.cpp
+sonar.issue.ignore.multicriteria.c5b.ruleKey=cpp:S3659
+sonar.issue.ignore.multicriteria.c5b.resourceKey=**/*.hpp
+
 
 # "reinterpret_cast" should not be used
 # But we need this to interface C and Fortran
@@ -73,7 +80,7 @@ sonar.exclusions=src/*_unit.c*,teshsuite/smpi/mpich3-test/**,teshsuite/smpi/isp/
 
 # Exclude our examples from the duplication detection.
 # Examples are expected to be somehow repetitive
-sonar.cpd.exclusions=examples/**
+sonar.cpd.exclusions=examples/**,teshsuite/**
 
 # The build-wrapper output dir
 sonar.cfamily.build-wrapper-output=bw-outputs
index a677fda..abb1bac 100644 (file)
@@ -174,12 +174,12 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Msg_environmentGetRoutingRoot(JNI
 {
   msg_netzone_t as = MSG_zone_get_root();
   jobject jas      = jnetzone_new_instance(env);
-  if (!jas) {
+  if (not jas) {
     jxbt_throw_jni(env, "java As instantiation failed");
     return nullptr;
   }
   jas = jnetzone_ref(env, jas);
-  if (!jas) {
+  if (not jas) {
     jxbt_throw_jni(env, "new global ref allocation failed");
     return nullptr;
   }
index 09d996d..af1aa6f 100644 (file)
@@ -68,24 +68,24 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_As_getSons(JNIEnv * env, job
 
   jclass cls = env->FindClass("org/simgrid/msg/As");
 
-  if (!cls)
+  if (not cls)
     return nullptr;
 
   jtable = env->NewObjectArray(static_cast<jsize>(self_as->children()->size()), cls, nullptr);
 
-  if (!jtable) {
+  if (not jtable) {
     jxbt_throw_jni(env, "Hosts table allocation failed");
     return nullptr;
   }
 
   for (auto tmp_as : *self_as->children()) {
     jobject tmp_jas = jnetzone_new_instance(env);
-    if (!tmp_jas) {
+    if (not tmp_jas) {
       jxbt_throw_jni(env, "java As instantiation failed");
       return nullptr;
     }
     tmp_jas = jnetzone_ref(env, tmp_jas);
-    if (!tmp_jas) {
+    if (not tmp_jas) {
       jxbt_throw_jni(env, "new global ref allocation failed");
       return nullptr;
     }
@@ -100,14 +100,14 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_As_getSons(JNIEnv * env, job
 JNIEXPORT jobject JNICALL Java_org_simgrid_msg_As_getProperty(JNIEnv *env, jobject jas, jobject jname) {
   simgrid::s4u::NetZone* as = jnetzone_get_native(env, jas);
 
-  if (!as) {
+  if (not as) {
     jxbt_throw_notbound(env, "as", jas);
     return nullptr;
   }
   const char *name = env->GetStringUTFChars(static_cast<jstring>(jname), 0);
 
   const char* property = MSG_zone_get_property_value(as, name);
-  if (!property) {
+  if (not property) {
     return nullptr;
   }
 
@@ -126,7 +126,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_As_getHosts(JNIEnv * env, jo
   simgrid::s4u::NetZone* as = jnetzone_get_native(env, jas);
 
   jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host");
-  if (!cls)
+  if (not cls)
     return nullptr;
 
   std::vector<sg_host_t> table;
@@ -134,7 +134,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_As_getHosts(JNIEnv * env, jo
 
   jtable = env->NewObjectArray(static_cast<jsize>(table.size()), cls, nullptr);
 
-  if (!jtable) {
+  if (not jtable) {
     jxbt_throw_jni(env, "Hosts table allocation failed");
     return nullptr;
   }
@@ -142,7 +142,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_As_getHosts(JNIEnv * env, jo
   int index = 0;
   for (auto host : table) {
     jhost = static_cast<jobject>(host->extension(JAVA_HOST_LEVEL));
-    if (!jhost) {
+    if (not jhost) {
       jname = env->NewStringUTF(host->cname());
 
       jhost = Java_org_simgrid_msg_Host_getByName(env, cls, jname);
index 320b159..8d52bfe 100644 (file)
@@ -78,7 +78,7 @@ JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_Comm_test(JNIEnv *env, jobject j
     return JNI_TRUE;
   }
 
-  if (!comm) {
+  if (not comm) {
     jxbt_throw_null(env, bprintf("comm is null"));
     return JNI_FALSE;
   }
@@ -98,7 +98,7 @@ JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_Comm_test(JNIEnv *env, jobject j
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Comm_waitCompletion(JNIEnv *env, jobject jcomm, jdouble timeout) {
   msg_comm_t comm = (msg_comm_t) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_bind);
-  if (!comm) {
+  if (not comm) {
     jxbt_throw_null(env, bprintf("comm is null"));
     return;
   }
@@ -129,7 +129,7 @@ static msg_comm_t* jarray_to_commArray(JNIEnv *env, jobjectArray jcomms, /* OUT
         break;
 
      comms[i] = (msg_comm_t) (uintptr_t) env->GetLongField(jcomm, jcomm_field_Comm_bind);
-     if (!comms[i]) {
+     if (not comms[i]) {
        jxbt_throw_null(env, bprintf("comm at rank %d is null", i));
        return nullptr;
      }
@@ -142,7 +142,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Comm_waitAll(JNIEnv *env, jclass cls
 {
   int count;
   msg_comm_t* comms = jarray_to_commArray(env, jcomms, &count);
-  if (!comms)
+  if (not comms)
     return;
 
   MSG_comm_waitall(comms, count, static_cast<double>(timeout));
@@ -152,7 +152,7 @@ JNIEXPORT int JNICALL Java_org_simgrid_msg_Comm_waitAny(JNIEnv *env, jclass cls,
 {
   int count;
   msg_comm_t* comms = jarray_to_commArray(env, jcomms, &count);
-  if (!comms)
+  if (not comms)
     return -1;
   xbt_dynar_t dyn = xbt_dynar_new(sizeof(msg_comm_t),nullptr);
   for (int i=0; i<count; i++) {
index 1169daf..2cf5b28 100644 (file)
@@ -62,18 +62,18 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Host_getByName(JNIEnv * env, jcla
   /* get the host by name       (the hosts are created during the grid resolution) */
   msg_host_t host = MSG_host_by_name(name);
 
-  if (!host) {                  /* invalid name */
+  if (not host) { /* invalid name */
     jxbt_throw_host_not_found(env, name);
     env->ReleaseStringUTFChars(jname, name);
     return nullptr;
   }
   env->ReleaseStringUTFChars(jname, name);
 
-  if (!host->extension(JAVA_HOST_LEVEL)) {       /* native host not associated yet with java host */
+  if (not host->extension(JAVA_HOST_LEVEL)) { /* native host not associated yet with java host */
     /* Instantiate a new java host */
     jobject jhost = jhost_new_instance(env);
 
-    if (!jhost) {
+    if (not jhost) {
       jxbt_throw_jni(env, "java host instantiation failed");
       return nullptr;
     }
@@ -81,7 +81,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Host_getByName(JNIEnv * env, jcla
     /* get a global reference to the newly created host */
     jhost = jhost_ref(env, jhost);
 
-    if (!jhost) {
+    if (not jhost) {
       jxbt_throw_jni(env, "new global ref allocation failed");
       return nullptr;
     }
@@ -103,13 +103,13 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Host_currentHost(JNIEnv * env, jc
 
   msg_host_t host = MSG_host_self();
 
-  if (!host->extension(JAVA_HOST_LEVEL)) {
+  if (not host->extension(JAVA_HOST_LEVEL)) {
     /* the native host not yet associated with the java host instance */
 
     /* instanciate a new java host instance */
     jhost = jhost_new_instance(env);
 
-    if (!jhost) {
+    if (not jhost) {
       jxbt_throw_jni(env, "java host instantiation failed");
       return nullptr;
     }
@@ -117,7 +117,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Host_currentHost(JNIEnv * env, jc
     /* get a global reference to the newly created host */
     jhost = jhost_ref(env, jhost);
 
-    if (!jhost) {
+    if (not jhost) {
       jxbt_throw_jni(env, "global ref allocation failed");
       return nullptr;
     }
@@ -154,7 +154,7 @@ JNIEXPORT jint JNICALL Java_org_simgrid_msg_Host_getCount(JNIEnv * env, jclass c
 JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getSpeed(JNIEnv * env, jobject jhost) {
   msg_host_t host = jhost_get_native(env, jhost);
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return -1;
   }
@@ -165,7 +165,7 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getSpeed(JNIEnv * env, jobje
 JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getCoreNumber(JNIEnv * env, jobject jhost) {
   msg_host_t host = jhost_get_native(env, jhost);
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return -1;
   }
@@ -176,14 +176,14 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getCoreNumber(JNIEnv * env,
 JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Host_getProperty(JNIEnv *env, jobject jhost, jobject jname) {
   msg_host_t host = jhost_get_native(env, jhost);
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return nullptr;
   }
   const char *name = env->GetStringUTFChars((jstring) jname, 0);
 
   const char *property = MSG_host_get_property_value(host, name);
-  if (!property) {
+  if (not property) {
     return nullptr;
   }
 
@@ -198,7 +198,7 @@ JNIEXPORT void JNICALL
 Java_org_simgrid_msg_Host_setProperty(JNIEnv *env, jobject jhost, jobject jname, jobject jvalue) {
   msg_host_t host = jhost_get_native(env, jhost);
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return;
   }
@@ -216,7 +216,7 @@ JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_Host_isOn(JNIEnv * env, jobject
 {
   msg_host_t host = jhost_get_native(env, jhost);
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return 0;
   }
@@ -230,7 +230,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getMountedStorage(JNIEn
   jobject jstorage;
   jstring jname;
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return 0;
   }
@@ -243,9 +243,9 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getMountedStorage(JNIEn
 
   jtable = env->NewObjectArray((jsize) count, cls, nullptr);
 
-  if (!jtable) {
-   jxbt_throw_jni(env, "Storages table allocation failed");
-   return nullptr;
+  if (not jtable) {
+    jxbt_throw_jni(env, "Storages table allocation failed");
+    return nullptr;
   }
 
   xbt_dict_cursor_t cursor=nullptr;
@@ -266,7 +266,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getAttachedStorage(JNIE
 {
   msg_host_t host = jhost_get_native(env, jhost);
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return 0;
   }
@@ -290,7 +290,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_getStorageContent(JNIEn
 {
   msg_host_t host = jhost_get_native(env, jhost);
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return 0;
   }
@@ -304,12 +304,12 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_all(JNIEnv * env, jclas
   int count = xbt_dynar_length(table);
 
   jclass cls = jxbt_get_class(env, "org/simgrid/msg/Host");
-  if (!cls)
+  if (not cls)
     return nullptr;
 
   jobjectArray jtable = env->NewObjectArray((jsize)count, cls, nullptr);
 
-  if (!jtable) {
+  if (not jtable) {
     jxbt_throw_jni(env, "Hosts table allocation failed");
     return nullptr;
   }
@@ -318,7 +318,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Host_all(JNIEnv * env, jclas
     msg_host_t host = xbt_dynar_get_as(table, index, msg_host_t);
     jobject jhost   = static_cast<jobject>(host->extension(JAVA_HOST_LEVEL));
 
-    if (!jhost) {
+    if (not jhost) {
       jstring jname = env->NewStringUTF(host->cname());
       jhost         = Java_org_simgrid_msg_Host_getByName(env, cls_arg, jname);
     }
@@ -340,7 +340,7 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Host_getConsumedEnergy (JNIEnv *e
 {
   msg_host_t host = jhost_get_native(env, jhost);
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return 0;
   }
index 400ab15..8fcbe02 100644 (file)
@@ -100,14 +100,14 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Process_fromPID(JNIEnv * env, jcl
 {
   msg_process_t process = MSG_process_from_PID(pid);
 
-  if (!process) {
+  if (not process) {
     jxbt_throw_process_not_found(env, bprintf("PID = %d",static_cast<int>(pid)));
     return nullptr;
   }
 
   jobject jprocess = jprocess_from_native(process);
 
-  if (!jprocess) {
+  if (not jprocess) {
     jxbt_throw_jni(env, "get process failed");
     return nullptr;
   }
@@ -118,14 +118,14 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Process_fromPID(JNIEnv * env, jcl
 JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Process_getProperty(JNIEnv *env, jobject jprocess, jobject jname) {
   msg_process_t process = jprocess_to_native(jprocess, env);
 
-  if (!process) {
+  if (not process) {
     jxbt_throw_notbound(env, "process", jprocess);
     return nullptr;
   }
   const char *name = env->GetStringUTFChars((jstring)jname, 0);
 
   const char *property = MSG_process_get_property_value(process, name);
-  if (!property)
+  if (not property)
     return nullptr;
 
   jobject jproperty = env->NewStringUTF(property);
@@ -138,7 +138,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Process_getProperty(JNIEnv *env,
 JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Process_getCurrentProcess(JNIEnv * env, jclass cls)
 {
   jobject jprocess = jprocess_from_native(MSG_process_self());
-  if (!jprocess)
+  if (not jprocess)
     jxbt_throw_jni(env, xbt_strdup("SIMIX_process_get_jprocess() failed"));
 
   return jprocess;
@@ -148,7 +148,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_suspend(JNIEnv * env, jobjec
 {
   msg_process_t process = jprocess_to_native(jprocess, env);
 
-  if (!process) {
+  if (not process) {
     jxbt_throw_notbound(env, "process", jprocess);
     return;
   }
@@ -163,7 +163,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_resume(JNIEnv * env, jobject
 {
   msg_process_t process = jprocess_to_native(jprocess, env);
 
-  if (!process) {
+  if (not process) {
     jxbt_throw_notbound(env, "process", jprocess);
     return;
   }
@@ -177,7 +177,7 @@ JNIEXPORT void
 JNICALL Java_org_simgrid_msg_Process_setAutoRestart (JNIEnv *env, jobject jprocess, jboolean jauto_restart) {
 
   msg_process_t process = jprocess_to_native(jprocess, env);
-  if (!process) {
+  if (not process) {
     jxbt_throw_notbound(env, "process", jprocess);
     return;
   }
@@ -189,7 +189,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_restart (JNIEnv *env, jobjec
   msg_process_t process = jprocess_to_native(jprocess, env);
   xbt_ex_t e;
 
-  if (!process) {
+  if (not process) {
     jxbt_throw_notbound(env, "process", jprocess);
     return;
   }
@@ -206,7 +206,7 @@ JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_Process_isSuspended(JNIEnv * env
 {
   msg_process_t process = jprocess_to_native(jprocess, env);
 
-  if (!process) {
+  if (not process) {
     jxbt_throw_notbound(env, "process", jprocess);
     return 0;
   }
@@ -250,7 +250,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_kill(JNIEnv * env, jobject j
 {
   /* get the native instances from the java ones */
   msg_process_t process = jprocess_to_native(jprocess, env);
-  if (!process) {
+  if (not process) {
     jxbt_throw_notbound(env, "process", jprocess);
     return;
   }
@@ -267,14 +267,14 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Process_migrate(JNIEnv * env, jobjec
 {
   msg_process_t process = jprocess_to_native(jprocess, env);
 
-  if (!process) {
+  if (not process) {
     jxbt_throw_notbound(env, "process", jprocess);
     return;
   }
 
   msg_host_t host = jhost_get_native(env, jhost);
 
-  if (!host) {
+  if (not host) {
     jxbt_throw_notbound(env, "host", jhost);
     return;
   }
index aa1a050..0bb54a2 100644 (file)
@@ -16,7 +16,7 @@ jfieldID jrngstream_bind;
 
 RngStream jrngstream_to_native(JNIEnv *env, jobject jrngstream) {
   RngStream rngstream = (RngStream)(intptr_t)env->GetLongField(jrngstream, jrngstream_bind);
-  if (!rngstream) {
+  if (not rngstream) {
     jxbt_throw_notbound(env, "rngstream", jrngstream);
     return nullptr;
   }
@@ -67,7 +67,7 @@ Java_org_simgrid_msg_RngStream_setPackageSeed(JNIEnv *env, jobject jrngstream, j
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStart(JNIEnv *env, jobject jrngstream) {
   RngStream rngstream = jrngstream_to_native(env, jrngstream);
-  if (!rngstream)
+  if (not rngstream)
     return;
 
   RngStream_ResetStartStream(rngstream);
@@ -75,7 +75,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStart(JNIEnv *env, jo
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStartSubstream(JNIEnv *env, jobject jrngstream) {
   RngStream rngstream = jrngstream_to_native(env, jrngstream);
-  if (!rngstream)
+  if (not rngstream)
     return;
 
   RngStream_ResetStartSubstream(rngstream);
@@ -83,7 +83,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetStartSubstream(JNIEnv
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetNextSubstream(JNIEnv *env, jobject jrngstream) {
   RngStream rngstream = jrngstream_to_native(env, jrngstream);
-  if (!rngstream)
+  if (not rngstream)
     return;
 
   RngStream_ResetNextSubstream(rngstream);
@@ -91,7 +91,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_resetNextSubstream(JNIEnv
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_setAntithetic(JNIEnv *env, jobject jrngstream, jboolean ja) {
   RngStream rngstream = jrngstream_to_native(env, jrngstream);
-  if (!rngstream)
+  if (not rngstream)
     return;
 
   if (ja == JNI_TRUE) {
@@ -108,7 +108,7 @@ JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, j
   env->GetIntArrayRegion(jseed, 0, 6, buffer);
 
   RngStream rngstream = jrngstream_to_native(env, jrngstream);
-  if (!rngstream)
+  if (not rngstream)
     return JNI_FALSE;
 
   // The C API expects unsigned long which are wider than int on LP64.
@@ -124,7 +124,7 @@ JNIEXPORT jboolean JNICALL Java_org_simgrid_msg_RngStream_setSeed(JNIEnv *env, j
 
 JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_advanceState(JNIEnv *env, jobject jrngstream, jint e, jint g) {
   RngStream rngstream = jrngstream_to_native(env, jrngstream);
-  if (!rngstream)
+  if (not rngstream)
     return;
 
   RngStream_AdvanceState(rngstream, (long)e, (long)g);
@@ -132,7 +132,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_RngStream_advanceState(JNIEnv *env,
 
 JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_RngStream_randU01(JNIEnv *env, jobject jrngstream) {
   RngStream rngstream = jrngstream_to_native(env, jrngstream);
-  if (!rngstream)
+  if (not rngstream)
     return 0;
 
   return (jdouble)RngStream_RandU01(rngstream);
@@ -140,7 +140,7 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_RngStream_randU01(JNIEnv *env, jo
 
 JNIEXPORT jint JNICALL Java_org_simgrid_msg_RngStream_randInt(JNIEnv *env, jobject jrngstream, jint i, jint j) {
   RngStream rngstream = jrngstream_to_native(env, jrngstream);
-  if (!rngstream)
+  if (not rngstream)
     return 0;
 
   return (jint)RngStream_RandInt(rngstream, (int)i, (int)j);
index 15bd3fe..e38230c 100644 (file)
@@ -6,7 +6,6 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "simgrid/msg.h"
-#include "surf/surf_routing.h"
 
 #include "jmsg.h"
 #include "jmsg_storage.h"
@@ -63,7 +62,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getByName(JNIEnv * env, j
   const char *name = env->GetStringUTFChars(jname, 0);
   storage = MSG_storage_get_by_name(name);
 
-  if (!storage) {                  /* invalid name */
+  if (not storage) { /* invalid name */
     jxbt_throw_storage_not_found(env, name);
     env->ReleaseStringUTFChars(jname, name);
     return nullptr;
@@ -74,7 +73,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getByName(JNIEnv * env, j
     /* Instantiate a new java storage */
     jstorage = jstorage_new_instance(env);
 
-    if (!jstorage) {
+    if (not jstorage) {
       jxbt_throw_jni(env, "java storage instantiation failed");
       return nullptr;
     }
@@ -82,7 +81,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getByName(JNIEnv * env, j
     /* get a global reference to the newly created storage */
     jstorage = jstorage_ref(env, jstorage);
 
-    if (!jstorage) {
+    if (not jstorage) {
       jxbt_throw_jni(env, "new global ref allocation failed");
       return nullptr;
     }
@@ -105,7 +104,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getByName(JNIEnv * env, j
 JNIEXPORT jlong JNICALL Java_org_simgrid_msg_Storage_getSize(JNIEnv * env,jobject jstorage) {
   msg_storage_t storage = jstorage_get_native(env, jstorage);
 
-  if (!storage) {
+  if (not storage) {
     jxbt_throw_notbound(env, "storage", jstorage);
     return -1;
   }
@@ -116,7 +115,7 @@ JNIEXPORT jlong JNICALL Java_org_simgrid_msg_Storage_getSize(JNIEnv * env,jobjec
 JNIEXPORT jlong JNICALL Java_org_simgrid_msg_Storage_getFreeSize(JNIEnv * env,jobject jstorage) {
   msg_storage_t storage = jstorage_get_native(env, jstorage);
 
-  if (!storage) {
+  if (not storage) {
     jxbt_throw_notbound(env, "storage", jstorage);
     return -1;
   }
@@ -127,7 +126,7 @@ JNIEXPORT jlong JNICALL Java_org_simgrid_msg_Storage_getFreeSize(JNIEnv * env,jo
 JNIEXPORT jlong JNICALL Java_org_simgrid_msg_Storage_getUsedSize(JNIEnv * env,jobject jstorage) {
   msg_storage_t storage = jstorage_get_native(env, jstorage);
 
-  if (!storage) {
+  if (not storage) {
     jxbt_throw_notbound(env, "storage", jstorage);
     return -1;
   }
@@ -138,14 +137,14 @@ JNIEXPORT jlong JNICALL Java_org_simgrid_msg_Storage_getUsedSize(JNIEnv * env,jo
 JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getProperty(JNIEnv *env, jobject jstorage, jobject jname) {
   msg_storage_t storage = jstorage_get_native(env, jstorage);
 
-  if (!storage) {
+  if (not storage) {
     jxbt_throw_notbound(env, "storage", jstorage);
     return nullptr;
   }
   const char *name = env->GetStringUTFChars((jstring) jname, 0);
 
   const char *property = MSG_storage_get_property_value(storage, name);
-  if (!property) {
+  if (not property) {
     return nullptr;
   }
   jobject jproperty = env->NewStringUTF(property);
@@ -159,7 +158,7 @@ JNIEXPORT void JNICALL
 Java_org_simgrid_msg_Storage_setProperty(JNIEnv *env, jobject jstorage, jobject jname, jobject jvalue) {
   msg_storage_t storage = jstorage_get_native(env, jstorage);
 
-  if (!storage) {
+  if (not storage) {
     jxbt_throw_notbound(env, "storage", jstorage);
     return;
   }
@@ -177,12 +176,12 @@ Java_org_simgrid_msg_Storage_setProperty(JNIEnv *env, jobject jstorage, jobject
 JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Storage_getHost(JNIEnv * env,jobject jstorage) {
   msg_storage_t storage = jstorage_get_native(env, jstorage);
 
-  if (!storage) {
+  if (not storage) {
     jxbt_throw_notbound(env, "storage", jstorage);
     return nullptr;
   }
   const char *host_name = MSG_storage_get_host(storage);
-  if (!host_name) {
+  if (not host_name) {
     return nullptr;
   }
   jobject jhost_name = env->NewStringUTF(host_name);
@@ -203,13 +202,13 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_Storage_all(JNIEnv * env, jc
 
   jclass cls = jxbt_get_class(env, "org/simgrid/msg/Storage");
 
-  if (!cls) {
+  if (not cls) {
     return nullptr;
   }
 
   jtable = env->NewObjectArray((jsize) count, cls, nullptr);
 
-  if (!jtable) {
+  if (not jtable) {
     jxbt_throw_jni(env, "Storages table allocation failed");
     return nullptr;
   }
index d615184..47dfe47 100644 (file)
@@ -105,7 +105,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_cancel(JNIEnv * env, jobject jt
 {
   msg_task_t ptask = jtask_to_native(jtask, env);
 
-  if (!ptask) {
+  if (not ptask) {
     jxbt_throw_notbound(env, "task", jtask);
     return;
   }
@@ -119,7 +119,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_execute(JNIEnv * env, jobject j
 {
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return;
   }
@@ -136,7 +136,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_setBound(JNIEnv * env, jobject
 {
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return;
   }
@@ -146,7 +146,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_setBound(JNIEnv * env, jobject
 JNIEXPORT jstring JNICALL Java_org_simgrid_msg_Task_getName(JNIEnv * env, jobject jtask) {
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return nullptr;
   }
@@ -159,7 +159,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_getSender(JNIEnv * env, jobj
 
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return nullptr;
   }
@@ -176,7 +176,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_getSource(JNIEnv * env, jobj
   msg_host_t host;
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return nullptr;
   }
@@ -185,7 +185,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_getSource(JNIEnv * env, jobj
   if (host == nullptr) {
     return nullptr;
   }
-  if (!host->extension(JAVA_HOST_LEVEL)) {
+  if (not host->extension(JAVA_HOST_LEVEL)) {
     jxbt_throw_jni(env, "MSG_task_get_source() failed");
     return nullptr;
   }
@@ -197,7 +197,7 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Task_getFlopsAmount(JNIEnv * env,
 {
   msg_task_t ptask = jtask_to_native(jtask, env);
 
-  if (!ptask) {
+  if (not ptask) {
     jxbt_throw_notbound(env, "task", jtask);
     return -1;
   }
@@ -207,7 +207,7 @@ JNIEXPORT jdouble JNICALL Java_org_simgrid_msg_Task_getFlopsAmount(JNIEnv * env,
 JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_setName(JNIEnv *env, jobject jtask, jobject jname) {
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return;
   }
@@ -223,7 +223,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_setPriority(JNIEnv * env, jobje
 {
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return;
   }
@@ -234,7 +234,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_setFlopsAmount (JNIEnv *env, jo
 {
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return;
   }
@@ -245,7 +245,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_setBytesAmount (JNIEnv *env, jo
 {
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return;
   }
@@ -257,7 +257,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_sendBounded(JNIEnv * env,jobjec
                                                              jdouble jtimeout,jdouble maxrate)
 {
   msg_task_t task = jtask_to_native(jtask, env);
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return;
   }
@@ -299,7 +299,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_receive(JNIEnv* env, jclass
 
 JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_irecv(JNIEnv * env, jclass cls, jstring jmailbox) {
   jclass comm_class = env->FindClass("org/simgrid/msg/Comm");
-  if (!comm_class)
+  if (not comm_class)
     return nullptr;
 
   //pointer to store the task object pointer.
@@ -308,7 +308,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_irecv(JNIEnv * env, jclass c
   /* There should be a cache here */
 
   jobject jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor);
-  if (!jcomm) {
+  if (not jcomm) {
     jxbt_throw_jni(env, "Can't create a Comm object.");
     return nullptr;
   }
@@ -354,14 +354,14 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_irecvBounded(JNIEnv * env, j
                                                                  jdouble rate)
 {
   jclass comm_class = env->FindClass("org/simgrid/msg/Comm");
-  if (!comm_class)
+  if (not comm_class)
     return nullptr;
 
   // pointer to store the task object pointer.
   msg_task_t* task = xbt_new0(msg_task_t, 1);
 
   jobject jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor);
-  if (!jcomm) {
+  if (not jcomm) {
     jxbt_throw_jni(env, "Can't create a Comm object.");
     return nullptr;
   }
@@ -383,14 +383,15 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_isend(JNIEnv *env, jobject j
 
   jclass comm_class = env->FindClass("org/simgrid/msg/Comm");
 
-  if (!comm_class) return nullptr;
+  if (not comm_class)
+    return nullptr;
 
   jobject jcomm       = env->NewObject(comm_class, jtask_method_Comm_constructor);
   const char* mailbox = env->GetStringUTFChars(jmailbox, 0);
 
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     env->ReleaseStringUTFChars(jmailbox, mailbox);
     env->DeleteLocalRef(jcomm);
     jxbt_throw_notbound(env, "task", jtask);
@@ -418,7 +419,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_isendBounded(JNIEnv *env, jo
   const char *mailbox;
 
   jclass comm_class = env->FindClass("org/simgrid/msg/Comm");
-  if (!comm_class)
+  if (not comm_class)
     return nullptr;
 
   jcomm = env->NewObject(comm_class, jtask_method_Comm_constructor);
@@ -426,7 +427,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_Task_isendBounded(JNIEnv *env, jo
 
   task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     env->ReleaseStringUTFChars(jmailbox, mailbox);
     env->DeleteLocalRef(jcomm);
     jxbt_throw_notbound(env, "task", jtask);
@@ -449,7 +450,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_nativeFinalize(JNIEnv * env, jo
 {
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     jxbt_throw_notbound(env, "task", jtask);
     return;
     }
@@ -474,7 +475,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_dsend(JNIEnv * env, jobject jta
 
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     env->ReleaseStringUTFChars(jalias, alias);
     jxbt_throw_notbound(env, "task", jtask);
     return;
@@ -494,7 +495,7 @@ JNIEXPORT void JNICALL Java_org_simgrid_msg_Task_dsendBounded(JNIEnv * env, jobj
 
   msg_task_t task = jtask_to_native(jtask, env);
 
-  if (!task) {
+  if (not task) {
     env->ReleaseStringUTFChars(jalias, alias);
     jxbt_throw_notbound(env, "task", jtask);
     return;
index 307b8f3..fc5da71 100644 (file)
@@ -101,11 +101,11 @@ JNIEXPORT jobjectArray JNICALL Java_org_simgrid_msg_VM_all(JNIEnv* env, jclass c
   int count = vms.size();
 
   jclass cls = jxbt_get_class(env, "org/simgrid/msg/VM");
-  if (!cls)
+  if (not cls)
     return nullptr;
 
   jobjectArray jtable = env->NewObjectArray((jsize)count, cls, nullptr);
-  if (!jtable) {
+  if (not jtable) {
     jxbt_throw_jni(env, "Hosts table allocation failed");
     return nullptr;
   }
@@ -180,7 +180,7 @@ JNIEXPORT jobject JNICALL Java_org_simgrid_msg_VM_getVMByName(JNIEnv* env, jclas
   /* get the VM by name   (VMs are just special hosts, unfortunately) */
   msg_host_t host = MSG_host_by_name(name);
 
-  if (!host) { /* invalid name */
+  if (not host) { /* invalid name */
     jxbt_throw_host_not_found(env, name);
     env->ReleaseStringUTFChars(jname, name);
     return nullptr;
index c735ff4..128f077 100644 (file)
@@ -16,7 +16,7 @@ jclass jxbt_get_class(JNIEnv * env, const char *name)
 {
   jclass cls = env->FindClass(name);
 
-  if (!cls) {
+  if (not cls) {
     jxbt_throw_jni(env, std::string("Class ") + name + " not found");
     return nullptr;
   }
@@ -28,11 +28,11 @@ jmethodID jxbt_get_jmethod(JNIEnv * env, jclass cls, const char *name, const cha
 {
   jmethodID id;
 
-  if (!cls)
+  if (not cls)
     return 0;
   id = env->GetMethodID(cls, name, signature);
 
-  if (!id) {
+  if (not id) {
 
     jmethodID tostr_id = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
     jstring jclassname = (jstring) env->CallObjectMethod(cls, tostr_id, nullptr);
@@ -51,11 +51,11 @@ jmethodID jxbt_get_static_jmethod(JNIEnv * env, jclass cls, const char *name, co
 {
   jmethodID id;
 
-  if (!cls)
+  if (not cls)
     return 0;
   id = env->GetStaticMethodID(cls, name, signature);
 
-  if (!id) {
+  if (not id) {
     jmethodID tostr_id = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
     jstring jclassname = (jstring) env->CallObjectMethod(cls, tostr_id, nullptr);
     const char *classname = env->GetStringUTFChars(jclassname, 0);
@@ -75,12 +75,12 @@ jmethodID jxbt_get_static_smethod(JNIEnv * env, const char *classname, const cha
   jmethodID id;
   cls = jxbt_get_class(env, classname);
 
-  if (!cls)
+  if (not cls)
     return 0;
 
   id = env->GetStaticMethodID(cls, name, signature);
 
-  if (!id) {
+  if (not id) {
     jxbt_throw_jni(env, std::string("Cannot find static method") + name + "(" + signature + ") in " + classname);
     return 0;
   }
@@ -93,12 +93,12 @@ jmethodID jxbt_get_smethod(JNIEnv * env, const char *classname, const char *name
   jmethodID id;
   cls = jxbt_get_class(env, classname);
 
-  if (!cls)
+  if (not cls)
     return 0;
 
   id = env->GetMethodID(cls, name, signature);
 
-  if (!id) {
+  if (not id) {
     jxbt_throw_jni(env, std::string("Cannot find method") + name + "(" + signature + ") in " + classname);
     return 0;
   }
@@ -109,12 +109,12 @@ jfieldID jxbt_get_jfield(JNIEnv * env, jclass cls, const char *name, const char
 {
   jfieldID id;
 
-  if (!cls)
+  if (not cls)
     return 0;
 
   id = env->GetFieldID(cls, name, signature);
 
-  if (!id) {
+  if (not id) {
     jmethodID getname_id = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
     jstring jclassname = (jstring) env->CallObjectMethod(cls, getname_id, nullptr);
     const char *classname = env->GetStringUTFChars(jclassname, 0);
@@ -134,12 +134,12 @@ jfieldID jxbt_get_sfield(JNIEnv * env, const char *classname, const char *name,
   jclass cls = jxbt_get_class(env, classname);
   jfieldID id;
 
-  if (!cls)
+  if (not cls)
     return 0;
 
   id = env->GetFieldID(cls, name, signature);
 
-  if (!id) {
+  if (not id) {
     jxbt_throw_jni(env, std::string("Cannot find field") + signature + " " + name + " in " + classname);
     return 0;
   }
index 11578d4..6739dba 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2016. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2014-2017. 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. */
@@ -20,7 +20,7 @@ import java.nio.file.Path;
  */
 public final class NativeLib {
        private static boolean isNativeInited = false;
-       static Path tempDir = null; // where the embeeded libraries are unpacked before loading them
+       private static Path tempDir = null; // where the embeeded libraries are unpacked before loading them
 
        /** A static-only "class" don't need no constructor */
        private NativeLib() {
index 4e9247b..355856d 100644 (file)
@@ -51,11 +51,8 @@ public abstract class Process implements Runnable {
 
        /** Time at which the process should be created  */
        protected double startTime = 0;
-       /** Time at which the process should be killed.
-        * 
-        * Set at creation, and used internally by SimGrid
-        */
-       private double killTime = -1;
+       /** Time at which the process should be killed */
+       private double killTime = -1; // Used from the C world
 
        private String name = null;
        
@@ -116,9 +113,9 @@ public abstract class Process implements Runnable {
        public Process(Host host, String name, String[]args) 
        {
                if (host == null)
-                       throw new NullPointerException("Cannot create a process on the null host");
+                       throw new IllegalArgumentException("Cannot create a process on the null host");
                if (name == null)
-                       throw new NullPointerException("Process name cannot be null");
+                       throw new IllegalArgumentException("Process name cannot be null");
                
                this.host = host;
                this.name = name;
index ea76296..4b15bba 100644 (file)
@@ -15,18 +15,11 @@ public class Storage {
         * a native storage. Even if this attribute is public you must never
         * access to it.
         */ 
-       private long bind;
+       private long bind = 0;
 
        /** Storage name */
        protected String name;
 
-       /** User data. */ 
-       private Object data;
-       protected Storage() {
-               this.bind = 0;
-               this.data = null;
-       }
-
        @Override
        public String toString (){
                return this.name; 
index 0dec155..a82ce2f 100644 (file)
@@ -74,13 +74,13 @@ public class Task {
         */ 
        public Task(String name, Host[]hosts, double[]flopsAmount, double[]bytesAmount) {
                if (flopsAmount == null)
-                       throw new NullPointerException("Parallel task flops amounts is null");
+                       throw new IllegalArgumentException("Parallel task flops amounts is null");
                if (bytesAmount == null)
-                       throw new NullPointerException("Parallel task bytes amounts is null");
+                       throw new IllegalArgumentException("Parallel task bytes amounts is null");
                if (hosts == null)
-                       throw new NullPointerException("Host list is null");
+                       throw new IllegalArgumentException("Host list is null");
                if (name == null)
-                       throw new NullPointerException("Parallel task name is null");
+                       throw new IllegalArgumentException("Parallel task name is null");
                
                parallelCreate(name, hosts, flopsAmount, bytesAmount);
                this.name = name;
index 79b1bc5..df54f3f 100644 (file)
@@ -198,7 +198,7 @@ void* sglua_checkudata_debug(lua_State* L, int ud, const char* tname)
   XBT_DEBUG("Checking the task's metatable: expected %p, found %p", correct_mt, actual_mt);
   sglua_stack_dump(L, "my_checkudata: ");
 
-  if (p == nullptr || !lua_getmetatable(L, ud) || !lua_rawequal(L, -1, -2))
+  if (p == nullptr || not lua_getmetatable(L, ud) || not lua_rawequal(L, -1, -2))
     XBT_ERROR("Error: Userdata is nullptr, couldn't find metatable or top of stack does not equal element below it.");
   lua_pop(L, 2);
   return p;
index 71484a4..4d4eac9 100644 (file)
@@ -34,7 +34,7 @@ sg_host_t sglua_check_host(lua_State * L, int index)
   if (pi == nullptr)
     XBT_ERROR("luaL_checkudata() returned nullptr");
   sg_host_t ht = *pi;
-  if (!ht)
+  if (not ht)
     luaL_error(L, "null Host");
   return ht;
 }
index dea2bab..6f9f856 100644 (file)
@@ -10,7 +10,6 @@
 #include "src/kernel/routing/NetPoint.hpp"
 #include "src/surf/network_interface.hpp"
 #include "src/surf/xml/platf_private.hpp"
-#include "surf/surf_routing.h"
 #include <ctype.h>
 #include <string.h>
 
@@ -94,9 +93,9 @@ int console_add_backbone(lua_State *L) {
   lua_pushstring(L, "sharing_policy");
   type = lua_gettable(L, -2);
   const char* policy = lua_tostring(L, -1);
-  if (policy && !strcmp(policy,"FULLDUPLEX")) {
+  if (policy && not strcmp(policy, "FULLDUPLEX")) {
     link.policy = SURF_LINK_FULLDUPLEX;
-  } else if (policy && !strcmp(policy,"FATPIPE")) {
+  } else if (policy && not strcmp(policy, "FATPIPE")) {
     link.policy = SURF_LINK_FATPIPE;
   } else {
     link.policy = SURF_LINK_SHARED;
@@ -173,8 +172,8 @@ int console_add_host(lua_State *L) {
   // get core
   lua_pushstring(L, "core");
   lua_gettable(L, -2);
-  if(!lua_isnumber(L,-1))
-      host.core_amount = 1;// Default value
+  if (not lua_isnumber(L, -1))
+    host.core_amount = 1; // Default value
   else
     host.core_amount = lua_tonumber(L, -1);
   if (host.core_amount == 0)
@@ -270,9 +269,9 @@ int  console_add_link(lua_State *L) {
   lua_gettable(L, -2);
   policy = lua_tostring(L, -1);
   lua_pop(L, 1);
-  if (policy && !strcmp(policy,"FULLDUPLEX")) {
+  if (policy && not strcmp(policy, "FULLDUPLEX")) {
     link.policy = SURF_LINK_FULLDUPLEX;
-  } else if (policy && !strcmp(policy,"FATPIPE")) {
+  } else if (policy && not strcmp(policy, "FATPIPE")) {
     link.policy = SURF_LINK_FATPIPE;
   } else {
     link.policy = SURF_LINK_SHARED;
@@ -473,13 +472,20 @@ int console_AS_open(lua_State *L) {
  lua_pop(L, 1);
 
  int mode_int = A_surfxml_AS_routing_None;
- if(!strcmp(mode,"Full")) mode_int = A_surfxml_AS_routing_Full;
- else if(!strcmp(mode,"Floyd")) mode_int = A_surfxml_AS_routing_Floyd;
- else if(!strcmp(mode,"Dijkstra")) mode_int = A_surfxml_AS_routing_Dijkstra;
- else if(!strcmp(mode,"DijkstraCache")) mode_int = A_surfxml_AS_routing_DijkstraCache;
- else if(!strcmp(mode,"Vivaldi")) mode_int = A_surfxml_AS_routing_Vivaldi;
- else if(!strcmp(mode,"Cluster")) mode_int = A_surfxml_AS_routing_Cluster;
- else if(!strcmp(mode,"none")) mode_int = A_surfxml_AS_routing_None;
+ if (not strcmp(mode, "Full"))
+   mode_int = A_surfxml_AS_routing_Full;
+ else if (not strcmp(mode, "Floyd"))
+   mode_int = A_surfxml_AS_routing_Floyd;
+ else if (not strcmp(mode, "Dijkstra"))
+   mode_int = A_surfxml_AS_routing_Dijkstra;
+ else if (not strcmp(mode, "DijkstraCache"))
+   mode_int = A_surfxml_AS_routing_DijkstraCache;
+ else if (not strcmp(mode, "Vivaldi"))
+   mode_int = A_surfxml_AS_routing_Vivaldi;
+ else if (not strcmp(mode, "Cluster"))
+   mode_int = A_surfxml_AS_routing_Cluster;
+ else if (not strcmp(mode, "none"))
+   mode_int = A_surfxml_AS_routing_None;
  else xbt_die("Don't have the model name '%s'",mode);
 
  s_sg_platf_AS_cbarg_t AS;
index 6ba38d1..9a1ffb3 100644 (file)
 #include "surf/datatypes.h"
 #include <math.h>
 
+namespace simgrid {
+namespace surf {
+class Action;
+}
+}
+
 /** @addtogroup SURF_lmm 
  * @details 
  * A linear maxmin solver to resolve inequations systems.
@@ -233,8 +239,9 @@ XBT_PUBLIC(int) lmm_constraint_concurrency_maximum_get(lmm_constraint_t cnst);
  * @param bound The maximum value of the variable (-1.0 if no maximum value)
  * @param number_of_constraints The maximum number of constraint to associate to the variable
  */
-XBT_PUBLIC(lmm_variable_t) lmm_variable_new(lmm_system_t sys, void *id, double weight_value, double bound,
-                                            int number_of_constraints);
+XBT_PUBLIC(lmm_variable_t)
+lmm_variable_new(lmm_system_t sys, simgrid::surf::Action* id, double weight_value, double bound,
+                 int number_of_constraints);
 /**
  * @brief Free a variable
  * @param sys The system associated to the variable
index 09941a4..4a3c109 100644 (file)
@@ -16,7 +16,6 @@
 #include "surf/surf_routing.h"
 #include "surf/datatypes.h"
 #include "xbt/lib.h"
-#include "surf/surf_routing.h"
 #include "simgrid/datatypes.h"
 #include "simgrid/forward.h"
 
@@ -52,7 +51,7 @@ typedef simgrid::surf::CpuModel surf_CpuModel;
 typedef simgrid::surf::Cpu surf_Cpu;
 typedef simgrid::surf::HostModel surf_HostModel;
 typedef simgrid::surf::NetworkModel surf_NetworkModel;
-typedef simgrid::surf::Storage surf_Storage;
+typedef simgrid::surf::StorageImpl surf_Storage;
 typedef simgrid::surf::StorageModel surf_StorageModel;
 typedef simgrid::surf::Resource surf_Resource;
 typedef simgrid::surf::HostImpl surf_Host;
@@ -65,7 +64,7 @@ typedef struct surf_CpuModel surf_CpuModel;
 typedef struct surf_Cpu surf_Cpu;
 typedef struct surf_HostModel surf_HostModel;
 typedef struct surf_NetworkModel surf_NetworkModel;
-typedef struct surf_Storage surf_Storage;
+typedef struct surf_StorageImpl surf_Storage;
 typedef struct surf_StorageModel surf_StorageModel;
 typedef struct surf_Resource surf_Resource;
 typedef struct surf_Host surf_Host;
index 8b923a6..e6eb6f5 100644 (file)
@@ -105,9 +105,9 @@ int TRACE_start()
     /* open the trace file(s) */
     const char* format = xbt_cfg_get_string(OPT_TRACING_FORMAT);
     XBT_DEBUG("Tracing format %s\n", format);
-    if(!strcmp(format, "Paje")){
+    if (not strcmp(format, "Paje")) {
       TRACE_paje_start();
-    }else if (!strcmp(format, "TI")){
+    } else if (not strcmp(format, "TI")) {
       instr_fmt_type = instr_fmt_TI;
       TRACE_TI_start();
     }else{
@@ -134,7 +134,7 @@ int TRACE_start()
 int TRACE_end()
 {
   int retval;
-  if (!trace_active) {
+  if (not trace_active) {
     retval = 1;
   } else {
     retval = 0;
@@ -161,9 +161,9 @@ int TRACE_end()
     /* close the trace files */
     const char* format = xbt_cfg_get_string(OPT_TRACING_FORMAT);
     XBT_DEBUG("Tracing format %s\n", format);
-    if(!strcmp(format, "Paje")){
+    if (not strcmp(format, "Paje")) {
       TRACE_paje_end();
-    }else if (!strcmp(format, "TI")){
+    } else if (not strcmp(format, "TI")) {
       TRACE_TI_end();
     }else{
       xbt_die("Unknown trace format :%s ", format);
@@ -605,7 +605,7 @@ static int previous_trace_state = -1;
 void instr_pause_tracing ()
 {
   previous_trace_state = trace_enabled;
-  if (!TRACE_is_enabled()){
+  if (not TRACE_is_enabled()) {
     XBT_DEBUG ("Tracing is already paused, therefore do nothing.");
   }else{
     XBT_DEBUG ("Tracing is being paused.");
index 7946c2b..79dc5d3 100644 (file)
@@ -30,7 +30,7 @@ extern xbt_dict_t trivaEdgeTypes;
 
 static xbt_dynar_t instr_dict_to_dynar (xbt_dict_t filter)
 {
-  if (!TRACE_is_enabled() || !TRACE_needs_platform())
+  if (not TRACE_is_enabled() || not TRACE_needs_platform())
     return nullptr;
 
   xbt_dynar_t ret = xbt_dynar_new (sizeof(char*), &xbt_free_ref);
@@ -81,10 +81,10 @@ void TRACE_category(const char *category)
 void TRACE_category_with_color (const char *category, const char *color)
 {
   /* safe switches. tracing has to be activated and if platform is not traced, we can't deal with categories */
-  if (!TRACE_is_enabled() || !TRACE_needs_platform())
+  if (not TRACE_is_enabled() || not TRACE_needs_platform())
     return;
 
-  if (!(TRACE_categorized() && category != nullptr))
+  if (not(TRACE_categorized() && category != nullptr))
     return;
 
   //check if category is already created
@@ -95,7 +95,7 @@ void TRACE_category_with_color (const char *category, const char *color)
 
   //define final_color
   char final_color[INSTR_DEFAULT_STR_SIZE];
-  if (!color){
+  if (not color) {
     //generate a random color
     double red = drand48();
     double green = drand48();
@@ -125,7 +125,7 @@ void TRACE_category_with_color (const char *category, const char *color)
  */
 xbt_dynar_t TRACE_get_categories ()
 {
-  if (!TRACE_is_enabled() || !TRACE_categorized())
+  if (not TRACE_is_enabled() || not TRACE_categorized())
     return nullptr;
 
   return instr_dict_to_dynar (created_categories);
@@ -144,10 +144,10 @@ xbt_dynar_t TRACE_get_categories ()
 void TRACE_declare_mark(const char *mark_type)
 {
   /* safe switchs. tracing has to be activated and if platform is not traced, we can't deal with marks */
-  if (!TRACE_is_enabled() || !TRACE_needs_platform())
+  if (not TRACE_is_enabled() || not TRACE_needs_platform())
     return;
 
-  if (!mark_type)
+  if (not mark_type)
     THROWF (tracing_error, 1, "mark_type is nullptr");
 
   //check if mark_type is already declared
@@ -178,21 +178,21 @@ void TRACE_declare_mark(const char *mark_type)
 void TRACE_declare_mark_value_with_color (const char *mark_type, const char *mark_value, const char *mark_color)
 {
   /* safe switches. tracing has to be activated and if platform is not traced, we can't deal with marks */
-  if (!TRACE_is_enabled() || !TRACE_needs_platform())
+  if (not TRACE_is_enabled() || not TRACE_needs_platform())
     return;
 
-  if (!mark_type)
+  if (not mark_type)
     THROWF (tracing_error, 1, "mark_type is nullptr");
-  if (!mark_value)
+  if (not mark_value)
     THROWF (tracing_error, 1, "mark_value is nullptr");
 
   type_t type = PJ_type_get (mark_type, PJ_type_get_root());
-  if (!type){
+  if (not type) {
     THROWF (tracing_error, 1, "mark_type with name (%s) is not declared", mark_type);
   }
 
   char white[INSTR_DEFAULT_STR_SIZE] = "1.0 1.0 1.0";
-  if (!mark_color)
+  if (not mark_color)
     mark_color = white;
 
   XBT_DEBUG("MARK,declare_value %s %s %s", mark_type, mark_value, mark_color);
@@ -233,17 +233,17 @@ void TRACE_declare_mark_value (const char *mark_type, const char *mark_value)
 void TRACE_mark(const char *mark_type, const char *mark_value)
 {
   /* safe switches. tracing has to be activated and if platform is not traced, we can't deal with marks */
-  if (!TRACE_is_enabled() || !TRACE_needs_platform())
+  if (not TRACE_is_enabled() || not TRACE_needs_platform())
     return;
 
-  if (!mark_type)
+  if (not mark_type)
     THROWF (tracing_error, 1, "mark_type is nullptr");
-  if (!mark_value)
+  if (not mark_value)
     THROWF (tracing_error, 1, "mark_value is nullptr");
 
   //check if mark_type is already declared
   type_t type = PJ_type_get (mark_type, PJ_type_get_root());
-  if (!type){
+  if (not type) {
     THROWF (tracing_error, 1, "mark_type with name (%s) is not declared", mark_type);
   }
 
@@ -261,7 +261,7 @@ void TRACE_mark(const char *mark_type, const char *mark_value)
  */
 xbt_dynar_t TRACE_get_marks ()
 {
-  if (!TRACE_is_enabled())
+  if (not TRACE_is_enabled())
     return nullptr;
 
   return instr_dict_to_dynar (declared_marks);
@@ -271,13 +271,13 @@ static void instr_user_variable(double time, const char *resource, const char *v
                          double value, InstrUserVariable what, const char *color, xbt_dict_t filter)
 {
   /* safe switches. tracing has to be activated and if platform is not traced, we don't allow user variables */
-  if (!TRACE_is_enabled() || !TRACE_needs_platform())
+  if (not TRACE_is_enabled() || not TRACE_needs_platform())
     return;
 
   //check if variable is already declared
   char *created = (char*)xbt_dict_get_or_null(filter, variable);
   if (what == INSTR_US_DECLARE){
-    if (!created) { // not declared yet
+    if (not created) { // not declared yet
       xbt_dict_set (filter, variable, xbt_strdup("1"), nullptr);
       instr_new_user_variable_type (father_type, variable, color);
     }
@@ -309,11 +309,11 @@ static void instr_user_srcdst_variable(double time, const char *src, const char
                               const char *father_type, double value, InstrUserVariable what)
 {
   sg_netpoint_t src_elm = sg_netpoint_by_name_or_null(src);
-  if(!src_elm)
+  if (not src_elm)
     xbt_die("Element '%s' not found!",src);
 
   sg_netpoint_t dst_elm = sg_netpoint_by_name_or_null(dst);
-  if(!dst_elm)
+  if (not dst_elm)
     xbt_die("Element '%s' not found!",dst);
 
   std::vector<simgrid::surf::LinkImpl*> route;
@@ -336,7 +336,7 @@ static void instr_user_srcdst_variable(double time, const char *src, const char
 int TRACE_platform_graph_export_graphviz (const char *filename)
 {
   /* returns 1 if successful, 0 otherwise */
-  if (!TRACE_is_enabled())
+  if (not TRACE_is_enabled())
     return 0;
   xbt_graph_t g = instr_routing_platform_graph();
   if (g == nullptr)
index 9b50d75..f024629 100644 (file)
@@ -203,7 +203,7 @@ void PJ_container_free (container_t container)
   TRACE_paje_dump_buffer(1);
 
   //trace my destruction
-  if (!TRACE_disable_destroy() && container != PJ_container_get_root()){
+  if (not TRACE_disable_destroy() && container != PJ_container_get_root()) {
     //do not trace the container destruction if user requests
     //or if the container is root
     new DestroyContainerEvent(container);
@@ -245,7 +245,7 @@ void PJ_container_free_all ()
   rootContainer = nullptr;
 
   //checks
-  if (!xbt_dict_is_empty(allContainers)){
+  if (not xbt_dict_is_empty(allContainers)) {
     THROWF(tracing_error, 0, "some containers still present even after destroying all of them");
   }
 }
index ee0c3b6..ae772d9 100644 (file)
@@ -44,18 +44,20 @@ void buffer_debug(std::vector<PajeEvent*> *buf);
 
 void dump_comment (const char *comment)
 {
-  if (!strlen(comment)) return;
+  if (not strlen(comment))
+    return;
   fprintf (tracing_file, "# %s\n", comment);
 }
 
 void dump_comment_file (const char *filename)
 {
-  if (!strlen(filename)) return;
+  if (not strlen(filename))
+    return;
   FILE *file = fopen (filename, "r");
-  if (!file){
+  if (not file) {
     THROWF (system_error, 1, "Comment file %s could not be opened for reading.", filename);
   }
-  while (!feof(file)){
+  while (not feof(file)) {
     char c;
     c = fgetc(file);
     if (feof(file)) break;
@@ -74,7 +76,8 @@ double TRACE_last_timestamp_to_dump = 0;
 //dumps the trace file until the timestamp TRACE_last_timestamp_to_dump
 void TRACE_paje_dump_buffer (int force)
 {
-  if (!TRACE_is_enabled()) return;
+  if (not TRACE_is_enabled())
+    return;
   XBT_DEBUG("%s: dump until %f. starts", __FUNCTION__, TRACE_last_timestamp_to_dump);
   if (force){
     for (auto event : buffer){
@@ -147,7 +150,6 @@ static void insert_into_buffer (PajeEvent* tbi)
     if (e1->timestamp <= tbi->timestamp)
       break;
   }
-  buffer.insert(i.base(), tbi);
   if (i == buffer.rend())
     XBT_DEBUG("%s: inserted at beginning", __FUNCTION__);
   else if (i == buffer.rbegin())
@@ -155,6 +157,7 @@ static void insert_into_buffer (PajeEvent* tbi)
   else
     XBT_DEBUG("%s: inserted at pos= %zd from its end", __FUNCTION__,
         std::distance(buffer.rbegin(),i));
+  buffer.insert(i.base(), tbi);
 
   buffer_debug(&buffer);
 }
@@ -244,7 +247,6 @@ void DefineContainerEvent::print() {
 }
 
 
-
 DefineVariableTypeEvent::DefineVariableTypeEvent(type_t type)
 {
   this->event_type                           = PAJE_DefineVariableType;
@@ -259,21 +261,19 @@ DefineVariableTypeEvent::DefineVariableTypeEvent(type_t type)
 }
 
 void DefineVariableTypeEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               stream << " " << type->id
-                               << " " << type->father->id
-                               << " " << type->name;
-               if (type->color)
-                       stream << " \"" << type->color << "\"";
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    stream << " " << type->id << " " << type->father->id << " " << type->name;
+    if (type->color)
+      stream << " \"" << type->color << "\"";
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 DefineStateTypeEvent::DefineStateTypeEvent(type_t type)
@@ -304,35 +304,31 @@ DefineEventTypeEvent::DefineEventTypeEvent(type_t type)
 
 
 void DefineStateTypeEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               stream << " " << type->id
-                               << " " << type->father->id
-                               << " " << type->name;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    stream << " " << type->id << " " << type->father->id << " " << type->name;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 void DefineEventTypeEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               stream << " " << type->id
-                               << " " << type->father->id
-                               << " " << type->name;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    stream << " " << type->id << " " << type->father->id << " " << type->name;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 DefineLinkTypeEvent::DefineLinkTypeEvent(type_t type, type_t source, type_t dest)
@@ -351,21 +347,17 @@ DefineLinkTypeEvent::DefineLinkTypeEvent(type_t type, type_t source, type_t dest
 }
 
 void DefineLinkTypeEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               stream << " " << type->id
-                               << " " << type->father->id
-                               << " " << source->id
-                               << " " << dest->id
-                               << " " << type->name;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    stream << " " << type->id << " " << type->father->id << " " << source->id << " " << dest->id << " " << type->name;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 DefineEntityValueEvent::DefineEntityValueEvent (val_t value)
@@ -383,21 +375,19 @@ DefineEntityValueEvent::DefineEntityValueEvent (val_t value)
 
 
 void DefineEntityValueEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               stream << " "   << value->id
-                               << " "   << value->father->id
-                               << " "   << value->name;
-               if(value->color)
-                       stream << " \"" << value->color << "\"";
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    stream << " " << value->id << " " << value->father->id << " " << value->name;
+    if (value->color)
+      stream << " \"" << value->color << "\"";
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 CreateContainerEvent::CreateContainerEvent (container_t container)
@@ -413,47 +403,45 @@ CreateContainerEvent::CreateContainerEvent (container_t container)
 }
 
 void CreateContainerEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " "   << container->id
-                               << " "   << container->type->id
-                               << " "   << container->father->id
-                               << " \"" << container->name << "\"";
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << container->id << " " << container->type->id << " " << container->father->id << " \""
+           << container->name << "\"";
+
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    // if we are in the mode with only one file
+    static FILE* ti_unique_file = nullptr;
+
+    if (tracing_files == nullptr) {
+      tracing_files = xbt_dict_new_homogeneous(nullptr);
+      // generate unique run id with time
+      prefix = xbt_os_time();
+    }
 
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               //if we are in the mode with only one file
-               static FILE *ti_unique_file = nullptr;
-
-               if (tracing_files == nullptr) {
-                       tracing_files = xbt_dict_new_homogeneous(nullptr);
-                       //generate unique run id with time
-                       prefix = xbt_os_time();
-               }
-
-               if (!xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || ti_unique_file == nullptr) {
-                       char *folder_name = bprintf("%s_files", TRACE_get_filename());
-                       char *filename = bprintf("%s/%f_%s.txt", folder_name, prefix, container->name);
+    if (not xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || ti_unique_file == nullptr) {
+      char* folder_name = bprintf("%s_files", TRACE_get_filename());
+      char* filename    = bprintf("%s/%f_%s.txt", folder_name, prefix, container->name);
 #ifdef WIN32
-                       _mkdir(folder_name);
+      _mkdir(folder_name);
 #else
-                       mkdir(folder_name, S_IRWXU | S_IRWXG | S_IRWXO);
+      mkdir(folder_name, S_IRWXU | S_IRWXG | S_IRWXO);
 #endif
-                       ti_unique_file = fopen(filename, "w");
-                       xbt_assert(ti_unique_file, "Tracefile %s could not be opened for writing: %s", filename, strerror(errno));
-                       fprintf(tracing_file, "%s\n", filename);
+      ti_unique_file = fopen(filename, "w");
+      xbt_assert(ti_unique_file, "Tracefile %s could not be opened for writing: %s", filename, strerror(errno));
+      fprintf(tracing_file, "%s\n", filename);
 
-                       xbt_free(folder_name);
-                       xbt_free(filename);
-               }
+      xbt_free(folder_name);
+      xbt_free(filename);
+    }
 
-               xbt_dict_set(tracing_files, container->name, (void *) ti_unique_file, nullptr);
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+    xbt_dict_set(tracing_files, container->name, (void*)ti_unique_file, nullptr);
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 DestroyContainerEvent::DestroyContainerEvent (container_t container)
@@ -469,24 +457,23 @@ DestroyContainerEvent::DestroyContainerEvent (container_t container)
 }
 
 void DestroyContainerEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " "   << container->type->id
-                               << " "   << container->id;
-
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               if (!xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file")|| xbt_dict_length(tracing_files) == 1) {
-                       FILE* f = (FILE*)xbt_dict_get_or_null(tracing_files, container->name);
-                       fclose(f);
-               }
-               xbt_dict_remove(tracing_files, container->name);
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << container->type->id << " " << container->id;
+
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    if (not xbt_cfg_get_boolean("tracing/smpi/format/ti-one-file") || xbt_dict_length(tracing_files) == 1) {
+      FILE* f = (FILE*)xbt_dict_get_or_null(tracing_files, container->name);
+      fclose(f);
+    }
+    xbt_dict_remove(tracing_files, container->name);
+        } else {
+          THROW_IMPOSSIBLE;
+        }
 }
 
 SetVariableEvent::SetVariableEvent (double timestamp, container_t container, type_t type, double value)
@@ -503,20 +490,18 @@ SetVariableEvent::SetVariableEvent (double timestamp, container_t container, typ
 }
 
 void SetVariableEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " << type->id
-                               << " " << container->id
-                               << " " << value;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id << " " << value;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 AddVariableEvent::AddVariableEvent (double timestamp, container_t container, type_t type, double value)
@@ -533,20 +518,18 @@ AddVariableEvent::AddVariableEvent (double timestamp, container_t container, typ
 }
 
 void AddVariableEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " << type->id
-                               << " " << container->id
-                               << " " << value;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id << " " << value;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 SubVariableEvent::SubVariableEvent (double timestamp, container_t container, type_t type, double value)
@@ -563,20 +546,18 @@ SubVariableEvent::SubVariableEvent (double timestamp, container_t container, typ
 }
 
 void SubVariableEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " << type->id
-                               << " " << container->id
-                               << " " << value;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id << " " << value;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 SetStateEvent::SetStateEvent (double timestamp, container_t container, type_t type, val_t value)
@@ -601,26 +582,24 @@ SetStateEvent::SetStateEvent (double timestamp, container_t container, type_t ty
 }
 
 void SetStateEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " << type->id
-                               << " " << container->id;
-               stream << " " <<value->id;
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id;
+    stream << " " << value->id;
 #if HAVE_SMPI
-               if (xbt_cfg_get_boolean("smpi/trace-call-location")) {
-                       stream << " \"" << filename
-                                       << "\" " << linenumber;
-               }
+    if (xbt_cfg_get_boolean("smpi/trace-call-location")) {
+      stream << " \"" << filename << "\" " << linenumber;
+    }
 #endif
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 PushStateEvent::PushStateEvent (double timestamp, container_t container, type_t type, val_t value, void* extra)
@@ -649,168 +628,165 @@ PushStateEvent::PushStateEvent (double timestamp, container_t container, type_t
  : PushStateEvent(timestamp, container, type, value, nullptr)
 {}
 void PushStateEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " << type->id
-                               << " " << container->id;
-               stream << " " <<value->id;
-
-               if (TRACE_display_sizes()) {
-                       stream << " ";
-                       if (extra_ != nullptr) {
-                               stream << static_cast<instr_extra_data>(extra_)->send_size;
-                       }
-                       else {
-                               stream << 0;
-                       }
-               }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id;
+    stream << " " << value->id;
+
+    if (TRACE_display_sizes()) {
+      stream << " ";
+      if (extra_ != nullptr) {
+        stream << static_cast<instr_extra_data>(extra_)->send_size;
+      } else {
+        stream << 0;
+      }
+    }
 #if HAVE_SMPI
-               if (xbt_cfg_get_boolean("smpi/trace-call-location")) {
-                       stream << " \"" << filename
-                                       << "\" " << linenumber;
-               }
+    if (xbt_cfg_get_boolean("smpi/trace-call-location")) {
+      stream << " \"" << filename << "\" " << linenumber;
+    }
 #endif
-               print_row();
+    print_row();
+
+    if (extra_ != nullptr) {
+      if (static_cast<instr_extra_data>(extra_)->sendcounts != nullptr)
+        xbt_free(static_cast<instr_extra_data>(extra_)->sendcounts);
+      if (static_cast<instr_extra_data>(extra_)->recvcounts != nullptr)
+        xbt_free(static_cast<instr_extra_data>(extra_)->recvcounts);
+      xbt_free(extra_);
+    }
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    if (extra_ == nullptr)
+      return;
+    instr_extra_data extra = (instr_extra_data)extra_;
+
+    char* process_id = nullptr;
+    // FIXME: dirty extract "rank-" from the name, as we want the bare process id here
+    if (strstr(container->name, "rank-") == nullptr)
+      process_id = xbt_strdup(container->name);
+    else
+      process_id = xbt_strdup(container->name + 5);
+
+    FILE* trace_file = (FILE*)xbt_dict_get(tracing_files, container->name);
+
+    switch (extra->type) {
+      case TRACING_INIT:
+        fprintf(trace_file, "%s init\n", process_id);
+        break;
+      case TRACING_FINALIZE:
+        fprintf(trace_file, "%s finalize\n", process_id);
+        break;
+      case TRACING_SEND:
+        fprintf(trace_file, "%s send %d %d %s\n", process_id, extra->dst, extra->send_size, extra->datatype1);
+        break;
+      case TRACING_ISEND:
+        fprintf(trace_file, "%s Isend %d %d %s\n", process_id, extra->dst, extra->send_size, extra->datatype1);
+        break;
+      case TRACING_RECV:
+        fprintf(trace_file, "%s recv %d %d %s\n", process_id, extra->src, extra->send_size, extra->datatype1);
+        break;
+      case TRACING_IRECV:
+        fprintf(trace_file, "%s Irecv %d %d %s\n", process_id, extra->src, extra->send_size, extra->datatype1);
+        break;
+      case TRACING_TEST:
+        fprintf(trace_file, "%s test\n", process_id);
+        break;
+      case TRACING_WAIT:
+        fprintf(trace_file, "%s wait\n", process_id);
+        break;
+      case TRACING_WAITALL:
+        fprintf(trace_file, "%s waitAll\n", process_id);
+        break;
+      case TRACING_BARRIER:
+        fprintf(trace_file, "%s barrier\n", process_id);
+        break;
+      case TRACING_BCAST: // rank bcast size (root) (datatype)
+        fprintf(trace_file, "%s bcast %d ", process_id, extra->send_size);
+        if (extra->root != 0 || (extra->datatype1 && strcmp(extra->datatype1, "")))
+          fprintf(trace_file, "%d %s", extra->root, extra->datatype1);
+        fprintf(trace_file, "\n");
+        break;
+      case TRACING_REDUCE: // rank reduce comm_size comp_size (root) (datatype)
+        fprintf(trace_file, "%s reduce %d %f ", process_id, extra->send_size, extra->comp_size);
+        if (extra->root != 0 || (extra->datatype1 && strcmp(extra->datatype1, "")))
+          fprintf(trace_file, "%d %s", extra->root, extra->datatype1);
+        fprintf(trace_file, "\n");
+        break;
+      case TRACING_ALLREDUCE: // rank allreduce comm_size comp_size (datatype)
+        fprintf(trace_file, "%s allReduce %d %f %s\n", process_id, extra->send_size, extra->comp_size,
+                extra->datatype1);
+        break;
+      case TRACING_ALLTOALL: // rank alltoall send_size recv_size (sendtype) (recvtype)
+        fprintf(trace_file, "%s allToAll %d %d %s %s\n", process_id, extra->send_size, extra->recv_size,
+                extra->datatype1, extra->datatype2);
+        break;
+      case TRACING_ALLTOALLV: // rank alltoallv send_size [sendcounts] recv_size [recvcounts] (sendtype) (recvtype)
+        fprintf(trace_file, "%s allToAllV %d ", process_id, extra->send_size);
+        for (int i = 0; i < extra->num_processes; i++)
+          fprintf(trace_file, "%d ", extra->sendcounts[i]);
+        fprintf(trace_file, "%d ", extra->recv_size);
+        for (int i = 0; i < extra->num_processes; i++)
+          fprintf(trace_file, "%d ", extra->recvcounts[i]);
+        fprintf(trace_file, "%s %s \n", extra->datatype1, extra->datatype2);
+        break;
+      case TRACING_GATHER: // rank gather send_size recv_size root (sendtype) (recvtype)
+        fprintf(trace_file, "%s gather %d %d %d %s %s\n", process_id, extra->send_size, extra->recv_size, extra->root,
+                extra->datatype1, extra->datatype2);
+        break;
+      case TRACING_ALLGATHERV: // rank allgatherv send_size [recvcounts] (sendtype) (recvtype)
+        fprintf(trace_file, "%s allGatherV %d ", process_id, extra->send_size);
+        for (int i = 0; i < extra->num_processes; i++)
+          fprintf(trace_file, "%d ", extra->recvcounts[i]);
+        fprintf(trace_file, "%s %s \n", extra->datatype1, extra->datatype2);
+        break;
+      case TRACING_REDUCE_SCATTER: // rank reducescatter [recvcounts] comp_size (sendtype)
+        fprintf(trace_file, "%s reduceScatter ", process_id);
+        for (int i = 0; i < extra->num_processes; i++)
+          fprintf(trace_file, "%d ", extra->recvcounts[i]);
+        fprintf(trace_file, "%f %s\n", extra->comp_size, extra->datatype1);
+        break;
+      case TRACING_COMPUTING:
+        fprintf(trace_file, "%s compute %f\n", process_id, extra->comp_size);
+        break;
+      case TRACING_SLEEPING:
+        fprintf(trace_file, "%s sleep %f\n", process_id, extra->sleep_duration);
+        break;
+      case TRACING_GATHERV: // rank gatherv send_size [recvcounts] root (sendtype) (recvtype)
+        fprintf(trace_file, "%s gatherV %d ", process_id, extra->send_size);
+        for (int i = 0; i < extra->num_processes; i++)
+          fprintf(trace_file, "%d ", extra->recvcounts[i]);
+        fprintf(trace_file, "%d %s %s\n", extra->root, extra->datatype1, extra->datatype2);
+        break;
+      case TRACING_WAITANY:
+      case TRACING_SENDRECV:
+      case TRACING_SCATTER:
+      case TRACING_SCATTERV:
+      case TRACING_ALLGATHER:
+      case TRACING_SCAN:
+      case TRACING_EXSCAN:
+      case TRACING_COMM_SIZE:
+      case TRACING_COMM_SPLIT:
+      case TRACING_COMM_DUP:
+      case TRACING_SSEND:
+      case TRACING_ISSEND:
+      default:
+        XBT_WARN("Call from %s impossible to translate into replay command : Not implemented (yet)", value->name);
+        break;
+    }
 
-               if (extra_ != nullptr) {
-                       if (static_cast<instr_extra_data>(extra_)->sendcounts != nullptr)
-                               xbt_free(static_cast<instr_extra_data>(extra_)->sendcounts);
-                       if (static_cast<instr_extra_data>(extra_)->recvcounts != nullptr)
-                               xbt_free(static_cast<instr_extra_data>(extra_)->recvcounts);
-                       xbt_free(extra_);
-               }
-       } else if (instr_fmt_type == instr_fmt_TI) {
-                 if (extra_ == nullptr)
-                   return;
-                 instr_extra_data extra = (instr_extra_data)extra_;
-
-                 char *process_id = nullptr;
-                 //FIXME: dirty extract "rank-" from the name, as we want the bare process id here
-                 if (strstr(container->name, "rank-") == nullptr)
-                   process_id = xbt_strdup(container->name);
-                 else
-                   process_id = xbt_strdup(container->name + 5);
-
-                 FILE* trace_file =  (FILE* )xbt_dict_get(tracing_files, container->name);
-
-                 switch (extra->type) {
-                 case TRACING_INIT:
-                   fprintf(trace_file, "%s init\n", process_id);
-                   break;
-                 case TRACING_FINALIZE:
-                   fprintf(trace_file, "%s finalize\n", process_id);
-                   break;
-                 case TRACING_SEND:
-                   fprintf(trace_file, "%s send %d %d %s\n", process_id, extra->dst, extra->send_size, extra->datatype1);
-                   break;
-                 case TRACING_ISEND:
-                   fprintf(trace_file, "%s Isend %d %d %s\n", process_id, extra->dst, extra->send_size, extra->datatype1);
-                   break;
-                 case TRACING_RECV:
-                   fprintf(trace_file, "%s recv %d %d %s\n", process_id, extra->src, extra->send_size, extra->datatype1);
-                   break;
-                 case TRACING_IRECV:
-                   fprintf(trace_file, "%s Irecv %d %d %s\n", process_id, extra->src, extra->send_size, extra->datatype1);
-                   break;
-                 case TRACING_TEST:
-                   fprintf(trace_file, "%s test\n", process_id);
-                   break;
-                 case TRACING_WAIT:
-                   fprintf(trace_file, "%s wait\n", process_id);
-                   break;
-                 case TRACING_WAITALL:
-                   fprintf(trace_file, "%s waitAll\n", process_id);
-                   break;
-                 case TRACING_BARRIER:
-                   fprintf(trace_file, "%s barrier\n", process_id);
-                   break;
-                 case TRACING_BCAST:          // rank bcast size (root) (datatype)
-                   fprintf(trace_file, "%s bcast %d ", process_id, extra->send_size);
-                   if (extra->root != 0 || (extra->datatype1 && strcmp(extra->datatype1, "")))
-                     fprintf(trace_file, "%d %s", extra->root, extra->datatype1);
-                   fprintf(trace_file, "\n");
-                   break;
-                 case TRACING_REDUCE:         // rank reduce comm_size comp_size (root) (datatype)
-                   fprintf(trace_file, "%s reduce %d %f ", process_id, extra->send_size, extra->comp_size);
-                   if (extra->root != 0 || (extra->datatype1 && strcmp(extra->datatype1, "")))
-                     fprintf(trace_file, "%d %s", extra->root, extra->datatype1);
-                   fprintf(trace_file, "\n");
-                   break;
-                 case TRACING_ALLREDUCE:      // rank allreduce comm_size comp_size (datatype)
-                   fprintf(trace_file, "%s allReduce %d %f %s\n", process_id, extra->send_size, extra->comp_size, extra->datatype1);
-                   break;
-                 case TRACING_ALLTOALL:       // rank alltoall send_size recv_size (sendtype) (recvtype)
-                   fprintf(trace_file, "%s allToAll %d %d %s %s\n", process_id, extra->send_size, extra->recv_size, extra->datatype1,
-                           extra->datatype2);
-                   break;
-                 case TRACING_ALLTOALLV:      // rank alltoallv send_size [sendcounts] recv_size [recvcounts] (sendtype) (recvtype)
-                   fprintf(trace_file, "%s allToAllV %d ", process_id, extra->send_size);
-                   for (int i = 0; i < extra->num_processes; i++)
-                     fprintf(trace_file, "%d ", extra->sendcounts[i]);
-                   fprintf(trace_file, "%d ", extra->recv_size);
-                   for (int i = 0; i < extra->num_processes; i++)
-                     fprintf(trace_file, "%d ", extra->recvcounts[i]);
-                   fprintf(trace_file, "%s %s \n", extra->datatype1, extra->datatype2);
-                   break;
-                 case TRACING_GATHER:         // rank gather send_size recv_size root (sendtype) (recvtype)
-                   fprintf(trace_file, "%s gather %d %d %d %s %s\n", process_id, extra->send_size, extra->recv_size, extra->root,
-                           extra->datatype1, extra->datatype2);
-                   break;
-                 case TRACING_ALLGATHERV:     // rank allgatherv send_size [recvcounts] (sendtype) (recvtype)
-                   fprintf(trace_file, "%s allGatherV %d ", process_id, extra->send_size);
-                   for (int i = 0; i < extra->num_processes; i++)
-                     fprintf(trace_file, "%d ", extra->recvcounts[i]);
-                   fprintf(trace_file, "%s %s \n", extra->datatype1, extra->datatype2);
-                   break;
-                 case TRACING_REDUCE_SCATTER: // rank reducescatter [recvcounts] comp_size (sendtype)
-                   fprintf(trace_file, "%s reduceScatter ", process_id);
-                   for (int i = 0; i < extra->num_processes; i++)
-                     fprintf(trace_file, "%d ", extra->recvcounts[i]);
-                   fprintf(trace_file, "%f %s\n", extra->comp_size, extra->datatype1);
-                   break;
-                 case TRACING_COMPUTING:
-                   fprintf(trace_file, "%s compute %f\n", process_id, extra->comp_size);
-                   break;
-                 case TRACING_SLEEPING:
-                   fprintf(trace_file, "%s sleep %f\n", process_id, extra->sleep_duration);
-                   break;
-                 case TRACING_GATHERV: // rank gatherv send_size [recvcounts] root (sendtype) (recvtype)
-                   fprintf(trace_file, "%s gatherV %d ", process_id, extra->send_size);
-                   for (int i = 0; i < extra->num_processes; i++)
-                     fprintf(trace_file, "%d ", extra->recvcounts[i]);
-                   fprintf(trace_file, "%d %s %s\n", extra->root, extra->datatype1, extra->datatype2);
-                   break;
-                 case TRACING_WAITANY:
-                 case TRACING_SENDRECV:
-                 case TRACING_SCATTER:
-                 case TRACING_SCATTERV:
-                 case TRACING_ALLGATHER:
-                 case TRACING_SCAN:
-                 case TRACING_EXSCAN:
-                 case TRACING_COMM_SIZE:
-                 case TRACING_COMM_SPLIT:
-                 case TRACING_COMM_DUP:
-                 case TRACING_SSEND:
-                 case TRACING_ISSEND:
-                 default:
-                   XBT_WARN ("Call from %s impossible to translate into replay command : Not implemented (yet)",
-                        value->name);
-                   break;
-                 }
-
-                 if (extra->recvcounts != nullptr)
-                   xbt_free(extra->recvcounts);
-                 if (extra->sendcounts != nullptr)
-                   xbt_free(extra->sendcounts);
-                 xbt_free(process_id);
-                 xbt_free(extra);
+    if (extra->recvcounts != nullptr)
+      xbt_free(extra->recvcounts);
+    if (extra->sendcounts != nullptr)
+      xbt_free(extra->sendcounts);
+    xbt_free(process_id);
+    xbt_free(extra);
 
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 
@@ -827,19 +803,18 @@ PopStateEvent::PopStateEvent (double timestamp, container_t container, type_t ty
 }
 
 void PopStateEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " << type->id
-                               << " " << container->id;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 ResetStateEvent::ResetStateEvent (double timestamp, container_t container, type_t type)
@@ -856,19 +831,18 @@ ResetStateEvent::ResetStateEvent (double timestamp, container_t container, type_
 }
 
 void ResetStateEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " << type->id
-                               << " " << container->id;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 StartLinkEvent::StartLinkEvent (double timestamp, container_t container,
@@ -895,26 +869,23 @@ StartLinkEvent::StartLinkEvent (double timestamp, container_t container, type_t
 }
 
 void StartLinkEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " <<type->id
-                               << " " <<container->id
-                               << " " <<value;
-               stream << " " << sourceContainer->id
-                               << " " << key;
-
-               if (TRACE_display_sizes()) {
-                       stream << " " << size;
-               }
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id << " " << value;
+    stream << " " << sourceContainer->id << " " << key;
+
+    if (TRACE_display_sizes()) {
+      stream << " " << size;
+    }
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 EndLinkEvent::EndLinkEvent (double timestamp, container_t container, type_t type, container_t destContainer,
@@ -935,22 +906,19 @@ EndLinkEvent::EndLinkEvent (double timestamp, container_t container, type_t type
 
 
 void EndLinkEvent::print() {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " <<type->id
-                               << " " <<container->id
-                               << " " <<value;
-               stream << " " << destContainer->id
-                               << " " << key;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id << " " << value;
+    stream << " " << destContainer->id << " " << key;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 NewEvent::NewEvent (double timestamp, container_t container, type_t type, val_t value)
@@ -967,20 +935,18 @@ NewEvent::NewEvent (double timestamp, container_t container, type_t type, val_t
 }
 
 void NewEvent::print () {
-       if (instr_fmt_type == instr_fmt_paje) {
-               XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
-               stream << std::fixed << std::setprecision(TRACE_precision());
-               stream << (int)this->event_type;
-               print_timestamp(this);
-               stream << " " << type->id
-                               << " " << container->id
-                               << " " << value->id;
-               print_row();
-       } else if (instr_fmt_type == instr_fmt_TI) {
-               /* Nothing to do */
-       } else {
-               THROW_IMPOSSIBLE;
-       }
+  if (instr_fmt_type == instr_fmt_paje) {
+    XBT_DEBUG("%s: event_type=%d, timestamp=%.*f", __FUNCTION__, (int)event_type, TRACE_precision(), timestamp);
+    stream << std::fixed << std::setprecision(TRACE_precision());
+    stream << (int)this->event_type;
+    print_timestamp(this);
+    stream << " " << type->id << " " << container->id << " " << value->id;
+    print_row();
+  } else if (instr_fmt_type == instr_fmt_TI) {
+    /* Nothing to do */
+  } else {
+    THROW_IMPOSSIBLE;
+  }
 }
 
 
index c9baee5..acb89e3 100644 (file)
@@ -156,7 +156,7 @@ type_t PJ_type_variable_new (const char *name, const char *color, type_t father)
   type_t ret = nullptr;
 
   char white[INSTR_DEFAULT_STR_SIZE] = "1 1 1";
-  if (!color){
+  if (not color) {
     ret = newType (name, name, white, TYPE_VARIABLE, father);
   }else{
     ret = newType (name, name, color, TYPE_VARIABLE, father);
index 81be1f4..d4da8fa 100644 (file)
@@ -255,7 +255,6 @@ class PushStateEvent : public PajeEvent  {
 class PopStateEvent : public PajeEvent  {
   container_t container;
   type_t type;
-  xbt_dynar_t extra;
   public:
   PopStateEvent (double timestamp, container_t container, type_t type);
   void print() override;
index 0cfed5e..3135882 100644 (file)
@@ -26,7 +26,7 @@ static void __TRACE_surf_check_variable_set_to_zero(double now, const char *vari
   snprintf (key, n, "%s%s", resource, variable);
 
   // check if key exists: if it doesn't, set the variable to zero and mark this in the dict
-  if (!xbt_dict_get_or_null(platform_variables, key)) {
+  if (not xbt_dict_get_or_null(platform_variables, key)) {
     container_t container = PJ_container_get (resource);
     type_t type = PJ_type_get (variable, container->type);
     new SetVariableEvent (now, container, type, 0);
@@ -46,9 +46,9 @@ static void instr_event (double now, double delta, type_t variable, container_t
 void TRACE_surf_link_set_utilization(const char *resource, const char *category, double value, double now, double delta)
 {
   //only trace link utilization if link is known by tracing mechanism
-  if (!PJ_container_get_or_null(resource))
+  if (not PJ_container_get_or_null(resource))
     return;
-  if (!value)
+  if (not value)
     return;
 
   //trace uncategorized link utilization
@@ -61,7 +61,7 @@ void TRACE_surf_link_set_utilization(const char *resource, const char *category,
 
   //trace categorized utilization
   if (TRACE_categorized()){
-    if (!category)
+    if (not category)
       return;
     //variable of this category starts by 'b', because we have a link here
     char category_type[INSTR_DEFAULT_STR_SIZE];
@@ -78,7 +78,7 @@ void TRACE_surf_host_set_utilization(const char *resource, const char *category,
 {
   //only trace host utilization if host is known by tracing mechanism
   container_t container = PJ_container_get_or_null(resource);
-  if (!container || !value)
+  if (not container || not value)
     return;
 
   //trace uncategorized host utilization
@@ -90,7 +90,7 @@ void TRACE_surf_host_set_utilization(const char *resource, const char *category,
 
   //trace categorized utilization
   if (TRACE_categorized()){
-    if (!category)
+    if (not category)
       return;
     //variable of this category starts by 'p', because we have a host here
     char category_type[INSTR_DEFAULT_STR_SIZE];
index 86dbae5..4f7841f 100644 (file)
@@ -27,10 +27,10 @@ void Jedule::addMetaInfo(char *key, char *value) {
 }
 
 void Jedule::writeOutput(FILE *file) {
-  if (!this->event_set.empty()){
+  if (not this->event_set.empty()) {
     fprintf(file, "<jedule>\n");
 
-    if (!this->meta_info.empty()){
+    if (not this->meta_info.empty()) {
       fprintf(file, "  <jedule_meta>\n");
       for (auto elm: this->meta_info)
         fprintf(file, "        <prop key=\"%s\" value=\"%s\" />\n",elm.first,elm.second);
index 95a591b..afe12f3 100644 (file)
@@ -20,7 +20,7 @@ Event::Event(std::string name, double start_time, double end_time, std::string t
 
 Event::~Event()
 {
-  if (!this->resource_subsets->empty()){
+  if (not this->resource_subsets->empty()) {
     for (auto subset: *this->resource_subsets)
       delete subset;
     delete this->resource_subsets;
@@ -51,7 +51,7 @@ void Event::print(FILE *jed_file)
   fprintf(jed_file, "      <prop key=\"end\" value=\"%g\" />\n", this->end_time);
   fprintf(jed_file, "      <prop key=\"type\" value=\"%s\" />\n", this->type.c_str());
 
-  xbt_assert(!this->resource_subsets->  empty());
+  xbt_assert(not this->resource_subsets->empty());
   fprintf(jed_file, "      <res_util>\n");
   for (auto subset: *this->resource_subsets) {
     fprintf(jed_file, "        <select resources=\"");
@@ -61,14 +61,14 @@ void Event::print(FILE *jed_file)
   }
   fprintf(jed_file, "      </res_util>\n");
 
-  if (!this->characteristics_list.empty()){
+  if (not this->characteristics_list.empty()) {
     fprintf(jed_file, "      <characteristics>\n");
     for (auto ch: this->characteristics_list)
       fprintf(jed_file, "          <characteristic name=\"%s\" />\n", ch);
     fprintf(jed_file, "      </characteristics>\n");
   }
 
-  if (!this->info_map.empty()){
+  if (not this->info_map.empty()) {
     fprintf(jed_file, "      <info>\n");
     for (auto elm: this->info_map)
       fprintf(jed_file, "        <prop key=\"%s\" value=\"%s\" />\n",elm.first,elm.second);
index 1bc42af..c5e6b32 100644 (file)
@@ -26,7 +26,7 @@ Container::Container(std::string name): name(name)
 
 Container::~Container()
 {
-  if(!this->children.empty())
+  if (not this->children.empty())
     for (auto child: this->children)
       delete child;
 }
@@ -80,7 +80,7 @@ std::vector<int> Container::getHierarchy()
 
   if(this->parent != nullptr ) {
 
-    if(!this->parent->children.empty()) {
+    if (not this->parent->children.empty()) {
       // we are in the last level
       return this->parent->getHierarchy();
     } else {
@@ -128,7 +128,7 @@ std::string Container::getHierarchyAsString()
 void Container::printResources(FILE * jed_file)
 {
   unsigned int i=0;
-  xbt_assert(!this->resource_list.empty());
+  xbt_assert(not this->resource_list.empty());
 
   unsigned int res_nb = this->resource_list.size();
   std::string resid = this->getHierarchyAsString();
@@ -149,7 +149,7 @@ void Container::print(FILE* jed_file)
 {
   xbt_assert( this != nullptr );
   fprintf(jed_file, "    <res name=\"%s\">\n", this->name.c_str());
-  if( !this->children.empty()){
+  if (not this->children.empty()) {
     for (auto child: this->children) {
       child->print(jed_file);
     }
index e22d6a8..7bd6543 100644 (file)
@@ -38,7 +38,7 @@ void jedule_sd_init()
   my_jedule->root_container = root_container;
 }
 
-void jedule_sd_exit(void)
+void jedule_sd_exit()
 {
   delete my_jedule;
 }
@@ -47,7 +47,7 @@ void jedule_sd_dump(const char * filename)
 {
   if (my_jedule) {
     char *fname;
-    if (!filename) {
+    if (not filename) {
       fname = bprintf("%s.jed", xbt_binary_name);
     } else {
       fname = xbt_strdup(filename);
index e672384..08e2a63 100644 (file)
@@ -13,13 +13,15 @@ void simgrid::kernel::activity::ActivityImpl::ref()
   refcount++;
 }
 
-void simgrid::kernel::activity::ActivityImpl::unref()
+bool simgrid::kernel::activity::ActivityImpl::unref()
 {
   xbt_assert(refcount > 0,
       "This activity has a negative refcount! You can only call test() or wait() once per activity.");
 
   refcount--;
   if (refcount>0)
-    return;
+    return false;
   delete this;
+
+  return true;
 }
index 94b8590..13c284a 100644 (file)
@@ -12,6 +12,7 @@
 #include <xbt/base.h>
 #include "simgrid/forward.h"
 
+#include <atomic>
 #include <simgrid/simix.hpp>
 
 namespace simgrid {
@@ -30,9 +31,30 @@ namespace activity {
     virtual void resume()=0;
     virtual void post() =0; // What to do when a simcall terminates
 
+    // boost::intrusive_ptr<Activity> support:
+    friend void intrusive_ptr_add_ref(ActivityImpl * activity)
+    {
+      // Atomic operation! Do not split in two instructions!
+      auto previous = (activity->refcount_)++;
+      xbt_assert(previous != 0);
+      (void)previous;
+    }
+
+    friend void intrusive_ptr_release(ActivityImpl * activity)
+    {
+      // Atomic operation! Do not split in two instructions!
+      auto count = --(activity->refcount_);
+      if (count == 0)
+        delete activity;
+    }
+
+    /** @brief Increase the refcount */
     void ref();
-    void unref();
+    /** @brief Reduce the refcount; returns true if the object was destroyed */
+    bool unref();
+
   private:
+    std::atomic_int_fast32_t refcount_{1};
     int refcount = 1;
   };
 }}} // namespace simgrid::kernel::activity
similarity index 68%
rename from src/kernel/activity/SynchroComm.cpp
rename to src/kernel/activity/CommImpl.cpp
index f8969b7..58182ea 100644 (file)
@@ -1,26 +1,27 @@
-/* Copyright (c) 2007-2016. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2007-2017. 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 "src/kernel/activity/SynchroComm.hpp"
-#include "src/surf/surf_interface.hpp"
-#include "src/simix/smx_network_private.h"
+#include "src/kernel/activity/CommImpl.hpp"
+
 #include "simgrid/modelchecker.h"
 #include "src/mc/mc_replay.h"
+#include "src/simix/smx_network_private.h"
+#include "src/surf/surf_interface.hpp"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_network);
 
-simgrid::kernel::activity::Comm::Comm(e_smx_comm_type_t _type) : type(_type)
+simgrid::kernel::activity::CommImpl::CommImpl(e_smx_comm_type_t _type) : type(_type)
 {
-  state = SIMIX_WAITING;
-  src_data=nullptr;
-  dst_data=nullptr;
-
-  XBT_DEBUG("Create communicate synchro %p", this);
+  state    = SIMIX_WAITING;
+  src_data = nullptr;
+  dst_data = nullptr;
+  intrusive_ptr_add_ref(this);
+  XBT_DEBUG("Create comm activity %p", this);
 }
 
-simgrid::kernel::activity::Comm::~Comm()
+simgrid::kernel::activity::CommImpl::~CommImpl()
 {
   XBT_DEBUG("Really free communication %p", this);
 
@@ -34,19 +35,19 @@ simgrid::kernel::activity::Comm::~Comm()
     src_buff = nullptr;
   }
 
-  if(mbox)
+  if (mbox)
     mbox->remove(this);
 }
-void simgrid::kernel::activity::Comm::suspend()
+
+void simgrid::kernel::activity::CommImpl::suspend()
 {
   /* FIXME: shall we suspend also the timeout synchro? */
   if (surf_comm)
     surf_comm->suspend();
   /* in the other case, the action will be suspended on creation, in SIMIX_comm_start() */
-
 }
 
-void simgrid::kernel::activity::Comm::resume()
+void simgrid::kernel::activity::CommImpl::resume()
 {
   /*FIXME: check what happen with the timeouts */
   if (surf_comm)
@@ -54,24 +55,23 @@ void simgrid::kernel::activity::Comm::resume()
   /* in the other case, the synchro were not really suspended yet, see SIMIX_comm_suspend() and SIMIX_comm_start() */
 }
 
-void simgrid::kernel::activity::Comm::cancel()
+void simgrid::kernel::activity::CommImpl::cancel()
 {
   /* if the synchro is a waiting state means that it is still in a mbox */
   /* so remove from it and delete it */
   if (state == SIMIX_WAITING) {
     mbox->remove(this);
     state = SIMIX_CANCELED;
-  }
-  else if (!MC_is_active() /* when running the MC there are no surf actions */
-           && !MC_record_replay_is_active()
-           && (state == SIMIX_READY || state == SIMIX_RUNNING)) {
+    SIMIX_comm_unref(this);
+  } else if (not MC_is_active() /* when running the MC there are no surf actions */
+             && not MC_record_replay_is_active() && (state == SIMIX_READY || state == SIMIX_RUNNING)) {
 
     surf_comm->cancel();
   }
 }
 
 /**  @brief get the amount remaining from the communication */
-double simgrid::kernel::activity::Comm::remains()
+double simgrid::kernel::activity::CommImpl::remains()
 {
   if (state == SIMIX_RUNNING)
     return surf_comm->getRemains();
@@ -81,28 +81,28 @@ double simgrid::kernel::activity::Comm::remains()
 }
 
 /** @brief This is part of the cleanup process, probably an internal command */
-void simgrid::kernel::activity::Comm::cleanupSurf()
+void simgrid::kernel::activity::CommImpl::cleanupSurf()
 {
-  if (surf_comm){
+  if (surf_comm) {
     surf_comm->unref();
     surf_comm = nullptr;
   }
 
-  if (src_timeout){
+  if (src_timeout) {
     src_timeout->unref();
     src_timeout = nullptr;
   }
 
-  if (dst_timeout){
+  if (dst_timeout) {
     dst_timeout->unref();
     dst_timeout = nullptr;
   }
 }
 
-void simgrid::kernel::activity::Comm::post()
+void simgrid::kernel::activity::CommImpl::post()
 {
   /* Update synchro state */
-  if (src_timeout &&  src_timeout->getState() == simgrid::surf::Action::State::done)
+  if (src_timeout && src_timeout->getState() == simgrid::surf::Action::State::done)
     state = SIMIX_SRC_TIMEOUT;
   else if (dst_timeout && dst_timeout->getState() == simgrid::surf::Action::State::done)
     state = SIMIX_DST_TIMEOUT;
@@ -115,13 +115,15 @@ void simgrid::kernel::activity::Comm::post()
   } else
     state = SIMIX_DONE;
 
-  XBT_DEBUG("SIMIX_post_comm: comm %p, state %d, src_proc %p, dst_proc %p, detached: %d",
-            this, (int)state, src_proc, dst_proc, detached);
+  XBT_DEBUG("SIMIX_post_comm: comm %p, state %d, src_proc %p, dst_proc %p, detached: %d", this, (int)state, src_proc,
+            dst_proc, detached);
 
   /* destroy the surf actions associated with the Simix communication */
   cleanupSurf();
 
   /* if there are simcalls associated with the synchro, then answer them */
-  if (!simcalls.empty())
+  if (not simcalls.empty()) {
     SIMIX_comm_finish(this);
+    SIMIX_comm_unref(this);
+  }
 }
diff --git a/src/kernel/activity/CommImpl.hpp b/src/kernel/activity/CommImpl.hpp
new file mode 100644 (file)
index 0000000..bbf350c
--- /dev/null
@@ -0,0 +1,70 @@
+/* Copyright (c) 2007-2017. 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 SIMIX_SYNCHRO_COMM_HPP
+#define SIMIX_SYNCHRO_COMM_HPP
+
+#include "src/kernel/activity/ActivityImpl.hpp"
+#include "surf/surf.h"
+
+typedef enum { SIMIX_COMM_SEND, SIMIX_COMM_RECEIVE, SIMIX_COMM_READY, SIMIX_COMM_DONE } e_smx_comm_type_t;
+
+namespace simgrid {
+namespace kernel {
+namespace activity {
+
+XBT_PUBLIC_CLASS CommImpl : public ActivityImpl
+{
+  ~CommImpl() override;
+
+public:
+  explicit CommImpl(e_smx_comm_type_t type);
+  void suspend() override;
+  void resume() override;
+  void post() override;
+  void cancel();
+  double remains();
+  void cleanupSurf(); // FIXME: make me protected
+
+  e_smx_comm_type_t type;       /* Type of the communication (SIMIX_COMM_SEND or SIMIX_COMM_RECEIVE) */
+  smx_mailbox_t mbox = nullptr; /* Rendez-vous where the comm is queued */
+
+#if SIMGRID_HAVE_MC
+  smx_mailbox_t mbox_cpy = nullptr; /* Copy of the rendez-vous where the comm is queued, MC needs it for DPOR
+                                     (comm.mbox set to nullptr when the communication is removed from the mailbox
+                                     (used as garbage collector)) */
+#endif
+  bool detached = false; /* If detached or not */
+
+  void (*clean_fun)(void*) = nullptr; /* Function to clean the detached src_buf if something goes wrong */
+  int (*match_fun)(void*, void*, smx_activity_t) = nullptr; /* Filter function used by the other side. It is used when
+                                      looking if a given communication matches my needs. For that, myself must match the
+                                      expectations of the other side, too. See  */
+  void (*copy_data_fun)(smx_activity_t, void*, size_t) = nullptr;
+
+  /* Surf action data */
+  surf_action_t surf_comm   = nullptr; /* The Surf communication action encapsulated */
+  surf_action_t src_timeout = nullptr; /* Surf's actions to instrument the timeouts */
+  surf_action_t dst_timeout = nullptr; /* Surf's actions to instrument the timeouts */
+  smx_actor_t src_proc      = nullptr;
+  smx_actor_t dst_proc      = nullptr;
+  double rate               = 0.0;
+  double task_size          = 0.0;
+
+  /* Data to be transfered */
+  void* src_buff        = nullptr;
+  void* dst_buff        = nullptr;
+  size_t src_buff_size  = 0;
+  size_t* dst_buff_size = nullptr;
+  bool copied           = false; /* whether the data were already copied */
+
+  void* src_data = nullptr; /* User data associated to communication */
+  void* dst_data = nullptr;
+};
+}
+}
+} // namespace simgrid::kernel::activity
+
+#endif
similarity index 67%
rename from src/kernel/activity/SynchroExec.cpp
rename to src/kernel/activity/ExecImpl.cpp
index 5528f86..56c6436 100644 (file)
@@ -5,42 +5,41 @@
 
 #include "simgrid/s4u/Host.hpp"
 
-#include "src/kernel/activity/SynchroExec.hpp"
-#include "src/surf/surf_interface.hpp"
+#include "src/kernel/activity/ExecImpl.hpp"
 #include "src/simix/smx_host_private.h"
+#include "src/surf/surf_interface.hpp"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process);
 
-simgrid::kernel::activity::Exec::Exec(const char*name, sg_host_t host) :
-    host_(host)
+simgrid::kernel::activity::ExecImpl::ExecImpl(const char* name, sg_host_t host) : host_(host)
 {
   if (name)
     this->name = name;
-  this->state = SIMIX_RUNNING;
+  this->state  = SIMIX_RUNNING;
 }
 
-simgrid::kernel::activity::Exec::~Exec()
+simgrid::kernel::activity::ExecImpl::~ExecImpl()
 {
   if (surf_exec)
     surf_exec->unref();
   if (timeoutDetector)
     timeoutDetector->unref();
 }
-void simgrid::kernel::activity::Exec::suspend()
+void simgrid::kernel::activity::ExecImpl::suspend()
 {
   XBT_VERB("This exec is suspended (remain: %f)", surf_exec->getRemains());
   if (surf_exec)
     surf_exec->suspend();
 }
 
-void simgrid::kernel::activity::Exec::resume()
+void simgrid::kernel::activity::ExecImpl::resume()
 {
   XBT_VERB("This exec is resumed (remain: %f)", surf_exec->getRemains());
   if (surf_exec)
     surf_exec->resume();
 }
 
-double simgrid::kernel::activity::Exec::remains()
+double simgrid::kernel::activity::ExecImpl::remains()
 {
   if (state == SIMIX_RUNNING)
     return surf_exec->getRemains();
@@ -48,11 +47,11 @@ double simgrid::kernel::activity::Exec::remains()
   return 0;
 }
 
-void simgrid::kernel::activity::Exec::post()
+void simgrid::kernel::activity::ExecImpl::post()
 {
-  if (host_ && host_->isOff()) {/* FIXME: handle resource failure for parallel tasks too */
-    /* If the host running the synchro failed, notice it. This way, the asking
-     * process can be killed if it runs on that host itself */
+  if (host_ && host_->isOff()) { /* FIXME: handle resource failure for parallel tasks too */
+                                 /* If the host running the synchro failed, notice it. This way, the asking
+                                  * process can be killed if it runs on that host itself */
     state = SIMIX_FAILED;
   } else if (surf_exec->getState() == simgrid::surf::Action::State::failed) {
     /* If the host running the synchro didn't fail, then the synchro was canceled */
@@ -73,6 +72,6 @@ void simgrid::kernel::activity::Exec::post()
   }
 
   /* If there are simcalls associated with the synchro, then answer them */
-  if (!simcalls.empty())
+  if (not simcalls.empty())
     SIMIX_execution_finish(this);
 }
diff --git a/src/kernel/activity/ExecImpl.hpp b/src/kernel/activity/ExecImpl.hpp
new file mode 100644 (file)
index 0000000..8012e39
--- /dev/null
@@ -0,0 +1,36 @@
+/* Copyright (c) 2007-2017. 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 SIMIX_SYNCHRO_EXEC_HPP
+#define SIMIX_SYNCHRO_EXEC_HPP
+
+#include "src/kernel/activity/ActivityImpl.hpp"
+#include "surf/surf.h"
+
+namespace simgrid {
+namespace kernel {
+namespace activity {
+
+XBT_PUBLIC_CLASS ExecImpl : public ActivityImpl
+{
+  ~ExecImpl() override;
+
+public:
+  ExecImpl(const char* name, sg_host_t host);
+  void suspend() override;
+  void resume() override;
+  void post() override;
+  double remains();
+
+  sg_host_t host_ =
+      nullptr; /* The host where the execution takes place. If nullptr, then this is a parallel exec (and only surf
+                  knows the hosts) */
+  surf_action_t surf_exec       = nullptr; /* The Surf execution action encapsulated */
+  surf::Action* timeoutDetector = nullptr;
+};
+}
+}
+} // namespace simgrid::kernel::activity
+#endif
index 06060f4..8c66d35 100644 (file)
@@ -4,7 +4,8 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "src/kernel/activity/MailboxImpl.hpp"
-#include "src/kernel/activity/SynchroComm.hpp"
+
+#include "src/kernel/activity/CommImpl.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_mailbox, simix, "Mailbox implementation");
 
@@ -35,7 +36,7 @@ MailboxImpl* MailboxImpl::byNameOrCreate(const char* name)
   xbt_assert(name, "Mailboxes must have a name");
   /* two processes may have pushed the same mbox_create simcall at the same time */
   smx_mailbox_t mbox = static_cast<smx_mailbox_t>(xbt_dict_get_or_null(mailboxes, name));
-  if (!mbox) {
+  if (not mbox) {
     mbox = new MailboxImpl(name);
     XBT_DEBUG("Creating a mailbox at %p with name %s", mbox, name);
     xbt_dict_set(mailboxes, mbox->name_, mbox, nullptr);
@@ -52,7 +53,7 @@ void MailboxImpl::setReceiver(s4u::ActorPtr actor)
 /** @brief Pushes a communication activity into a mailbox
  *  @param comm What to add
  */
-void MailboxImpl::push(activity::Comm* comm)
+void MailboxImpl::push(activity::CommImpl* comm)
 {
   this->comm_queue.push_back(comm);
   comm->mbox = this;
@@ -63,7 +64,7 @@ void MailboxImpl::push(activity::Comm* comm)
  */
 void MailboxImpl::remove(smx_activity_t activity)
 {
-  simgrid::kernel::activity::Comm* comm = static_cast<simgrid::kernel::activity::Comm*>(activity);
+  simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(activity);
 
   comm->mbox = nullptr;
   for (auto it = this->comm_queue.begin(); it != this->comm_queue.end(); it++)
index 2a2ec0d..ea9b272 100644 (file)
@@ -9,7 +9,7 @@
 #include <boost/circular_buffer.hpp>
 
 #include "simgrid/s4u/Mailbox.hpp"
-#include "src/kernel/activity/SynchroComm.hpp"
+#include "src/kernel/activity/CommImpl.hpp"
 #include "src/simix/ActorImpl.hpp"
 
 #define MAX_MAILBOX_SIZE 10000000
@@ -31,7 +31,7 @@ public:
   static MailboxImpl* byNameOrNull(const char* name);
   static MailboxImpl* byNameOrCreate(const char* name);
   void setReceiver(s4u::ActorPtr actor);
-  void push(activity::Comm* comm);
+  void push(activity::CommImpl* comm);
   void remove(smx_activity_t activity);
   simgrid::s4u::Mailbox piface_; // Our interface
   char* name_;
similarity index 80%
rename from src/kernel/activity/SynchroSleep.cpp
rename to src/kernel/activity/SleepImpl.cpp
index a2f281e..6db6d88 100644 (file)
@@ -5,36 +5,36 @@
 
 #include "simgrid/s4u/Host.hpp"
 
+#include "src/kernel/activity/SleepImpl.hpp"
 #include "src/kernel/context/Context.hpp"
-#include "src/kernel/activity/SynchroSleep.hpp"
 
-#include "src/surf/surf_interface.hpp"
 #include "src/simix/ActorImpl.hpp"
 #include "src/simix/popping_private.h"
+#include "src/surf/surf_interface.hpp"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process);
 
-void simgrid::kernel::activity::Sleep::suspend()
+void simgrid::kernel::activity::SleepImpl::suspend()
 {
   surf_sleep->suspend();
 }
 
-void simgrid::kernel::activity::Sleep::resume()
+void simgrid::kernel::activity::SleepImpl::resume()
 {
   surf_sleep->resume();
 }
 
-void simgrid::kernel::activity::Sleep::post()
+void simgrid::kernel::activity::SleepImpl::post()
 {
-  while (!simcalls.empty()) {
+  while (not simcalls.empty()) {
     smx_simcall_t simcall = simcalls.front();
     simcalls.pop_front();
 
     e_smx_state_t state;
-    switch (surf_sleep->getState()){
+    switch (surf_sleep->getState()) {
       case simgrid::surf::Action::State::failed:
         simcall->issuer->context->iwannadie = 1;
-        //SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
+        // SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
         state = SIMIX_SRC_HOST_FAILURE;
         break;
 
similarity index 56%
rename from src/kernel/activity/SynchroSleep.hpp
rename to src/kernel/activity/SleepImpl.hpp
index aca0471..a149ce5 100644 (file)
@@ -6,23 +6,25 @@
 #ifndef SIMIX_SYNCHRO_SLEEP_HPP
 #define SIMIX_SYNCHRO_SLEEP_HPP
 
-#include "surf/surf.h"
 #include "src/kernel/activity/ActivityImpl.hpp"
+#include "surf/surf.h"
 
 namespace simgrid {
 namespace kernel {
 namespace activity {
 
-  XBT_PUBLIC_CLASS Sleep : public ActivityImpl {
-  public:
-    void suspend() override;
-    void resume() override;
-    void post() override;
-
-    sg_host_t host = nullptr;           /* The host that is sleeping */
-    surf_action_t surf_sleep = nullptr; /* The Surf sleeping action encapsulated */
-  };
-
-}}} // namespace simgrid::kernel::activity
+XBT_PUBLIC_CLASS SleepImpl : public ActivityImpl
+{
+public:
+  void suspend() override;
+  void resume() override;
+  void post() override;
+
+  sg_host_t host           = nullptr; /* The host that is sleeping */
+  surf_action_t surf_sleep = nullptr; /* The Surf sleeping action encapsulated */
+};
+}
+}
+} // namespace simgrid::kernel::activity
 
 #endif
diff --git a/src/kernel/activity/SynchroComm.hpp b/src/kernel/activity/SynchroComm.hpp
deleted file mode 100644 (file)
index b114b25..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright (c) 2007-2017. 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 SIMIX_SYNCHRO_COMM_HPP
-#define SIMIX_SYNCHRO_COMM_HPP
-
-#include "surf/surf.h"
-#include "src/kernel/activity/ActivityImpl.hpp"
-
-typedef enum {
-  SIMIX_COMM_SEND,
-  SIMIX_COMM_RECEIVE,
-  SIMIX_COMM_READY,
-  SIMIX_COMM_DONE
-} e_smx_comm_type_t;
-
-namespace simgrid {
-namespace kernel {
-namespace activity {
-
-  XBT_PUBLIC_CLASS Comm : public ActivityImpl {
-    ~Comm() override;
-  public:
-    explicit Comm(e_smx_comm_type_t type);
-    void suspend() override;
-    void resume() override;
-    void post() override;
-    void cancel();
-    double remains();
-    void cleanupSurf(); // FIXME: make me protected
-
-    e_smx_comm_type_t type;         /* Type of the communication (SIMIX_COMM_SEND or SIMIX_COMM_RECEIVE) */
-    smx_mailbox_t mbox = nullptr;   /* Rendez-vous where the comm is queued */
-
-#if SIMGRID_HAVE_MC
-    smx_mailbox_t mbox_cpy = nullptr; /* Copy of the rendez-vous where the comm is queued, MC needs it for DPOR
-                                       (comm.mbox set to nullptr when the communication is removed from the mailbox
-                                       (used as garbage collector)) */
-#endif
-    bool detached = false;          /* If detached or not */
-
-    void (*clean_fun)(void*) = nullptr; /* Function to clean the detached src_buf if something goes wrong */
-    int (*match_fun)(void*,void*,smx_activity_t) = nullptr;  /* Filter function used by the other side. It is used when
-                                       looking if a given communication matches my needs. For that, myself must match the
-                                       expectations of the other side, too. See  */
-    void (*copy_data_fun) (smx_activity_t, void*, size_t) =nullptr;
-
-    /* Surf action data */
-    surf_action_t surf_comm = nullptr;        /* The Surf communication action encapsulated */
-    surf_action_t src_timeout = nullptr;      /* Surf's actions to instrument the timeouts */
-    surf_action_t dst_timeout = nullptr;      /* Surf's actions to instrument the timeouts */
-    smx_actor_t src_proc = nullptr;
-    smx_actor_t dst_proc = nullptr;
-    double rate = 0.0;
-    double task_size = 0.0;
-
-    /* Data to be transfered */
-    void *src_buff = nullptr;
-    void *dst_buff = nullptr;
-    size_t src_buff_size = 0;
-    size_t *dst_buff_size = nullptr;
-    bool copied = false;         /* whether the data were already copied */
-
-    void* src_data = nullptr;    /* User data associated to communication */
-    void* dst_data = nullptr;
-  };
-
-}}} // namespace simgrid::kernel::activity
-
-#endif
diff --git a/src/kernel/activity/SynchroExec.hpp b/src/kernel/activity/SynchroExec.hpp
deleted file mode 100644 (file)
index ad3e1fa..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright (c) 2007-2017. 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 SIMIX_SYNCHRO_EXEC_HPP
-#define SIMIX_SYNCHRO_EXEC_HPP
-
-#include "surf/surf.h"
-#include "src/kernel/activity/ActivityImpl.hpp"
-
-namespace simgrid {
-namespace kernel {
-namespace activity {
-
-  XBT_PUBLIC_CLASS Exec : public ActivityImpl {
-    ~Exec() override;
-  public:
-    Exec(const char*name, sg_host_t host);
-    void suspend() override;
-    void resume() override;
-    void post() override;
-    double remains();
-
-    sg_host_t host_ = nullptr; /* The host where the execution takes place. If nullptr, then this is a parallel exec (and only surf knows the hosts) */
-    surf_action_t surf_exec = nullptr; /* The Surf execution action encapsulated */
-    surf::Action* timeoutDetector = nullptr;
-  };
-
-}}} // namespace simgrid::kernel::activity
-#endif
index 97b1985..bf07805 100644 (file)
@@ -7,8 +7,6 @@
 
 #include "src/kernel/context/Context.hpp"
 #include "src/simix/smx_private.h"
-#include "src/mc/mc_ignore.h"
-
 
 /**
  * @brief creates a new context for a user level process
index aa1ce97..a88920d 100644 (file)
@@ -62,15 +62,15 @@ BoostContextFactory::BoostContextFactory()
 {
   BoostContext::parallel_ = SIMIX_context_is_parallel();
   if (BoostContext::parallel_) {
-#if !HAVE_THREAD_CONTEXTS
-    xbt_die("No thread support for parallel context execution");
-#else
+#if HAVE_THREAD_CONTEXTS
     int nthreads = SIMIX_context_get_nthreads();
     BoostContext::parmap_ = xbt_parmap_new(nthreads, SIMIX_context_get_parallel_mode());
     BoostContext::workers_context_.clear();
     BoostContext::workers_context_.resize(nthreads, nullptr);
     BoostContext::maestro_context_ = nullptr;
     xbt_os_thread_key_create(&BoostContext::worker_id_key_);
+#else
+    xbt_die("No thread support for parallel context execution");
 #endif
   }
 }
@@ -166,7 +166,7 @@ BoostContext::BoostContext(std::function<void()> code,
 BoostContext::~BoostContext()
 {
 #if HAVE_BOOST_CONTEXTS == 1
-  if (!this->stack_)
+  if (not this->stack_)
     delete this->fc_;
 #endif
   if (this == maestro_context_)
index 5afc40f..fa39f6c 100644 (file)
@@ -9,7 +9,6 @@
 
 #include "src/simix/smx_private.h"
 #include "mc/mc.h"
-#include "src/mc/mc_ignore.h"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context);
 
index 9b6d207..3e28c30 100644 (file)
@@ -52,7 +52,7 @@ ThreadContext* ThreadContextFactory::create_context(
     std::function<void()> code,
     void_pfn_smxprocess_t cleanup, smx_actor_t process)
 {
-  return this->new_context<ThreadContext>(std::move(code), cleanup, process, !code);
+  return this->new_context<ThreadContext>(std::move(code), cleanup, process, not code);
 }
 
 void ThreadContextFactory::run_all()
index 41ebd69..73ab218 100644 (file)
@@ -23,11 +23,11 @@ ClusterZone::ClusterZone(NetZone* father, const char* name) : NetZoneImpl(father
 void ClusterZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg_t route, double* lat)
 {
   XBT_VERB("cluster getLocalRoute from '%s'[%d] to '%s'[%d]", src->cname(), src->id(), dst->cname(), dst->id());
-  xbt_assert(!privateLinks_.empty(),
+  xbt_assert(not privateLinks_.empty(),
              "Cluster routing: no links attached to the source node - did you use host_link tag?");
 
   if ((src->id() == dst->id()) && hasLoopback_) {
-    xbt_assert(!src->isRouter(), "Routing from a cluster private router to itself is meaningless");
+    xbt_assert(not src->isRouter(), "Routing from a cluster private router to itself is meaningless");
 
     std::pair<surf::LinkImpl*, surf::LinkImpl*> info = privateLinks_.at(src->id() * linkCountPerNode_);
     route->link_list->push_back(info.first);
@@ -36,7 +36,7 @@ void ClusterZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cba
     return;
   }
 
-  if (!src->isRouter()) { // No private link for the private router
+  if (not src->isRouter()) { // No private link for the private router
     if (hasLimiter_) { // limiter for sender
       std::pair<surf::LinkImpl*, surf::LinkImpl*> info =
           privateLinks_.at(src->id() * linkCountPerNode_ + (hasLoopback_ ? 1 : 0));
@@ -58,7 +58,7 @@ void ClusterZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cba
       *lat += backbone_->latency();
   }
 
-  if (!dst->isRouter()) { // No specific link for router
+  if (not dst->isRouter()) { // No specific link for router
 
     std::pair<surf::LinkImpl*, surf::LinkImpl*> info =
         privateLinks_.at(dst->id() * linkCountPerNode_ + hasLoopback_ + hasLimiter_);
@@ -89,7 +89,7 @@ void ClusterZone::getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges
   }
 
   for (auto src : vertices_) {
-    if (!src->isRouter()) {
+    if (not src->isRouter()) {
       xbt_node_t previous = new_xbt_graph_node(graph, src->cname(), nodes);
 
       std::pair<surf::LinkImpl*, surf::LinkImpl*> info = privateLinks_.at(src->id());
index f987ae3..0efd92e 100644 (file)
@@ -44,22 +44,22 @@ namespace kernel {
 namespace routing {
 void DijkstraZone::seal()
 {
-  xbt_node_t node = nullptr;
-  unsigned int cursor2;
   unsigned int cursor;
+  xbt_node_t node = nullptr;
 
   /* Create the topology graph */
-  if (!routeGraph_)
+  if (not routeGraph_)
     routeGraph_ = xbt_graph_new_graph(1, nullptr);
-  if (!graphNodeMap_)
+  if (not graphNodeMap_)
     graphNodeMap_ = xbt_dict_new_homogeneous(&graph_node_map_elem_free);
 
   /* Add the loopback if needed */
   if (surf_network_model->loopback_ && hierarchy_ == RoutingMode::base) {
     xbt_dynar_foreach (xbt_graph_get_nodes(routeGraph_), cursor, node) {
-      xbt_edge_t edge = nullptr;
 
       bool found = false;
+      xbt_edge_t edge = nullptr;
+      unsigned int cursor2;
       xbt_dynar_foreach (xbt_graph_node_get_outedges(node), cursor2, edge) {
         if (xbt_graph_edge_get_target(edge) == node) {
           found = true;
@@ -67,7 +67,7 @@ void DijkstraZone::seal()
         }
       }
 
-      if (!found) {
+      if (not found) {
         sg_platf_route_cbarg_t e_route = xbt_new0(s_sg_platf_route_cbarg_t, 1);
         e_route->link_list             = new std::vector<surf::LinkImpl*>();
         e_route->link_list->push_back(surf_network_model->loopback_);
@@ -238,10 +238,7 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb
   /* compose route path with links */
   NetPoint* gw_src = nullptr;
   NetPoint* gw_dst;
-  NetPoint* prev_gw_src;
   NetPoint* first_gw            = nullptr;
-  NetPoint* gw_dst_net_elm      = nullptr;
-  NetPoint* prev_gw_src_net_elm = nullptr;
 
   for (int v = dst_node_id; v != src_node_id; v = pred_arr[v]) {
     xbt_node_t node_pred_v = xbt_dynar_get_as(nodes, pred_arr[v], xbt_node_t);
@@ -251,9 +248,9 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb
     if (edge == nullptr)
       THROWF(arg_error, 0, "No route from '%s' to '%s'", src->name().c_str(), dst->name().c_str());
 
-    prev_gw_src = gw_src;
-
     sg_platf_route_cbarg_t e_route = (sg_platf_route_cbarg_t)xbt_graph_edge_get_data(edge);
+
+    NetPoint* prev_gw_src          = gw_src;
     gw_src                         = e_route->gw_src;
     gw_dst                         = e_route->gw_dst;
 
@@ -264,6 +261,8 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb
         strcmp(gw_dst->name().c_str(), prev_gw_src->name().c_str())) {
       std::vector<surf::LinkImpl*> e_route_as_to_as;
 
+      NetPoint* gw_dst_net_elm      = nullptr;
+      NetPoint* prev_gw_src_net_elm = nullptr;
       getGlobalRoute(gw_dst_net_elm, prev_gw_src_net_elm, &e_route_as_to_as, nullptr);
       auto pos = route->link_list->begin();
       for (auto link : e_route_as_to_as) {
@@ -295,7 +294,7 @@ void DijkstraZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cb
     xbt_dict_set_ext(routeCache_, (char*)(&src_id), sizeof(int), (xbt_dictelm_t)elm, nullptr);
   }
 
-  if (!routeCache_)
+  if (not routeCache_)
     xbt_free(pred_arr);
 }
 
@@ -324,9 +323,9 @@ void DijkstraZone::addRoute(sg_platf_route_cbarg_t route)
   addRouteCheckParams(route);
 
   /* Create the topology graph */
-  if (!routeGraph_)
+  if (not routeGraph_)
     routeGraph_ = xbt_graph_new_graph(1, nullptr);
-  if (!graphNodeMap_)
+  if (not graphNodeMap_)
     graphNodeMap_ = xbt_dict_new_homogeneous(&graph_node_map_elem_free);
 
   /* we don't check whether the route already exist, because the algorithm may find another path through some other
@@ -338,7 +337,7 @@ void DijkstraZone::addRoute(sg_platf_route_cbarg_t route)
 
   // Symmetrical YES
   if (route->symmetrical == true) {
-    if (!route->gw_dst && !route->gw_src)
+    if (not route->gw_dst && not route->gw_src)
       XBT_DEBUG("Load Route from \"%s\" to \"%s\"", dstName, srcName);
     else
       XBT_DEBUG("Load NetzoneRoute from %s@%s to %s@%s", dstName, route->gw_dst->name().c_str(), srcName,
index 702655b..70a928d 100644 (file)
@@ -89,7 +89,7 @@ void FatTreeZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cba
   FatTreeNode* currentNode = source;
 
   // up part
-  while (!isInSubTree(currentNode, destination)) {
+  while (not isInSubTree(currentNode, destination)) {
     int d = destination->position; // as in d-mod-k
 
     for (unsigned int i = 0; i < currentNode->level; i++)
index 000db3f..894aa18 100644 (file)
@@ -66,7 +66,7 @@ void FloydZone::getLocalRoute(NetPoint* src, NetPoint* dst, sg_platf_route_cbarg
   }
 
   sg_netpoint_t prev_dst_gw = nullptr;
-  while (!route_stack.empty()) {
+  while (not route_stack.empty()) {
     sg_platf_route_cbarg_t e_route = route_stack.back();
     route_stack.pop_back();
     if (hierarchy_ == RoutingMode::recursive && prev_dst_gw != nullptr &&
@@ -91,7 +91,7 @@ void FloydZone::addRoute(sg_platf_route_cbarg_t route)
 
   addRouteCheckParams(route);
 
-  if (!linkTable_) {
+  if (not linkTable_) {
     /* Create Cost, Predecessor and Link tables */
     costTable_        = xbt_new0(double, table_size* table_size);                  /* link cost from host to host */
     predecessorTable_ = xbt_new0(int, table_size* table_size);                     /* predecessor host numbers */
@@ -140,7 +140,7 @@ void FloydZone::addRoute(sg_platf_route_cbarg_t route)
       route->gw_dst   = gw_tmp;
     }
 
-    if (!route->gw_src && !route->gw_dst)
+    if (not route->gw_src && not route->gw_dst)
       XBT_DEBUG("Load Route from \"%s\" to \"%s\"", route->dst->name().c_str(), route->src->name().c_str());
     else
       XBT_DEBUG("Load NetzoneRoute from \"%s(%s)\" to \"%s(%s)\"", route->dst->name().c_str(), route->gw_src->name().c_str(),
@@ -158,7 +158,7 @@ void FloydZone::seal()
   /* set the size of table routing */
   size_t table_size = vertices_.size();
 
-  if (!linkTable_) {
+  if (not linkTable_) {
     /* Create Cost, Predecessor and Link tables */
     costTable_        = xbt_new0(double, table_size* table_size);                  /* link cost from host to host */
     predecessorTable_ = xbt_new0(int, table_size* table_size);                     /* predecessor host numbers */
@@ -177,7 +177,7 @@ void FloydZone::seal()
   if (surf_network_model->loopback_ && hierarchy_ == RoutingMode::base) {
     for (unsigned int i = 0; i < table_size; i++) {
       sg_platf_route_cbarg_t e_route = TO_FLOYD_LINK(i, i);
-      if (!e_route) {
+      if (not e_route) {
         e_route            = xbt_new0(s_sg_platf_route_cbarg_t, 1);
         e_route->gw_src    = nullptr;
         e_route->gw_dst    = nullptr;
index 8187c3d..89cdec6 100644 (file)
@@ -23,14 +23,14 @@ void FullZone::seal()
   int table_size = static_cast<int>(vertices_.size());
 
   /* Create table if needed */
-  if (!routingTable_)
+  if (not routingTable_)
     routingTable_ = xbt_new0(sg_platf_route_cbarg_t, table_size * table_size);
 
   /* Add the loopback if needed */
   if (surf_network_model->loopback_ && hierarchy_ == RoutingMode::base) {
     for (int i = 0; i < table_size; i++) {
       sg_platf_route_cbarg_t e_route = TO_ROUTE_FULL(i, i);
-      if (!e_route) {
+      if (not e_route) {
         e_route            = xbt_new0(s_sg_platf_route_cbarg_t, 1);
         e_route->gw_src    = nullptr;
         e_route->gw_dst    = nullptr;
@@ -84,7 +84,7 @@ void FullZone::addRoute(sg_platf_route_cbarg_t route)
 
   size_t table_size = vertices_.size();
 
-  if (!routingTable_)
+  if (not routingTable_)
     routingTable_ = xbt_new0(sg_platf_route_cbarg_t, table_size * table_size);
 
   /* Check that the route does not already exist */
index 616fdc5..054b8b4 100644 (file)
@@ -7,7 +7,6 @@
 
 #include "simgrid/s4u/Engine.hpp"
 #include "simgrid/s4u/Host.hpp"
-#include "surf/surf_routing.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route, surf, "Routing part of surf");
 
index 4a2dd54..dc21bff 100644 (file)
@@ -69,15 +69,15 @@ void NetZoneImpl::addBypassRoute(sg_platf_route_cbarg_t e_route)
   if (e_route->gw_dst) {
     XBT_DEBUG("Load bypassNetzoneRoute from %s@%s to %s@%s", e_route->src->cname(), e_route->gw_src->cname(),
               e_route->dst->cname(), e_route->gw_dst->cname());
-    xbt_assert(!e_route->link_list->empty(), "Bypass route between %s@%s and %s@%s cannot be empty.",
+    xbt_assert(not e_route->link_list->empty(), "Bypass route between %s@%s and %s@%s cannot be empty.",
                e_route->src->cname(), e_route->gw_src->cname(), e_route->dst->cname(), e_route->gw_dst->cname());
     xbt_assert(bypassRoutes_.find({e_route->src, e_route->dst}) == bypassRoutes_.end(),
                "The bypass route between %s@%s and %s@%s already exists.", e_route->src->cname(),
                e_route->gw_src->cname(), e_route->dst->cname(), e_route->gw_dst->cname());
   } else {
     XBT_DEBUG("Load bypassRoute from %s to %s", e_route->src->cname(), e_route->dst->cname());
-    xbt_assert(!e_route->link_list->empty(), "Bypass route between %s and %s cannot be empty.", e_route->src->cname(),
-               e_route->dst->cname());
+    xbt_assert(not e_route->link_list->empty(), "Bypass route between %s and %s cannot be empty.",
+               e_route->src->cname(), e_route->dst->cname());
     xbt_assert(bypassRoutes_.find({e_route->src, e_route->dst}) == bypassRoutes_.end(),
                "The bypass route between %s and %s already exists.", e_route->src->cname(), e_route->dst->cname());
   }
index d12ad8c..c8d4bae 100644 (file)
@@ -178,15 +178,17 @@ void RoutedZone::addRouteCheckParams(sg_platf_route_cbarg_t route)
   const char* srcName = src->cname();
   const char* dstName = dst->cname();
 
-  if (!route->gw_dst && !route->gw_src) {
+  if (not route->gw_dst && not route->gw_src) {
     XBT_DEBUG("Load Route from \"%s\" to \"%s\"", srcName, dstName);
     xbt_assert(src, "Cannot add a route from %s to %s: %s does not exist.", srcName, dstName, srcName);
     xbt_assert(dst, "Cannot add a route from %s to %s: %s does not exist.", srcName, dstName, dstName);
-    xbt_assert(!route->link_list->empty(), "Empty route (between %s and %s) forbidden.", srcName, dstName);
-    xbt_assert(!src->isNetZone(),
-               "When defining a route, src cannot be a netzone such as '%s'. Did you meant to have an NetzoneRoute?", srcName);
-    xbt_assert(!dst->isNetZone(),
-               "When defining a route, dst cannot be a netzone such as '%s'. Did you meant to have an NetzoneRoute?", dstName);
+    xbt_assert(not route->link_list->empty(), "Empty route (between %s and %s) forbidden.", srcName, dstName);
+    xbt_assert(not src->isNetZone(),
+               "When defining a route, src cannot be a netzone such as '%s'. Did you meant to have an NetzoneRoute?",
+               srcName);
+    xbt_assert(not dst->isNetZone(),
+               "When defining a route, dst cannot be a netzone such as '%s'. Did you meant to have an NetzoneRoute?",
+               dstName);
   } else {
     XBT_DEBUG("Load NetzoneRoute from %s@%s to %s@%s", srcName, route->gw_src->cname(), dstName, route->gw_dst->cname());
     xbt_assert(src->isNetZone(), "When defining a NetzoneRoute, src must be a netzone but '%s' is not", srcName);
@@ -203,7 +205,7 @@ void RoutedZone::addRouteCheckParams(sg_platf_route_cbarg_t route)
                dstName, route->gw_dst->cname(), srcName);
     xbt_assert(dst, "Cannot add a route from %s@%s to %s@%s: %s does not exist.", srcName, route->gw_src->cname(),
                dstName, route->gw_dst->cname(), dstName);
-    xbt_assert(!route->link_list->empty(), "Empty route (between %s@%s and %s@%s) forbidden.", srcName,
+    xbt_assert(not route->link_list->empty(), "Empty route (between %s@%s and %s@%s) forbidden.", srcName,
                route->gw_src->cname(), dstName, route->gw_dst->cname());
   }
 
index de87cef..39dab91 100644 (file)
@@ -86,7 +86,7 @@ void TorusZone::parse_specific_arguments(sg_platf_cluster_cbarg_t cluster)
   std::vector<std::string> dimensions;
   boost::split(dimensions, cluster->topo_parameters, boost::is_any_of(","));
 
-  if (!dimensions.empty()) {
+  if (not dimensions.empty()) {
     /* We are in a torus cluster
      * Parse attribute dimensions="dim1,dim2,dim3,...,dimN" and safe it in a vector.
      * Additionally, we need to know how many ranks we have in total
index 79a5d19..e2ec817 100644 (file)
@@ -22,7 +22,7 @@ simgrid::xbt::Extension<NetPoint, Coords> Coords::EXTENSION_ID;
 
 Coords::Coords(NetPoint* netpoint, const char* coordStr)
 {
-  if (!Coords::EXTENSION_ID.valid())
+  if (not Coords::EXTENSION_ID.valid())
     Coords::EXTENSION_ID = NetPoint::extension_create<Coords>();
 
   std::vector<std::string> string_values;
diff --git a/src/mc/AddressSpace.cpp b/src/mc/AddressSpace.cpp
deleted file mode 100644 (file)
index e84bac2..0000000
+++ /dev/null
@@ -1,17 +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. */
-
-#include "src/mc/AddressSpace.hpp"
-
-namespace simgrid {
-namespace mc {
-
-AddressSpace::~AddressSpace()
-{
-}
-
-}
-}
index 95a938d..050650c 100644 (file)
@@ -112,7 +112,7 @@ private:
   Process* process_;
 public:
   AddressSpace(Process* process) : process_(process) {}
-  virtual ~AddressSpace();
+  virtual ~AddressSpace() = default;
 
   /** The process of this addres space
    *
index c860d45..b60f938 100644 (file)
@@ -8,8 +8,8 @@
 
 #include <vector>
 
-#include <xbt/misc.h> 
-#include <xbt/asserts.h>
+#include "xbt/asserts.h"
+#include "xbt/misc.h"
 
 #include "src/mc/AddressSpace.hpp"
 #include "src/mc/ChunkedData.hpp"
index 076e607..891e2fa 100644 (file)
@@ -35,7 +35,7 @@ class ChunkedData {
   std::vector<std::size_t> pagenos_;
 public:
 
-  ChunkedData() {}
+  ChunkedData() = default;
   void clear()
   {
     for (std::size_t pageno : pagenos_)
index 86043a0..fe55a37 100644 (file)
@@ -73,7 +73,7 @@ void execute(
         int register_id = simgrid::dwarf::dwarf_register_to_libunwind(
           op->atom - DW_OP_breg0);
         unw_word_t res;
-        if (!context.cursor)
+        if (not context.cursor)
           throw evaluation_error("Missing stack context");
         unw_get_reg(context.cursor, register_id, &res);
         stack.push(res + op->number);
@@ -95,7 +95,7 @@ void execute(
          * Warning: the CFA returned by libunwind (UNW_X86_64_RSP, etc.)
          * is the SP of the *current* frame. */
 
-        if (!context.cursor)
+        if (not context.cursor)
           throw evaluation_error("Missint cursor");
 
         // Get frame:
@@ -156,7 +156,7 @@ void execute(
       // Address from the base address of this ELF object.
       // Push the address on the stack (base_address + argument).
     case DW_OP_addr: {
-      if (!context.object_info)
+      if (not context.object_info)
         throw evaluation_error("No base address");
       Dwarf_Off addr = (Dwarf_Off) (std::uintptr_t)
         context.object_info->base_address() + op->number;
@@ -269,7 +269,7 @@ void execute(
 
     case DW_OP_deref:
       // Computed address:
-      if (!context.address_space)
+      if (not context.address_space)
         throw evaluation_error("Missing address space");
       context.address_space->read_bytes(
         &stack.top(), sizeof(uintptr_t), remote(stack.top()),
index 135b79c..09a72de 100644 (file)
@@ -6,7 +6,7 @@
 
 #include <libunwind.h>
 
-#include <xbt/sysdep.h>
+#include "xbt/sysdep.h"
 
 #include "src/mc/Frame.hpp"
 
@@ -34,4 +34,4 @@ void* Frame::frame_base(unw_cursor_t& unw_cursor) const
 }
 
 }
-}
\ No newline at end of file
+}
index 0cc6630..663ecf3 100644 (file)
@@ -10,8 +10,8 @@
 #include <string>
 #include <cstdint>
 
-#include <xbt/base.h>
-#include <xbt/range.hpp>
+#include "xbt/base.h"
+#include "xbt/range.hpp"
 
 #include "src/mc/mc_forward.hpp"
 #include "src/mc/LocationList.hpp"
index fdf5cd5..0ad9375 100644 (file)
@@ -8,8 +8,8 @@
 #include <cstdint>
 #include <utility>
 
-#include <xbt/asserts.h>
-#include <xbt/sysdep.h>
+#include "xbt/asserts.h"
+#include "xbt/sysdep.h"
 
 #include <libunwind.h>
 
@@ -35,13 +35,9 @@ Location resolve(
   context.object_info = object_info;
   context.process_index = process_index;
 
-  if (!expression.empty()
-      && expression[0].atom >= DW_OP_reg0
-      && expression[0].atom <= DW_OP_reg31) {
+  if (not expression.empty() && expression[0].atom >= DW_OP_reg0 && expression[0].atom <= DW_OP_reg31) {
     int dwarf_register = expression[0].atom - DW_OP_reg0;
-    xbt_assert(c,
-      "Missing frame context for register operation DW_OP_reg%i",
-      dwarf_register);
+    xbt_assert(c, "Missing frame context for register operation DW_OP_reg%i", dwarf_register);
     return Location(dwarf_register_to_libunwind(dwarf_register));
   }
 
@@ -73,7 +69,7 @@ Location resolve(
     xbt_die("Could not resolve IP");
   simgrid::dwarf::DwarfExpression const* expression =
     find_expression(locations, ip);
-  if (!expression)
+  if (not expression)
     xbt_die("Could not resolve location");
   return simgrid::dwarf::resolve(
           *expression, object_info, c,
@@ -87,13 +83,13 @@ LocationList location_list(
   LocationList locations;
   std::ptrdiff_t offset = 0;
   while (1) {
-
-    Dwarf_Addr base, start, end;
+    Dwarf_Addr base;
+    Dwarf_Addr start;
+    Dwarf_Addr end;
     Dwarf_Op *ops;
     std::size_t len;
 
-    offset = dwarf_getlocations(
-      &attr, offset, &base, &start, &end, &ops, &len);
+    offset = dwarf_getlocations(&attr, offset, &base, &start, &end, &ops, &len);
 
     if (offset == 0)
       break;
@@ -114,7 +110,5 @@ LocationList location_list(
 
   return locations;
 }
-
-
 }
-}
\ No newline at end of file
+}
index 830f024..da1af22 100644 (file)
@@ -15,8 +15,8 @@
 #include <dwarf.h>
 #include <elfutils/libdw.h>
 
-#include <xbt/base.h>
-#include <xbt/range.hpp>
+#include "xbt/base.h"
+#include "xbt/range.hpp"
 
 #include "src/mc/mc_base.h"
 #include "src/mc/mc_forward.hpp"
index f160216..2f44304 100644 (file)
 #include <memory>
 #include <system_error>
 
-#include <xbt/log.h>
-#include <xbt/automaton.h>
-#include <xbt/automaton.hpp>
-#include <xbt/system_error.hpp>
+#include "xbt/automaton.h"
+#include "xbt/automaton.hpp"
+#include "xbt/log.h"
+#include "xbt/system_error.hpp"
 
 #include "simgrid/sg_config.h"
 
@@ -27,7 +27,6 @@
 #include "src/mc/Transition.hpp"
 #include "src/mc/checker/Checker.hpp"
 #include "src/mc/mc_exit.h"
-#include "src/mc/mc_ignore.h"
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_record.h"
 #include "src/mc/remote/mc_protocol.h"
@@ -92,7 +91,7 @@ void ModelChecker::start()
 
   // The model-checked process SIGSTOP itself to signal it's ready:
   pid_t res = waitpid(pid, &status, WAITPID_CHECKED_FLAGS);
-  if (res < 0 || !WIFSTOPPED(status) || WSTOPSIG(status) != SIGSTOP)
+  if (res < 0 || not WIFSTOPPED(status) || WSTOPSIG(status) != SIGSTOP)
     xbt_die("Could not wait model-checked process");
 
   process_->init();
@@ -183,7 +182,7 @@ static void MC_report_crash(int status)
   mc_model_checker->process().dumpStack();
 }
 
-static void MC_report_assertion_error(void)
+static void MC_report_assertion_error()
 {
   XBT_INFO("**************************");
   XBT_INFO("*** PROPERTY NOT VALID ***");
@@ -306,7 +305,7 @@ void ModelChecker::handle_events(int fd, short events)
     ssize_t size = process_->getChannel().receive(buffer, sizeof(buffer), false);
     if (size == -1 && errno != EAGAIN)
       throw simgrid::xbt::errno_error();
-    if (!handle_message(buffer, size)) {
+    if (not handle_message(buffer, size)) {
       event_base_loopbreak(base_);
     }
   }
index 82724c4..c238d12 100644 (file)
@@ -15,8 +15,7 @@
 
 #include <event2/event.h>
 
-#include <simgrid_config.h>
-#include <xbt/base.h>
+#include "xbt/base.h"
 #include <sys/types.h>
 
 #include "src/mc/PageStore.hpp"
@@ -32,7 +31,8 @@ namespace mc {
  */
 class ModelChecker {
   struct event_base *base_;
-  struct event *socket_event_, *signal_event_;
+  struct event* socket_event_;
+  struct event* signal_event_;
   /** String pool for host names */
   // TODO, use std::set with heterogeneous comparison lookup (C++14)?
   std::set<std::string> hostnames_;
@@ -46,7 +46,7 @@ public:
 public:
   ModelChecker(ModelChecker const&) = delete;
   ModelChecker& operator=(ModelChecker const&) = delete;
-  ModelChecker(std::unique_ptr<Process> process);
+  explicit ModelChecker(std::unique_ptr<Process> process);
   ~ModelChecker();
 
   Process& process()
index 7784c6a..64fc01e 100644 (file)
@@ -15,8 +15,6 @@
 namespace simgrid {
 namespace mc {
 
-ObjectInformation::ObjectInformation() {}
-
 /* For an executable object, addresses are virtual address
  * (there is no offset) i.e.
  * \f$\text{virtual address} = \{dwarf address}\f$;
@@ -152,10 +150,8 @@ static void remove_local_variable(simgrid::mc::Frame& scope,
   typedef std::vector<Variable>::size_type size_type;
 
   // If the current subprogram matches the given name:
-  if ((subprogram_name == nullptr ||
-      (!subprogram.name.empty()
-        && subprogram.name == subprogram_name))
-      && !scope.variables.empty()) {
+  if ((subprogram_name == nullptr || (not subprogram.name.empty() && subprogram.name == subprogram_name)) &&
+      not scope.variables.empty()) {
 
     // Try to find the variable and remove it:
     size_type start = 0;
@@ -200,4 +196,4 @@ void ObjectInformation::remove_local_variable(
 }
 
 }
-}
\ No newline at end of file
+}
index e65d9d3..6173971 100644 (file)
@@ -12,7 +12,7 @@
 #include <memory>
 #include <vector>
 
-#include <xbt/base.h>
+#include "xbt/base.h"
 
 #include "src/xbt/memory_map.hpp"
 #include "src/mc/mc_forward.hpp"
@@ -52,7 +52,7 @@ struct FunctionIndexEntry {
  */
 class ObjectInformation {
 public:
-  ObjectInformation();
+  ObjectInformation() = default;
 
   // Not copyable:
   ObjectInformation(ObjectInformation const&) = delete;
index a8e149a..feef524 100644 (file)
@@ -12,9 +12,9 @@
 # define MAP_POPULATE MAP_PREFAULT_READ
 #endif
 
-#include <xbt/base.h>
-#include <xbt/log.h>
-#include <xbt/sysdep.h>
+#include "xbt/base.h"
+#include "xbt/log.h"
+#include "xbt/sysdep.h"
 
 #include "src/internal_config.h"
 
index 640e63c..80332ea 100644 (file)
@@ -13,7 +13,7 @@
 #include <unordered_map>
 #include <unordered_set>
 
-#include <xbt/base.h>
+#include "xbt/base.h"
 
 #include "src/mc/mc_mmu.h"
 #include "src/mc/mc_forward.hpp"
index 5b1f3c9..08f4944 100644 (file)
@@ -1,10 +1,9 @@
-/* Copyright (c) 2014-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2014-2017. 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. */
 
-#define _FILE_OFFSET_BITS 64
+#define _FILE_OFFSET_BITS 64 /* needed for pread_whole to work as expected on 32bits */
 
 #include <assert.h>
 #include <stddef.h>
 #include <libunwind.h>
 #include <libunwind-ptrace.h>
 
-#include <xbt/log.h>
-#include <xbt/base.h>
+#include "xbt/base.h"
+#include "xbt/log.h"
 #include <xbt/mmalloc.h>
 
 #include "src/mc/mc_unw.h"
 #include "src/mc/mc_snapshot.h"
-#include "src/mc/mc_ignore.h"
 #include "src/mc/mc_smx.h"
 
 #include "src/mc/Process.hpp"
@@ -103,7 +101,7 @@ static const char* const filtered_libraries[] = {
 
 static bool is_simgrid_lib(const char* libname)
 {
-  return !strcmp(libname, "libsimgrid");
+  return not strcmp(libname, "libsimgrid");
 }
 
 static bool is_filtered_lib(const char* libname)
@@ -134,7 +132,7 @@ static char* get_lib_name(const char* pathname, struct s_mc_memory_map_re* res)
   map_basename = nullptr;
 
   // Strip the version suffix:
-  if(libname && !regexec(&res->version_re, libname, 1, &match, 0)) {
+  if (libname && not regexec(&res->version_re, libname, 1, &match, 0)) {
     char* temp = libname;
     libname = strndup(temp, match.rm_so);
     free(temp);
@@ -185,7 +183,7 @@ static pthread_once_t zero_buffer_flag = PTHREAD_ONCE_INIT;
 static const void* zero_buffer;
 static const size_t zero_buffer_size = 10 * 4096;
 
-static void zero_buffer_init(void)
+static void zero_buffer_init()
 {
   int fd = open("/dev/zero", O_RDONLY);
   if (fd<0)
@@ -226,9 +224,9 @@ void Process::init()
 
   // Read std_heap (is a struct mdesc*):
   simgrid::mc::Variable* std_heap_var = this->find_variable("__mmalloc_default_mdp");
-  if (!std_heap_var)
+  if (not std_heap_var)
     xbt_die("No heap information in the target process");
-  if(!std_heap_var->address)
+  if (not std_heap_var->address)
     xbt_die("No constant address for this variable");
   this->read_bytes(&this->heap_address, sizeof(struct mdesc*),
     remote(std_heap_var->address),
@@ -265,7 +263,7 @@ Process::~Process()
 void Process::refresh_heap()
 {
   // Read/dereference/refresh the std_heap pointer:
-  if (!this->heap)
+  if (not this->heap)
     this->heap = std::unique_ptr<s_xbt_mheap_t>(new s_xbt_mheap_t());
   this->read_bytes(this->heap.get(), sizeof(struct mdesc),
     remote(this->heap_address), simgrid::mc::ProcessIndexDisabled);
@@ -323,7 +321,7 @@ void Process::init_memory_map_info()
 
     // [stack], [vvar], [vsyscall], [vdso] ...
     if (pathname[0] == '[') {
-      if ((reg.prot & PROT_WRITE) && !memcmp(pathname, "[stack]", 7)) {
+      if ((reg.prot & PROT_WRITE) && not memcmp(pathname, "[stack]", 7)) {
         this->maestro_stack_start_ = remote(reg.start_addr);
         this->maestro_stack_end_ = remote(reg.end_addr);
       }
@@ -335,14 +333,14 @@ void Process::init_memory_map_info()
       continue;
 
     current_name = pathname;
-    if (!(reg.prot & PROT_READ) && (reg.prot & PROT_EXEC))
+    if (not(reg.prot & PROT_READ) && (reg.prot & PROT_EXEC))
       continue;
 
-    const bool is_executable = !i;
+    const bool is_executable = not i;
     char* libname = nullptr;
-    if (!is_executable) {
+    if (not is_executable) {
       libname = get_lib_name(pathname, &res);
-      if(!libname)
+      if (not libname)
         continue;
       if (is_filtered_lib(libname)) {
         free(libname);
@@ -442,7 +440,7 @@ void Process::read_variable(const char* name, void* target, size_t size) const
 
 std::string Process::read_string(RemotePtr<char> address) const
 {
-  if (!address)
+  if (not address)
     return {};
 
   // TODO, use std::vector with .data() in C++17 to avoid useless copies
index 07f510c..bb0a85d 100644 (file)
@@ -19,7 +19,7 @@
 
 #include <simgrid_config.h>
 
-#include <xbt/base.h>
+#include "xbt/base.h"
 #include <xbt/mmalloc.h>
 
 #include "src/xbt/mmalloc/mmprivate.h"
@@ -143,13 +143,13 @@ public:
   // Heap access:
   xbt_mheap_t get_heap()
   {
-    if (!(this->cache_flags_ & Process::cache_heap))
+    if (not(this->cache_flags_ & Process::cache_heap))
       this->refresh_heap();
     return this->heap.get();
   }
   const malloc_info* get_malloc_info()
   {
-    if (!(this->cache_flags_ & Process::cache_malloc))
+    if (not(this->cache_flags_ & Process::cache_malloc))
       this->refresh_malloc_info();
     return this->heap_info.data();
   }
@@ -226,7 +226,7 @@ public:
   simgrid::mc::ActorInformation* resolveActorInfo(simgrid::mc::RemotePtr<simgrid::simix::ActorImpl> actor)
   {
     xbt_assert(mc_model_checker != nullptr);
-    if (!actor)
+    if (not actor)
       return nullptr;
     this->refresh_simix();
     for (auto& actor_info : this->smx_actors_infos)
@@ -261,7 +261,8 @@ private:
   Channel channel_;
   bool running_ = false;
   std::vector<simgrid::xbt::VmMap> memory_map_;
-  RemotePtr<void> maestro_stack_start_, maestro_stack_end_;
+  RemotePtr<void> maestro_stack_start_;
+  RemotePtr<void> maestro_stack_end_;
   int memory_file = -1;
   std::vector<IgnoredRegion> ignored_regions_;
   bool privatized_ = false;
index 42de5f8..cc135f4 100644 (file)
@@ -13,7 +13,7 @@
 #include <memory>
 #include <vector>
 
-#include <xbt/base.h>
+#include "xbt/base.h"
 
 #include "src/mc/AddressSpace.hpp"
 #include "src/mc/ChunkedData.hpp"
@@ -50,7 +50,7 @@ private:
   Buffer(void* data, std::size_t size, Type type = Type::Malloc) :
     data_(data), size_(size), type_(type) {}
 public:
-  Buffer() {}
+  Buffer() = default;
   void clear() noexcept;
   ~Buffer() noexcept { clear(); }
 
@@ -157,7 +157,7 @@ public:
     size_(size),
     permanent_addr_(permanent_addr)
   {}
-  ~RegionSnapshot() {}
+  ~RegionSnapshot()                     = default;
   RegionSnapshot(RegionSnapshot const&) = default;
   RegionSnapshot& operator=(RegionSnapshot const&) = default;
   RegionSnapshot(RegionSnapshot&& that)
@@ -277,6 +277,6 @@ simgrid::mc::RegionSnapshot region(
 }
 }
 
-typedef class simgrid::mc::RegionSnapshot s_mc_mem_region_t, *mc_mem_region_t;
-
+typedef class simgrid::mc::RegionSnapshot s_mc_mem_region_t;
+typedef s_mc_mem_region_t* mc_mem_region_t;
 #endif
index 8195c5c..13f3d72 100644 (file)
@@ -9,11 +9,11 @@
 
 #include <functional>
 
-#include <xbt/log.h>
-#include <xbt/system_error.hpp>
-#include <simgrid/sg_config.h>
-#include <simgrid/modelchecker.h>
+#include "xbt/log.h"
+#include "xbt/system_error.hpp"
 #include <mc/mc.h>
+#include <simgrid/modelchecker.h>
+#include <simgrid/sg_config.h>
 
 #include "src/mc/Session.hpp"
 #include "src/mc/mc_state.h"
@@ -131,7 +131,7 @@ void Session::logState()
 }
 
 // static
-Session* Session::fork(std::function<void(void)> code)
+Session* Session::fork(std::function<void()> code)
 {
   // Create a AF_LOCAL socketpair used for exchanging messages
   // bewteen the model-checker process (ourselves) and the model-checked
index 7af4c43..8bc9f04 100644 (file)
 #include <sys/prctl.h>
 #endif
 
-#include <sys/types.h>
+#include "xbt/sysdep.h"
+#include "xbt/system_error.hpp"
 #include <sys/socket.h>
-#include <xbt/sysdep.h>
-#include <xbt/system_error.hpp>
+#include <sys/types.h>
 
 #include <functional>
 
-#include <xbt/log.h>
+#include "xbt/log.h"
 
 #include "src/mc/mc_forward.hpp"
 #include "src/mc/ModelChecker.hpp"
@@ -66,7 +66,7 @@ public: // static constructors
    *
    *  The code is expected to `exec` the model-checker program.
    */
-  static Session* fork(std::function<void(void)> code);
+  static Session* fork(std::function<void()> code);
 
   /** Spawn a model-checked process
    *
index 5551e23..5d2ed59 100644 (file)
@@ -12,8 +12,8 @@
 #include <vector>
 #include <string>
 
-#include <xbt/base.h>
-#include <xbt/asserts.h>
+#include "xbt/asserts.h"
+#include "xbt/base.h"
 
 #include <dwarf.h>
 
@@ -33,7 +33,7 @@ public:
   static constexpr flags_type INHERITANCE_FLAG = 1;
   static constexpr flags_type VIRTUAL_POINTER_FLAG = 2;
 
-  Member() {}
+  Member() = default;
 
   /** Whether this member represent some inherited part of the object */
   flags_type flags = 0;
@@ -96,7 +96,7 @@ public:
 /** A type in the model-checked program */
 class Type {
 public:
-  Type() {}
+  Type() = default;
 
   /** The DWARF TAG of the type (e.g. DW_TAG_array_type) */
   int type = 0;
diff --git a/src/mc/Variable.cpp b/src/mc/Variable.cpp
deleted file mode 100644 (file)
index e69de29..0000000
index 5f43e5c..bf7f86a 100644 (file)
@@ -20,7 +20,7 @@ namespace mc {
 /** A variable (global or local) in the model-checked program */
 class Variable {
 public:
-  Variable() {}
+  Variable() = default;
   std::uint32_t id = 0;
   bool global = false;
   std::string name;
index 68b1990..a59df31 100644 (file)
 
 #include <boost/range/algorithm.hpp>
 
-#include <xbt/log.h>
-#include <xbt/sysdep.h>
+#include "xbt/log.h"
+#include "xbt/sysdep.h"
 
 #include "src/mc/mc_comm_pattern.h"
-#include "src/mc/mc_safety.h"
 #include "src/mc/mc_private.h"
 #include "src/mc/Process.hpp"
 #include "src/mc/mc_smx.h"
index dde414e..15d1ccd 100644 (file)
@@ -17,7 +17,6 @@
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_record.h"
 #include "src/mc/mc_request.h"
-#include "src/mc/mc_safety.h"
 #include "src/mc/mc_smx.h"
 #include "src/mc/mc_state.h"
 #include "src/mc/remote/Client.hpp"
@@ -26,8 +25,7 @@
 
 using simgrid::mc::remote;
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_comm_determinism, mc,
-                                "Logging specific to MC communication determinism detection");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_comm_determinism, mc, "Logging specific to MC communication determinism detection");
 
 /********** Global variables **********/
 
@@ -36,7 +34,8 @@ xbt_dynar_t incomplete_communications_pattern;
 
 /********** Static functions ***********/
 
-static e_mc_comm_pattern_difference_t compare_comm_pattern(simgrid::mc::PatternCommunication* comm1, simgrid::mc::PatternCommunication* comm2)
+static e_mc_comm_pattern_difference_t compare_comm_pattern(simgrid::mc::PatternCommunication* comm1,
+                                                           simgrid::mc::PatternCommunication* comm2)
 {
   if(comm1->type != comm2->type)
     return TYPE_DIFF;
@@ -55,8 +54,11 @@ static e_mc_comm_pattern_difference_t compare_comm_pattern(simgrid::mc::PatternC
   return NONE_DIFF;
 }
 
-static char* print_determinism_result(e_mc_comm_pattern_difference_t diff, int process, simgrid::mc::PatternCommunication* comm, unsigned int cursor) {
-  char *type, *res;
+static char* print_determinism_result(e_mc_comm_pattern_difference_t diff, int process,
+                                      simgrid::mc::PatternCommunication* comm, unsigned int cursor)
+{
+  char* type;
+  char* res;
 
   if (comm->type == simgrid::mc::PatternCommunicationType::send)
     type = bprintf("The send communications pattern of the process %d is different!", process - 1);
@@ -93,14 +95,13 @@ static char* print_determinism_result(e_mc_comm_pattern_difference_t diff, int p
   return res;
 }
 
-static void update_comm_pattern(
-  simgrid::mc::PatternCommunication* comm_pattern,
-  simgrid::mc::RemotePtr<simgrid::kernel::activity::Comm> comm_addr)
+static void update_comm_pattern(simgrid::mc::PatternCommunication* comm_pattern,
+                                simgrid::mc::RemotePtr<simgrid::kernel::activity::CommImpl> comm_addr)
 {
   // HACK, type punning
-  simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_comm;
+  simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_comm;
   mc_model_checker->process().read(temp_comm, comm_addr);
-  simgrid::kernel::activity::Comm* comm = temp_comm.getBuffer();
+  simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer();
 
   smx_actor_t src_proc   = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->src_proc));
   smx_actor_t dst_proc   = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc));
@@ -110,27 +111,24 @@ static void update_comm_pattern(
   comm_pattern->dst_host = MC_smx_actor_get_host_name(dst_proc);
   if (comm_pattern->data.size() == 0 && comm->src_buff != nullptr) {
     size_t buff_size;
-    mc_model_checker->process().read(
-      &buff_size, remote(comm->dst_buff_size));
+    mc_model_checker->process().read(&buff_size, remote(comm->dst_buff_size));
     comm_pattern->data.resize(buff_size);
-    mc_model_checker->process().read_bytes(
-      comm_pattern->data.data(), comm_pattern->data.size(),
-      remote(comm->src_buff));
+    mc_model_checker->process().read_bytes(comm_pattern->data.data(), comm_pattern->data.size(),
+                                           remote(comm->src_buff));
   }
 }
 
 namespace simgrid {
 namespace mc {
 
-void CommunicationDeterminismChecker::deterministic_comm_pattern(
-  int process, simgrid::mc::PatternCommunication* comm, int backtracking)
+void CommunicationDeterminismChecker::deterministic_comm_pattern(int process, simgrid::mc::PatternCommunication* comm,
+                                                                 int backtracking)
 {
   simgrid::mc::PatternCommunicationList* list =
     xbt_dynar_get_as(initial_communications_pattern, process, simgrid::mc::PatternCommunicationList*);
 
-  if(!backtracking){
-    e_mc_comm_pattern_difference_t diff =
-      compare_comm_pattern(list->list[list->index_comm].get(), comm);
+  if (not backtracking) {
+    e_mc_comm_pattern_difference_t diff = compare_comm_pattern(list->list[list->index_comm].get(), comm);
 
     if (diff != NONE_DIFF) {
       if (comm->type == simgrid::mc::PatternCommunicationType::send) {
@@ -144,7 +142,7 @@ void CommunicationDeterminismChecker::deterministic_comm_pattern(
           xbt_free(this->recv_diff);
         this->recv_diff = print_determinism_result(diff, process, comm, list->index_comm + 1);
       }
-      if(_sg_mc_send_determinism && !this->send_deterministic){
+      if (_sg_mc_send_determinism && not this->send_deterministic) {
         XBT_INFO("*********************************************************");
         XBT_INFO("***** Non-send-deterministic communications pattern *****");
         XBT_INFO("*********************************************************");
@@ -153,8 +151,7 @@ void CommunicationDeterminismChecker::deterministic_comm_pattern(
         this->send_diff = nullptr;
         simgrid::mc::session->logState();
         mc_model_checker->exit(SIMGRID_MC_EXIT_NON_DETERMINISM);
-      }else if(_sg_mc_comms_determinism
-          && (!this->send_deterministic && !this->recv_deterministic)) {
+      } else if (_sg_mc_comms_determinism && (not this->send_deterministic && not this->recv_deterministic)) {
         XBT_INFO("****************************************************");
         XBT_INFO("***** Non-deterministic communications pattern *****");
         XBT_INFO("****************************************************");
@@ -173,30 +170,28 @@ void CommunicationDeterminismChecker::deterministic_comm_pattern(
 
 /********** Non Static functions ***********/
 
-void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_simcall_t request, e_mc_call_type_t call_type, int backtracking)
+void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_simcall_t request,
+                                                       e_mc_call_type_t call_type, int backtracking)
 {
   const smx_actor_t issuer = MC_smx_simcall_get_issuer(request);
-  simgrid::mc::PatternCommunicationList* initial_pattern = xbt_dynar_get_as(
-    initial_communications_pattern, issuer->pid, simgrid::mc::PatternCommunicationList*);
-  xbt_dynar_t incomplete_pattern = xbt_dynar_get_as(
-    incomplete_communications_pattern, issuer->pid, xbt_dynar_t);
+  simgrid::mc::PatternCommunicationList* initial_pattern =
+      xbt_dynar_get_as(initial_communications_pattern, issuer->pid, simgrid::mc::PatternCommunicationList*);
+  xbt_dynar_t incomplete_pattern = xbt_dynar_get_as(incomplete_communications_pattern, issuer->pid, xbt_dynar_t);
 
   std::unique_ptr<simgrid::mc::PatternCommunication> pattern =
-    std::unique_ptr<simgrid::mc::PatternCommunication>(
-      new simgrid::mc::PatternCommunication());
-  pattern->index =
-    initial_pattern->index_comm + xbt_dynar_length(incomplete_pattern);
+      std::unique_ptr<simgrid::mc::PatternCommunication>(new simgrid::mc::PatternCommunication());
+  pattern->index = initial_pattern->index_comm + xbt_dynar_length(incomplete_pattern);
 
   if (call_type == MC_CALL_TYPE_SEND) {
     /* Create comm pattern */
     pattern->type = simgrid::mc::PatternCommunicationType::send;
     pattern->comm_addr = simcall_comm_isend__get__result(request);
 
-    simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_synchro;
-    mc_model_checker->process().read(temp_synchro, remote(
-      static_cast<simgrid::kernel::activity::Comm*>(pattern->comm_addr)));
-    simgrid::kernel::activity::Comm* synchro =
-      static_cast<simgrid::kernel::activity::Comm*>(temp_synchro.getBuffer());
+    simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_synchro;
+    mc_model_checker->process().read(temp_synchro,
+                                     remote(static_cast<simgrid::kernel::activity::CommImpl*>(pattern->comm_addr)));
+    simgrid::kernel::activity::CommImpl* synchro =
+        static_cast<simgrid::kernel::activity::CommImpl*>(temp_synchro.getBuffer());
 
     char* remote_name = mc_model_checker->process().read<char*>(
         (std::uint64_t)(synchro->mbox ? &synchro->mbox->name_ : &synchro->mbox_cpy->name_));
@@ -205,29 +200,24 @@ void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_sim
     pattern->src_host = MC_smx_actor_get_host_name(issuer);
 
     simgrid::smpi::Request mpi_request =
-      mc_model_checker->process().read<simgrid::smpi::Request>(
-        (std::uint64_t) simcall_comm_isend__get__data(request));
+        mc_model_checker->process().read<simgrid::smpi::Request>((std::uint64_t)simcall_comm_isend__get__data(request));
     pattern->tag = mpi_request.tag();
 
-    if (synchro->src_buff != nullptr){
+    if (synchro->src_buff != nullptr) {
       pattern->data.resize(synchro->src_buff_size);
-      mc_model_checker->process().read_bytes(
-        pattern->data.data(), pattern->data.size(),
-        remote(synchro->src_buff));
+      mc_model_checker->process().read_bytes(pattern->data.data(), pattern->data.size(), remote(synchro->src_buff));
     }
     if(mpi_request.detached()){
-      if (!this->initial_communications_pattern_done) {
+      if (not this->initial_communications_pattern_done) {
         /* Store comm pattern */
-        simgrid::mc::PatternCommunicationList* list = xbt_dynar_get_as(
-          initial_communications_pattern, pattern->src_proc,
-          simgrid::mc::PatternCommunicationList*);
+        simgrid::mc::PatternCommunicationList* list =
+            xbt_dynar_get_as(initial_communications_pattern, pattern->src_proc, simgrid::mc::PatternCommunicationList*);
         list->list.push_back(std::move(pattern));
       } else {
         /* Evaluate comm determinism */
         this->deterministic_comm_pattern(pattern->src_proc, pattern.get(), backtracking);
-        xbt_dynar_get_as(
-          initial_communications_pattern, pattern->src_proc, simgrid::mc::PatternCommunicationList*
-        )->index_comm++;
+        xbt_dynar_get_as(initial_communications_pattern, pattern->src_proc, simgrid::mc::PatternCommunicationList*)
+            ->index_comm++;
       }
       return;
     }
@@ -236,14 +226,14 @@ void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_sim
     pattern->comm_addr = simcall_comm_irecv__get__result(request);
 
     simgrid::smpi::Request mpi_request;
-    mc_model_checker->process().read(
-      &mpi_request, remote((simgrid::smpi::Request*)simcall_comm_irecv__get__data(request)));
+    mc_model_checker->process().read(&mpi_request,
+                                     remote((simgrid::smpi::Request*)simcall_comm_irecv__get__data(request)));
     pattern->tag = mpi_request.tag();
 
-    simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_comm;
-    mc_model_checker->process().read(temp_comm, remote(
-      static_cast<simgrid::kernel::activity::Comm*>(pattern->comm_addr)));
-    simgrid::kernel::activity::Comm* comm = temp_comm.getBuffer();
+    simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_comm;
+    mc_model_checker->process().read(temp_comm,
+                                     remote(static_cast<simgrid::kernel::activity::CommImpl*>(pattern->comm_addr)));
+    simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer();
 
     char* remote_name;
     mc_model_checker->process().read(&remote_name, remote(comm->mbox ? &comm->mbox->name_ : &comm->mbox_cpy->name_));
@@ -253,18 +243,15 @@ void CommunicationDeterminismChecker::get_comm_pattern(xbt_dynar_t list, smx_sim
   } else
     xbt_die("Unexpected call_type %i", (int) call_type);
 
-  XBT_DEBUG("Insert incomplete comm pattern %p for process %lu",
-    pattern.get(), issuer->pid);
-  xbt_dynar_t dynar =
-    xbt_dynar_get_as(incomplete_communications_pattern, issuer->pid, xbt_dynar_t);
+  XBT_DEBUG("Insert incomplete comm pattern %p for process %lu", pattern.get(), issuer->pid);
+  xbt_dynar_t dynar = xbt_dynar_get_as(incomplete_communications_pattern, issuer->pid, xbt_dynar_t);
   simgrid::mc::PatternCommunication* pattern2 = pattern.release();
   xbt_dynar_push(dynar, &pattern2);
 }
 
-
 void CommunicationDeterminismChecker::complete_comm_pattern(
-  xbt_dynar_t list, simgrid::mc::RemotePtr<simgrid::kernel::activity::Comm> comm_addr,
-  unsigned int issuer, int backtracking)
+    xbt_dynar_t list, simgrid::mc::RemotePtr<simgrid::kernel::activity::CommImpl> comm_addr, unsigned int issuer,
+    int backtracking)
 {
   simgrid::mc::PatternCommunication* current_comm_pattern;
   unsigned int cursor = 0;
@@ -277,21 +264,19 @@ void CommunicationDeterminismChecker::complete_comm_pattern(
       update_comm_pattern(current_comm_pattern, comm_addr);
       completed = 1;
       simgrid::mc::PatternCommunication* temp;
-      xbt_dynar_remove_at(
-        xbt_dynar_get_as(incomplete_communications_pattern, issuer, xbt_dynar_t),
-        cursor, &temp);
+      xbt_dynar_remove_at(xbt_dynar_get_as(incomplete_communications_pattern, issuer, xbt_dynar_t), cursor, &temp);
       comm_pattern = std::unique_ptr<simgrid::mc::PatternCommunication>(temp);
       XBT_DEBUG("Remove incomplete comm pattern for process %u at cursor %u", issuer, cursor);
       break;
     }
 
-  if(!completed)
+  if (not completed)
     xbt_die("Corresponding communication not found!");
 
-  simgrid::mc::PatternCommunicationList* pattern = xbt_dynar_get_as(
-    initial_communications_pattern, issuer, simgrid::mc::PatternCommunicationList*);
+  simgrid::mc::PatternCommunicationList* pattern =
+      xbt_dynar_get_as(initial_communications_pattern, issuer, simgrid::mc::PatternCommunicationList*);
 
-  if (!this->initial_communications_pattern_done)
+  if (not this->initial_communications_pattern_done)
     /* Store comm pattern */
     pattern->list.push_back(std::move(comm_pattern));
   else {
@@ -301,10 +286,8 @@ void CommunicationDeterminismChecker::complete_comm_pattern(
   }
 }
 
-CommunicationDeterminismChecker::CommunicationDeterminismChecker(Session& session)
-  : Checker(session)
+CommunicationDeterminismChecker::CommunicationDeterminismChecker(Session& session) : Checker(session)
 {
-
 }
 
 CommunicationDeterminismChecker::~CommunicationDeterminismChecker() = default;
@@ -323,8 +306,8 @@ std::vector<std::string> CommunicationDeterminismChecker::getTextualTrace() // o
   for (auto const& state : stack_) {
     smx_simcall_t req = &state->executed_req;
     if (req)
-      trace.push_back(simgrid::mc::request_to_string(
-        req, state->transition.argument, simgrid::mc::RequestType::executed));
+      trace.push_back(
+          simgrid::mc::request_to_string(req, state->transition.argument, simgrid::mc::RequestType::executed));
   }
   return trace;
 }
@@ -332,16 +315,12 @@ std::vector<std::string> CommunicationDeterminismChecker::getTextualTrace() // o
 void CommunicationDeterminismChecker::logState() // override
 {
   Checker::logState();
-  if (_sg_mc_comms_determinism &&
-      !this->recv_deterministic &&
-      this->send_deterministic) {
+  if (_sg_mc_comms_determinism && not this->recv_deterministic && this->send_deterministic) {
     XBT_INFO("******************************************************");
     XBT_INFO("**** Only-send-deterministic communication pattern ****");
     XBT_INFO("******************************************************");
     XBT_INFO("%s", this->recv_diff);
-  } else if(_sg_mc_comms_determinism &&
-      !this->send_deterministic &&
-      this->recv_deterministic) {
+  } else if (_sg_mc_comms_determinism && not this->send_deterministic && this->recv_deterministic) {
     XBT_INFO("******************************************************");
     XBT_INFO("**** Only-recv-deterministic communication pattern ****");
     XBT_INFO("******************************************************");
@@ -350,10 +329,9 @@ void CommunicationDeterminismChecker::logState() // override
   XBT_INFO("Expanded states = %lu", expandedStatesCount_);
   XBT_INFO("Visited states = %lu", mc_model_checker->visited_states);
   XBT_INFO("Executed transitions = %lu", mc_model_checker->executed_transitions);
-  XBT_INFO("Send-deterministic : %s", !this->send_deterministic ? "No" : "Yes");
+  XBT_INFO("Send-deterministic : %s", not this->send_deterministic ? "No" : "Yes");
   if (_sg_mc_comms_determinism)
-    XBT_INFO("Recv-deterministic : %s",
-      !this->recv_deterministic ? "No" : "Yes");
+    XBT_INFO("Recv-deterministic : %s", not this->recv_deterministic ? "No" : "Yes");
 }
 
 void CommunicationDeterminismChecker::prepare()
@@ -387,13 +365,12 @@ void CommunicationDeterminismChecker::prepare()
   stack_.push_back(std::move(initial_state));
 }
 
-static inline
-bool all_communications_are_finished()
+static inline bool all_communications_are_finished()
 {
   for (size_t current_actor = 1; current_actor < MC_smx_get_maxpid(); current_actor++) {
     xbt_dynar_t pattern = xbt_dynar_get_as(incomplete_communications_pattern, current_actor, xbt_dynar_t);
-    if (!xbt_dynar_is_empty(pattern)) {
-      XBT_DEBUG("Some communications are not finished, cannot stop the exploration ! State not visited.");
+    if (not xbt_dynar_is_empty(pattern)) {
+      XBT_DEBUG("Some communications are not finished, cannot stop the exploration! State not visited.");
       return false;
     }
   }
@@ -403,13 +380,11 @@ bool all_communications_are_finished()
 void CommunicationDeterminismChecker::restoreState()
 {
   /* Intermediate backtracking */
-  {
-    simgrid::mc::State* state = stack_.back().get();
-    if (state->system_state) {
-      simgrid::mc::restore_snapshot(state->system_state);
-      MC_restore_communications_pattern(state);
-      return;
-    }
+  simgrid::mc::State* state = stack_.back().get();
+  if (state->system_state) {
+    simgrid::mc::restore_snapshot(state->system_state);
+    MC_restore_communications_pattern(state);
+    return;
   }
 
   /* Restore the initial state */
@@ -451,33 +426,28 @@ void CommunicationDeterminismChecker::restoreState()
   }
 }
 
-void CommunicationDeterminismChecker::main(void)
+void CommunicationDeterminismChecker::main()
 {
   std::unique_ptr<simgrid::mc::VisitedState> visited_state = nullptr;
   smx_simcall_t req = nullptr;
 
-  while (!stack_.empty()) {
-
+  while (not stack_.empty()) {
     /* Get current state */
     simgrid::mc::State* state = stack_.back().get();
 
     XBT_DEBUG("**************************************************");
-    XBT_DEBUG("Exploration depth = %zi (state = %d, interleaved processes = %zd)",
-              stack_.size(), state->num,
+    XBT_DEBUG("Exploration depth = %zi (state = %d, interleaved processes = %zd)", stack_.size(), state->num,
               state->interleaveSize());
 
     /* Update statistics */
     mc_model_checker->visited_states++;
 
-    if (stack_.size() <= (std::size_t) _sg_mc_max_depth
-        && (req = MC_state_get_request(state)) != nullptr
-        && (visited_state == nullptr)) {
+    if (stack_.size() <= (std::size_t)_sg_mc_max_depth && (req = MC_state_get_request(state)) != nullptr &&
+        (visited_state == nullptr)) {
 
       int req_num = state->transition.argument;
 
-      XBT_DEBUG("Execute: %s",
-        simgrid::mc::request_to_string(
-          req, req_num, simgrid::mc::RequestType::simix).c_str());
+      XBT_DEBUG("Execute: %s", simgrid::mc::request_to_string(req, req_num, simgrid::mc::RequestType::simix).c_str());
 
       std::string req_str;
       if (dot_output != nullptr)
@@ -494,7 +464,7 @@ void CommunicationDeterminismChecker::main(void)
       mc_model_checker->handle_simcall(state->transition);
       /* After this call req is no longer useful */
 
-      if (!this->initial_communications_pattern_done)
+      if (not this->initial_communications_pattern_done)
         MC_handle_comm_pattern(call, req, req_num, initial_communications_pattern, 0);
       else
         MC_handle_comm_pattern(call, req, req_num, nullptr, 0);
@@ -506,12 +476,10 @@ void CommunicationDeterminismChecker::main(void)
       std::unique_ptr<simgrid::mc::State> next_state =
           std::unique_ptr<simgrid::mc::State>(new simgrid::mc::State(++expandedStatesCount_));
 
-      /* If comm determinism verification, we cannot stop the exploration if
-         some communications are not finished (at least, data are transferred).
-         These communications  are incomplete and they cannot be analyzed and
-         compared with the initial pattern. */
-      bool compare_snapshots = all_communications_are_finished()
-        && this->initial_communications_pattern_done;
+      /* If comm determinism verification, we cannot stop the exploration if some communications are not finished (at
+       * least, data are transferred). These communications  are incomplete and they cannot be analyzed and compared
+       * with the initial pattern. */
+      bool compare_snapshots = all_communications_are_finished() && this->initial_communications_pattern_done;
 
       if (_sg_mc_max_visited_states == 0 ||
           (visited_state = visitedStates_.addVisitedState(expandedStatesCount_, next_state.get(), compare_snapshots)) ==
@@ -535,20 +503,18 @@ void CommunicationDeterminismChecker::main(void)
     } else {
 
       if (stack_.size() > (std::size_t) _sg_mc_max_depth)
-        XBT_WARN("/!\\ Max depth reached ! /!\\ ");
+        XBT_WARN("/!\\ Max depth reached! /!\\ ");
       else if (visited_state != nullptr)
         XBT_DEBUG("State already visited (equal to state %d), exploration stopped on this path.",
             visited_state->original_num == -1 ? visited_state->num : visited_state->original_num);
       else
-        XBT_DEBUG("There are no more processes to interleave. (depth %zi)",
-          stack_.size());
+        XBT_DEBUG("There are no more processes to interleave. (depth %zi)", stack_.size());
 
-      if (!this->initial_communications_pattern_done)
+      if (not this->initial_communications_pattern_done)
         this->initial_communications_pattern_done = 1;
 
       /* Trash the current state, no longer needed */
-      XBT_DEBUG("Delete state %d at depth %zi",
-        state->num, stack_.size());
+      XBT_DEBUG("Delete state %d at depth %zi", state->num, stack_.size());
       stack_.pop_back();
 
       visited_state = nullptr;
@@ -559,25 +525,21 @@ void CommunicationDeterminismChecker::main(void)
         throw new simgrid::mc::DeadlockError();
       }
 
-      while (!stack_.empty()) {
+      while (not stack_.empty()) {
         std::unique_ptr<simgrid::mc::State> state = std::move(stack_.back());
         stack_.pop_back();
-        if (state->interleaveSize()
-            && stack_.size() < (std::size_t) _sg_mc_max_depth) {
+        if (state->interleaveSize() && stack_.size() < (std::size_t)_sg_mc_max_depth) {
           /* We found a back-tracking point, let's loop */
-          XBT_DEBUG("Back-tracking to state %d at depth %zi",
-            state->num, stack_.size() + 1);
+          XBT_DEBUG("Back-tracking to state %d at depth %zi", state->num, stack_.size() + 1);
           stack_.push_back(std::move(state));
 
           this->restoreState();
 
-          XBT_DEBUG("Back-tracking to state %d at depth %zi done",
-            stack_.back()->num, stack_.size());
+          XBT_DEBUG("Back-tracking to state %d at depth %zi done", stack_.back()->num, stack_.size());
 
           break;
         } else {
-          XBT_DEBUG("Delete state %d at depth %zi",
-            state->num, stack_.size() + 1);
+          XBT_DEBUG("Delete state %d at depth %zi", state->num, stack_.size() + 1);
         }
       }
     }
index d185c90..f14abb1 100644 (file)
@@ -36,9 +36,9 @@ private:
 public:
   // These are used by functions which should be moved in CommunicationDeterminismChecker:
   void get_comm_pattern(xbt_dynar_t list, smx_simcall_t request, e_mc_call_type_t call_type, int backtracking);
-  void complete_comm_pattern(
-    xbt_dynar_t list, simgrid::mc::RemotePtr<simgrid::kernel::activity::Comm> comm_addr,
-    unsigned int issuer, int backtracking);
+  void complete_comm_pattern(xbt_dynar_t list, simgrid::mc::RemotePtr<simgrid::kernel::activity::CommImpl> comm_addr,
+                             unsigned int issuer, int backtracking);
+
 private:
   /** Stack representing the position in the exploration graph */
   std::list<std::unique_ptr<simgrid::mc::State>> stack_;
index a505e09..0dda3dd 100644 (file)
 #include "src/mc/mc_record.h"
 #include "src/mc/mc_replay.h"
 #include "src/mc/mc_request.h"
-#include "src/mc/mc_safety.h"
 #include "src/mc/mc_smx.h"
 #include "src/mc/remote/Client.hpp"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_liveness, mc,
-                                "Logging specific to algorithms for liveness properties verification");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_liveness, mc, "Logging specific to algorithms for liveness properties verification");
 
 /********* Static functions *********/
 
@@ -63,10 +61,7 @@ VisitedPair::VisitedPair(
   this->atomic_propositions = std::move(atomic_propositions);
 }
 
-VisitedPair::~VisitedPair() = default;
-
-static bool evaluate_label(
-  xbt_automaton_exp_label_t l, std::vector<int> const& values)
+static bool evaluate_label(xbt_automaton_exp_label_t l, std::vector<int> const& values)
 {
   switch (l->type) {
   case xbt_automaton_exp_label::AUT_OR:
@@ -76,7 +71,7 @@ static bool evaluate_label(
     return evaluate_label(l->u.or_and.left_exp, values)
       && evaluate_label(l->u.or_and.right_exp, values);
   case xbt_automaton_exp_label::AUT_NOT:
-    return !evaluate_label(l->u.exp_not, values);
+    return not evaluate_label(l->u.exp_not, values);
   case xbt_automaton_exp_label::AUT_PREDICAT:{
       unsigned int cursor = 0;
       xbt_automaton_propositional_symbol_t p = nullptr;
@@ -96,8 +91,6 @@ static bool evaluate_label(
 Pair::Pair(unsigned long expanded_pairs) : num(expanded_pairs)
 {}
 
-Pair::~Pair() {}
-
 std::shared_ptr<const std::vector<int>> LivenessChecker::getPropositionValues()
 {
   std::vector<int> values;
@@ -133,13 +126,11 @@ std::shared_ptr<VisitedPair> LivenessChecker::insertAcceptancePair(simgrid::mc::
         || *(pair_test->atomic_propositions) != *(new_pair->atomic_propositions)
         || this->compare(pair_test.get(), new_pair.get()) != 0)
       continue;
-    XBT_INFO("Pair %d already reached (equal to pair %d) !",
-      new_pair->num, pair_test->num);
+    XBT_INFO("Pair %d already reached (equal to pair %d) !", new_pair->num, pair_test->num);
     explorationStack_.pop_back();
     if (dot_output != nullptr)
-      fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
-        this->previousPair_, pair_test->num,
-        this->previousRequest_.c_str());
+      fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n", this->previousPair_, pair_test->num,
+              this->previousRequest_.c_str());
     return nullptr;
   }
 
@@ -224,9 +215,8 @@ int LivenessChecker::insertVisitedPair(std::shared_ptr<VisitedPair> visited_pair
     return -1;
 
   if (visited_pair == nullptr)
-    visited_pair = std::make_shared<VisitedPair>(
-      pair->num, pair->automaton_state, pair->atomic_propositions,
-      pair->graph_state);
+    visited_pair =
+        std::make_shared<VisitedPair>(pair->num, pair->automaton_state, pair->atomic_propositions, pair->graph_state);
 
   auto range = boost::range::equal_range(visitedPairs_, visited_pair.get(),
                                          simgrid::mc::DerefAndCompareByActorsCountAndUsedHeap());
@@ -270,10 +260,6 @@ LivenessChecker::LivenessChecker(Session& session) : Checker(session)
 {
 }
 
-LivenessChecker::~LivenessChecker()
-{
-}
-
 RecordTrace LivenessChecker::getRecordTrace() // override
 {
   RecordTrace res;
@@ -344,7 +330,7 @@ void LivenessChecker::backtrack()
 {
   /* 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 (!explorationStack_.empty()) {
+  while (not explorationStack_.empty()) {
     std::shared_ptr<simgrid::mc::Pair> current_pair = explorationStack_.back();
     explorationStack_.pop_back();
     if (current_pair->requests > 0) {
@@ -384,7 +370,7 @@ void LivenessChecker::run()
       explorationStack_.push_back(this->newPair(nullptr, automaton_state, propos));
 
   /* Actually run the double DFS search for counter-examples */
-  while (!explorationStack_.empty()){
+  while (not explorationStack_.empty()) {
     std::shared_ptr<Pair> current_pair = explorationStack_.back();
 
     /* Update current state in buchi automaton */
@@ -402,17 +388,16 @@ void LivenessChecker::run()
     }
 
     std::shared_ptr<VisitedPair> reached_pair;
-    if (current_pair->automaton_state->type == 1 && !current_pair->exploration_started
-        && (reached_pair = this->insertAcceptancePair(current_pair.get())) == nullptr) {
+    if (current_pair->automaton_state->type == 1 && not current_pair->exploration_started &&
+        (reached_pair = this->insertAcceptancePair(current_pair.get())) == nullptr) {
       this->showAcceptanceCycle(current_pair->depth);
       throw simgrid::mc::LivenessError();
     }
 
     /* Pair already visited ? stop the exploration on the current path */
     int visited_num = -1;
-    if ((!current_pair->exploration_started)
-      && (visited_num = this->insertVisitedPair(
-        reached_pair, current_pair.get())) != -1) {
+    if ((not current_pair->exploration_started) &&
+        (visited_num = this->insertVisitedPair(reached_pair, current_pair.get())) != -1) {
       if (dot_output != nullptr){
         fprintf(dot_output, "\"%d\" -> \"%d\" [%s];\n",
           this->previousPair_, visited_num,
@@ -448,7 +433,7 @@ void LivenessChecker::run()
 
     /* Update stats */
     mc_model_checker->executed_transitions++;
-    if (!current_pair->exploration_started)
+    if (not current_pair->exploration_started)
       visitedPairsCount_++;
 
     /* Answer the request */
index 9b095c1..f57a1ff 100644 (file)
@@ -38,7 +38,7 @@ struct XBT_PRIVATE Pair {
   bool exploration_started = false;
 
   Pair(unsigned long expanded_pairs);
-  ~Pair();
+  ~Pair() = default;
 
   Pair(Pair const&) = delete;
   Pair& operator=(Pair const&) = delete;
@@ -57,13 +57,13 @@ struct XBT_PRIVATE VisitedPair {
     int pair_num, xbt_automaton_state_t automaton_state,
     std::shared_ptr<const std::vector<int>> atomic_propositions,
     std::shared_ptr<simgrid::mc::State> graph_state);
-  ~VisitedPair();
+  ~VisitedPair() = default;
 };
 
 class XBT_PRIVATE LivenessChecker : public Checker {
 public:
-  LivenessChecker(Session& session);
-  ~LivenessChecker();
+  explicit LivenessChecker(Session& session);
+  ~LivenessChecker() = default;
   void run() override;
   RecordTrace getRecordTrace() override;
   std::vector<std::string> getTextualTrace() override;
index 643c734..d382815 100644 (file)
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_record.h"
 #include "src/mc/mc_request.h"
-#include "src/mc/mc_safety.h"
 #include "src/mc/mc_smx.h"
-#include "src/mc/mc_state.h"
-#include "src/mc/remote/Client.hpp"
 
 #include "src/xbt/mmalloc/mmprivate.h"
 
@@ -95,7 +92,7 @@ void SafetyChecker::run()
    * We do so iteratively instead of recursively, dealing with the call stack manually.
    * This allows to explore the call stack at wish. */
 
-  while (!stack_.empty()) {
+  while (not stack_.empty()) {
 
     /* Get current state */
     simgrid::mc::State* state = stack_.back().get();
@@ -205,7 +202,7 @@ void SafetyChecker::backtrack()
      executed before it. If it does then add it to the interleave set of the
      state that executed that previous request. */
 
-  while (!stack_.empty()) {
+  while (not stack_.empty()) {
     std::unique_ptr<simgrid::mc::State> state = std::move(stack_.back());
     stack_.pop_back();
     if (reductionMode_ == simgrid::mc::ReductionMode::dpor) {
@@ -233,7 +230,7 @@ void SafetyChecker::backtrack()
               state->num);
           }
 
-          if (!prev_state->actorStates[issuer->pid].isDone())
+          if (not prev_state->actorStates[issuer->pid].isDone())
             prev_state->interleave(issuer);
           else
             XBT_DEBUG("Process %p is in done set", req->issuer);
@@ -332,10 +329,6 @@ SafetyChecker::SafetyChecker(Session& session) : Checker(session)
   stack_.push_back(std::move(initial_state));
 }
 
-SafetyChecker::~SafetyChecker()
-{
-}
-
 Checker* createSafetyChecker(Session& session)
 {
   return new SafetyChecker(session);
index 0efcdae..ffc27f1 100644 (file)
@@ -23,8 +23,8 @@ namespace mc {
 class XBT_PRIVATE SafetyChecker : public Checker {
   simgrid::mc::ReductionMode reductionMode_ = simgrid::mc::ReductionMode::unset;
 public:
-  SafetyChecker(Session& session);
-  ~SafetyChecker();
+  explicit SafetyChecker(Session& session);
+  ~SafetyChecker() = default;
   void run() override;
   RecordTrace getRecordTrace() override;
   std::vector<std::string> getTextualTrace() override;
index cf5164b..e9af0b5 100644 (file)
@@ -45,7 +45,7 @@ std::unique_ptr<simgrid::mc::Checker> createChecker(simgrid::mc::Session& sessio
   if (_sg_mc_comms_determinism || _sg_mc_send_determinism)
     return std::unique_ptr<simgrid::mc::Checker>(
       simgrid::mc::createCommunicationDeterminismChecker(session));
-  else if (!_sg_mc_property_file || _sg_mc_property_file[0] == '\0')
+  else if (_sg_mc_property_file == nullptr || _sg_mc_property_file[0] == '\0')
     return std::unique_ptr<simgrid::mc::Checker>(
       simgrid::mc::createSafetyChecker(session));
   else
index aa62c78..0cc7c2a 100644 (file)
@@ -13,8 +13,8 @@
 #include <utility>
 #include <unordered_set>
 
-#include <xbt/sysdep.h>
-#include <xbt/dynar.h>
+#include "xbt/dynar.h"
+#include "xbt/sysdep.h"
 #include <xbt/mmalloc.h>
 
 #include <mc/mc.h>
@@ -29,7 +29,6 @@
 #endif
 
 #include "src/mc/mc_forward.hpp"
-#include "src/mc/mc_safety.h"
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_smx.h"
 #include "src/mc/mc_dwarf.hpp"
@@ -41,8 +40,7 @@
 #include "src/mc/mc_dwarf.hpp"
 #include "src/mc/Type.hpp"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, xbt,
-                                "Logging specific to mc_compare in mc");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_compare, xbt, "Logging specific to mc_compare in mc");
 
 namespace simgrid {
 namespace mc {
@@ -115,8 +113,7 @@ struct ProcessComparisonState {
   std::vector<simgrid::mc::Type*> types;
   std::size_t heapsize = 0;
 
-  void initHeapInformation(xbt_mheap_t heap,
-                          std::vector<simgrid::mc::IgnoredHeapRegion>* i);
+  void initHeapInformation(xbt_mheap_t heap, std::vector<simgrid::mc::IgnoredHeapRegion>* i);
 };
 
 namespace {
@@ -272,15 +269,11 @@ void StateComparator::match_equals(HeapLocationPairs* list)
 {
   for (auto const& pair : *list) {
     if (pair[0].fragment != -1) {
-      this->equals_to1_(pair[0].block, pair[0].fragment) =
-          simgrid::mc::HeapArea(pair[1].block, pair[1].fragment);
-      this->equals_to2_(pair[1].block, pair[1].fragment) =
-          simgrid::mc::HeapArea(pair[0].block, pair[0].fragment);
+      this->equals_to1_(pair[0].block, pair[0].fragment) = simgrid::mc::HeapArea(pair[1].block, pair[1].fragment);
+      this->equals_to2_(pair[1].block, pair[1].fragment) = simgrid::mc::HeapArea(pair[0].block, pair[0].fragment);
     } else {
-      this->equals_to1_(pair[0].block, 0) =
-          simgrid::mc::HeapArea(pair[1].block, pair[1].fragment);
-      this->equals_to2_(pair[1].block, 0) =
-          simgrid::mc::HeapArea(pair[0].block, pair[0].fragment);
+      this->equals_to1_(pair[0].block, 0) = simgrid::mc::HeapArea(pair[1].block, pair[1].fragment);
+      this->equals_to2_(pair[1].block, 0) = simgrid::mc::HeapArea(pair[0].block, pair[0].fragment);
     }
   }
 }
@@ -325,16 +318,25 @@ int mmalloc_compare_heap(
   simgrid::mc::Process* process = &mc_model_checker->process();
 
   /* Start comparison */
-  size_t i1, i2, j1, j2, k;
-  void *addr_block1, *addr_block2, *addr_frag1, *addr_frag2;
-  int nb_diff1 = 0, nb_diff2 = 0;
-
-  int equal, res_compare = 0;
+  size_t i1;
+  size_t i2;
+  size_t j1;
+  size_t j2;
+  size_t k;
+  void* addr_block1;
+  void* addr_block2;
+  void* addr_frag1;
+  void* addr_frag2;
+  int nb_diff1 = 0;
+  int nb_diff2 = 0;
+  int equal;
+  int res_compare = 0;
 
   /* Check busy blocks */
   i1 = 1;
 
-  malloc_info heapinfo_temp1, heapinfo_temp2;
+  malloc_info heapinfo_temp1;
+  malloc_info heapinfo_temp2;
   malloc_info heapinfo_temp2b;
 
   mc_mem_region_t heap_region1 = MC_get_heap_region(snapshot1);
@@ -364,9 +366,7 @@ int mmalloc_compare_heap(
       abort();
     }
 
-    addr_block1 =
-        ((void *) (((ADDR2UINT(i1)) - 1) * BLOCKSIZE +
-                   (char *) state.std_heap_copy.heapbase));
+    addr_block1 = ((void*)(((ADDR2UINT(i1)) - 1) * BLOCKSIZE + (char*)state.std_heap_copy.heapbase));
 
     if (heapinfo1->type == MMALLOC_TYPE_UNFRAGMENTED) {       /* Large block */
 
@@ -384,18 +384,16 @@ int mmalloc_compare_heap(
         continue;
       }
 
-      i2 = 1;
-      equal = 0;
+      i2          = 1;
+      equal       = 0;
       res_compare = 0;
 
       /* Try first to associate to same block in the other heap */
       if (heapinfo2->type == heapinfo1->type
         && state.equals_to2_(i1, 0).valid == 0) {
-        addr_block2 = (ADDR2UINT(i1) - 1) * BLOCKSIZE +
-                       (char *) state.std_heap_copy.heapbase;
-        res_compare = compare_heap_area(state, simgrid::mc::ProcessIndexMissing,
-            addr_block1, addr_block2, snapshot1, snapshot2,
-            nullptr, nullptr, 0);
+        addr_block2 = (ADDR2UINT(i1) - 1) * BLOCKSIZE + (char*)state.std_heap_copy.heapbase;
+        res_compare = compare_heap_area(state, simgrid::mc::ProcessIndexMissing, addr_block1, addr_block2, snapshot1,
+                                        snapshot2, nullptr, nullptr, 0);
         if (res_compare != 1) {
           for (k = 1; k < heapinfo2->busy_block.size; k++)
             state.equals_to2_(i1 + k, 0) = HeapArea(i1, -1);
@@ -406,10 +404,9 @@ int mmalloc_compare_heap(
         }
       }
 
-      while (i2 < state.heaplimit && !equal) {
+      while (i2 < state.heaplimit && not equal) {
 
-        addr_block2 = (ADDR2UINT(i2) - 1) * BLOCKSIZE +
-                       (char *) state.std_heap_copy.heapbase;
+        addr_block2 = (ADDR2UINT(i2) - 1) * BLOCKSIZE + (char*)state.std_heap_copy.heapbase;
 
         if (i2 == i1) {
           i2++;
@@ -444,9 +441,8 @@ int mmalloc_compare_heap(
         i2++;
       }
 
-      if (!equal) {
-        XBT_DEBUG("Block %zu not found (size_used = %zu, addr = %p)", i1,
-                  heapinfo1->busy_block.busy_size, addr_block1);
+      if (not equal) {
+        XBT_DEBUG("Block %zu not found (size_used = %zu, addr = %p)", i1, heapinfo1->busy_block.busy_size, addr_block1);
         i1 = state.heaplimit + 1;
         nb_diff1++;
         //i1++;
@@ -462,30 +458,25 @@ int mmalloc_compare_heap(
         if (state.equals_to1_(i1, j1).valid)
           continue;
 
-        addr_frag1 =
-            (void *) ((char *) addr_block1 + (j1 << heapinfo1->type));
+        addr_frag1 = (void*)((char*)addr_block1 + (j1 << heapinfo1->type));
 
         i2 = 1;
         equal = 0;
 
         /* Try first to associate to same fragment in the other heap */
-        if (heapinfo2->type == heapinfo1->type
-            && !state.equals_to2_(i1, j1).valid) {
+        if (heapinfo2->type == heapinfo1->type && not state.equals_to2_(i1, j1).valid) {
           addr_block2 = (ADDR2UINT(i1) - 1) * BLOCKSIZE +
                          (char *) state.std_heap_copy.heapbase;
           addr_frag2 =
               (void *) ((char *) addr_block2 +
                         (j1 << heapinfo2->type));
-          res_compare = compare_heap_area(state, simgrid::mc::ProcessIndexMissing,
-              addr_frag1, addr_frag2, snapshot1, snapshot2,
-              nullptr, nullptr, 0);
+          res_compare = compare_heap_area(state, simgrid::mc::ProcessIndexMissing, addr_frag1, addr_frag2, snapshot1,
+                                          snapshot2, nullptr, nullptr, 0);
           if (res_compare != 1)
             equal = 1;
         }
 
-
-
-        while (i2 < state.heaplimit && !equal) {
+        while (i2 < state.heaplimit && not equal) {
 
           const malloc_info* heapinfo2b = (const malloc_info*) MC_region_read(
             heap_region2, &heapinfo_temp2b, &heapinfos2[i2],
@@ -516,16 +507,11 @@ int mmalloc_compare_heap(
             if (state.equals_to2_(i2, j2).valid)
               continue;
 
-            addr_block2 = (ADDR2UINT(i2) - 1) * BLOCKSIZE +
-                           (char *) state.std_heap_copy.heapbase;
-            addr_frag2 =
-                (void *) ((char *) addr_block2 +
-                          (j2 << heapinfo2b->type));
+            addr_block2 = (ADDR2UINT(i2) - 1) * BLOCKSIZE + (char*)state.std_heap_copy.heapbase;
+            addr_frag2  = (void*)((char*)addr_block2 + (j2 << heapinfo2b->type));
 
-            res_compare = compare_heap_area(
-                state, simgrid::mc::ProcessIndexMissing,
-                addr_frag1, addr_frag2, snapshot2, snapshot2,
-                nullptr, nullptr, 0);
+            res_compare = compare_heap_area(state, simgrid::mc::ProcessIndexMissing, addr_frag1, addr_frag2, snapshot2,
+                                            snapshot2, nullptr, nullptr, 0);
             if (res_compare != 1) {
               equal = 1;
               break;
@@ -535,11 +521,9 @@ int mmalloc_compare_heap(
           i2++;
         }
 
-        if (!equal) {
-          XBT_DEBUG
-              ("Block %zu, fragment %zu not found (size_used = %zd, address = %p)\n",
-               i1, j1, heapinfo1->busy_frag.frag_size[j1],
-               addr_frag1);
+        if (not equal) {
+          XBT_DEBUG("Block %zu, fragment %zu not found (size_used = %zd, address = %p)\n", i1, j1,
+                    heapinfo1->busy_frag.frag_size[j1], addr_frag1);
           i2 = state.heaplimit + 1;
           i1 = state.heaplimit + 1;
           nb_diff1++;
@@ -552,29 +536,24 @@ int mmalloc_compare_heap(
   }
 
   /* All blocks/fragments are equal to another block/fragment ? */
-  size_t i = 1, j = 0;
+  size_t i = 1;
+  size_t j = 0;
 
   for(i = 1; i < state.heaplimit; i++) {
     const malloc_info* heapinfo1 = (const malloc_info*) MC_region_read(
       heap_region1, &heapinfo_temp1, &heapinfos1[i], sizeof(malloc_info));
 
-    if (heapinfo1->type == MMALLOC_TYPE_UNFRAGMENTED
-        && i1 == state.heaplimit
-        && heapinfo1->busy_block.busy_size > 0
-        && !state.equals_to1_(i, 0).valid) {
-      XBT_DEBUG("Block %zu not found (size used = %zu)", i,
-                heapinfo1->busy_block.busy_size);
+    if (heapinfo1->type == MMALLOC_TYPE_UNFRAGMENTED && i1 == state.heaplimit && heapinfo1->busy_block.busy_size > 0 &&
+        not state.equals_to1_(i, 0).valid) {
+      XBT_DEBUG("Block %zu not found (size used = %zu)", i, heapinfo1->busy_block.busy_size);
       nb_diff1++;
     }
 
     if (heapinfo1->type <= 0)
       continue;
     for (j = 0; j < (size_t) (BLOCKSIZE >> heapinfo1->type); j++)
-      if (i1 == state.heaplimit
-          && heapinfo1->busy_frag.frag_size[j] > 0
-          && !state.equals_to1_(i, j).valid) {
-        XBT_DEBUG("Block %zu, Fragment %zu not found (size used = %zd)",
-          i, j, heapinfo1->busy_frag.frag_size[j]);
+      if (i1 == state.heaplimit && heapinfo1->busy_frag.frag_size[j] > 0 && not state.equals_to1_(i, j).valid) {
+        XBT_DEBUG("Block %zu, Fragment %zu not found (size used = %zd)", i, j, heapinfo1->busy_frag.frag_size[j]);
         nb_diff1++;
       }
   }
@@ -585,10 +564,8 @@ int mmalloc_compare_heap(
   for (i=1; i < state.heaplimit; i++) {
     const malloc_info* heapinfo2 = (const malloc_info*) MC_region_read(
       heap_region2, &heapinfo_temp2, &heapinfos2[i], sizeof(malloc_info));
-    if (heapinfo2->type == MMALLOC_TYPE_UNFRAGMENTED
-        && i1 == state.heaplimit
-        && heapinfo2->busy_block.busy_size > 0
-        && !state.equals_to2_(i, 0).valid) {
+    if (heapinfo2->type == MMALLOC_TYPE_UNFRAGMENTED && i1 == state.heaplimit && heapinfo2->busy_block.busy_size > 0 &&
+        not state.equals_to2_(i, 0).valid) {
       XBT_DEBUG("Block %zu not found (size used = %zu)", i,
                 heapinfo2->busy_block.busy_size);
       nb_diff2++;
@@ -598,9 +575,7 @@ int mmalloc_compare_heap(
       continue;
 
     for (j = 0; j < (size_t) (BLOCKSIZE >> heapinfo2->type); j++)
-      if (i1 == state.heaplimit
-          && heapinfo2->busy_frag.frag_size[j] > 0
-          && !state.equals_to2_(i, j).valid) {
+      if (i1 == state.heaplimit && heapinfo2->busy_frag.frag_size[j] > 0 && not state.equals_to2_(i, j).valid) {
         XBT_DEBUG("Block %zu, Fragment %zu not found (size used = %zd)",
           i, j, heapinfo2->busy_frag.frag_size[j]);
         nb_diff2++;
@@ -741,9 +716,12 @@ top:
       return 0;
   }
 
-  simgrid::mc::Type *subtype, *subsubtype;
-  int res, elm_size;
-  const void *addr_pointed1, *addr_pointed2;
+  simgrid::mc::Type* subtype;
+  simgrid::mc::Type* subsubtype;
+  int res;
+  int elm_size;
+  const void* addr_pointed1;
+  const void* addr_pointed2;
 
   mc_mem_region_t heap_region1 = MC_get_heap_region(snapshot1);
   mc_mem_region_t heap_region2 = MC_get_heap_region(snapshot2);
@@ -753,7 +731,7 @@ top:
     return 1;
 
   case DW_TAG_base_type:
-    if (!type->name.empty() && type->name == "char") {        /* String, hence random (arbitrary ?) size */
+    if (not type->name.empty() && type->name == "char") { /* String, hence random (arbitrary ?) size */
       if (real_area1 == real_area2)
         return -1;
       else
@@ -907,7 +885,6 @@ top:
     return compare_heap_area_without_type(state, process_index, real_area1, real_area2,
                                           snapshot1, snapshot2, previous,
                                           type->byte_size, check_ignore);
-    return 0;
 
   default:
     return 0;
@@ -954,9 +931,8 @@ static simgrid::mc::Type* get_offset_type(void *real_base_address, simgrid::mc::
         if (member.offset() == offset)
           return member.type;
       } else {
-        void *real_member = simgrid::dwarf::resolve_member(
-          real_base_address, type, &member, snapshot, process_index);
-        if ((char*) real_member - (char *) real_base_address == offset)
+        void* real_member = simgrid::dwarf::resolve_member(real_base_address, type, &member, snapshot, process_index);
+        if ((char*)real_member - (char*)real_base_address == offset)
           return member.type;
       }
     }
@@ -991,25 +967,33 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
   simgrid::mc::Process* process = &mc_model_checker->process();
 
   int res_compare;
-  ssize_t block1, frag1, block2, frag2;
+  ssize_t block1;
+  ssize_t frag1;
+  ssize_t block2;
+  ssize_t frag2;
   ssize_t size;
   int check_ignore = 0;
 
-  void *real_addr_block1, *real_addr_block2, *real_addr_frag1, *real_addr_frag2;
+  void* real_addr_block1;
+  void* real_addr_block2;
+  void* real_addr_frag1;
+  void* real_addr_frag2;
   int type_size = -1;
-  int offset1 = 0, offset2 = 0;
-  int new_size1 = -1, new_size2 = -1;
-  simgrid::mc::Type *new_type1 = nullptr, *new_type2 = nullptr;
+  int offset1   = 0;
+  int offset2   = 0;
+  int new_size1 = -1;
+  int new_size2 = -1;
+
+  simgrid::mc::Type* new_type1 = nullptr;
+  simgrid::mc::Type* new_type2 = nullptr;
 
   bool match_pairs = false;
 
   // This is the address of std_heap->heapinfo in the application process:
   void* heapinfo_address = &((xbt_mheap_t) process->heap_address)->heapinfo;
 
-  const malloc_info* heapinfos1 = snapshot1->read(
-    remote((const malloc_info**)heapinfo_address), process_index);
-  const malloc_info* heapinfos2 = snapshot2->read(
-    remote((const malloc_info**)heapinfo_address), process_index);
+  const malloc_info* heapinfos1 = snapshot1->read(remote((const malloc_info**)heapinfo_address), process_index);
+  const malloc_info* heapinfos2 = snapshot2->read(remote((const malloc_info**)heapinfo_address), process_index);
 
   malloc_info heapinfo_temp1, heapinfo_temp2;
 
@@ -1020,38 +1004,29 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
   }
 
   // Get block number:
-  block1 =
-      ((char *) area1 -
-       (char *) state.std_heap_copy.heapbase) / BLOCKSIZE + 1;
-  block2 =
-      ((char *) area2 -
-       (char *) state.std_heap_copy.heapbase) / BLOCKSIZE + 1;
+  block1 = ((char*)area1 - (char*)state.std_heap_copy.heapbase) / BLOCKSIZE + 1;
+  block2 = ((char*)area2 - (char*)state.std_heap_copy.heapbase) / BLOCKSIZE + 1;
 
   // If either block is a stack block:
   if (is_block_stack((int) block1) && is_block_stack((int) block2)) {
-    previous->insert(simgrid::mc::makeHeapLocationPair(
-      block1, -1, block2, -1));
+    previous->insert(simgrid::mc::makeHeapLocationPair(block1, -1, block2, -1));
     if (match_pairs)
       state.match_equals(previous);
     return 0;
   }
 
   // If either block is not in the expected area of memory:
-  if (((char *) area1 < (char *) state.std_heap_copy.heapbase)
-      || (block1 > (ssize_t) state.processStates[0].heapsize) || (block1 < 1)
-      || ((char *) area2 < (char *) state.std_heap_copy.heapbase)
-      || (block2 > (ssize_t) state.processStates[1].heapsize) || (block2 < 1)) {
+  if (((char*)area1 < (char*)state.std_heap_copy.heapbase) || (block1 > (ssize_t)state.processStates[0].heapsize) ||
+      (block1 < 1) || ((char*)area2 < (char*)state.std_heap_copy.heapbase) ||
+      (block2 > (ssize_t)state.processStates[1].heapsize) || (block2 < 1)) {
     return 1;
   }
 
   // Process address of the block:
-  real_addr_block1 = (ADDR2UINT(block1) - 1) * BLOCKSIZE +
-                 (char *) state.std_heap_copy.heapbase;
-  real_addr_block2 = (ADDR2UINT(block2) - 1) * BLOCKSIZE +
-                 (char *) state.std_heap_copy.heapbase;
+  real_addr_block1 = (ADDR2UINT(block1) - 1) * BLOCKSIZE + (char*)state.std_heap_copy.heapbase;
+  real_addr_block2 = (ADDR2UINT(block2) - 1) * BLOCKSIZE + (char*)state.std_heap_copy.heapbase;
 
   if (type) {
-
     if (type->full_type)
       type = type->full_type;
 
@@ -1060,9 +1035,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
       type = type->subtype;
 
     // Find type_size:
-    if (type->type == DW_TAG_pointer_type
-        || (type->type == DW_TAG_base_type && !type->name.empty()
-            && type->name == "char"))
+    if (type->type == DW_TAG_pointer_type ||
+        (type->type == DW_TAG_base_type && not type->name.empty() && type->name == "char"))
       type_size = -1;
     else
       type_size = type->byte_size;
@@ -1085,18 +1059,15 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
     return 0;
   }
 
-  if (heapinfo1->type == MMALLOC_TYPE_UNFRAGMENTED
-    && heapinfo2->type == MMALLOC_TYPE_UNFRAGMENTED) {
+  if (heapinfo1->type == MMALLOC_TYPE_UNFRAGMENTED && heapinfo2->type == MMALLOC_TYPE_UNFRAGMENTED) {
     /* Complete block */
 
     // TODO, lookup variable type from block type as done for fragmented blocks
 
-    offset1 = (char *) area1 - (char *) real_addr_block1;
-    offset2 = (char *) area2 - (char *) real_addr_block2;
+    offset1 = (char*)area1 - (char*)real_addr_block1;
+    offset2 = (char*)area2 - (char*)real_addr_block2;
 
-    if (state.equals_to1_(block1, 0).valid
-        && state.equals_to2_(block2, 0).valid
-        && state.blocksEqual(block1, block2)) {
+    if (state.equals_to1_(block1, 0).valid && state.equals_to2_(block2, 0).valid && state.blocksEqual(block1, block2)) {
       if (match_pairs)
         state.match_equals(previous);
       return 0;
@@ -1117,8 +1088,7 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
     if (heapinfo1->busy_block.busy_size != heapinfo2->busy_block.busy_size)
       return 1;
 
-    if (!previous->insert(simgrid::mc::makeHeapLocationPair(
-        block1, -1, block2, -1)).second) {
+    if (not previous->insert(simgrid::mc::makeHeapLocationPair(block1, -1, block2, -1)).second) {
       if (match_pairs)
         state.match_equals(previous);
       return 0;
@@ -1149,23 +1119,16 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
   } else if ((heapinfo1->type > 0) && (heapinfo2->type > 0)) {      /* Fragmented block */
 
     // Fragment number:
-    frag1 =
-        ((uintptr_t) (ADDR2UINT(area1) % (BLOCKSIZE))) >> heapinfo1->type;
-    frag2 =
-        ((uintptr_t) (ADDR2UINT(area2) % (BLOCKSIZE))) >> heapinfo2->type;
+    frag1 = ((uintptr_t)(ADDR2UINT(area1) % (BLOCKSIZE))) >> heapinfo1->type;
+    frag2 = ((uintptr_t)(ADDR2UINT(area2) % (BLOCKSIZE))) >> heapinfo2->type;
 
     // Process address of the fragment:
-    real_addr_frag1 =
-        (void *) ((char *) real_addr_block1 +
-                  (frag1 << heapinfo1->type));
-    real_addr_frag2 =
-        (void *) ((char *) real_addr_block2 +
-                  (frag2 << heapinfo2->type));
+    real_addr_frag1 = (void*)((char*)real_addr_block1 + (frag1 << heapinfo1->type));
+    real_addr_frag2 = (void*)((char*)real_addr_block2 + (frag2 << heapinfo2->type));
 
     // Check the size of the fragments against the size of the type:
     if (type_size != -1) {
-      if (heapinfo1->busy_frag.frag_size[frag1] == -1
-          || heapinfo2->busy_frag.frag_size[frag2] == -1) {
+      if (heapinfo1->busy_frag.frag_size[frag1] == -1 || heapinfo2->busy_frag.frag_size[frag2] == -1) {
         if (match_pairs)
           state.match_equals(previous);
         return -1;
@@ -1180,8 +1143,7 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
     }
 
     // Check if the blocks are already matched together:
-    if (state.equals_to1_(block1, frag1).valid
-        && state.equals_to2_(block2, frag2).valid) {
+    if (state.equals_to1_(block1, frag1).valid && state.equals_to2_(block2, frag2).valid) {
       if (offset1==offset2 && state.fragmentsEqual(block1, frag1, block2, frag2)) {
         if (match_pairs)
           state.match_equals(previous);
@@ -1189,8 +1151,7 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
       }
     }
     // Compare the size of both fragments:
-    if (heapinfo1->busy_frag.frag_size[frag1] !=
-        heapinfo2->busy_frag.frag_size[frag2]) {
+    if (heapinfo1->busy_frag.frag_size[frag1] != heapinfo2->busy_frag.frag_size[frag2]) {
       if (type_size == -1) {
         if (match_pairs)
           state.match_equals(previous);
@@ -1215,34 +1176,26 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
       new_type2 = type;
     }
     // Type inference from the block type.
-    else if (state.types1_(block1, frag1) != nullptr
-             || state.types2_(block2, frag2) != nullptr) {
+    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;
+      offset1 = (char*)area1 - (char*)real_addr_frag1;
+      offset2 = (char*)area2 - (char*)real_addr_frag2;
 
-      if (state.types1_(block1, frag1) != nullptr
-          && state.types2_(block2, frag2) != nullptr) {
+      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);
+            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);
+            get_offset_type(real_addr_frag2, state.types2_(block2, frag2), offset1, size, snapshot2, process_index);
       } else if (state.types1_(block1, frag1) != nullptr) {
         new_type1 =
-            get_offset_type(real_addr_frag1, state.types1_(block1, frag1),
-                            offset1, size, snapshot1, process_index);
+            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);
+            get_offset_type(real_addr_frag2, state.types1_(block1, frag1), offset2, size, snapshot2, process_index);
       } else if (state.types2_(block2, frag2) != nullptr) {
         new_type1 =
-            get_offset_type(real_addr_frag1, state.types2_(block2, frag2),
-                            offset1, size, snapshot1, process_index);
+            get_offset_type(real_addr_frag1, state.types2_(block2, frag2), offset1, size, snapshot1, process_index);
         new_type2 =
-            get_offset_type(real_addr_frag2, state.types2_(block2, frag2),
-                            offset2, size, snapshot2, process_index);
+            get_offset_type(real_addr_frag2, state.types2_(block2, frag2), offset2, size, snapshot2, process_index);
       } else {
         if (match_pairs)
           state.match_equals(previous);
@@ -1273,13 +1226,12 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
       size = new_size1;
     }
 
-    if (offset1 == 0 && offset2 == 0
-      && !previous->insert(simgrid::mc::makeHeapLocationPair(
-        block1, frag1, block2, frag2)).second) {
-        if (match_pairs)
-          state.match_equals(previous);
-        return 0;
-      }
+    if (offset1 == 0 && offset2 == 0 &&
+        not previous->insert(simgrid::mc::makeHeapLocationPair(block1, frag1, block2, frag2)).second) {
+      if (match_pairs)
+        state.match_equals(previous);
+      return 0;
+    }
 
     if (size <= 0) {
       if (match_pairs)
@@ -1287,9 +1239,8 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
       return 0;
     }
 
-    if ((heapinfo1->busy_frag.ignore[frag1] > 0)
-        && (heapinfo2->busy_frag.ignore[frag2] ==
-            heapinfo1->busy_frag.ignore[frag1]))
+    if ((heapinfo1->busy_frag.ignore[frag1] > 0) &&
+        (heapinfo2->busy_frag.ignore[frag2] == heapinfo1->busy_frag.ignore[frag1]))
       check_ignore = heapinfo1->busy_frag.ignore[frag1];
 
   } else
@@ -1298,14 +1249,11 @@ int compare_heap_area(simgrid::mc::StateComparator& state, int process_index,
 
   /* Start comparison */
   if (type)
-    res_compare =
-        compare_heap_area_with_type(state, process_index, area1, area2, snapshot1, snapshot2,
-                                    previous, type, size, check_ignore,
-                                    pointer_level);
+    res_compare = compare_heap_area_with_type(state, process_index, area1, area2, snapshot1, snapshot2, previous, type,
+                                              size, check_ignore, pointer_level);
   else
-    res_compare =
-        compare_heap_area_without_type(state, process_index, area1, area2, snapshot1, snapshot2,
-                                       previous, size, check_ignore);
+    res_compare = compare_heap_area_without_type(state, process_index, area1, area2, snapshot1, snapshot2, previous,
+                                                 size, check_ignore);
 
   if (res_compare == 1)
     return res_compare;
@@ -1331,7 +1279,9 @@ static int compare_areas_with_type(simgrid::mc::StateComparator& state,
 
   simgrid::mc::Type* subtype;
   simgrid::mc::Type* subsubtype;
-  int elm_size, i, res;
+  int elm_size;
+  int i;
+  int res;
 
   top:
   switch (type->type) {
@@ -1341,11 +1291,7 @@ static int compare_areas_with_type(simgrid::mc::StateComparator& state,
   case DW_TAG_base_type:
   case DW_TAG_enumeration_type:
   case DW_TAG_union_type:
-  {
-    return MC_snapshot_region_memcmp(
-      real_area1, region1, real_area2, region2,
-      type->byte_size) != 0;
-  }
+    return MC_snapshot_region_memcmp(real_area1, region1, real_area2, region2, type->byte_size) != 0;
   case DW_TAG_typedef:
   case DW_TAG_volatile_type:
   case DW_TAG_const_type:
@@ -1405,8 +1351,7 @@ static int compare_areas_with_type(simgrid::mc::StateComparator& state,
       return 0;
     if (addr_pointed1 == nullptr || addr_pointed2 == nullptr)
       return 1;
-    if (!state.compared_pointers.insert(
-        std::make_pair(addr_pointed1, addr_pointed2)).second)
+    if (not state.compared_pointers.insert(std::make_pair(addr_pointed1, addr_pointed2)).second)
       return 0;
 
     pointer_level++;
@@ -1418,9 +1363,7 @@ static int compare_areas_with_type(simgrid::mc::StateComparator& state,
 
       if (addr_pointed1 > process->heap_address
           && addr_pointed1 < mc_snapshot_get_heap_end(snapshot1)) {
-        if (!
-            (addr_pointed2 > process->heap_address
-             && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2)))
+        if (not(addr_pointed2 > process->heap_address && addr_pointed2 < mc_snapshot_get_heap_end(snapshot2)))
           return 1;
         // The pointers are both in the heap:
         return simgrid::mc::compare_heap_area(state,
@@ -1430,9 +1373,9 @@ static int compare_areas_with_type(simgrid::mc::StateComparator& state,
 
       // The pointers are both in the current object R/W segment:
       else if (region1->contain(simgrid::mc::remote(addr_pointed1))) {
-        if (!region2->contain(simgrid::mc::remote(addr_pointed2)))
+        if (not region2->contain(simgrid::mc::remote(addr_pointed2)))
           return 1;
-        if (!type->type_id)
+        if (not type->type_id)
           return (addr_pointed1 != addr_pointed2);
         else
           return compare_areas_with_type(state, process_index,
@@ -1776,8 +1719,7 @@ int snapshot_compare(int num1, simgrid::mc::Snapshot* s1, int num2, simgrid::mc:
     // * There MUST not be any false negative.
 
     XBT_VERB("(%d - %d) State equality hash test is %s %s", num1, num2,
-             (hash_result != 0) == (errors != 0) ? "true" : "false",
-             !hash_result ? "positive" : "negative");
+             (hash_result != 0) == (errors != 0) ? "true" : "false", not hash_result ? "positive" : "negative");
   }
 #endif
 
index 681efc3..ee5098e 100644 (file)
@@ -30,7 +30,7 @@ int MC_random(int min, int max)
 namespace simgrid {
 namespace mc {
 
-void wait_for_requests(void)
+void wait_for_requests()
 {
 #if SIMGRID_HAVE_MC
   xbt_assert(mc_model_checker == nullptr);
@@ -40,11 +40,11 @@ void wait_for_requests(void)
   smx_simcall_t req;
   unsigned int iter;
 
-  while (!xbt_dynar_is_empty(simix_global->process_to_run)) {
+  while (not xbt_dynar_is_empty(simix_global->process_to_run)) {
     SIMIX_process_runall();
     xbt_dynar_foreach(simix_global->process_that_ran, iter, process) {
       req = &process->simcall;
-      if (req->call != SIMCALL_NONE && !simgrid::mc::request_is_visible(req))
+      if (req->call != SIMCALL_NONE && not simgrid::mc::request_is_visible(req))
         SIMIX_simcall_handle(req, 0);
     }
   }
@@ -69,7 +69,6 @@ void wait_for_requests(void)
 // Called from both MCer and MCed:
 bool request_is_enabled(smx_simcall_t req)
 {
-  unsigned int index = 0;
   // TODO, add support for the subtypes?
 
   switch (req->call) {
@@ -79,16 +78,16 @@ bool request_is_enabled(smx_simcall_t req)
   case SIMCALL_COMM_WAIT:
   {
     /* FIXME: check also that src and dst processes are not suspended */
-    simgrid::kernel::activity::Comm *act =
-        static_cast<simgrid::kernel::activity::Comm*>(simcall_comm_wait__get__comm(req));
+    simgrid::kernel::activity::CommImpl* act =
+        static_cast<simgrid::kernel::activity::CommImpl*>(simcall_comm_wait__get__comm(req));
 
 #if SIMGRID_HAVE_MC
     // Fetch from MCed memory:
     // HACK, type puning
     if (mc_model_checker != nullptr) {
-      simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_comm;
+      simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_comm;
       mc_model_checker->process().read(temp_comm, remote(act));
-      act = static_cast<simgrid::kernel::activity::Comm*>(temp_comm.getBuffer());
+      act = static_cast<simgrid::kernel::activity::CommImpl*>(temp_comm.getBuffer());
     }
 #endif
 
@@ -107,8 +106,8 @@ bool request_is_enabled(smx_simcall_t req)
 
   case SIMCALL_COMM_WAITANY: {
     xbt_dynar_t comms;
-    simgrid::kernel::activity::Comm *act =
-        static_cast<simgrid::kernel::activity::Comm*>(simcall_comm_wait__get__comm(req));
+    simgrid::kernel::activity::CommImpl* act =
+        static_cast<simgrid::kernel::activity::CommImpl*>(simcall_comm_wait__get__comm(req));
 
 #if SIMGRID_HAVE_MC
     s_xbt_dynar_t comms_buffer;
@@ -132,19 +131,19 @@ bool request_is_enabled(smx_simcall_t req)
     comms = simcall_comm_waitany__get__comms(req);
 #endif
 
-    for (index = 0; index < comms->used; ++index) {
+    for (unsigned int index = 0; index < comms->used; ++index) {
 #if SIMGRID_HAVE_MC
       // Fetch act from MCed memory:
       // HACK, type puning
-      simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_comm;
+      simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_comm;
       if (mc_model_checker != nullptr) {
         memcpy(&act, buffer + comms->elmsize * index, sizeof(act));
         mc_model_checker->process().read(temp_comm, remote(act));
-        act = static_cast<simgrid::kernel::activity::Comm*>(temp_comm.getBuffer());
+        act = static_cast<simgrid::kernel::activity::CommImpl*>(temp_comm.getBuffer());
       }
       else
 #endif
-        act = xbt_dynar_get_as(comms, index, simgrid::kernel::activity::Comm*);
+        act = xbt_dynar_get_as(comms, index, simgrid::kernel::activity::CommImpl*);
       if (act->src_proc && act->dst_proc)
         return true;
     }
@@ -154,7 +153,7 @@ bool request_is_enabled(smx_simcall_t req)
   case SIMCALL_MUTEX_LOCK: {
     smx_mutex_t mutex = simcall_mutex_lock__get__mutex(req);
 #if SIMGRID_HAVE_MC
-    simgrid::mc::Remote<simgrid::simix::Mutex> temp_mutex;
+    simgrid::mc::Remote<simgrid::simix::MutexImpl> temp_mutex;
     if (mc_model_checker != nullptr) {
       mc_model_checker->process().read(temp_mutex.getBuffer(), remote(mutex));
       mutex = temp_mutex.getBuffer();
@@ -177,7 +176,7 @@ bool request_is_enabled(smx_simcall_t req)
 
     case SIMCALL_SEM_ACQUIRE: {
       static int warned = 0;
-      if (!warned)
+      if (not warned)
         XBT_INFO("Using semaphore in model-checked code is still experimental. Use at your own risk");
       warned = 1;
       return true;
@@ -185,7 +184,7 @@ bool request_is_enabled(smx_simcall_t req)
 
     case SIMCALL_COND_WAIT: {
       static int warned = 0;
-      if (!warned)
+      if (not warned)
         XBT_INFO("Using condition variables in model-checked code is still experimental. Use at your own risk");
       warned = 1;
       return true;
@@ -235,7 +234,7 @@ static int prng_random(int min, int max)
 
 int simcall_HANDLER_mc_random(smx_simcall_t simcall, int min, int max)
 {
-  if (!MC_is_active() && !MC_record_path)
+  if (not MC_is_active() && not MC_record_path)
     return prng_random(min, max);
   return simcall->mc_value;
 }
index 5fcffaa..1f94f1b 100644 (file)
@@ -6,9 +6,7 @@
 #ifndef SIMGRID_MC_BASE_H
 #define SIMGRID_MC_BASE_H
 
-
-#include <xbt/base.h>
-#include <simgrid/forward.h>
+#include "simgrid/forward.h"
 
 #ifdef __cplusplus
 
index f1b4c2d..cc77840 100644 (file)
@@ -45,8 +45,7 @@
 
 using simgrid::mc::remote;
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc,
-                                "Logging specific to mc_checkpoint");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_checkpoint, mc, "Logging specific to mc_checkpoint");
 
 namespace simgrid {
 namespace mc {
@@ -123,7 +122,7 @@ void add_region(int index, simgrid::mc::Snapshot* snapshot,
   if (type == simgrid::mc::RegionType::Data)
     xbt_assert(object_info, "Missing object info for object.");
   else if (type == simgrid::mc::RegionType::Heap)
-    xbt_assert(!object_info, "Unexpected object info for heap region.");
+    xbt_assert(not object_info, "Unexpected object info for heap region.");
 
   simgrid::mc::RegionSnapshot region;
 #if HAVE_SMPI
@@ -202,9 +201,7 @@ void find_object_address(
 
     // This is the non-GNU_RELRO-part of the data segment:
     if (reg.prot == PROT_RW) {
-      xbt_assert(!result->start_rw,
-                 "Multiple read-write segments for %s, not supported",
-                 maps[i].pathname.c_str());
+      xbt_assert(not result->start_rw, "Multiple read-write segments for %s, not supported", maps[i].pathname.c_str());
       result->start_rw = (char*) reg.start_addr;
       result->end_rw = (char*) reg.end_addr;
 
@@ -218,8 +215,7 @@ void find_object_address(
 
     // This is the text segment:
     else if (reg.prot == PROT_RX) {
-      xbt_assert(!result->start_exec,
-                 "Multiple executable segments for %s, not supported",
+      xbt_assert(not result->start_exec, "Multiple executable segments for %s, not supported",
                  maps[i].pathname.c_str());
       result->start_exec = (char*) reg.start_addr;
       result->end_exec = (char*) reg.end_addr;
@@ -236,9 +232,7 @@ void find_object_address(
 
     // This is the GNU_RELRO-part of the data segment:
     else if (reg.prot == PROT_READ) {
-      xbt_assert(!result->start_ro,
-                 "Multiple read only segments for %s, not supported",
-                 maps[i].pathname.c_str());
+      xbt_assert(not result->start_ro, "Multiple read only segments for %s, not supported", maps[i].pathname.c_str());
       result->start_ro = (char*) reg.start_addr;
       result->end_ro = (char*) reg.end_addr;
     }
@@ -291,13 +285,13 @@ static void fill_local_variables_values(mc_stack_frame_t stack_frame,
 {
   simgrid::mc::Process* process = &mc_model_checker->process();
 
-  if (!scope || !scope->range.contain(stack_frame->ip))
+  if (not scope || not scope->range.contain(stack_frame->ip))
     return;
 
   for(simgrid::mc::Variable& current_variable :
       scope->variables) {
 
-    if (!valid_variable(&current_variable, scope, (void *) stack_frame->ip))
+    if (not valid_variable(&current_variable, scope, (void*)stack_frame->ip))
       continue;
 
     int region_type;
@@ -317,7 +311,7 @@ static void fill_local_variables_values(mc_stack_frame_t stack_frame,
 
     if (current_variable.address != nullptr)
       new_var.address = current_variable.address;
-    else if (!current_variable.location_list.empty()) {
+    else if (not current_variable.location_list.empty()) {
       simgrid::dwarf::Location location =
         simgrid::dwarf::resolve(
           current_variable.location_list,
@@ -326,7 +320,7 @@ static void fill_local_variables_values(mc_stack_frame_t stack_frame,
           (void *) stack_frame->frame_base,
           &mc_model_checker->process(), process_index);
 
-      if (!location.in_memory())
+      if (not location.in_memory())
         xbt_die("Cannot handle non-address variable");
       new_var.address = location.address();
 
@@ -366,7 +360,8 @@ static std::vector<s_mc_stack_frame_t> unwind_stack_frames(simgrid::mc::UnwindCo
 
       stack_frame.unw_cursor = c;
 
-      unw_word_t ip, sp;
+      unw_word_t ip;
+      unw_word_t sp;
 
       unw_get_reg(&c, UNW_REG_IP, &ip);
       unw_get_reg(&c, UNW_REG_SP, &sp);
@@ -408,7 +403,7 @@ static std::vector<s_mc_stack_frame_t> unwind_stack_frames(simgrid::mc::UnwindCo
   }
 
   return result;
-};
+}
 
 static std::vector<s_mc_snapshot_stack_t> take_snapshot_stacks(simgrid::mc::Snapshot* snapshot)
 {
@@ -620,12 +615,11 @@ void restore_snapshot_fds(simgrid::mc::Snapshot* snapshot)
     
     int new_fd = open(fd.filename.c_str(), fd.flags);
     if (new_fd < 0)
-      xbt_die("Could not reopen the file %s fo restoring the file descriptor",
-        fd.filename.c_str());
+      xbt_die("Could not reopen the file %s fo restoring the file descriptor", fd.filename.c_str());
     if (new_fd != fd.number) {
       dup2(new_fd, fd.number);
       close(new_fd);
-    };
+    }
     lseek(fd.number, fd.current_position, SEEK_SET);
   }
 }
index 7fd76d2..3cf1ff7 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 <xbt/sysdep.h>
+#include "xbt/log.h"
+#include "xbt/sysdep.h"
 #include <simgrid/modelchecker.h>
 
 #include "src/mc/ModelChecker.hpp"
@@ -29,14 +29,14 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_client_api, mc,
 void MC_assert(int prop)
 {
   xbt_assert(mc_model_checker == nullptr);
-  if (MC_is_active() && !prop)
+  if (MC_is_active() && not prop)
     simgrid::mc::Client::get()->reportAssertionFailure();
 }
 
-void MC_cut(void)
+void MC_cut()
 {
   xbt_assert(mc_model_checker == nullptr);
-  if (!MC_is_active())
+  if (not MC_is_active())
     return;
   // FIXME, We want to do this in the model-checker:
   xbt_die("MC_cut() not implemented");
@@ -45,15 +45,15 @@ void MC_cut(void)
 void MC_ignore(void* addr, size_t size)
 {
   xbt_assert(mc_model_checker == nullptr);
-  if (!MC_is_active())
+  if (not MC_is_active())
     return;
   simgrid::mc::Client::get()->ignoreMemory(addr, size);
 }
 
-void MC_automaton_new_propositional_symbol(const char *id, int(*fct)(void))
+void MC_automaton_new_propositional_symbol(const char* id, int (*fct)())
 {
   xbt_assert(mc_model_checker == nullptr);
-  if (!MC_is_active())
+  if (not MC_is_active())
     return;
   xbt_die("Support for client-side function proposition is not implemented: "
     "use MC_automaton_new_propositional_symbol_pointer instead.");
@@ -62,7 +62,7 @@ void MC_automaton_new_propositional_symbol(const char *id, int(*fct)(void))
 void MC_automaton_new_propositional_symbol_pointer(const char *name, int* value)
 {
   xbt_assert(mc_model_checker == nullptr);
-  if (!MC_is_active())
+  if (not MC_is_active())
     return;
   simgrid::mc::Client::get()->declareSymbol(name, value);
 }
@@ -81,7 +81,7 @@ void MC_automaton_new_propositional_symbol_pointer(const char *name, int* value)
 void MC_register_stack_area(void *stack, smx_actor_t process, ucontext_t* context, size_t size)
 {
   xbt_assert(mc_model_checker == nullptr);
-  if (!MC_is_active())
+  if (not MC_is_active())
     return;
   simgrid::mc::Client::get()->declareStack(stack, size, process, context);
 }
@@ -89,7 +89,7 @@ void MC_register_stack_area(void *stack, smx_actor_t process, ucontext_t* contex
 void MC_ignore_global_variable(const char *name)
 {
   xbt_assert(mc_model_checker == nullptr);
-  if (!MC_is_active())
+  if (not MC_is_active())
     return;
   // TODO, send a message to the model_checker
   xbt_die("Unimplemented");
@@ -98,7 +98,7 @@ void MC_ignore_global_variable(const char *name)
 void MC_ignore_heap(void *address, size_t size)
 {
   xbt_assert(mc_model_checker == nullptr);
-  if (!MC_is_active())
+  if (not MC_is_active())
     return;
   simgrid::mc::Client::get()->ignoreHeap(address, size);
 }
@@ -106,7 +106,7 @@ void MC_ignore_heap(void *address, size_t size)
 void MC_remove_ignore_heap(void *address, size_t size)
 {
   xbt_assert(mc_model_checker == nullptr);
-  if (!MC_is_active())
+  if (not MC_is_active())
     return;
   simgrid::mc::Client::get()->unignoreHeap(address, size);
 }
index e0f5904..c6eede3 100644 (file)
@@ -6,8 +6,8 @@
 
 #include <string.h>
 
-#include <xbt/sysdep.h>
-#include <xbt/dynar.h>
+#include "xbt/dynar.h"
+#include "xbt/sysdep.h"
 #include <xbt/dynar.hpp>
 
 #include "src/mc/mc_comm_pattern.h"
@@ -86,16 +86,15 @@ void MC_handle_comm_pattern(
   case MC_CALL_TYPE_WAIT:
   case MC_CALL_TYPE_WAITANY:
     {
-      simgrid::mc::RemotePtr<simgrid::kernel::activity::Comm> comm_addr = nullptr;
-      if (call_type == MC_CALL_TYPE_WAIT)
-        comm_addr = remote(static_cast<simgrid::kernel::activity::Comm*>(
-          simcall_comm_wait__get__comm(req)));
-      else {
-        simgrid::kernel::activity::Comm* addr;
-        // comm_addr = REMOTE(xbt_dynar_get_as(simcall_comm_waitany__get__comms(req), value, smx_synchro_t)):
-        simgrid::mc::read_element(mc_model_checker->process(), &addr,
-          remote(simcall_comm_waitany__get__comms(req)), value, sizeof(comm_addr));
-        comm_addr = remote(addr);
+    simgrid::mc::RemotePtr<simgrid::kernel::activity::CommImpl> comm_addr = nullptr;
+    if (call_type == MC_CALL_TYPE_WAIT)
+      comm_addr = remote(static_cast<simgrid::kernel::activity::CommImpl*>(simcall_comm_wait__get__comm(req)));
+    else {
+      simgrid::kernel::activity::CommImpl* addr;
+      // comm_addr = REMOTE(xbt_dynar_get_as(simcall_comm_waitany__get__comms(req), value, smx_synchro_t)):
+      simgrid::mc::read_element(mc_model_checker->process(), &addr, remote(simcall_comm_waitany__get__comms(req)),
+                                value, sizeof(comm_addr));
+      comm_addr = remote(addr);
       }
       checker->complete_comm_pattern(pattern, comm_addr,
         MC_smx_simcall_get_issuer(req)->pid, backtracking);
index 3390b56..b5ac841 100644 (file)
@@ -6,16 +6,10 @@
 #ifndef SIMGRID_MC_COMM_PATTERN_H
 #define SIMGRID_MC_COMM_PATTERN_H
 
-#include <cstddef>
-
 #include <vector>
 
-#include <simgrid_config.h>
-#include <xbt/dynar.h>
-
-#include "src/simix/smx_private.h"
-#include "src/smpi/private.h"
-#include <smpi/smpi.h>
+#include "smpi/smpi.h"
+#include "xbt/dynar.h"
 
 #include "src/mc/mc_state.h"
 
index 621f502..c6b2d71 100644 (file)
@@ -4,9 +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/config.h"
+#include "xbt/log.h"
 #include <xbt/str.h>
-#include <xbt/log.h>
-#include <xbt/config.h>
 
 #include <mc/mc.h>
 #include "src/mc/mc_replay.h"
@@ -20,8 +20,7 @@
 
 #include "src/mc/mc_record.h"
 
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_config, mc,
-                                "Configuration of MC");
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_config, mc, "Configuration of the Model Checker");
 
 #if SIMGRID_HAVE_MC
 namespace simgrid {
@@ -40,7 +39,7 @@ int _sg_mc_timeout = 0;
 
 void _mc_cfg_cb_timeout(const char *name)
 {
-  if (_sg_cfg_init_status && !(_sg_do_model_check || MC_record_path))
+  if (_sg_cfg_init_status && not(_sg_do_model_check || MC_record_path))
     xbt_die("You are specifying a value to enable/disable timeout for wait requests after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
   _sg_mc_timeout = xbt_cfg_get_boolean(name);
@@ -64,14 +63,14 @@ int _sg_mc_termination = 0;
 
 void _mc_cfg_cb_reduce(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a reduction strategy after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
   char *val = xbt_cfg_get_string(name);
-  if (!strcasecmp(val, "none"))
+  if (not strcasecmp(val, "none"))
     simgrid::mc::reduction_mode = simgrid::mc::ReductionMode::none;
-  else if (!strcasecmp(val, "dpor"))
+  else if (not strcasecmp(val, "dpor"))
     simgrid::mc::reduction_mode = simgrid::mc::ReductionMode::dpor;
   else
     xbt_die("configuration option %s can only take 'none' or 'dpor' as a value",
@@ -80,7 +79,7 @@ void _mc_cfg_cb_reduce(const char *name)
 
 void _mc_cfg_cb_checkpoint(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a checkpointing value after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
@@ -88,7 +87,7 @@ void _mc_cfg_cb_checkpoint(const char *name)
 }
 
 void _mc_cfg_cb_sparse_checkpoint(const char *name) {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die("You are specifying a checkpointing value after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
   _sg_mc_sparse_checkpoint = xbt_cfg_get_boolean(name);
@@ -96,7 +95,7 @@ void _mc_cfg_cb_sparse_checkpoint(const char *name) {
 
 void _mc_cfg_cb_ksm(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die("You are specifying a KSM value after the initialization (through MSG_config?), but model-checking was not activated at config time (through --cfg=model-check:1). This won't work, sorry.");
 
   _sg_mc_ksm = xbt_cfg_get_boolean(name);
@@ -104,7 +103,7 @@ void _mc_cfg_cb_ksm(const char *name)
 
 void _mc_cfg_cb_property(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a property after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
@@ -113,7 +112,7 @@ void _mc_cfg_cb_property(const char *name)
 
 void _mc_cfg_cb_hash(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a value to enable/disable the use of global hash to speedup state comparaison, but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
@@ -122,7 +121,7 @@ void _mc_cfg_cb_hash(const char *name)
 
 void _mc_cfg_cb_snapshot_fds(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a value to enable/disable the use of FD snapshotting, but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
@@ -131,7 +130,7 @@ void _mc_cfg_cb_snapshot_fds(const char *name)
 
 void _mc_cfg_cb_max_depth(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a max depth value after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
@@ -140,7 +139,7 @@ void _mc_cfg_cb_max_depth(const char *name)
 
 void _mc_cfg_cb_visited(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a number of stored visited states after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
@@ -149,7 +148,7 @@ void _mc_cfg_cb_visited(const char *name)
 
 void _mc_cfg_cb_dot_output(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a file name for a dot output of graph state after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
@@ -158,7 +157,7 @@ void _mc_cfg_cb_dot_output(const char *name)
 
 void _mc_cfg_cb_comms_determinism(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a value to enable/disable the detection of determinism in the communications schemes after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
@@ -167,7 +166,7 @@ void _mc_cfg_cb_comms_determinism(const char *name)
 
 void _mc_cfg_cb_send_determinism(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a value to enable/disable the detection of send-determinism in the communications schemes after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
@@ -176,7 +175,7 @@ void _mc_cfg_cb_send_determinism(const char *name)
 
 void _mc_cfg_cb_termination(const char *name)
 {
-  if (_sg_cfg_init_status && !_sg_do_model_check)
+  if (_sg_cfg_init_status && not _sg_do_model_check)
     xbt_die
         ("You are specifying a value to enable/disable the detection of non progressive cycles after the initialization (through MSG_config?), but model-checking was not activated at config time (through bu the program was not runned under the model-checker (with simgrid-mc)). This won't work, sorry.");
 
index 89951e4..8cc387c 100644 (file)
 
 #include <boost/algorithm/string/predicate.hpp>
 
-#include <simgrid_config.h>
 #include "src/simgrid/util.hpp"
-#include <xbt/log.h>
-#include <xbt/sysdep.h>
+#include "xbt/log.h"
+#include "xbt/sysdep.h"
+#include <simgrid_config.h>
 
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_dwarf.hpp"
@@ -53,8 +53,7 @@ static uint64_t MC_dwarf_default_lower_bound(int lang);
  * \param die  DIE for the DW_TAG_enumeration_type or DW_TAG_subrange_type
  * \param unit DIE of the DW_TAG_compile_unit
  */
-static uint64_t MC_dwarf_subrange_element_count(Dwarf_Die * die,
-                                                Dwarf_Die * unit);
+static uint64_t MC_dwarf_subrange_element_count(Dwarf_Die* die, Dwarf_Die* unit);
 
 /** \brief Computes the number of elements of a given DW_TAG_array_type.
  *
@@ -261,7 +260,7 @@ static const char *MC_dwarf_attr_integrate_string(Dwarf_Die * die,
                                                   int attribute)
 {
   Dwarf_Attribute attr;
-  if (!dwarf_attr_integrate(die, attribute, &attr))
+  if (not dwarf_attr_integrate(die, attribute, &attr))
     return nullptr;
   else
     return dwarf_formstring(&attr);
@@ -280,7 +279,7 @@ static const char *MC_dwarf_attr_integrate_string(Dwarf_Die * die,
 static const char *MC_dwarf_at_linkage_name(Dwarf_Die * die)
 {
   const char *name = MC_dwarf_attr_integrate_string(die, DW_AT_linkage_name);
-  if (!name)
+  if (not name)
     name = MC_dwarf_attr_integrate_string(die, DW_AT_MIPS_linkage_name);
   return name;
 }
@@ -417,7 +416,7 @@ static uint64_t MC_dwarf_subrange_element_count(Dwarf_Die * die,
     return MC_dwarf_attr_integrate_uint(die, DW_AT_count, 0);
   // Otherwise compute DW_TAG_upper_bound-DW_TAG_lower_bound + 1:
 
-  if (!dwarf_hasattr_integrate(die, DW_AT_upper_bound))
+  if (not dwarf_hasattr_integrate(die, DW_AT_upper_bound))
     // This is not really 0, but the code expects this (we do not know):
     return 0;
 
@@ -493,7 +492,7 @@ static void MC_dwarf_fill_member_location(
   if (dwarf_hasattr(child, DW_AT_data_bit_offset))
     xbt_die("Can't groke DW_AT_data_bit_offset.");
 
-  if (!dwarf_hasattr_integrate(child, DW_AT_data_member_location)) {
+  if (not dwarf_hasattr_integrate(child, DW_AT_data_member_location)) {
     if (type->type == DW_TAG_union_type)
       return;
     xbt_die
@@ -525,7 +524,7 @@ static void MC_dwarf_fill_member_location(
     // Offset from the base address of the object:
     {
       Dwarf_Word offset;
-      if (!dwarf_formudata(&attr, &offset))
+      if (not dwarf_formudata(&attr, &offset))
         member->offset(offset);
       else
         xbt_die("Cannot get %s location <%" PRIx64 ">%s",
@@ -612,7 +611,7 @@ static void MC_dwarf_add_members(simgrid::mc::ObjectInformation* info, Dwarf_Die
 
       MC_dwarf_fill_member_location(type, &member, &child);
 
-      if (!member.type_id)
+      if (not member.type_id)
         xbt_die("Missing type for member %s of <%" PRIx64 ">%s",
                 member.name.c_str(),
                 (uint64_t) type->id, type->name.c_str());
@@ -715,7 +714,7 @@ static void MC_dwarf_handle_type_die(simgrid::mc::ObjectInformation* info, Dwarf
 {
   simgrid::mc::Type type = MC_dwarf_die_to_type(info, die, unit, frame, ns);
   auto& t = (info->types[type.id] = std::move(type));
-  if (!t.name.empty() && type.byte_size != 0)
+  if (not t.name.empty() && type.byte_size != 0)
     info->full_types_by_name[t.name] = &t;
 }
 
@@ -840,7 +839,7 @@ static void MC_dwarf_handle_variable_die(simgrid::mc::ObjectInformation* info, D
 {
   std::unique_ptr<simgrid::mc::Variable> variable =
     MC_die_to_variable(info, die, unit, frame, ns);
-  if (!variable)
+  if (not variable)
     return;
   // Those arrays are sorted later:
   else if (variable->global)
@@ -894,7 +893,7 @@ static void MC_dwarf_handle_scope_die(simgrid::mc::ObjectInformation* info, Dwar
   if (low_pc) {
     // DW_AT_high_pc:
     Dwarf_Attribute attr;
-    if (!dwarf_attr_integrate(die, DW_AT_high_pc, &attr))
+    if (not dwarf_attr_integrate(die, DW_AT_high_pc, &attr))
       xbt_die("Missing DW_AT_high_pc matching with DW_AT_low_pc");
 
     Dwarf_Sword offset;
@@ -1203,7 +1202,7 @@ void MC_load_dwarf(simgrid::mc::ObjectInformation* info)
   // Try with NT_GNU_BUILD_ID: we find the build ID in the ELF file and then
   // use this ID to find the file in some known locations in the filesystem.
   std::vector<char> build_id = get_build_id(elf);
-  if (!build_id.empty()) {
+  if (not build_id.empty()) {
     elf_end(elf);
     close(fd);
 
@@ -1317,7 +1316,7 @@ static
 simgrid::mc::Type* MC_resolve_type(
   simgrid::mc::ObjectInformation* info, unsigned type_id)
 {
-  if (!type_id)
+  if (not type_id)
     return nullptr;
   simgrid::mc::Type* type = simgrid::util::find_map_ptr(info->types, type_id);
   if (type == nullptr)
@@ -1387,11 +1386,10 @@ void postProcessObjectInformation(simgrid::mc::Process* process, simgrid::mc::Ob
         break;
 
     // Resolve full_type:
-    if (!subtype->name.empty() && subtype->byte_size == 0)
+    if (not subtype->name.empty() && subtype->byte_size == 0)
       for (auto const& object_info : process->object_infos) {
         auto i = object_info->full_types_by_name.find(subtype->name);
-        if (i != object_info->full_types_by_name.end()
-            && !i->second->name.empty() && i->second->byte_size) {
+        if (i != object_info->full_types_by_name.end() && not i->second->name.empty() && i->second->byte_size) {
           type->full_type = i->second;
           break;
         }
index d247552..3e2d8e3 100644 (file)
@@ -1,18 +1,12 @@
-/* Copyright (c) 2008-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2008-2017. 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. */
 
-#if !defined(SIMGRID_MC_DWARF_HPP)
+#ifndef SIMGRID_MC_DWARF_HPP
 #define SIMGRID_MC_DWARF_HPP
 
-#include <memory>
-
-#include <string.h>
-
-#include <xbt/base.h>
-#include <xbt/sysdep.h>
+#include "xbt/base.h"
 
 #define DW_LANG_Objc DW_LANG_ObjC       /* fix spelling error in older dwarf.h */
 #include <dwarf.h>
index a1e00e5..ce4ddd4 100644 (file)
@@ -9,7 +9,7 @@
 #include <dwarf.h>
 #include <src/mc/mc_dwarf.hpp>
 
-#include <xbt/base.h>
+#include "xbt/base.h"
 
 namespace simgrid {
 namespace dwarf  {
index cb73e9d..f19d0f4 100644 (file)
@@ -10,7 +10,7 @@
 #include <elfutils/libdw.h>
 #include "src/mc/mc_dwarf.hpp"
 
-#include <xbt/base.h>
+#include "xbt/base.h"
 
 namespace simgrid {
 namespace dwarf {
index b3140e1..8713d54 100644 (file)
@@ -12,9 +12,9 @@
 
 #include <vector>
 
-#include <xbt/dynar.h>
-#include <xbt/automaton.h>
-#include <xbt/swag.h>
+#include "xbt/automaton.h"
+#include "xbt/dynar.h"
+#include "xbt/swag.h"
 
 #include "mc_base.h"
 
@@ -31,7 +31,6 @@
 #if SIMGRID_HAVE_MC
 #include <libunwind.h>
 #include "src/mc/mc_comm_pattern.h"
-#include "src/mc/mc_ignore.h"
 #include "src/mc/mc_request.h"
 #include "src/mc/mc_safety.h"
 #include "src/mc/mc_snapshot.h"
@@ -105,7 +104,7 @@ void MC_run()
   simgrid::mc::processes_time.clear();
 }
 
-void MC_show_deadlock(void)
+void MC_show_deadlock()
 {
   XBT_INFO("**************************");
   XBT_INFO("*** DEAD-LOCK DETECTED ***");
@@ -134,7 +133,7 @@ void dumpStack(FILE* file, unw_cursor_t cursor)
 
   unw_word_t off;
   do {
-    const char * name = !unw_get_proc_name(&cursor, buffer, 100, &off) ? buffer : "?";
+    const char* name = not unw_get_proc_name(&cursor, buffer, 100, &off) ? buffer : "?";
 
     int status;
 
index 72dd93c..d537cfe 100644 (file)
@@ -8,7 +8,7 @@
 
 #include <cstdint>
 
-#include <xbt/log.h>
+#include "xbt/log.h"
 
 #include "src/mc/mc_private.h"
 #include "src/mc/mc_snapshot.h"
@@ -24,7 +24,8 @@ namespace mc {
 namespace {
 
 class djb_hash {
-  hash_type state_ = 5381ll;
+  hash_type state_ = 5381LL;
+
 public:
   template<class T>
   void update(T& x)
index 68a408a..d7af9b1 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2007-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* 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. */
@@ -7,10 +6,7 @@
 #ifndef SIMGRID_MC_HASH_HPP
 #define SIMGRID_MC_HASH_HPP
 
-#include <cstdint>
-
-#include <xbt/base.h>
-
+#include "xbt/base.h"
 #include "src/mc/mc_forward.hpp"
 
 namespace simgrid {
index cf42fd1..58f1795 100644 (file)
@@ -7,25 +7,14 @@
 #define SIMGRID_MC_IGNORE_H
 
 #include "src/internal_config.h"
-#include "xbt/dynar.h"
 
 #if HAVE_UCONTEXT_H
 #include <ucontext.h>           /* context relative declarations */
-#endif
-
 
 SG_BEGIN_DECL();
-
-XBT_PUBLIC(void) MC_ignore_heap(void *address, size_t size);
-XBT_PUBLIC(void) MC_remove_ignore_heap(void *address, size_t size);
-XBT_PUBLIC(void) MC_ignore_local_variable(const char *var_name, const char *frame);
-XBT_PUBLIC(void) MC_ignore_global_variable(const char *var_name);
-
-#if HAVE_UCONTEXT_H
 XBT_PUBLIC(void) MC_register_stack_area(void *stack, smx_actor_t process, ucontext_t* context, size_t size);
-#endif
-
-
 SG_END_DECL();
 
 #endif
+
+#endif
index 866015f..d0bb0a6 100644 (file)
@@ -22,12 +22,12 @@ extern "C" {
 /* It creates the two heap regions: std_heap and mc_heap */
 void MC_memory_init()
 {
-  if (!malloc_use_mmalloc())
+  if (not malloc_use_mmalloc())
     xbt_die("Model-checking support is not enabled: run with simgrid-mc.");
 }
 
 /* Finalize the memory subsystem */
-void MC_memory_exit(void)
+void MC_memory_exit()
 {
 }
 
index 9e2aaa5..c7d5b97 100644 (file)
@@ -6,15 +6,7 @@
 #ifndef SIMGRID_MC_MMU_H
 #define SIMGRID_MC_MMU_H
 
-#include <cstdint>
-#include <cstddef>
-
-#include <xbt/asserts.h>
-#include <xbt/base.h> // xbt_pagesize...
-#include <xbt/misc.h>
-
-#include <simgrid_config.h>
-
+#include "xbt/misc.h" // xbt_pagesize...
 
 namespace simgrid {
 namespace mc {
index a49d3e4..0bdeb53 100644 (file)
@@ -6,22 +6,8 @@
 #ifndef SIMGRID_MC_PRIVATE_H
 #define SIMGRID_MC_PRIVATE_H
 
-#include "simgrid_config.h"
-
-#include <sys/types.h>
-
-#include <stdio.h>
-
-#include <simgrid/msg.h>
-#include <xbt/config.h>
-#include <xbt/base.h>
-#include <xbt/automaton.h>
-
 #include "mc/mc.h"
-#include "mc/datatypes.h"
-#include "src/mc/mc_base.h"
-
-#include "src/simix/smx_private.h"
+#include "xbt/automaton.h"
 
 #ifdef __cplusplus
 #include "src/mc/mc_forward.hpp"
index 2881f48..62a4fa8 100644 (file)
@@ -12,8 +12,8 @@
 #include <sstream>
 #include <string>
 
-#include <xbt/log.h>
-#include <xbt/sysdep.h>
+#include "xbt/log.h"
+#include "xbt/sysdep.h"
 
 #include "simgrid/simix.h"
 
@@ -53,13 +53,12 @@ void replay(RecordTrace const& trace)
 
     // Choose a request:
     smx_actor_t process = SIMIX_process_from_PID(transition.pid);
-    if (!process)
+    if (not process)
       xbt_die("Unexpected process.");
     smx_simcall_t simcall = &(process->simcall);
-    if(!simcall || simcall->call == SIMCALL_NONE)
+    if (not simcall || simcall->call == SIMCALL_NONE)
       xbt_die("No simcall for this process.");
-    if (!simgrid::mc::request_is_visible(simcall)
-        || !simgrid::mc::request_is_enabled(simcall))
+    if (not simgrid::mc::request_is_visible(simcall) || not simgrid::mc::request_is_enabled(simcall))
       xbt_die("Unexpected simcall.");
 
     // Execute the request:
index a257770..56a3410 100644 (file)
 #ifndef SIMGRID_MC_RECORD_H
 #define SIMGRID_MC_RECORD_H
 
-#include <string>
-#include <vector>
-
-#include <xbt/base.h>
-
 #include "src/mc/Transition.hpp"
+#include "xbt/base.h"
+
+#include <vector>
 
 namespace simgrid {
 namespace mc {
index c824d44..fa295af 100644 (file)
@@ -6,7 +6,7 @@
 #ifndef SIMGRID_MC_REPLAY_H
 #define SIMGRID_MC_REPLAY_H
 
-#include <xbt/base.h>
+#include "xbt/base.h"
 
 SG_BEGIN_DECL()
 
index 1d3b8c6..06e09a4 100644 (file)
@@ -6,15 +6,8 @@
 
 #include <cassert>
 
-#include <xbt/log.h>
-#include <xbt/str.h>
-#include <xbt/sysdep.h>
-#include <xbt/dynar.h>
-#include <xbt/swag.h>
-
+#include "src/mc/ModelChecker.hpp"
 #include "src/mc/mc_request.h"
-#include "src/mc/mc_safety.h"
-#include "src/mc/mc_private.h"
 #include "src/mc/mc_smx.h"
 #include "src/mc/mc_xbt.hpp"
 
@@ -26,14 +19,13 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_request, mc,
 static char *pointer_to_string(void *pointer);
 static char *buff_size_to_string(size_t size);
 
-static inline
-simgrid::kernel::activity::Comm* MC_get_comm(smx_simcall_t r)
+static inline simgrid::kernel::activity::CommImpl* MC_get_comm(smx_simcall_t r)
 {
   switch (r->call ) {
   case SIMCALL_COMM_WAIT:
-    return static_cast<simgrid::kernel::activity::Comm*>(simcall_comm_wait__get__comm(r));
+    return static_cast<simgrid::kernel::activity::CommImpl*>(simcall_comm_wait__get__comm(r));
   case SIMCALL_COMM_TEST:
-    return static_cast<simgrid::kernel::activity::Comm*>(simcall_comm_test__get__comm(r));
+    return static_cast<simgrid::kernel::activity::CommImpl*>(simcall_comm_test__get__comm(r));
   default:
     return nullptr;
   }
@@ -67,8 +59,8 @@ bool request_depend_asymmetric(smx_simcall_t r1, smx_simcall_t r2)
 
   // Those are internal requests, we do not need indirection
   // because those objects are copies:
-  simgrid::kernel::activity::Comm* synchro1 = MC_get_comm(r1);
-  simgrid::kernel::activity::Comm* synchro2 = MC_get_comm(r2);
+  simgrid::kernel::activity::CommImpl* synchro1 = MC_get_comm(r1);
+  simgrid::kernel::activity::CommImpl* synchro2 = MC_get_comm(r2);
 
   if ((r1->call == SIMCALL_COMM_ISEND || r1->call == SIMCALL_COMM_IRECV)
       && r2->call == SIMCALL_COMM_WAIT) {
@@ -154,8 +146,8 @@ bool request_depend(smx_simcall_t r1, smx_simcall_t r2)
 
   // Those are internal requests, we do not need indirection
   // because those objects are copies:
-  simgrid::kernel::activity::Comm* synchro1 = MC_get_comm(r1);
-  simgrid::kernel::activity::Comm* synchro2 = MC_get_comm(r2);
+  simgrid::kernel::activity::CommImpl* synchro1 = MC_get_comm(r1);
+  simgrid::kernel::activity::CommImpl* synchro2 = MC_get_comm(r2);
 
   switch(r1->call) {
   case SIMCALL_COMM_ISEND:
@@ -264,8 +256,8 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid
   }
 
   case SIMCALL_COMM_WAIT: {
-    simgrid::kernel::activity::Comm* remote_act =
-      static_cast<simgrid::kernel::activity::Comm*>(simcall_comm_wait__get__comm(req));
+    simgrid::kernel::activity::CommImpl* remote_act =
+        static_cast<simgrid::kernel::activity::CommImpl*>(simcall_comm_wait__get__comm(req));
     char* p;
     if (value == -1) {
       type = "WaitTimeout";
@@ -275,11 +267,11 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid
       type = "Wait";
       p = pointer_to_string(remote_act);
 
-      simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_synchro;
-      simgrid::kernel::activity::Comm* act;
+      simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_synchro;
+      simgrid::kernel::activity::CommImpl* act;
       if (use_remote_comm) {
-        mc_model_checker->process().read(temp_synchro, remote(
-          static_cast<simgrid::kernel::activity::Comm*>(remote_act)));
+        mc_model_checker->process().read(temp_synchro,
+                                         remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_act)));
         act = temp_synchro.getBuffer();
       } else
         act = remote_act;
@@ -297,13 +289,13 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid
   }
 
   case SIMCALL_COMM_TEST: {
-    simgrid::kernel::activity::Comm* remote_act = static_cast<simgrid::kernel::activity::Comm*>(
-      simcall_comm_test__get__comm(req));
-    simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_synchro;
-    simgrid::kernel::activity::Comm* act;
+    simgrid::kernel::activity::CommImpl* remote_act =
+        static_cast<simgrid::kernel::activity::CommImpl*>(simcall_comm_test__get__comm(req));
+    simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_synchro;
+    simgrid::kernel::activity::CommImpl* act;
     if (use_remote_comm) {
-      mc_model_checker->process().read(temp_synchro, remote(
-        static_cast<simgrid::kernel::activity::Comm*>(remote_act)));
+      mc_model_checker->process().read(temp_synchro,
+                                       remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_act)));
       act = temp_synchro.getBuffer();
     } else
       act = remote_act;
@@ -332,7 +324,7 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid
     s_xbt_dynar_t comms;
     mc_model_checker->process().read_bytes(
       &comms, sizeof(comms), remote(simcall_comm_waitany__get__comms(req)));
-    if (!xbt_dynar_is_empty(&comms)) {
+    if (not xbt_dynar_is_empty(&comms)) {
       smx_activity_t remote_sync;
       read_element(mc_model_checker->process(),
         &remote_sync, remote(simcall_comm_waitany__get__comms(req)), value,
@@ -365,7 +357,7 @@ std::string simgrid::mc::request_to_string(smx_simcall_t req, int value, simgrid
     else
       type = "Mutex TRYLOCK";
 
-    simgrid::mc::Remote<simgrid::simix::Mutex> mutex;
+    simgrid::mc::Remote<simgrid::simix::MutexImpl> mutex;
     mc_model_checker->process().read_bytes(mutex.getBuffer(), sizeof(mutex),
       remote(
         req->call == SIMCALL_MUTEX_LOCK
@@ -437,10 +429,9 @@ bool request_is_enabled_by_idx(smx_simcall_t req, unsigned int idx)
     return true;
   }
 
-  simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_comm;
-  mc_model_checker->process().read(temp_comm, remote(
-    static_cast<simgrid::kernel::activity::Comm*>(remote_act)));
-  simgrid::kernel::activity::Comm* comm = temp_comm.getBuffer();
+  simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_comm;
+  mc_model_checker->process().read(temp_comm, remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_act)));
+  simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer();
   return comm->src_proc && comm->dst_proc;
 }
 
@@ -499,10 +490,10 @@ std::string request_get_dot_output(smx_simcall_t req, int value)
         label = simgrid::xbt::string_printf("[(%lu)] WaitTimeout", issuer->pid);
     } else {
       smx_activity_t remote_act = simcall_comm_wait__get__comm(req);
-      simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_comm;
-      mc_model_checker->process().read(temp_comm, remote(
-        static_cast<simgrid::kernel::activity::Comm*>(remote_act)));
-      simgrid::kernel::activity::Comm* comm = temp_comm.getBuffer();
+      simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_comm;
+      mc_model_checker->process().read(temp_comm,
+                                       remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_act)));
+      simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer();
 
       smx_actor_t src_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->src_proc));
       smx_actor_t dst_proc = mc_model_checker->process().resolveActor(simgrid::mc::remote(comm->dst_proc));
@@ -521,10 +512,9 @@ std::string request_get_dot_output(smx_simcall_t req, int value)
 
   case SIMCALL_COMM_TEST: {
     smx_activity_t remote_act = simcall_comm_test__get__comm(req);
-    simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_comm;
-    mc_model_checker->process().read(temp_comm, remote(
-      static_cast<simgrid::kernel::activity::Comm*>(remote_act)));
-    simgrid::kernel::activity::Comm* comm = temp_comm.getBuffer();
+    simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_comm;
+    mc_model_checker->process().read(temp_comm, remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_act)));
+    simgrid::kernel::activity::CommImpl* comm = temp_comm.getBuffer();
     if (comm->src_proc == nullptr || comm->dst_proc == nullptr) {
       if (issuer->host)
         label = simgrid::xbt::string_printf("[(%lu)%s] Test FALSE", issuer->pid, MC_smx_actor_get_host_name(issuer));
index 953d83e..2672208 100644 (file)
@@ -6,10 +6,6 @@
 #ifndef SIMGRID_MC_REQUEST_H
 #define SIMGRID_MC_REQUEST_H
 
-#include <string>
-
-#include <xbt/base.h>
-
 #include "src/simix/smx_private.h"
 
 namespace simgrid {
index 2aa3902..2c31b5d 100644 (file)
@@ -6,16 +6,7 @@
 #ifndef SIMGRID_MC_SAFETY_H
 #define SIMGRID_MC_SAFETY_H
 
-#include <stdint.h>
-
-#include <memory>
-
-#include <simgrid_config.h>
-
-#include <xbt/base.h>
-
-#include "src/mc/mc_forward.hpp"
-#include "src/mc/mc_state.h"
+#include "xbt/base.h"
 
 namespace simgrid {
 namespace mc {
index 85b31ed..eaa7df9 100644 (file)
@@ -192,7 +192,7 @@ const char* MC_smx_actor_get_name(smx_actor_t actor)
 }
 
 #if HAVE_SMPI
-int MC_smpi_process_count(void)
+int MC_smpi_process_count()
 {
   if (mc_model_checker == nullptr)
     return smpi_process_count();
@@ -203,7 +203,7 @@ int MC_smpi_process_count(void)
 }
 #endif
 
-unsigned long MC_smx_get_maxpid(void)
+unsigned long MC_smx_get_maxpid()
 {
   unsigned long maxpid;
   mc_model_checker->process().read_variable("simix_process_maxpid",
index 609807c..28d20b7 100644 (file)
@@ -6,17 +6,7 @@
 #ifndef SIMGRID_MC_SMX_H
 #define SIMGRID_MC_SMX_H
 
-#include <stddef.h>
-
-#include <xbt/base.h>
-#include <xbt/log.h>
-
-#include <simgrid/simix.h>
-
-#include "src/smpi/private.h"
-
 #include "src/mc/Process.hpp"
-#include "src/mc/remote/mc_protocol.h"
 
 /** @file
  *  @brief (Cross-process, MCer/MCed) Access to SMX structures
index f2c7ad6..80c0817 100644 (file)
@@ -9,8 +9,8 @@
 #include <memory>
 #include <utility>
 
-#include <xbt/asserts.h>
-#include <xbt/sysdep.h>
+#include "xbt/asserts.h"
+#include "xbt/sysdep.h"
 
 #include "src/internal_config.h"
 #include "src/smpi/private.h"
@@ -35,7 +35,7 @@ mc_mem_region_t mc_get_snapshot_region(
   size_t n = snapshot->snapshot_regions.size();
   for (size_t i = 0; i != n; ++i) {
     mc_mem_region_t region = snapshot->snapshot_regions[i].get();
-    if (!(region && region->contain(simgrid::mc::remote(addr))))
+    if (not(region && region->contain(simgrid::mc::remote(addr))))
       continue;
 
     if (region->storage_type() == simgrid::mc::StorageType::Privatized) {
@@ -132,7 +132,7 @@ int MC_snapshot_region_memcmp(
     res = 0;
   else
     res = memcmp(buffer1, buffer2, size);
-  if (!stack_alloc) {
+  if (not stack_alloc) {
     free(buffer1a);
     free(buffer2a);
   }
@@ -170,11 +170,6 @@ Snapshot::Snapshot(Process* process, int _num_state)
 
 }
 
-Snapshot::~Snapshot()
-{
-
-}
-
 const void* Snapshot::read_bytes(void* buffer, std::size_t size,
   RemotePtr<void> address, int process_index,
   ReadOptions options) const
@@ -265,15 +260,14 @@ static void test_snapshot(bool sparse_checkpoint) {
 
     xbt_test_add("Reading whole region data for %i page(s)", n);
     const void* read = MC_region_read(&region, destination, source, byte_size);
-    xbt_test_assert(!memcmp(source, read, byte_size), "Mismatch in MC_region_read()");
+    xbt_test_assert(not memcmp(source, read, byte_size), "Mismatch in MC_region_read()");
 
     xbt_test_add("Reading parts of region data for %i page(s)", n);
     for(int j=0; j!=100; ++j) {
       size_t offset = rand() % byte_size;
       size_t size = rand() % (byte_size - offset);
       const void* read = MC_region_read(&region, destination, (const char*) source+offset, size);
-      xbt_test_assert(!memcmp((char*) source+offset, read, size),
-        "Mismatch in MC_region_read()");
+      xbt_test_assert(not memcmp((char*)source + offset, read, size), "Mismatch in MC_region_read()");
     }
 
     xbt_test_add("Compare whole region data for %i page(s)", n);
@@ -285,8 +279,9 @@ static void test_snapshot(bool sparse_checkpoint) {
     for(int j=0; j!=100; ++j) {
       size_t offset = rand() % byte_size;
       size_t size = rand() % (byte_size - offset);
-      xbt_test_assert(!MC_snapshot_region_memcmp((char*) source+offset, &region, (char*) source+offset, &region, size),
-        "Mismatch in MC_snapshot_region_memcmp()");
+      xbt_test_assert(
+          not MC_snapshot_region_memcmp((char*)source + offset, &region, (char*)source + offset, &region, size),
+          "Mismatch in MC_snapshot_region_memcmp()");
     }
 
     if (n==1) {
index c217c97..a5c7c17 100644 (file)
@@ -6,27 +6,15 @@
 #ifndef SIMGRID_MC_SNAPSHOT_H
 #define SIMGRID_MC_SNAPSHOT_H
 
-#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/base.h>
-
-#include "src/mc/mc_forward.hpp"
 #include "src/mc/ModelChecker.hpp"
-#include "src/mc/PageStore.hpp"
-#include "src/mc/AddressSpace.hpp"
-#include "src/mc/mc_unw.h"
 #include "src/mc/RegionSnapshot.hpp"
+#include "src/mc/mc_forward.hpp"
+#include "src/mc/mc_unw.h"
 
 SG_BEGIN_DECL()
 
@@ -131,7 +119,7 @@ namespace mc {
 class XBT_PRIVATE Snapshot final : public AddressSpace {
 public:
   Snapshot(Process* process, int num_state);
-  ~Snapshot();
+  ~Snapshot() = default;
   const void* read_bytes(void* buffer, std::size_t size,
     RemotePtr<void> address, int process_index = ProcessIndexAny,
     ReadOptions options = ReadOptions::none()) const override;
@@ -216,11 +204,9 @@ static XBT_ALWAYS_INLINE const void* MC_region_read(mc_mem_region_t region, void
 {
   xbt_assert(region);
 
-  std::uintptr_t offset =
-    (std::uintptr_t) addr - (std::uintptr_t) region->start().address();
+  std::uintptr_t offset = (std::uintptr_t)addr - (std::uintptr_t)region->start().address();
 
-  xbt_assert(region->contain(simgrid::mc::remote(addr)),
-    "Trying to read out of the region boundary.");
+  xbt_assert(region->contain(simgrid::mc::remote(addr)), "Trying to read out of the region boundary.");
 
   switch (region->storage_type()) {
   case simgrid::mc::StorageType::NoData:
index c0b6826..e399fa2 100644 (file)
@@ -7,8 +7,8 @@
 
 #include <boost/range/algorithm.hpp>
 
-#include <xbt/log.h>
-#include <xbt/sysdep.h>
+#include "xbt/log.h"
+#include "xbt/sysdep.h"
 
 #include "src/simix/smx_private.h"
 #include "src/mc/mc_state.h"
@@ -80,9 +80,9 @@ static inline smx_simcall_t MC_state_get_request_for_process(
   state->transition.argument           = -1;
   state->executed_req.call             = SIMCALL_NONE;
 
-  if (!procstate->isTodo())
+  if (not procstate->isTodo())
     return nullptr; // Not considered by the checker algorithm
-  if (!simgrid::mc::actor_is_enabled(actor))
+  if (not simgrid::mc::actor_is_enabled(actor))
     return nullptr; // Not executable in the application
 
   smx_simcall_t req = nullptr;
@@ -129,11 +129,11 @@ static inline smx_simcall_t MC_state_get_request_for_process(
       }
 
       case SIMCALL_COMM_WAIT: {
-        simgrid::mc::RemotePtr<simgrid::kernel::activity::Comm> remote_act = remote(
-          static_cast<simgrid::kernel::activity::Comm*>(simcall_comm_wait__get__comm(&actor->simcall)));
-        simgrid::mc::Remote<simgrid::kernel::activity::Comm> temp_act;
+        simgrid::mc::RemotePtr<simgrid::kernel::activity::CommImpl> remote_act =
+            remote(static_cast<simgrid::kernel::activity::CommImpl*>(simcall_comm_wait__get__comm(&actor->simcall)));
+        simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> temp_act;
         mc_model_checker->process().read(temp_act, remote_act);
-        simgrid::kernel::activity::Comm* act = temp_act.getBuffer();
+        simgrid::kernel::activity::CommImpl* act = temp_act.getBuffer();
         if (act->src_proc && act->dst_proc)
           state->transition.argument = 0;
         else if (act->src_proc == nullptr && act->type == SIMIX_COMM_READY
@@ -162,7 +162,7 @@ static inline smx_simcall_t MC_state_get_request_for_process(
         req = &actor->simcall;
         break;
   }
-  if (!req)
+  if (not req)
     return nullptr;
 
   state->transition.pid = actor->pid;
@@ -180,8 +180,8 @@ static inline smx_simcall_t MC_state_get_request_for_process(
     read_element(mc_model_checker->process(),
       &remote_comm, remote(simcall_comm_waitany__get__comms(req)),
       state->transition.argument, sizeof(remote_comm));
-    mc_model_checker->process().read(state->internal_comm, remote(
-      static_cast<simgrid::kernel::activity::Comm*>(remote_comm)));
+    mc_model_checker->process().read(state->internal_comm,
+                                     remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_comm)));
     simcall_comm_wait__set__comm(&state->internal_req, state->internal_comm.getBuffer());
     simcall_comm_wait__set__timeout(&state->internal_req, 0);
     break;
@@ -193,8 +193,8 @@ static inline smx_simcall_t MC_state_get_request_for_process(
     if (state->transition.argument > 0) {
       smx_activity_t remote_comm = mc_model_checker->process().read(
         remote(simcall_comm_testany__get__comms(req) + state->transition.argument));
-      mc_model_checker->process().read(state->internal_comm, remote(
-        static_cast<simgrid::kernel::activity::Comm*>(remote_comm)));
+      mc_model_checker->process().read(state->internal_comm,
+                                       remote(static_cast<simgrid::kernel::activity::CommImpl*>(remote_comm)));
     }
 
     simcall_comm_test__set__comm(&state->internal_req, state->internal_comm.getBuffer());
index 68198c7..d807e28 100644 (file)
@@ -9,16 +9,6 @@
 #include <list>
 #include <memory>
 
-#include <xbt/base.h>
-#include <xbt/dynar.h>
-
-#include <simgrid_config.h>
-#include "src/simix/smx_private.h"
-#include "src/kernel/activity/SynchroIo.hpp"
-#include "src/kernel/activity/SynchroComm.hpp"
-#include "src/kernel/activity/SynchroRaw.hpp"
-#include "src/kernel/activity/SynchroSleep.hpp"
-#include "src/kernel/activity/SynchroExec.hpp"
 #include "src/mc/mc_snapshot.h"
 #include "src/mc/mc_record.h"
 #include "src/mc/Transition.hpp"
@@ -135,7 +125,7 @@ struct XBT_PRIVATE State {
   s_smx_simcall_t internal_req;
 
   /* Can be used as a copy of the remote synchro object */
-  simgrid::mc::Remote<simgrid::kernel::activity::Comm> internal_comm;
+  simgrid::mc::Remote<simgrid::kernel::activity::CommImpl> internal_comm;
 
   /** Snapshot of system state (if needed) */
   std::shared_ptr<simgrid::mc::Snapshot> system_state;
index a48ab17..f172da7 100644 (file)
@@ -154,7 +154,7 @@ int UnwindContext::access_reg(unw_addr_space_t as,
   if (write)
     return -UNW_EREADONLYREG;
   greg_t* preg = (greg_t*) get_reg(context, regnum);
-  if (!preg)
+  if (not preg)
     return -UNW_EBADREG;
   *valp = *preg;
   return 0;
@@ -192,7 +192,7 @@ int UnwindContext::get_proc_name(unw_addr_space_t as,
 {
   simgrid::mc::UnwindContext* context = (simgrid::mc::UnwindContext*) arg;
   simgrid::mc::Frame* frame = context->process_->find_function(remote(addr));
-  if (!frame)
+  if (not frame)
     return - UNW_ENOINFO;
   *offp = (unw_word_t) frame->range.begin() - addr;
 
index 945fb4f..2200b5f 100644 (file)
  *  much here.
  */
 
-#include <sys/types.h>
-
-#include <xbt/base.h>
+#include "src/mc/mc_forward.hpp"
 
 #include <libunwind.h>
-
-#include "src/mc/mc_forward.hpp"
+#include <sys/types.h>
 
 namespace simgrid {
 namespace unw {
@@ -47,10 +44,11 @@ namespace mc {
 
 class UnwindContext {
   simgrid::mc::AddressSpace* addressSpace_ = nullptr;
-  simgrid::mc::Process*      process_ = nullptr;
-  unw_context_t              unwindContext_;
+  simgrid::mc::Process* process_           = nullptr;
+  unw_context_t unwindContext_;
+
 public:
-  UnwindContext() {}
+  UnwindContext() = default;
   ~UnwindContext() { clear(); }
   void initialize(simgrid::mc::Process* process, unw_context_t* c);
   void clear();
index 00cbe6c..257ebb4 100644 (file)
@@ -10,8 +10,8 @@
 #include "src/mc/mc_xbt.hpp"
 #include "src/mc/remote/RemotePtr.hpp"
 
-#include <xbt/dynar.h>
-#include <xbt/sysdep.h>
+#include "xbt/dynar.h"
+#include "xbt/sysdep.h"
 
 namespace simgrid {
 namespace mc {
@@ -30,7 +30,7 @@ void read_element(AddressSpace const& as,
 
 std::size_t read_length(AddressSpace const& as, RemotePtr<s_xbt_dynar_t> addr)
 {
-  if (!addr)
+  if (not addr)
     return 0;
   unsigned long res;
   as.read_bytes(&res, sizeof(res),
index 14940a9..ed7ea0c 100644 (file)
@@ -7,9 +7,7 @@
 #ifndef SIMGRID_MC_XBT_HPP
 #define SIMGRID_MC_XBT_HPP
 
-#include <cstddef>
-
-#include <xbt/dynar.h>
+#include "xbt/dynar.h"
 
 #include "src/mc/AddressSpace.hpp"
 #include "src/mc/remote/RemotePtr.hpp"
index b4a8aed..602c2eb 100644 (file)
@@ -25,7 +25,6 @@
 #include "src/mc/remote/mc_protocol.h"
 
 // We won't need those once the separation MCer/MCed is complete:
-#include "src/mc/mc_ignore.h"
 #include "src/mc/mc_smx.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_client, mc, "MC client logic");
@@ -39,7 +38,7 @@ Client* Client::initialize()
 {
   // We are not in MC mode:
   // TODO, handle this more gracefully.
-  if (!std::getenv(MC_ENV_SOCKET_FD))
+  if (not std::getenv(MC_ENV_SOCKET_FD))
     return nullptr;
 
   // Do not break if we are called multiple times:
@@ -50,7 +49,7 @@ Client* Client::initialize()
 
   // Fetch socket from MC_ENV_SOCKET_FD:
   char* fd_env = std::getenv(MC_ENV_SOCKET_FD);
-  if (!fd_env)
+  if (not fd_env)
     xbt_die("No MC socket passed in the environment");
   int fd =
       xbt_str_parse_int(fd_env, bprintf("Variable %s should contain a number but contains '%%s'", MC_ENV_SOCKET_FD));
@@ -103,7 +102,7 @@ void Client::handleMessages()
       case MC_MESSAGE_DEADLOCK_CHECK: {
         // Check deadlock:
         bool deadlock = false;
-        if (!simix_global->process_list.empty()) {
+        if (not simix_global->process_list.empty()) {
           deadlock = true;
           for (auto kv : simix_global->process_list)
             if (simgrid::mc::actor_is_enabled(kv.second)) {
@@ -128,7 +127,7 @@ void Client::handleMessages()
           xbt_die("Unexpected size for SIMCALL_HANDLE");
         memcpy(&message, message_buffer, sizeof(message));
         smx_actor_t process = SIMIX_process_from_PID(message.pid);
-        if (!process)
+        if (not process)
           xbt_die("Invalid pid %lu", (unsigned long)message.pid);
         SIMIX_simcall_handle(&process->simcall, message.value);
         if (channel_.send(MC_MESSAGE_WAITING))
@@ -151,7 +150,7 @@ void Client::handleMessages()
   }
 }
 
-void Client::mainLoop(void)
+void Client::mainLoop()
 {
   while (1) {
     simgrid::mc::wait_for_requests();
index 7974601..6d2dadc 100644 (file)
@@ -56,12 +56,4 @@ public:
 }
 }
 
-SG_BEGIN_DECL()
-
-#if SIMGRID_HAVE_MC
-void MC_ignore(void* addr, std::size_t size);
-#endif
-
-SG_END_DECL()
-
 #endif
index 88effca..951b60c 100644 (file)
@@ -89,7 +89,7 @@ public:
   T* local() const { return (T*)address_; }
 
   operator bool() const { return address_; }
-  bool operator!() const { return !address_; }
+  bool operator!() const { return not address_; }
   operator RemotePtr<void>() const { return RemotePtr<void>(address_); }
   RemotePtr<T> operator+(std::uint64_t n) const { return RemotePtr<T>(address_ + n * sizeof(T)); }
   RemotePtr<T> operator-(std::uint64_t n) const { return RemotePtr<T>(address_ - n * sizeof(T)); }
index c4236de..65b69cc 100644 (file)
@@ -7,7 +7,6 @@
 #include "mc/mc.h"
 #include "src/instr/instr_private.h"
 #include "src/msg/msg_private.h"
-#include "src/mc/mc_ignore.h"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(instr_msg, instr, "MSG instrumentation");
 
index 4d9d7ef..b5d171a 100644 (file)
@@ -36,7 +36,7 @@ msg_error_t MSG_action_trace_run(char *path)
 
   msg_error_t res = MSG_main();
 
-  if (!simgrid::xbt::action_queues.empty()) {
+  if (not simgrid::xbt::action_queues.empty()) {
     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.");
 
index a75e536..3f4d543 100644 (file)
@@ -9,7 +9,6 @@
 #include "instr/instr_interface.h"
 #include "mc/mc.h"
 #include "src/msg/msg_private.h"
-#include "src/mc/mc_ignore.h"
 
 XBT_LOG_NEW_CATEGORY(msg, "All MSG categories");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_kernel, msg, "Logging specific to MSG (kernel)");
@@ -36,7 +35,7 @@ void MSG_init_nocheck(int *argc, char **argv) {
   TRACE_global_init(argc, argv);
 
   xbt_getpid = &MSG_process_self_PID;
-  if (!msg_global) {
+  if (not msg_global) {
 
     msg_global = new s_MSG_Global_t();
 
index 7d50008..3f416bc 100644 (file)
@@ -52,11 +52,12 @@ msg_error_t MSG_parallel_task_execute_with_timeout(msg_task_t task, double timeo
 
   TRACE_msg_task_execute_start(task);
 
-  xbt_assert((!simdata->compute) && !task->simdata->isused, "This task is executed somewhere else. Go fix your code!");
+  xbt_assert((not simdata->compute) && not task->simdata->isused,
+             "This task is executed somewhere else. Go fix your code!");
 
   XBT_DEBUG("Computing on %s", MSG_process_get_name(MSG_process_self()));
 
-  if (simdata->flops_amount <= 0.0 && !simdata->host_nb) {
+  if (simdata->flops_amount <= 0.0 && not simdata->host_nb) {
     TRACE_msg_task_execute_end(task);
     return MSG_OK;
   }
@@ -65,12 +66,12 @@ msg_error_t MSG_parallel_task_execute_with_timeout(msg_task_t task, double timeo
     simdata->setUsed();
 
     if (simdata->host_nb > 0) {
-      simdata->compute = static_cast<simgrid::kernel::activity::Exec*>(simcall_execution_parallel_start(
+      simdata->compute = static_cast<simgrid::kernel::activity::ExecImpl*>(simcall_execution_parallel_start(
           task->name, simdata->host_nb, simdata->host_list, simdata->flops_parallel_amount,
           simdata->bytes_parallel_amount, 1.0, -1.0, timeout));
       XBT_DEBUG("Parallel execution action created: %p", simdata->compute);
     } else {
-      simdata->compute = static_cast<simgrid::kernel::activity::Exec*>(
+      simdata->compute = static_cast<simgrid::kernel::activity::ExecImpl*>(
           simcall_execution_start(task->name, simdata->flops_amount, simdata->priority, simdata->bound));
     }
     simcall_set_category(simdata->compute, task->category);
@@ -269,6 +270,7 @@ msg_error_t MSG_task_receive_ext_bounded(msg_task_t * task, const char *alias, d
     simcall_comm_recv(MSG_process_self()->getImpl(), mailbox->getImpl(), task, nullptr, nullptr, nullptr, nullptr, timeout, rate);
     XBT_DEBUG("Got task %s from %s",(*task)->name,mailbox->name());
     (*task)->simdata->setNotUsed();
+    SIMIX_comm_unref((*task)->simdata->comm);
   }
   catch (xbt_ex& e) {
     switch (e.category) {
@@ -314,10 +316,10 @@ static inline msg_comm_t MSG_task_isend_internal(msg_task_t task, const char *al
   /* Send it by calling SIMIX network layer */
   smx_activity_t act = simcall_comm_isend(myself->getImpl(), mailbox->getImpl(), t_simdata->bytes_amount, t_simdata->rate,
                                          task, sizeof(void *), match_fun, cleanup, nullptr, match_data,detached);
-  t_simdata->comm = static_cast<simgrid::kernel::activity::Comm*>(act);
+  t_simdata->comm = static_cast<simgrid::kernel::activity::CommImpl*>(act);
 
   msg_comm_t comm = nullptr;
-  if (! detached) {
+  if (not detached) {
     comm = xbt_new0(s_msg_comm_t, 1);
     comm->task_sent = task;
     comm->task_received = nullptr;
@@ -488,6 +490,7 @@ int MSG_comm_test(msg_comm_t comm)
     if (finished && comm->task_received != nullptr) {
       /* I am the receiver */
       (*comm->task_received)->simdata->setNotUsed();
+      SIMIX_comm_unref(comm->s_comm);
     }
   }
   catch (xbt_ex& e) {
@@ -555,6 +558,7 @@ int MSG_comm_testany(xbt_dynar_t comms)
     if (status == MSG_OK && comm->task_received != nullptr) {
       /* I am the receiver */
       (*comm->task_received)->simdata->setNotUsed();
+      SIMIX_comm_unref(comm->s_comm);
     }
   }
 
@@ -583,6 +587,7 @@ msg_error_t MSG_comm_wait(msg_comm_t comm, double timeout)
 {
   try {
     simcall_comm_wait(comm->s_comm, timeout);
+    SIMIX_comm_unref(comm->s_comm);
 
     if (comm->task_received != nullptr) {
       /* I am the receiver */
@@ -667,6 +672,7 @@ int MSG_comm_waitany(xbt_dynar_t comms)
   if (comm->task_received != nullptr) {
     /* I am the receiver */
     (*comm->task_received)->simdata->setNotUsed();
+    SIMIX_comm_unref(comm->s_comm);
   }
 
   return finished_index;
@@ -705,7 +711,7 @@ msg_task_t MSG_comm_get_task(msg_comm_t comm)
  */
 void MSG_comm_copy_data_from_SIMIX(smx_activity_t synchro, void* buff, size_t buff_size)
 {
-  simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+  simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
 
   SIMIX_comm_copy_pointer_callback(comm, buff, buff_size);
 
@@ -792,8 +798,9 @@ msg_error_t MSG_task_send_with_timeout(msg_task_t task, const char *alias, doubl
                               t_simdata->rate, task, sizeof(void *), nullptr, nullptr, nullptr, task, 0);
     if (TRACE_is_enabled())
       simcall_set_category(comm, task->category);
-     t_simdata->comm = static_cast<simgrid::kernel::activity::Comm*>(comm);
-     simcall_comm_wait(comm, timeout);
+    t_simdata->comm = static_cast<simgrid::kernel::activity::CommImpl*>(comm);
+    simcall_comm_wait(comm, timeout);
+    SIMIX_comm_unref(comm);
   }
   catch (xbt_ex& e) {
     switch (e.category) {
@@ -862,9 +869,9 @@ int MSG_task_listen(const char *alias)
 int MSG_task_listen_from(const char *alias)
 {
   simgrid::s4u::MailboxPtr mbox = simgrid::s4u::Mailbox::byName(alias);
-  simgrid::kernel::activity::Comm* comm = static_cast<simgrid::kernel::activity::Comm*>(mbox->front());
+  simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(mbox->front());
 
-  if (!comm)
+  if (not comm)
     return -1;
 
   return MSG_process_get_PID( static_cast<msg_task_t>(comm->src_data)->simdata->sender );
index 702e0ab..ef67c5b 100644 (file)
@@ -3,9 +3,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 "../surf/StorageImpl.hpp"
 #include "simgrid/s4u/Host.hpp"
 #include "src/msg/msg_private.h"
-#include "src/surf/storage_interface.hpp"
 #include <numeric>
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_io, msg, "Logging specific to MSG (io)");
@@ -24,7 +24,6 @@ void __MSG_file_get_info(msg_file_t fd){
   xbt_dynar_t info = simcall_file_get_info(fd->simdata->smx_file);
   sg_size_t *psize;
 
-  fd->content_type = xbt_dynar_pop_as(info, char*);
   fd->storage_type = xbt_dynar_pop_as(info, char*);
   fd->storageId    = xbt_dynar_pop_as(info, char*);
   fd->mount_point  = xbt_dynar_pop_as(info, char*);
@@ -41,7 +40,7 @@ static int MSG_host_get_file_descriptor_id(msg_host_t host)
     priv->file_descriptor_table = new std::vector<int>(sg_storage_max_file_descriptors);
     std::iota(priv->file_descriptor_table->rbegin(), priv->file_descriptor_table->rend(), 0); // Fill with ..., 1, 0.
   }
-  xbt_assert(!priv->file_descriptor_table->empty(), "Too much files are opened! Some have to be closed.");
+  xbt_assert(not priv->file_descriptor_table->empty(), "Too much files are opened! Some have to be closed.");
   int desc = priv->file_descriptor_table->back();
   priv->file_descriptor_table->pop_back();
   return desc;
@@ -90,9 +89,8 @@ void MSG_file_dump (msg_file_t fd){
            "\t\tMount point: '%s'\n"
            "\t\tStorage Id: '%s'\n"
            "\t\tStorage Type: '%s'\n"
-           "\t\tContent Type: '%s'\n"
            "\t\tFile Descriptor Id: %d",
-           fd->fullpath, fd->size, fd->mount_point, fd->storageId, fd->storage_type, fd->content_type, fd->desc_id);
+           fd->fullpath, fd->size, fd->mount_point, fd->storageId, fd->storage_type, fd->desc_id);
 }
 
 /** \ingroup msg_file
@@ -328,7 +326,7 @@ msg_error_t MSG_file_rcopy (msg_file_t file, msg_host_t host, const char* fullpa
     strncpy(file_mount_name, fullpath, strlen(mount_name) + 1);
     file_mount_name[strlen(mount_name)] = '\0';
 
-    if (!strcmp(file_mount_name, mount_name) && strlen(mount_name) > longest_prefix_length) {
+    if (not strcmp(file_mount_name, mount_name) && strlen(mount_name) > longest_prefix_length) {
       /* The current mount name is found in the full path and is bigger than the previous*/
       longest_prefix_length = strlen(mount_name);
       storage_dest          = (msg_storage_t)xbt_lib_get_elm_or_null(storage_lib, storage_name);
index 1e39918..d83517b 100644 (file)
@@ -8,10 +8,9 @@
 
 #include "simgrid/msg.h"
 
-#include "src/kernel/activity/SynchroExec.hpp"
-#include "src/kernel/activity/SynchroComm.hpp"
-
-#include <xbt/Extendable.hpp>
+#include "src/kernel/activity/CommImpl.hpp"
+#include "src/kernel/activity/ExecImpl.hpp"
+#include "xbt/Extendable.hpp"
 
 /**************** datatypes **********************************/
 /**************************** Host Extension *********************************/
@@ -43,8 +42,8 @@ typedef struct simdata_task {
     this->isused = false;
   }
 
-  simgrid::kernel::activity::Exec *compute = nullptr; /* SIMIX modeling of computation */
-  simgrid::kernel::activity::Comm *comm = nullptr;    /* SIMIX modeling of communication */
+  simgrid::kernel::activity::ExecImpl* compute = nullptr; /* SIMIX modeling of computation */
+  simgrid::kernel::activity::CommImpl* comm = nullptr; /* SIMIX modeling of communication */
   double bytes_amount = 0.0; /* Data size */
   double flops_amount = 0.0; /* Computation size */
   msg_process_t sender = nullptr;
index f000746..eda8149 100644 (file)
@@ -140,7 +140,7 @@ msg_process_t MSG_process_create_from_stdfunc(const char* name, std::function<vo
 
   smx_actor_t process = simcall_process_create(name, std::move(code), msgExt, host, properties);
 
-  if (!process) { /* Undo everything */
+  if (not process) { /* Undo everything */
     delete msgExt;
     return nullptr;
   }
@@ -164,7 +164,7 @@ msg_process_t MSG_process_attach(const char *name, void *data, msg_host_t host,
 
   /* Let's create the process: SIMIX may decide to start it right now, even before returning the flow control to us */
   smx_actor_t process = SIMIX_process_attach(name, new simgrid::MsgActorExt(data), host->cname(), properties, nullptr);
-  if (!process)
+  if (not process)
     xbt_die("Could not attach");
   simcall_process_on_exit(process,(int_f_pvoid_pvoid_t)TRACE_msg_process_kill,process);
   return process->ciface();
index c166b5f..4ba7663 100644 (file)
@@ -187,7 +187,7 @@ void MSG_vm_start(msg_vm_t vm)
     int pm_overcommit = pm->extension<simgrid::vm::VmHostExt>()->overcommit;
     long vm_ramsize   = typedVM->getRamsize();
 
-    if (pm_ramsize && !pm_overcommit) { /* Only verify that we don't overcommit on need */
+    if (pm_ramsize && not pm_overcommit) { /* Only verify that we don't overcommit on need */
       /* Retrieve the memory occupied by the VMs on that host. Yep, we have to traverse all VMs of all hosts for that */
       long total_ramsize_of_vms = 0;
       for (simgrid::s4u::VirtualMachine* ws_vm : simgrid::vm::VirtualMachineImpl::allVms_)
@@ -268,7 +268,7 @@ static int migration_rx_fun(int argc, char *argv[])
   bool received_finalize = false;
 
   char *finalize_task_name = get_mig_task_name(ms->vm, ms->src_pm, ms->dst_pm, 3);
-  while (!received_finalize) {
+  while (not received_finalize) {
     msg_task_t task = nullptr;
     int ret         = MSG_task_recv(&task, ms->mbox);
 
@@ -361,7 +361,7 @@ static void start_dirty_page_tracking(msg_vm_t vm)
   simgrid::vm::VirtualMachineImpl* pimpl = static_cast<simgrid::s4u::VirtualMachine*>(vm)->pimpl_vm_;
 
   pimpl->dp_enabled = 1;
-  if (!pimpl->dp_objs)
+  if (not pimpl->dp_objs)
     return;
 
   char *key = nullptr;
@@ -441,7 +441,7 @@ void MSG_host_add_task(msg_host_t host, msg_task_t task)
     dp->prev_clock = MSG_get_clock();
     dp->prev_remaining = remaining;
   }
-  if (!pimpl->dp_objs)
+  if (not pimpl->dp_objs)
     pimpl->dp_objs = xbt_dict_new_homogeneous(nullptr);
   xbt_assert(xbt_dict_get_or_null(pimpl->dp_objs, key) == nullptr);
   xbt_dict_set(pimpl->dp_objs, key, dp, nullptr);
@@ -581,7 +581,7 @@ static int migration_tx_fun(int argc, char *argv[])
   start_dirty_page_tracking(ms->vm);
 
   double computed_during_stage1 = 0;
-  if (!skip_stage1) {
+  if (not skip_stage1) {
     double clock_prev_send = MSG_get_clock();
 
     try {
@@ -621,7 +621,7 @@ static int migration_tx_fun(int argc, char *argv[])
 
 
   /* Stage2: send update pages iteratively until the size of remaining states becomes smaller than threshold value. */
-  if (!skip_stage2) {
+  if (not skip_stage2) {
 
     int stage2_round = 0;
     for (;;) {
@@ -742,7 +742,7 @@ void MSG_vm_migrate(msg_vm_t vm, msg_host_t dst_pm)
     THROWF(vm_error, 0, "Cannot migrate VM '%s' from host '%s', which is offline.", vm->cname(), src_pm->cname());
   if (dst_pm->isOff())
     THROWF(vm_error, 0, "Cannot migrate VM '%s' to host '%s', which is offline.", vm->cname(), dst_pm->cname());
-  if (!MSG_vm_is_running(vm))
+  if (not MSG_vm_is_running(vm))
     THROWF(vm_error, 0, "Cannot migrate VM '%s' that is not running yet.", vm->cname());
   if (typedVm->isMigrating())
     THROWF(vm_error, 0, "Cannot migrate VM '%s' that is already migrating.", vm->cname());
index 02f74dc..a678568 100644 (file)
@@ -124,7 +124,7 @@ VirtualMachineImpl::~VirtualMachineImpl()
   /* dirty page tracking */
   unsigned int size          = xbt_dict_size(dp_objs);
   static bool already_warned = false;
-  if (size > 0 && !already_warned) {
+  if (size > 0 && not already_warned) {
     xbt_dict_cursor_t cursor = nullptr;
     xbt_dict_cursor_first(dp_objs, &cursor);
     XBT_WARN("Dirty page tracking: %u pending task(s) on a destroyed VM (first one is %s).\n"
@@ -207,8 +207,24 @@ void VirtualMachineImpl::resume()
  */
 void VirtualMachineImpl::shutdown(smx_actor_t issuer)
 {
-  if (getState() != SURF_VM_STATE_RUNNING)
-    THROWF(vm_error, 0, "Cannot shutdown VM %s: it is not running", piface_->cname());
+  if (getState() != SURF_VM_STATE_RUNNING) {
+    const char* stateName = "(unknown state)";
+    switch (getState()) {
+      case SURF_VM_STATE_CREATED:
+        stateName = "created, but not yet started";
+        break;
+      case SURF_VM_STATE_SUSPENDED:
+        stateName = "suspended";
+        break;
+      case SURF_VM_STATE_DESTROYED:
+        stateName = "destroyed";
+        break;
+      case SURF_VM_STATE_RUNNING:
+        THROW_IMPOSSIBLE;
+        break;
+    }
+    XBT_VERB("Shuting down the VM %s even if it's not running but %s", piface_->cname(), stateName);
+  }
 
   xbt_swag_t process_list = piface_->extension<simgrid::simix::Host>()->process_list;
   XBT_DEBUG("shutdown VM %s, that contains %d processes", piface_->cname(), xbt_swag_size(process_list));
index 14d524b..0adfb1b 100644 (file)
@@ -14,7 +14,7 @@ simgrid::xbt::Extension<s4u::Host, VmHostExt> VmHostExt::EXTENSION_ID;
 
 void VmHostExt::ensureVmExtInstalled()
 {
-  if (!EXTENSION_ID.valid())
+  if (not EXTENSION_ID.valid())
     EXTENSION_ID = simgrid::s4u::Host::extension_create<VmHostExt>();
 }
 }
index 4841225..010a9d8 100644 (file)
@@ -29,7 +29,7 @@ ActorPtr Actor::self()
 
 ActorPtr Actor::createActor(const char* name, s4u::Host* host, std::function<void()> code)
 {
-  smx_actor_t actor = simcall_process_create(name, std::move(code), nullptr, host, nullptr);
+  simgrid::simix::ActorImpl* actor = simcall_process_create(name, std::move(code), nullptr, host, nullptr);
   return actor->iface();
 }
 
@@ -37,7 +37,7 @@ ActorPtr Actor::createActor(const char* name, s4u::Host* host, const char* funct
 {
   simgrid::simix::ActorCodeFactory& factory = SIMIX_get_actor_code_factory(function);
   simgrid::simix::ActorCode code = factory(std::move(args));
-  smx_actor_t actor                         = simcall_process_create(name, std::move(code), nullptr, host, nullptr);
+  simgrid::simix::ActorImpl* actor          = simcall_process_create(name, std::move(code), nullptr, host, nullptr);
   return actor->iface();
 }
 
@@ -187,36 +187,40 @@ e_smx_state_t execute(double flops) {
 
 void* recv(MailboxPtr chan) {
   void *res = nullptr;
-  Comm& c = Comm::recv_init(chan);
-  c.setDstData(&res,sizeof(res));
-  c.wait();
+  CommPtr c = Comm::recv_init(chan);
+  c->setDstData(&res, sizeof(res));
+  c->wait();
   return res;
 }
 
 void send(MailboxPtr chan, void* payload, double simulatedSize)
 {
-  Comm& c = Comm::send_init(chan);
-  c.setRemains(simulatedSize);
-  c.setSrcData(payload);
-  // c.start() is optional.
-  c.wait();
+  CommPtr c = Comm::send_init(chan);
+  c->setRemains(simulatedSize);
+  c->setSrcData(payload);
+  // c->start() is optional.
+  c->wait();
 }
 
 void send(MailboxPtr chan, void* payload, double simulatedSize, double timeout)
 {
-  Comm& c = Comm::send_init(chan);
-  c.setRemains(simulatedSize);
-  c.setSrcData(payload);
-  // c.start() is optional.
-  c.wait(timeout);
+  CommPtr c = Comm::send_init(chan);
+  c->setRemains(simulatedSize);
+  c->setSrcData(payload);
+  // c->start() is optional.
+  c->wait(timeout);
 }
 
-Comm& isend(MailboxPtr chan, void* payload, double simulatedSize)
+CommPtr isend(MailboxPtr chan, void* payload, double simulatedSize)
 {
   return Comm::send_async(chan, payload, simulatedSize);
 }
+void dsend(MailboxPtr chan, void* payload, double simulatedSize)
+{
+  Comm::send_detached(chan, payload, simulatedSize);
+}
 
-Comm& irecv(MailboxPtr chan, void** data)
+CommPtr irecv(MailboxPtr chan, void** data)
 {
   return Comm::recv_async(chan, data);
 }
index 9ecedf2..4ecb4e6 100644 (file)
@@ -13,19 +13,34 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_comm,s4u_activity,"S4U asynchronous communic
 
 namespace simgrid {
 namespace s4u {
+Comm::~Comm()
+{
+  if (state_ == started && not detached_ && (pimpl_ == nullptr || pimpl_->state == SIMIX_RUNNING)) {
+    XBT_INFO("Comm %p freed before its completion. Detached: %d, State: %d", this, detached_, state_);
+    if (pimpl_ != nullptr)
+      XBT_INFO("pimpl_->state: %d", pimpl_->state);
+    else
+      XBT_INFO("pimpl_ is null");
+    xbt_backtrace_display_current();
+  }
+  if (pimpl_)
+    SIMIX_comm_unref(pimpl_);
+}
 
-s4u::Comm &Comm::send_init(s4u::MailboxPtr chan) {
-  s4u::Comm *res = new s4u::Comm();
+s4u::CommPtr Comm::send_init(s4u::MailboxPtr chan)
+{
+  CommPtr res   = CommPtr(new s4u::Comm());
   res->sender_ = SIMIX_process_self();
   res->mailbox_ = chan;
-  return *res;
+  return res;
 }
 
-s4u::Comm &Comm::recv_init(s4u::MailboxPtr chan) {
-  s4u::Comm *res = new s4u::Comm();
+s4u::CommPtr Comm::recv_init(s4u::MailboxPtr chan)
+{
+  CommPtr res    = CommPtr(new s4u::Comm());
   res->receiver_ = SIMIX_process_self();
   res->mailbox_ = chan;
-  return *res;
+  return res;
 }
 
 void Comm::setRate(double rate) {
@@ -89,7 +104,7 @@ void Comm::wait() {
 
   if (state_ == started)
     simcall_comm_wait(pimpl_, -1/*timeout*/);
-  else {// p_state == inited. Save a simcall and do directly a blocking send/recv
+  else { // state_ == inited. Save a simcall and do directly a blocking send/recv
     if (srcBuff_ != nullptr) {
       simcall_comm_send(sender_, mailbox_->getImpl(), remains_, rate_,
           srcBuff_, srcBuffSize_,
@@ -102,7 +117,6 @@ void Comm::wait() {
     }
   }
   state_ = finished;
-  delete this;
 }
 void Comm::wait(double timeout) {
   xbt_assert(state_ == started || state_ == inited);
@@ -125,25 +139,40 @@ void Comm::wait(double timeout) {
         userData_, timeout, rate_);
   }
   state_ = finished;
-  delete this;
 }
 
-s4u::Comm &Comm::send_async(MailboxPtr dest, void *data, int simulatedSize) {
-  s4u::Comm &res = s4u::Comm::send_init(dest);
-  res.setRemains(simulatedSize);
-  res.srcBuff_ = data;
-  res.srcBuffSize_ = sizeof(void*);
-  res.start();
+void Comm::send_detached(MailboxPtr dest, void* data, int simulatedSize)
+{
+  s4u::CommPtr res = CommPtr(s4u::Comm::send_init(dest));
+  res->setRemains(simulatedSize);
+  res->srcBuff_     = data;
+  res->srcBuffSize_ = sizeof(void*);
+  res->detached_    = true;
+  res->start();
+}
+s4u::CommPtr Comm::send_async(MailboxPtr dest, void* data, int simulatedSize)
+{
+  s4u::CommPtr res = CommPtr(s4u::Comm::send_init(dest));
+  res->setRemains(simulatedSize);
+  res->srcBuff_     = data;
+  res->srcBuffSize_ = sizeof(void*);
+  res->start();
   return res;
 }
 
-s4u::Comm &Comm::recv_async(MailboxPtr dest, void **data) {
-  s4u::Comm &res = s4u::Comm::recv_init(dest);
-  res.setDstData(data, sizeof(*data));
-  res.start();
+s4u::CommPtr Comm::recv_async(MailboxPtr dest, void** data)
+{
+  s4u::CommPtr res = CommPtr(s4u::Comm::recv_init(dest));
+  res->setDstData(data, sizeof(*data));
+  res->start();
   return res;
 }
 
+void Comm::cancel()
+{
+  simgrid::kernel::activity::CommImpl* commPimpl = static_cast<simgrid::kernel::activity::CommImpl*>(pimpl_);
+  commPimpl->cancel();
+}
 bool Comm::test() {
   xbt_assert(state_ == inited || state_ == started || state_ == finished);
   
@@ -156,11 +185,21 @@ bool Comm::test() {
   
   if(simcall_comm_test(pimpl_)){
     state_ = finished;
-    delete this;
     return true;
   }
   return false;
 }
 
+void intrusive_ptr_release(simgrid::s4u::Comm* c)
+{
+  if (c->refcount_.fetch_sub(1, std::memory_order_release) == 1) {
+    std::atomic_thread_fence(std::memory_order_acquire);
+    delete c;
+  }
+}
+void intrusive_ptr_add_ref(simgrid::s4u::Comm* c)
+{
+  c->refcount_.fetch_add(1, std::memory_order_relaxed);
 }
 }
+} // namespaces
index 7c1d47d..d895beb 100644 (file)
@@ -107,7 +107,7 @@ s4u::NetZone* Engine::netRoot()
 
 static s4u::NetZone* netzoneByNameRecursive(s4u::NetZone* current, const char* name)
 {
-  if(!strcmp(current->name(), name))
+  if (not strcmp(current->name(), name))
     return current;
 
   for (auto elem : *(current->children())) {
index 7846f76..c36d9ec 100644 (file)
@@ -69,7 +69,7 @@ Host::~Host()
  */
 void Host::destroy()
 {
-  if (!currentlyDestroying_) {
+  if (not currentlyDestroying_) {
     currentlyDestroying_ = true;
     onDestruction(*this);
     host_list.erase(name_);
index 2e6ad2c..2882051 100644 (file)
@@ -43,7 +43,7 @@ bool Mailbox::empty()
 
 bool Mailbox::listen()
 {
-  return !this->empty() || (pimpl_->permanent_receiver && !pimpl_->done_comm_queue.empty());
+  return not this->empty() || (pimpl_->permanent_receiver && not pimpl_->done_comm_queue.empty());
 }
 
 smx_activity_t Mailbox::front()
index ba1820b..d010801 100644 (file)
@@ -3,9 +3,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 "../surf/StorageImpl.hpp"
 #include "simgrid/s4u/Storage.hpp"
 #include "simgrid/simix.hpp"
-#include "src/surf/storage_interface.hpp"
 #include "xbt/lib.h"
 #include <unordered_map>
 
index 82071a5..cc41601 100644 (file)
@@ -109,15 +109,15 @@ typedef unsigned int flex_uint32_t;
 /* The "const" storage-class-modifier is valid. */
 #define YY_USE_CONST
 
-#else  /* ! __cplusplus */
+#else  /* ! __cplusplus */
 
 /* C99 requires __STDC__ to be defined as 1. */
 #if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif /* defined (__STDC__) */
-#endif /* ! __cplusplus */
+#endif  /* defined (__STDC__) */
+#endif  /* ! __cplusplus */
 
 #ifdef YY_USE_CONST
 #define yyconst const
@@ -215,83 +215,83 @@ extern FILE *dax_in, *dax_out;
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
-       do \
-               { \
-               /* Undo effects of setting up dax_text. */ \
+  do \
+    { \
+    /* Undo effects of setting up dax_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 dax_text again */ \
-               } \
-       while ( 0 )
+    *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 dax_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.
-        */
-       int yy_buf_size;
-
-       /* Number of characters read into yy_ch_buf, not including EOB
-        * characters.
-        */
-       int 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;
+  {
+  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.
+   */
+  int yy_buf_size;
+
+  /* Number of characters read into yy_ch_buf, not including EOB
+   * characters.
+   */
+  int 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;
+  /* Whether to try to fill the input buffer when we reach the
+   * end of it.
+   */
+  int yy_fill_buffer;
 
-       int yy_buffer_status;
+  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 dax_restart()), so that the user can continue scanning by
-        * just pointing dax_in at a new input file.
-        */
+  /* 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 dax_restart()), so that the user can continue scanning by
+   * just pointing dax_in at a new input file.
+   */
 #define YY_BUFFER_EOF_PENDING 2
 
-       };
+  };
 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
 
 /* Stack of input buffers. */
@@ -316,13 +316,13 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when dax_text is formed. */
 static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+static int yy_n_chars;    /* number of characters read into yy_ch_buf */
 yy_size_t dax_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 */
+static int yy_init = 0;    /* whether we need to initialize */
+static int yy_start = 0;  /* start state number */
 
 /* Flag which is used to allow dax_wrap()'s to do buffer switches
  * instead of setting up a fresh dax_in.  A bit of a hack ...
@@ -354,24 +354,24 @@ void dax_free (void *  );
 #define yy_new_buffer dax__create_buffer
 
 #define yy_set_interactive(is_interactive) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){ \
+  { \
+  if ( ! YY_CURRENT_BUFFER ){ \
         dax_ensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
+    YY_CURRENT_BUFFER_LVALUE =    \
             dax__create_buffer(dax_in,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-       }
+  } \
+  YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+  }
 
 #define yy_set_bol(at_bol) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){\
+  { \
+  if ( ! YY_CURRENT_BUFFER ){\
         dax_ensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
+    YY_CURRENT_BUFFER_LVALUE =    \
             dax__create_buffer(dax_in,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-       }
+  } \
+  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+  }
 
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
@@ -408,21 +408,21 @@ static void yy_fatal_error (yyconst char msg[]  );
  * corresponding action - sets up dax_text.
  */
 #define YY_DO_BEFORE_ACTION \
-       (yytext_ptr) = yy_bp; \
-       dax_leng = (size_t) (yy_cp - yy_bp); \
-       (yy_hold_char) = *yy_cp; \
-       *yy_cp = '\0'; \
-       (yy_c_buf_p) = yy_cp;
+  (yytext_ptr) = yy_bp; \
+  dax_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 140
 #define YY_END_OF_BUFFER 141
 /* 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;
-       };
+  {
+  flex_int32_t yy_verify;
+  flex_int32_t yy_nxt;
+  };
 static yyconst flex_int16_t yy_accept[775] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -1420,23 +1420,23 @@ short int dax__uses_type_isset;
 
 /* XML state. */
 #ifdef FLEX_DEBUG
-# define ENTER(state)  debug_enter(state,#state)
-# define LEAVE         debug_leave()
-# define SET(state)    debug_set(state,#state)
+# 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)
+# define ENTER(state)  (yy_push_state(state))
+# define LEAVE    (yy_pop_state())
+# define SET(state)  BEGIN(state)
 #endif
 
 /* Generic actions. */
-#define SKIP   /*skip*/
+#define SKIP  /*skip*/
 #define SUCCEED        CLEANUP; return 0
 
-#define FAIL   return fail
+#define FAIL  return fail
 static int fail(const char*, ...);
 
 enum {flexml_max_err_msg_size = 512};
@@ -1473,12 +1473,12 @@ static int inext = 1;
 static int ck_blimit()
 {
      if (bnext >= blimit) {
-        blimit += FLEXML_BUFFERSTACKSIZE + 2;
-        {
-            char *temp = (char *) realloc(dax__bufferstack, blimit);
-            assert(temp);
-            dax__bufferstack = temp;
-        }
+   blimit += FLEXML_BUFFERSTACKSIZE + 2;
+   {
+       char *temp = (char *) realloc(dax__bufferstack, blimit);
+       assert(temp);
+       dax__bufferstack = temp;
+   }
      }
      return 0;
 }
@@ -1487,12 +1487,12 @@ static int ck_blimit()
 static int ck_ilimit()
 {
      if (inext >= ilimit) {
-        ilimit += FLEXML_INDEXSTACKSIZE + 2;
-        {
-            int *temp = (int *) realloc(indexstack, ilimit);
-            assert(temp);
-            indexstack = temp;
-        }
+   ilimit += FLEXML_INDEXSTACKSIZE + 2;
+   {
+       int *temp = (int *) realloc(indexstack, ilimit);
+       assert(temp);
+       indexstack = temp;
+   }
      }
      return 0;
 }
@@ -1506,16 +1506,16 @@ static void dax__bufferliteral(char c, int* pp, const char* text)
       assert(s && e && s <= e);
       ++s;
       while (s < e) {
-        if (isspace(*s)) {
-           BUFFERPUTC(' ');
-           do ++s; while (s < e && isspace(*s));
-        } else
-          BUFFERPUTC(*s++);
+   if (isspace(*s)) {
+      BUFFERPUTC(' ');
+      do ++s; while (s < e && isspace(*s));
+   } else
+     BUFFERPUTC(*s++);
       }
    } else {
       const char *s = text;
       while (*s)
-       BUFFERPUTC(*s++);
+  BUFFERPUTC(*s++);
    }
    BUFFERDONE;
 }
@@ -1549,18 +1549,18 @@ static int popbuffer(void)
 /* 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
+ * 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. */
@@ -1715,33 +1715,33 @@ static int input (void );
  */
 #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( dax_in )) != EOF && c != '\n'; ++n ) \
-                       buf[n] = (char) c; \
-               if ( c == '\n' ) \
-                       buf[n++] = (char) c; \
-               if ( c == EOF && ferror( dax_in ) ) \
-                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
-               result = n; \
-               } \
-       else \
-               { \
-               errno=0; \
-               while ( (result = fread(buf, 1, max_size, dax_in))==0 && ferror(dax_in)) \
-                       { \
-                       if( errno != EINTR) \
-                               { \
-                               YY_FATAL_ERROR( "input in flex scanner failed" ); \
-                               break; \
-                               } \
-                       errno=0; \
-                       clearerr(dax_in); \
-                       } \
-               }\
+  if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+    { \
+    int c = '*'; \
+    size_t n; \
+    for ( n = 0; n < max_size && \
+           (c = getc( dax_in )) != EOF && c != '\n'; ++n ) \
+      buf[n] = (char) c; \
+    if ( c == '\n' ) \
+      buf[n++] = (char) c; \
+    if ( c == EOF && ferror( dax_in ) ) \
+      YY_FATAL_ERROR( "input in flex scanner failed" ); \
+    result = n; \
+    } \
+  else \
+    { \
+    errno=0; \
+    while ( (result = fread(buf, 1, max_size, dax_in))==0 && ferror(dax_in)) \
+      { \
+      if( errno != EINTR) \
+        { \
+        YY_FATAL_ERROR( "input in flex scanner failed" ); \
+        break; \
+        } \
+      errno=0; \
+      clearerr(dax_in); \
+      } \
+    }\
 \
 
 #endif
@@ -1790,43 +1790,43 @@ extern int dax_lex (void);
 #endif
 
 #define YY_RULE_SETUP \
-       YY_USER_ACTION
+  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;
+  yy_state_type yy_current_state;
+  char *yy_cp, *yy_bp;
+  int yy_act;
     
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
+  if ( !(yy_init) )
+    {
+    (yy_init) = 1;
 
 #ifdef YY_USER_INIT
-               YY_USER_INIT;
+    YY_USER_INIT;
 #endif
 
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
+    if ( ! (yy_start) )
+      (yy_start) = 1;  /* first start state */
 
-               if ( ! dax_in )
-                       dax_in = stdin;
+    if ( ! dax_in )
+      dax_in = stdin;
 
-               if ( ! dax_out )
-                       dax_out = stdout;
+    if ( ! dax_out )
+      dax_out = stdout;
 
-               if ( ! YY_CURRENT_BUFFER ) {
-                       dax_ensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               dax__create_buffer(dax_in,YY_BUF_SIZE );
-               }
+    if ( ! YY_CURRENT_BUFFER ) {
+      dax_ensure_buffer_stack ();
+      YY_CURRENT_BUFFER_LVALUE =
+        dax__create_buffer(dax_in,YY_BUF_SIZE );
+    }
 
-               dax__load_buffer_state( );
-               }
+    dax__load_buffer_state( );
+    }
 
-       {
+  {
 
  /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */
  SET(PROLOG);
@@ -1890,146 +1890,146 @@ YY_DECL
 
  /* COMMENTS and PIs: handled uniformly for efficiency. */
 
-       while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
-               {
-               yy_cp = (yy_c_buf_p);
+  while ( /*CONSTCOND*/1 )    /* loops until end-of-file is reached */
+    {
+    yy_cp = (yy_c_buf_p);
 
-               /* Support of dax_text. */
-               *yy_cp = (yy_hold_char);
+    /* Support of dax_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_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_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 >= 775 )
-                                       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] != 2135 );
+    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 >= 775 )
+          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] != 2135 );
 
 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 < dax_leng; ++yyl )
-                               if ( dax_text[yyl] == '\n' )
-                                          
+    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 < dax_leng; ++yyl )
+        if ( dax_text[yyl] == '\n' )
+             
     dax_lineno++;
 ;
-                       }
+      }
 
-do_action:     /* This label is used only to access EOF actions. */
+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;
+    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
+  YY_BREAK
 case 2:
 YY_RULE_SETUP
 ENTER(INPI);
-       YY_BREAK
+  YY_BREAK
 
 case 3:
 YY_RULE_SETUP
 LEAVE;
-       YY_BREAK
+  YY_BREAK
 case 4:
 case 5:
 case 6:
 /* rule 6 can match eol */
 YY_RULE_SETUP
 SKIP;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(INCOMMENT):
 FAIL("EOF in comment.");
-       YY_BREAK
+  YY_BREAK
 
 case 7:
 YY_RULE_SETUP
 LEAVE;
-       YY_BREAK
+  YY_BREAK
 case 8:
 case 9:
 /* rule 9 can match eol */
 YY_RULE_SETUP
 SKIP;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(INPI):
 FAIL("EOF in PI (processing instruction).");
-       YY_BREAK
+  YY_BREAK
 
 /* SPACES: skipped uniformly */
 case 10:
 /* rule 10 can match eol */
 YY_RULE_SETUP
 SKIP;
-       YY_BREAK
+  YY_BREAK
 /* PROLOG: determine root element and process it. */
 
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
 SET(ROOT_dax__adag); 
-       YY_BREAK
+  YY_BREAK
 case 12:
 /* rule 12 can match eol */
 YY_RULE_SETUP
 FAIL("Bad declaration %s.",dax_text);
-       YY_BREAK
+  YY_BREAK
 
 case 13:
 /* rule 13 can match eol */
 YY_RULE_SETUP
 SET(ROOT_dax__adag);
-       YY_BREAK
+  YY_BREAK
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
 FAIL("Bad declaration %s.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case 15:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in prolog.", dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(PROLOG):
 case YY_STATE_EOF(DOCTYPE):
 FAIL("EOF in prolog.");
-       YY_BREAK
+  YY_BREAK
 
 /* RULES DERIVED FROM DTD. */
 /* <!-- Small DTD for DAX files. -->  */
@@ -2037,7 +2037,7 @@ case 16:
 /* rule 16 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <adag> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 17:
 /* rule 17 can match eol */
 YY_RULE_SETUP
@@ -2064,114 +2064,114 @@ YY_RULE_SETUP
   dax__adag_xsi_c_schemaLocation_isset = 0;
   ENTER(AL_dax__adag); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 18:
 /* rule 18 can match eol */
 YY_RULE_SETUP
 if (dax__adag_childCount_isset != 0) {FAIL("Multiple definition of attribute childCount in <dax__adag>");} dax__adag_childCount_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_childCount);
-       YY_BREAK
+  YY_BREAK
 case 19:
 /* rule 19 can match eol */
 YY_RULE_SETUP
 if (dax__adag_childCount_isset != 0) {FAIL("Multiple definition of attribute childCount in <dax__adag>");}  dax__adag_childCount_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_childCount);
-       YY_BREAK
+  YY_BREAK
 case 20:
 /* rule 20 can match eol */
 YY_RULE_SETUP
 if (dax__adag_count_isset != 0) {FAIL("Multiple definition of attribute count in <dax__adag>");} dax__adag_count_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_count);
-       YY_BREAK
+  YY_BREAK
 case 21:
 /* rule 21 can match eol */
 YY_RULE_SETUP
 if (dax__adag_count_isset != 0) {FAIL("Multiple definition of attribute count in <dax__adag>");}  dax__adag_count_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_count);
-       YY_BREAK
+  YY_BREAK
 case 22:
 /* rule 22 can match eol */
 YY_RULE_SETUP
 if (dax__adag_fileCount_isset != 0) {FAIL("Multiple definition of attribute fileCount in <dax__adag>");} dax__adag_fileCount_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_fileCount);
-       YY_BREAK
+  YY_BREAK
 case 23:
 /* rule 23 can match eol */
 YY_RULE_SETUP
 if (dax__adag_fileCount_isset != 0) {FAIL("Multiple definition of attribute fileCount in <dax__adag>");}  dax__adag_fileCount_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_fileCount);
-       YY_BREAK
+  YY_BREAK
 case 24:
 /* rule 24 can match eol */
 YY_RULE_SETUP
 if (dax__adag_index_isset != 0) {FAIL("Multiple definition of attribute index in <dax__adag>");} dax__adag_index_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_index);
-       YY_BREAK
+  YY_BREAK
 case 25:
 /* rule 25 can match eol */
 YY_RULE_SETUP
 if (dax__adag_index_isset != 0) {FAIL("Multiple definition of attribute index in <dax__adag>");}  dax__adag_index_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_index);
-       YY_BREAK
+  YY_BREAK
 case 26:
 /* rule 26 can match eol */
 YY_RULE_SETUP
 if (dax__adag_jobCount_isset != 0) {FAIL("Multiple definition of attribute jobCount in <dax__adag>");} dax__adag_jobCount_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_jobCount);
-       YY_BREAK
+  YY_BREAK
 case 27:
 /* rule 27 can match eol */
 YY_RULE_SETUP
 if (dax__adag_jobCount_isset != 0) {FAIL("Multiple definition of attribute jobCount in <dax__adag>");}  dax__adag_jobCount_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_jobCount);
-       YY_BREAK
+  YY_BREAK
 case 28:
 /* rule 28 can match eol */
 YY_RULE_SETUP
 if (dax__adag_name_isset != 0) {FAIL("Multiple definition of attribute name in <dax__adag>");} dax__adag_name_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_name);
-       YY_BREAK
+  YY_BREAK
 case 29:
 /* rule 29 can match eol */
 YY_RULE_SETUP
 if (dax__adag_name_isset != 0) {FAIL("Multiple definition of attribute name in <dax__adag>");}  dax__adag_name_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_name);
-       YY_BREAK
+  YY_BREAK
 case 30:
 /* rule 30 can match eol */
 YY_RULE_SETUP
 if (dax__adag_version_isset != 0) {FAIL("Multiple definition of attribute version in <dax__adag>");} dax__adag_version_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_version);
-       YY_BREAK
+  YY_BREAK
 case 31:
 /* rule 31 can match eol */
 YY_RULE_SETUP
 if (dax__adag_version_isset != 0) {FAIL("Multiple definition of attribute version in <dax__adag>");}  dax__adag_version_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_version);
-       YY_BREAK
+  YY_BREAK
 case 32:
 /* rule 32 can match eol */
 YY_RULE_SETUP
 if (dax__adag_xmlns_isset != 0) {FAIL("Multiple definition of attribute xmlns in <dax__adag>");} dax__adag_xmlns_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_xmlns);
-       YY_BREAK
+  YY_BREAK
 case 33:
 /* rule 33 can match eol */
 YY_RULE_SETUP
 if (dax__adag_xmlns_isset != 0) {FAIL("Multiple definition of attribute xmlns in <dax__adag>");}  dax__adag_xmlns_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_xmlns);
-       YY_BREAK
+  YY_BREAK
 case 34:
 /* rule 34 can match eol */
 YY_RULE_SETUP
 if (dax__adag_xmlns_c_xsi_isset != 0) {FAIL("Multiple definition of attribute xmlns:xsi in <dax__adag>");} dax__adag_xmlns_c_xsi_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_xmlns_c_xsi);
-       YY_BREAK
+  YY_BREAK
 case 35:
 /* rule 35 can match eol */
 YY_RULE_SETUP
 if (dax__adag_xmlns_c_xsi_isset != 0) {FAIL("Multiple definition of attribute xmlns:xsi in <dax__adag>");}  dax__adag_xmlns_c_xsi_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_xmlns_c_xsi);
-       YY_BREAK
+  YY_BREAK
 case 36:
 /* rule 36 can match eol */
 YY_RULE_SETUP
 if (dax__adag_xsi_c_schemaLocation_isset != 0) {FAIL("Multiple definition of attribute xsi:schemaLocation in <dax__adag>");} dax__adag_xsi_c_schemaLocation_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__adag_xsi_c_schemaLocation);
-       YY_BREAK
+  YY_BREAK
 case 37:
 /* rule 37 can match eol */
 YY_RULE_SETUP
 if (dax__adag_xsi_c_schemaLocation_isset != 0) {FAIL("Multiple definition of attribute xsi:schemaLocation in <dax__adag>");}  dax__adag_xsi_c_schemaLocation_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__adag_xsi_c_schemaLocation);
-       YY_BREAK
+  YY_BREAK
 case 38:
 YY_RULE_SETUP
 {
   LEAVE; STag_dax__adag();dax__pcdata_ix = 0; ENTER(S_dax__adag);
  }
-       YY_BREAK
+  YY_BREAK
 case 39:
 YY_RULE_SETUP
 {
@@ -2180,18 +2180,18 @@ YY_RULE_SETUP
    case ROOT_dax__adag: SET(EPILOG); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 40:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of adag element.", dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 41:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `adag' element start tag.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_dax__adag):
 FAIL("EOF in attribute list of `adag' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 42:
 /* rule 42 can match eol */
@@ -2204,29 +2204,29 @@ YY_RULE_SETUP
    case ROOT_dax__adag: SET(EPILOG); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 43:
 /* rule 43 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</adag>' expected.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case 44:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</adag>' expected.",dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_dax__adag):
 case YY_STATE_EOF(S_dax__adag):
 case YY_STATE_EOF(S_dax__adag_1):
 case YY_STATE_EOF(S_dax__adag_3):
 case YY_STATE_EOF(S_dax__adag_5):
 FAIL("Premature EOF: `</adag>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 45:
 /* rule 45 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <child> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 46:
 /* rule 46 can match eol */
 YY_RULE_SETUP
@@ -2235,25 +2235,25 @@ YY_RULE_SETUP
   dax__child_ref_isset = 0;
   ENTER(AL_dax__child); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 47:
 /* rule 47 can match eol */
 YY_RULE_SETUP
 if (dax__child_ref_isset != 0) {FAIL("Multiple definition of attribute ref in <dax__child>");} dax__child_ref_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__child_ref);
-       YY_BREAK
+  YY_BREAK
 case 48:
 /* rule 48 can match eol */
 YY_RULE_SETUP
 if (dax__child_ref_isset != 0) {FAIL("Multiple definition of attribute ref in <dax__child>");}  dax__child_ref_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__child_ref);
-       YY_BREAK
+  YY_BREAK
 case 49:
 YY_RULE_SETUP
 {
   if (!AX_dax__child_ref) FAIL("Required attribute `ref' not set for `child' element.");
   LEAVE; STag_dax__child();dax__pcdata_ix = 0; ENTER(S_dax__child);
  }
-       YY_BREAK
+  YY_BREAK
 case 50:
 YY_RULE_SETUP
 {
@@ -2263,18 +2263,18 @@ YY_RULE_SETUP
    case S_dax__adag: case S_dax__adag_1: case S_dax__adag_3: case S_dax__adag_4: case S_dax__adag_5: SET(S_dax__adag_5); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 51:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of child element.", dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 52:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `child' element start tag.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_dax__child):
 FAIL("EOF in attribute list of `child' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 53:
 /* rule 53 can match eol */
@@ -2287,27 +2287,27 @@ YY_RULE_SETUP
    case S_dax__adag: case S_dax__adag_1: case S_dax__adag_3: case S_dax__adag_4: case S_dax__adag_5: SET(S_dax__adag_5); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 54:
 /* rule 54 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</child>' expected.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case 55:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</child>' expected.",dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_dax__child):
 case YY_STATE_EOF(S_dax__child):
 case YY_STATE_EOF(S_dax__child_2):
 FAIL("Premature EOF: `</child>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 56:
 /* rule 56 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <job> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 57:
 /* rule 57 can match eol */
 YY_RULE_SETUP
@@ -2326,68 +2326,68 @@ YY_RULE_SETUP
   dax__job_version_isset = 0;
   ENTER(AL_dax__job); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 58:
 /* rule 58 can match eol */
 YY_RULE_SETUP
 if (dax__job_id_isset != 0) {FAIL("Multiple definition of attribute id in <dax__job>");} dax__job_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__job_id);
-       YY_BREAK
+  YY_BREAK
 case 59:
 /* rule 59 can match eol */
 YY_RULE_SETUP
 if (dax__job_id_isset != 0) {FAIL("Multiple definition of attribute id in <dax__job>");}  dax__job_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__job_id);
-       YY_BREAK
+  YY_BREAK
 case 60:
 /* rule 60 can match eol */
 YY_RULE_SETUP
 if (dax__job_level_isset != 0) {FAIL("Multiple definition of attribute level in <dax__job>");} dax__job_level_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__job_level);
-       YY_BREAK
+  YY_BREAK
 case 61:
 /* rule 61 can match eol */
 YY_RULE_SETUP
 if (dax__job_level_isset != 0) {FAIL("Multiple definition of attribute level in <dax__job>");}  dax__job_level_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__job_level);
-       YY_BREAK
+  YY_BREAK
 case 62:
 /* rule 62 can match eol */
 YY_RULE_SETUP
 if (dax__job_name_isset != 0) {FAIL("Multiple definition of attribute name in <dax__job>");} dax__job_name_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__job_name);
-       YY_BREAK
+  YY_BREAK
 case 63:
 /* rule 63 can match eol */
 YY_RULE_SETUP
 if (dax__job_name_isset != 0) {FAIL("Multiple definition of attribute name in <dax__job>");}  dax__job_name_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__job_name);
-       YY_BREAK
+  YY_BREAK
 case 64:
 /* rule 64 can match eol */
 YY_RULE_SETUP
 if (dax__job_namespace_isset != 0) {FAIL("Multiple definition of attribute namespace in <dax__job>");} dax__job_namespace_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__job_namespace);
-       YY_BREAK
+  YY_BREAK
 case 65:
 /* rule 65 can match eol */
 YY_RULE_SETUP
 if (dax__job_namespace_isset != 0) {FAIL("Multiple definition of attribute namespace in <dax__job>");}  dax__job_namespace_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__job_namespace);
-       YY_BREAK
+  YY_BREAK
 case 66:
 /* rule 66 can match eol */
 YY_RULE_SETUP
 if (dax__job_runtime_isset != 0) {FAIL("Multiple definition of attribute runtime in <dax__job>");} dax__job_runtime_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__job_runtime);
-       YY_BREAK
+  YY_BREAK
 case 67:
 /* rule 67 can match eol */
 YY_RULE_SETUP
 if (dax__job_runtime_isset != 0) {FAIL("Multiple definition of attribute runtime in <dax__job>");}  dax__job_runtime_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__job_runtime);
-       YY_BREAK
+  YY_BREAK
 case 68:
 /* rule 68 can match eol */
 YY_RULE_SETUP
 if (dax__job_version_isset != 0) {FAIL("Multiple definition of attribute version in <dax__job>");} dax__job_version_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__job_version);
-       YY_BREAK
+  YY_BREAK
 case 69:
 /* rule 69 can match eol */
 YY_RULE_SETUP
 if (dax__job_version_isset != 0) {FAIL("Multiple definition of attribute version in <dax__job>");}  dax__job_version_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__job_version);
-       YY_BREAK
+  YY_BREAK
 case 70:
 YY_RULE_SETUP
 {
@@ -2396,7 +2396,7 @@ YY_RULE_SETUP
   if (!AX_dax__job_runtime) FAIL("Required attribute `runtime' not set for `job' element.");
   LEAVE; STag_dax__job();dax__pcdata_ix = 0; ENTER(S_dax__job);
  }
-       YY_BREAK
+  YY_BREAK
 case 71:
 YY_RULE_SETUP
 {
@@ -2408,18 +2408,18 @@ YY_RULE_SETUP
    case S_dax__adag: case S_dax__adag_2: case S_dax__adag_3: SET(S_dax__adag_3); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 72:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of job element.", dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 73:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `job' element start tag.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_dax__job):
 FAIL("EOF in attribute list of `job' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 74:
 /* rule 74 can match eol */
@@ -2432,27 +2432,27 @@ YY_RULE_SETUP
    case S_dax__adag: case S_dax__adag_2: case S_dax__adag_3: SET(S_dax__adag_3); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 75:
 /* rule 75 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</job>' expected.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case 76:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</job>' expected.",dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_dax__job):
 case YY_STATE_EOF(S_dax__job):
 case YY_STATE_EOF(S_dax__job_2):
 FAIL("Premature EOF: `</job>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 77:
 /* rule 77 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <parent> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 78:
 /* rule 78 can match eol */
 YY_RULE_SETUP
@@ -2461,25 +2461,25 @@ YY_RULE_SETUP
   dax__parent_ref_isset = 0;
   ENTER(AL_dax__parent); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 79:
 /* rule 79 can match eol */
 YY_RULE_SETUP
 if (dax__parent_ref_isset != 0) {FAIL("Multiple definition of attribute ref in <dax__parent>");} dax__parent_ref_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__parent_ref);
-       YY_BREAK
+  YY_BREAK
 case 80:
 /* rule 80 can match eol */
 YY_RULE_SETUP
 if (dax__parent_ref_isset != 0) {FAIL("Multiple definition of attribute ref in <dax__parent>");}  dax__parent_ref_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__parent_ref);
-       YY_BREAK
+  YY_BREAK
 case 81:
 YY_RULE_SETUP
 {
   if (!AX_dax__parent_ref) FAIL("Required attribute `ref' not set for `parent' element.");
   LEAVE; STag_dax__parent();dax__pcdata_ix = 0; ENTER(E_dax__parent);
  }
-       YY_BREAK
+  YY_BREAK
 case 82:
 YY_RULE_SETUP
 {
@@ -2489,18 +2489,18 @@ YY_RULE_SETUP
    case S_dax__child: case S_dax__child_1: case S_dax__child_2: SET(S_dax__child_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 83:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of parent element.", dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 84:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `parent' element start tag.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_dax__parent):
 FAIL("EOF in attribute list of `parent' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 85:
 /* rule 85 can match eol */
@@ -2513,19 +2513,19 @@ YY_RULE_SETUP
    case S_dax__child: case S_dax__child_1: case S_dax__child_2: SET(S_dax__child_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 86:
 /* rule 86 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</parent>' expected.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case 87:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</parent>' expected.",dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_dax__parent):
 FAIL("Premature EOF: `</parent>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 /* <!-- ignored -->
   * <!-- ignored -->  */
@@ -2533,7 +2533,7 @@ case 88:
 /* rule 88 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <uses> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 89:
 /* rule 89 can match eol */
 YY_RULE_SETUP
@@ -2554,94 +2554,94 @@ YY_RULE_SETUP
   dax__uses_type_isset = 0;
   ENTER(AL_dax__uses); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 90:
 /* rule 90 can match eol */
 YY_RULE_SETUP
 if (dax__uses_file_isset != 0) {FAIL("Multiple definition of attribute file in <dax__uses>");} dax__uses_file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__uses_file);
-       YY_BREAK
+  YY_BREAK
 case 91:
 /* rule 91 can match eol */
 YY_RULE_SETUP
 if (dax__uses_file_isset != 0) {FAIL("Multiple definition of attribute file in <dax__uses>");}  dax__uses_file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__uses_file);
-       YY_BREAK
+  YY_BREAK
 case 92:
 /* rule 92 can match eol */
 case 93:
 /* rule 93 can match eol */
 YY_RULE_SETUP
 A_dax__uses_link = A_dax__uses_link_input;
-       YY_BREAK
+  YY_BREAK
 case 94:
 /* rule 94 can match eol */
 case 95:
 /* rule 95 can match eol */
 YY_RULE_SETUP
 A_dax__uses_link = A_dax__uses_link_output;
-       YY_BREAK
+  YY_BREAK
 case 96:
 /* rule 96 can match eol */
 case 97:
 /* rule 97 can match eol */
 YY_RULE_SETUP
 A_dax__uses_optional = A_dax__uses_optional_false;
-       YY_BREAK
+  YY_BREAK
 case 98:
 /* rule 98 can match eol */
 case 99:
 /* rule 99 can match eol */
 YY_RULE_SETUP
 A_dax__uses_optional = A_dax__uses_optional_true;
-       YY_BREAK
+  YY_BREAK
 case 100:
 /* rule 100 can match eol */
 case 101:
 /* rule 101 can match eol */
 YY_RULE_SETUP
 A_dax__uses_register = A_dax__uses_register_false;
-       YY_BREAK
+  YY_BREAK
 case 102:
 /* rule 102 can match eol */
 case 103:
 /* rule 103 can match eol */
 YY_RULE_SETUP
 A_dax__uses_register = A_dax__uses_register_true;
-       YY_BREAK
+  YY_BREAK
 case 104:
 /* rule 104 can match eol */
 YY_RULE_SETUP
 if (dax__uses_size_isset != 0) {FAIL("Multiple definition of attribute size in <dax__uses>");} dax__uses_size_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__uses_size);
-       YY_BREAK
+  YY_BREAK
 case 105:
 /* rule 105 can match eol */
 YY_RULE_SETUP
 if (dax__uses_size_isset != 0) {FAIL("Multiple definition of attribute size in <dax__uses>");}  dax__uses_size_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__uses_size);
-       YY_BREAK
+  YY_BREAK
 case 106:
 /* rule 106 can match eol */
 case 107:
 /* rule 107 can match eol */
 YY_RULE_SETUP
 A_dax__uses_transfer = A_dax__uses_transfer_false;
-       YY_BREAK
+  YY_BREAK
 case 108:
 /* rule 108 can match eol */
 case 109:
 /* rule 109 can match eol */
 YY_RULE_SETUP
 A_dax__uses_transfer = A_dax__uses_transfer_true;
-       YY_BREAK
+  YY_BREAK
 case 110:
 /* rule 110 can match eol */
 YY_RULE_SETUP
 if (dax__uses_type_isset != 0) {FAIL("Multiple definition of attribute type in <dax__uses>");} dax__uses_type_isset = 1; ENTER(VALUE1); BUFFERSET(AX_dax__uses_type);
-       YY_BREAK
+  YY_BREAK
 case 111:
 /* rule 111 can match eol */
 YY_RULE_SETUP
 if (dax__uses_type_isset != 0) {FAIL("Multiple definition of attribute type in <dax__uses>");}  dax__uses_type_isset = 1; ENTER(VALUE2); BUFFERSET(AX_dax__uses_type);
-       YY_BREAK
+  YY_BREAK
 case 112:
 YY_RULE_SETUP
 {
@@ -2649,7 +2649,7 @@ YY_RULE_SETUP
   if (!AX_dax__uses_size) FAIL("Required attribute `size' not set for `uses' element.");
   LEAVE; STag_dax__uses();dax__pcdata_ix = 0; ENTER(E_dax__uses);
  }
-       YY_BREAK
+  YY_BREAK
 case 113:
 YY_RULE_SETUP
 {
@@ -2660,18 +2660,18 @@ YY_RULE_SETUP
    case S_dax__job: case S_dax__job_1: case S_dax__job_2: SET(S_dax__job_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 114:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of uses element.", dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 115:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `uses' element start tag.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_dax__uses):
 FAIL("EOF in attribute list of `uses' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 116:
 /* rule 116 can match eol */
@@ -2684,29 +2684,29 @@ YY_RULE_SETUP
    case S_dax__job: case S_dax__job_1: case S_dax__job_2: SET(S_dax__job_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 117:
 /* rule 117 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</uses>' expected.",dax_text);
-       YY_BREAK
+  YY_BREAK
 case 118:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</uses>' expected.",dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_dax__uses):
 FAIL("Premature EOF: `</uses>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 /* EPILOG: after the root element. */
 
 case 119:
 YY_RULE_SETUP
 {SET(PROLOG); yyless(0); CLEANUP; return -1;}
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(EPILOG):
 SUCCEED;
-       YY_BREAK
+  YY_BREAK
 
 /* CHARACTER DATA. */
 
@@ -2714,32 +2714,32 @@ SUCCEED;
 case 120:
 YY_RULE_SETUP
 BUFFERPUTC('&');
-       YY_BREAK
+  YY_BREAK
 case 121:
 YY_RULE_SETUP
 BUFFERPUTC('<');
-       YY_BREAK
+  YY_BREAK
 case 122:
 YY_RULE_SETUP
 BUFFERPUTC('>');
-       YY_BREAK
+  YY_BREAK
 case 123:
 YY_RULE_SETUP
 BUFFERPUTC('\'');
-       YY_BREAK
+  YY_BREAK
 case 124:
 YY_RULE_SETUP
 BUFFERPUTC('"');
-       YY_BREAK
+  YY_BREAK
 /* Character entities. */
 case 125:
 YY_RULE_SETUP
 BUFFERPUTC((unsigned char)atoi(dax_text+2));
-       YY_BREAK
+  YY_BREAK
 case 126:
 YY_RULE_SETUP
 BUFFERPUTC((unsigned char)strtol(dax_text+3,NULL,16));
-       YY_BREAK
+  YY_BREAK
 
 case 127:
 /* rule 127 can match eol */
@@ -2751,55 +2751,55 @@ case 130:
 /* rule 130 can match eol */
 YY_RULE_SETUP
 BUFFERPUTC('\n');
-       YY_BREAK
+  YY_BREAK
 
 case 131:
 YY_RULE_SETUP
 ENTER(CDATA);
-       YY_BREAK
+  YY_BREAK
 case 132:
 YY_RULE_SETUP
 FAIL("Unexpected `]""]>' in character data.");
-       YY_BREAK
+  YY_BREAK
 
 case 133:
 YY_RULE_SETUP
 BUFFERDONE; LEAVE;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(VALUE1):
 FAIL("EOF in literal (\"'\" expected).");
-       YY_BREAK
+  YY_BREAK
 
 case 134:
 YY_RULE_SETUP
 BUFFERDONE; LEAVE;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(VALUE2):
 FAIL("EOF in literal (`\"' expected).");
-       YY_BREAK
+  YY_BREAK
 
 case 135:
 /* rule 135 can match eol */
 YY_RULE_SETUP
 BUFFERPUTC(dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 136:
 YY_RULE_SETUP
 FAIL("Spurious `%c' in character data.",dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 
 case 137:
 YY_RULE_SETUP
 LEAVE;
-       YY_BREAK
-/* "]""]"              BUFFERPUTC(dax_text[0]); BUFFERPUTC(dax_text[1]); */
+  YY_BREAK
+/* "]""]"    BUFFERPUTC(dax_text[0]); BUFFERPUTC(dax_text[1]); */
 case 138:
 YY_RULE_SETUP
 BUFFERPUTC(dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(CDATA):
 FAIL("EOF in CDATA section.");
-       YY_BREAK
+  YY_BREAK
 
 /* Impossible rules to avoid warnings from flex(1). */
 /* Ideally, this should be replaced by code in flexml.pl that
@@ -2809,12 +2809,12 @@ case 139:
 /* rule 139 can match eol */
 YY_RULE_SETUP
 FAIL("Syntax error on character `%c'.", dax_text[0]);
-       YY_BREAK
+  YY_BREAK
 
 case 140:
 YY_RULE_SETUP
 ECHO;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(ROOT_dax__adag):
 case YY_STATE_EOF(S_dax__adag_2):
@@ -2822,332 +2822,332 @@ case YY_STATE_EOF(S_dax__adag_4):
 case YY_STATE_EOF(S_dax__child_1):
 case YY_STATE_EOF(S_dax__job_1):
 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 dax_in at a new source and called
-                        * dax_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 = dax_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 ( dax_wrap( ) )
-                                       {
-                                       /* Note: because we've taken care in
-                                        * yy_get_next_buffer() to have set up
-                                        * dax_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 */
+  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 dax_in at a new source and called
+       * dax_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 = dax_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 ( dax_wrap( ) )
+          {
+          /* Note: because we've taken care in
+           * yy_get_next_buffer() to have set up
+           * dax_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 dax_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
+ *  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);
-       yy_size_t 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 = (yy_size_t) ((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. */
-                                       dax_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;
-                       dax_restart(dax_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 ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-               /* Extend the array by 50%, plus the number we really need. */
-               int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) dax_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];
+      char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+  char *source = (yytext_ptr);
+  yy_size_t 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 = (yy_size_t) ((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. */
+          dax_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);
+    }
 
-       return ret_val;
+  if ( (yy_n_chars) == 0 )
+    {
+    if ( number_to_move == YY_MORE_ADJ )
+      {
+      ret_val = EOB_ACT_END_OF_FILE;
+      dax_restart(dax_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 ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+    /* Extend the array by 50%, plus the number we really need. */
+    int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+    YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) dax_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_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 >= 775 )
-                               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_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 >= 775 )
+        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 );
+ *  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 >= 775 )
-                       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 == 774);
-
-               return yy_is_jam ? 0 : 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 >= 775 )
+      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 == 774);
+
+    return yy_is_jam ? 0 : yy_current_state;
 }
 
 #ifndef YY_NO_UNPUT
@@ -3162,76 +3162,76 @@ static int yy_get_next_buffer (void)
 #endif
 
 {
-       int c;
+  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. */
-                                       dax_restart(dax_in );
-
-                                       /*FALLTHROUGH*/
-
-                               case EOB_ACT_END_OF_FILE:
-                                       {
-                                       if ( dax_wrap( ) )
-                                               return EOF;
-
-                                       if ( ! (yy_did_buffer_switch_on_eof) )
-                                               YY_NEW_FILE;
+  *(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. */
+          dax_restart(dax_in );
+
+          /*FALLTHROUGH*/
+
+        case EOB_ACT_END_OF_FILE:
+          {
+          if ( dax_wrap( ) )
+            return EOF;
+
+          if ( ! (yy_did_buffer_switch_on_eof) )
+            YY_NEW_FILE;
 #ifdef __cplusplus
-                                       return yyinput();
+          return yyinput();
 #else
-                                       return input();
+          return input();
 #endif
-                                       }
+          }
 
-                               case EOB_ACT_CONTINUE_SCAN:
-                                       (yy_c_buf_p) = (yytext_ptr) + offset;
-                                       break;
-                               }
-                       }
-               }
+        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 dax_text */
-       (yy_hold_char) = *++(yy_c_buf_p);
+  c = *(unsigned char *) (yy_c_buf_p);  /* cast for 8-bit char's */
+  *(yy_c_buf_p) = '\0';  /* preserve dax_text */
+  (yy_hold_char) = *++(yy_c_buf_p);
 
-       if ( c == '\n' )
-                  
+  if ( c == '\n' )
+       
     dax_lineno++;
 ;
 
-       return c;
+  return c;
 }
-#endif /* ifndef YY_NO_INPUT */
+#endif  /* ifndef YY_NO_INPUT */
 
 /** Immediately switch to a different input stream.
  * @param input_file A readable stream.
@@ -3241,14 +3241,14 @@ static int yy_get_next_buffer (void)
     void dax_restart  (FILE * input_file )
 {
     
-       if ( ! YY_CURRENT_BUFFER ){
+  if ( ! YY_CURRENT_BUFFER ){
         dax_ensure_buffer_stack ();
-               YY_CURRENT_BUFFER_LVALUE =
+    YY_CURRENT_BUFFER_LVALUE =
             dax__create_buffer(dax_in,YY_BUF_SIZE );
-       }
+  }
 
-       dax__init_buffer(YY_CURRENT_BUFFER,input_file );
-       dax__load_buffer_state( );
+  dax__init_buffer(YY_CURRENT_BUFFER,input_file );
+  dax__load_buffer_state( );
 }
 
 /** Switch to a different input buffer.
@@ -3258,40 +3258,40 @@ static int yy_get_next_buffer (void)
     void dax__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 {
     
-       /* TODO. We should be able to replace this entire function body
-        * with
-        *              dax_pop_buffer_state();
-        *              dax_push_buffer_state(new_buffer);
+  /* TODO. We should be able to replace this entire function body
+   * with
+   *    dax_pop_buffer_state();
+   *    dax_push_buffer_state(new_buffer);
      */
-       dax_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;
-       dax__load_buffer_state( );
-
-       /* We don't actually know whether we did this switch during
-        * EOF (dax_wrap()) processing, but the only time this flag
-        * is looked at is after dax_wrap() is called, so it's safe
-        * to go ahead and always set it.
-        */
-       (yy_did_buffer_switch_on_eof) = 1;
+  dax_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;
+  dax__load_buffer_state( );
+
+  /* We don't actually know whether we did this switch during
+   * EOF (dax_wrap()) processing, but the only time this flag
+   * is looked at is after dax_wrap() is called, so it's safe
+   * to go ahead and always set it.
+   */
+  (yy_did_buffer_switch_on_eof) = 1;
 }
 
 static void dax__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;
-       dax_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-       (yy_hold_char) = *(yy_c_buf_p);
+      (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+  (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+  dax_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+  (yy_hold_char) = *(yy_c_buf_p);
 }
 
 /** Allocate and initialize an input buffer state.
@@ -3302,26 +3302,26 @@ static void dax__load_buffer_state  (void)
  */
     YY_BUFFER_STATE dax__create_buffer  (FILE * file, int  size )
 {
-       YY_BUFFER_STATE b;
+  YY_BUFFER_STATE b;
     
-       b = (YY_BUFFER_STATE) dax_alloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in dax__create_buffer()" );
+  b = (YY_BUFFER_STATE) dax_alloc(sizeof( struct yy_buffer_state )  );
+  if ( ! b )
+    YY_FATAL_ERROR( "out of dynamic memory in dax__create_buffer()" );
 
-       b->yy_buf_size = (yy_size_t)size;
+  b->yy_buf_size = (yy_size_t)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 *) dax_alloc(b->yy_buf_size + 2  );
-       if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in dax__create_buffer()" );
+  /* 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 *) dax_alloc(b->yy_buf_size + 2  );
+  if ( ! b->yy_ch_buf )
+    YY_FATAL_ERROR( "out of dynamic memory in dax__create_buffer()" );
 
-       b->yy_is_our_buffer = 1;
+  b->yy_is_our_buffer = 1;
 
-       dax__init_buffer(b,file );
+  dax__init_buffer(b,file );
 
-       return b;
+  return b;
 }
 
 /** Destroy the buffer.
@@ -3331,16 +3331,16 @@ static void dax__load_buffer_state  (void)
     void dax__delete_buffer (YY_BUFFER_STATE  b )
 {
     
-       if ( ! b )
-               return;
+  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_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+    YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
-       if ( b->yy_is_our_buffer )
-               dax_free((void *) b->yy_ch_buf  );
+  if ( b->yy_is_our_buffer )
+    dax_free((void *) b->yy_ch_buf  );
 
-       dax_free((void *) b  );
+  dax_free((void *) b  );
 }
 
 /* Initializes or reinitializes a buffer.
@@ -3350,12 +3350,12 @@ static void dax__load_buffer_state  (void)
     static void dax__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 
 {
-       int oerrno = errno;
+  int oerrno = errno;
     
-       dax__flush_buffer(b );
+  dax__flush_buffer(b );
 
-       b->yy_input_file = file;
-       b->yy_fill_buffer = 1;
+  b->yy_input_file = file;
+  b->yy_fill_buffer = 1;
 
     /* If b is the current buffer, then dax__init_buffer was _probably_
      * called from dax_restart() or through yy_get_next_buffer.
@@ -3368,7 +3368,7 @@ static void dax__load_buffer_state  (void)
 
         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
     
-       errno = oerrno;
+  errno = oerrno;
 }
 
 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
@@ -3377,25 +3377,25 @@ static void dax__load_buffer_state  (void)
  */
     void dax__flush_buffer (YY_BUFFER_STATE  b )
 {
-       if ( ! b )
-               return;
+      if ( ! b )
+    return;
 
-       b->yy_n_chars = 0;
+  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;
+  /* 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_buf_pos = &b->yy_ch_buf[0];
 
-       b->yy_at_bol = 1;
-       b->yy_buffer_status = YY_BUFFER_NEW;
+  b->yy_at_bol = 1;
+  b->yy_buffer_status = YY_BUFFER_NEW;
 
-       if ( b == YY_CURRENT_BUFFER )
-               dax__load_buffer_state( );
+  if ( b == YY_CURRENT_BUFFER )
+    dax__load_buffer_state( );
 }
 
 /** Pushes the new state onto the stack. The new state becomes
@@ -3406,28 +3406,28 @@ static void dax__load_buffer_state  (void)
  */
 void dax_push_buffer_state (YY_BUFFER_STATE new_buffer )
 {
-       if (new_buffer == NULL)
-               return;
+      if (new_buffer == NULL)
+    return;
 
-       dax_ensure_buffer_stack();
+  dax_ensure_buffer_stack();
 
-       /* This block is copied from dax__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);
-               }
+  /* This block is copied from dax__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;
+  /* Only push if top exists. Otherwise, replace top. */
+  if (YY_CURRENT_BUFFER)
+    (yy_buffer_stack_top)++;
+  YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-       /* copied from dax__switch_to_buffer. */
-       dax__load_buffer_state( );
-       (yy_did_buffer_switch_on_eof) = 1;
+  /* copied from dax__switch_to_buffer. */
+  dax__load_buffer_state( );
+  (yy_did_buffer_switch_on_eof) = 1;
 }
 
 /** Removes and deletes the top of the stack, if present.
@@ -3436,18 +3436,18 @@ void dax_push_buffer_state (YY_BUFFER_STATE new_buffer )
  */
 void dax_pop_buffer_state (void)
 {
-       if (!YY_CURRENT_BUFFER)
-               return;
+      if (!YY_CURRENT_BUFFER)
+    return;
 
-       dax__delete_buffer(YY_CURRENT_BUFFER );
-       YY_CURRENT_BUFFER_LVALUE = NULL;
-       if ((yy_buffer_stack_top) > 0)
-               --(yy_buffer_stack_top);
+  dax__delete_buffer(YY_CURRENT_BUFFER );
+  YY_CURRENT_BUFFER_LVALUE = NULL;
+  if ((yy_buffer_stack_top) > 0)
+    --(yy_buffer_stack_top);
 
-       if (YY_CURRENT_BUFFER) {
-               dax__load_buffer_state( );
-               (yy_did_buffer_switch_on_eof) = 1;
-       }
+  if (YY_CURRENT_BUFFER) {
+    dax__load_buffer_state( );
+    (yy_did_buffer_switch_on_eof) = 1;
+  }
 }
 
 /* Allocates the stack if it does not exist.
@@ -3455,45 +3455,45 @@ void dax_pop_buffer_state (void)
  */
 static void dax_ensure_buffer_stack (void)
 {
-       yy_size_t num_to_alloc;
+  yy_size_t num_to_alloc;
     
-       if (!(yy_buffer_stack)) {
+  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.
+    /* 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; /* After all that talk, this was set to 1 anyways... */
-               (yy_buffer_stack) = (struct yy_buffer_state**)dax_alloc
-                                                               (num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                               );
-               if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in dax_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. */
-               yy_size_t grow_size = 8 /* arbitrary grow size */;
-
-               num_to_alloc = (yy_buffer_stack_max) + grow_size;
-               (yy_buffer_stack) = (struct yy_buffer_state**)dax_realloc
-                                                               ((yy_buffer_stack),
-                                                               num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                               );
-               if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in dax_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;
-       }
+    num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+    (yy_buffer_stack) = (struct yy_buffer_state**)dax_alloc
+                (num_to_alloc * sizeof(struct yy_buffer_state*)
+                );
+    if ( ! (yy_buffer_stack) )
+      YY_FATAL_ERROR( "out of dynamic memory in dax_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. */
+    yy_size_t grow_size = 8 /* arbitrary grow size */;
+
+    num_to_alloc = (yy_buffer_stack_max) + grow_size;
+    (yy_buffer_stack) = (struct yy_buffer_state**)dax_realloc
+                ((yy_buffer_stack),
+                num_to_alloc * sizeof(struct yy_buffer_state*)
+                );
+    if ( ! (yy_buffer_stack) )
+      YY_FATAL_ERROR( "out of dynamic memory in dax_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.
@@ -3504,31 +3504,31 @@ static void dax_ensure_buffer_stack (void)
  */
 YY_BUFFER_STATE dax__scan_buffer  (char * base, yy_size_t  size )
 {
-       YY_BUFFER_STATE b;
+  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) dax_alloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in dax__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;
-
-       dax__switch_to_buffer(b  );
-
-       return 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) dax_alloc(sizeof( struct yy_buffer_state )  );
+  if ( ! b )
+    YY_FATAL_ERROR( "out of dynamic memory in dax__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;
+
+  dax__switch_to_buffer(b  );
+
+  return b;
 }
 
 /** Setup the input buffer state to scan a string. The next call to dax_lex() will
@@ -3542,7 +3542,7 @@ YY_BUFFER_STATE dax__scan_buffer  (char * base, yy_size_t  size )
 YY_BUFFER_STATE dax__scan_string (yyconst char * yystr )
 {
     
-       return dax__scan_bytes(yystr,strlen(yystr) );
+  return dax__scan_bytes(yystr,strlen(yystr) );
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to dax_lex() will
@@ -3554,64 +3554,64 @@ YY_BUFFER_STATE dax__scan_string (yyconst char * yystr )
  */
 YY_BUFFER_STATE dax__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
-       YY_BUFFER_STATE b;
-       char *buf;
-       yy_size_t n;
-       yy_size_t i;
+  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 *) dax_alloc(n  );
-       if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in dax__scan_bytes()" );
+  /* Get memory for full buffer, including space for trailing EOB's. */
+  n = _yybytes_len + 2;
+  buf = (char *) dax_alloc(n  );
+  if ( ! buf )
+    YY_FATAL_ERROR( "out of dynamic memory in dax__scan_bytes()" );
 
-       for ( i = 0; i < _yybytes_len; ++i )
-               buf[i] = yybytes[i];
+  for ( i = 0; i < _yybytes_len; ++i )
+    buf[i] = yybytes[i];
 
-       buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+  buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-       b = dax__scan_buffer(buf,n );
-       if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in dax__scan_bytes()" );
+  b = dax__scan_buffer(buf,n );
+  if ( ! b )
+    YY_FATAL_ERROR( "bad buffer in dax__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;
+  /* 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;
+  return b;
 }
 
     static void yy_push_state (int  _new_state )
 {
-       if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
-               {
-               yy_size_t new_size;
+      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 );
+    (yy_start_stack_depth) += YY_START_STACK_INCR;
+    new_size = (yy_start_stack_depth) * sizeof( int );
 
-               if ( ! (yy_start_stack) )
-                       (yy_start_stack) = (int *) dax_alloc(new_size  );
+    if ( ! (yy_start_stack) )
+      (yy_start_stack) = (int *) dax_alloc(new_size  );
 
-               else
-                       (yy_start_stack) = (int *) dax_realloc((void *) (yy_start_stack),new_size  );
+    else
+      (yy_start_stack) = (int *) dax_realloc((void *) (yy_start_stack),new_size  );
 
-               if ( ! (yy_start_stack) )
-                       YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
-               }
+    if ( ! (yy_start_stack) )
+      YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+    }
 
-       (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
+  (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
 
-       BEGIN(_new_state);
+  BEGIN(_new_state);
 }
 
     static void yy_pop_state  (void)
 {
-       if ( --(yy_start_stack_ptr) < 0 )
-               YY_FATAL_ERROR( "start-condition stack underflow" );
+      if ( --(yy_start_stack_ptr) < 0 )
+    YY_FATAL_ERROR( "start-condition stack underflow" );
 
-       BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
+  BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
 }
 
 #ifndef YY_EXIT_FAILURE
@@ -3620,26 +3620,26 @@ YY_BUFFER_STATE dax__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_le
 
 static void yy_fatal_error (yyconst char* msg )
 {
-                       (void) fprintf( stderr, "%s\n", msg );
-       exit( YY_EXIT_FAILURE );
+      (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 dax_text. */ \
+  do \
+    { \
+    /* Undo effects of setting up dax_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-               dax_text[dax_leng] = (yy_hold_char); \
-               (yy_c_buf_p) = dax_text + yyless_macro_arg; \
-               (yy_hold_char) = *(yy_c_buf_p); \
-               *(yy_c_buf_p) = '\0'; \
-               dax_leng = yyless_macro_arg; \
-               } \
-       while ( 0 )
+    dax_text[dax_leng] = (yy_hold_char); \
+    (yy_c_buf_p) = dax_text + yyless_macro_arg; \
+    (yy_hold_char) = *(yy_c_buf_p); \
+    *(yy_c_buf_p) = '\0'; \
+    dax_leng = yyless_macro_arg; \
+    } \
+  while ( 0 )
 
 /* Accessor  methods (get/set functions) to struct members. */
 
@@ -3761,15 +3761,15 @@ int dax_lex_destroy  (void)
 {
     
     /* Pop the buffer stack, destroying each element. */
-       while(YY_CURRENT_BUFFER){
-               dax__delete_buffer(YY_CURRENT_BUFFER  );
-               YY_CURRENT_BUFFER_LVALUE = NULL;
-               dax_pop_buffer_state();
-       }
+  while(YY_CURRENT_BUFFER){
+    dax__delete_buffer(YY_CURRENT_BUFFER  );
+    YY_CURRENT_BUFFER_LVALUE = NULL;
+    dax_pop_buffer_state();
+  }
 
-       /* Destroy the stack itself. */
-       dax_free((yy_buffer_stack) );
-       (yy_buffer_stack) = NULL;
+  /* Destroy the stack itself. */
+  dax_free((yy_buffer_stack) );
+  (yy_buffer_stack) = NULL;
 
     /* Destroy the start condition stack. */
         dax_free((yy_start_stack)  );
@@ -3789,45 +3789,45 @@ int dax_lex_destroy  (void)
 #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];
+    
+  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 )
-               ;
+  int n;
+  for ( n = 0; s[n]; ++n )
+    ;
 
-       return n;
+  return n;
 }
 #endif
 
 void *dax_alloc (yy_size_t  size )
 {
-                       return (void *) malloc( size );
+      return (void *) malloc( size );
 }
 
 void *dax_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 );
+    
+  /* 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 dax_free (void * ptr )
 {
-                       free( (char *) ptr );   /* see dax_realloc() for (char *) cast */
+      free( (char *) ptr );  /* see dax_realloc() for (char *) cast */
 }
 
 #define YYTABLES_NAME "yytables"
@@ -3836,8 +3836,8 @@ void dax_free (void * ptr )
 int dax__element_context(int i)
 {
   return (0<i && i<yy_start_stack_depth
-         ? yy_start_stack[yy_start_stack_ptr - i]
-         : 0);
+    ? yy_start_stack[yy_start_stack_ptr - i]
+    : 0);
 }
 
 #ifdef FLEX_DEBUG
@@ -3876,7 +3876,7 @@ static void debug_enter(int state, const char* statename) {
 static void debug_leave(void) {
     if (dax__flex_debug) {
         print_yy_stack("--LEAVE : ");
-       print_dax__bufferstack();
+  print_dax__bufferstack();
     }
   yy_pop_state();
 }
@@ -3891,7 +3891,7 @@ static void cleanup(void)
 {
     if (dax__statenames) {
         free(dax__statenames);
-       dax__statenames = NULL;
+  dax__statenames = NULL;
     }
     free(dax__bufferstack);
     dax__bufferstack = NULL;
@@ -3906,12 +3906,12 @@ static int fail(const char* fmt, ...)
     va_list ap; va_start(ap, fmt);
 #ifdef FLEXML_yylineno
     used = sprintf(flexml_err_msg,
-                  "Invalid XML (XML input line %d, state %d): ",
-                  dax_lineno, YY_START);
+       "Invalid XML (XML input line %d, state %d): ",
+       dax_lineno, YY_START);
 #else
     used = sprintf(flexml_err_msg,
-                  "Invalid XML (state %d): ",
-                  YY_START);
+       "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);
index 543cb63..eae376c 100644 (file)
@@ -67,7 +67,7 @@ bool acyclic_graph_detail(xbt_dynar_t dag){
         current.push_back(task);
     }
   }
-  while(!current.empty()){
+  while (not current.empty()) {
     std::vector<SD_task_t> next;
     for (auto t: current){
       //Mark task
@@ -98,16 +98,16 @@ bool acyclic_graph_detail(xbt_dynar_t dag){
     }
   }
 
-  if(!all_marked){
+  if (not all_marked) {
     XBT_VERB("there is at least one cycle in your task graph");
     xbt_dynar_foreach(dag,count,task){
       if(task->kind != SD_TASK_COMM_E2E && task->predecessors->empty() && task->inputs->empty()){
-       task->marked = 1;
-       current.push_back(task);
+        task->marked = 1;
+        current.push_back(task);
       }
     }
     //test if something has to be done for the next iteration
-    while(!current.empty()){
+    while (not current.empty()) {
       std::vector<SD_task_t> next;
       //test if the current iteration is done
       for (auto t: current){
@@ -248,7 +248,7 @@ xbt_dynar_t SD_daxload(const char *filename)
     }
   }
 
-  if (!acyclic_graph_detail(result)) {
+  if (not acyclic_graph_detail(result)) {
     char* base = xbt_basename(filename);
     XBT_ERROR("The DAX described in %s is not a DAG. It contains a cycle.", base);
     free(base);
index f74c93e..2fbb3d3 100644 (file)
@@ -99,8 +99,8 @@ xbt_dynar_t SD_dotload_generic(const char* filename, bool sequential, bool sched
         char *char_performer = agget(node, (char *) "performer");
         char *char_order = agget(node, (char *) "order");
         /* Tasks will execute on in a given "order" on a given set of "performer" hosts */
-        int performer = ((!char_performer || !strcmp(char_performer,"")) ? -1:atoi(char_performer));
-        int order = ((!char_order || !strcmp(char_order, ""))? -1:atoi(char_order));
+        int performer = ((not char_performer || not strcmp(char_performer, "")) ? -1 : atoi(char_performer));
+        int order     = ((not char_order || not strcmp(char_order, "")) ? -1 : atoi(char_order));
 
         if ((performer != -1 && order != -1) && performer < static_cast<int>(sg_host_count())) {
           /* required parameters are given and less performers than hosts are required */
@@ -219,7 +219,7 @@ xbt_dynar_t SD_dotload_generic(const char* filename, bool sequential, bool sched
         xbt_dynar_foreach(computer, i, task){
           /* add dependency between the previous and the task to avoid parallel execution */
           if(task){
-            if(previous_task && !SD_task_dependency_exists(previous_task, task))
+            if (previous_task && not SD_task_dependency_exists(previous_task, task))
               SD_task_dependency_add(nullptr, nullptr, previous_task, task);
 
             SD_task_schedulel(task, 1, workstations[atoi(computer_name)]);
@@ -239,7 +239,7 @@ xbt_dynar_t SD_dotload_generic(const char* filename, bool sequential, bool sched
 
   xbt_dict_free(&computers);
 
-  if (result && !acyclic_graph_detail(result)) {
+  if (result && not acyclic_graph_detail(result)) {
     char* base = xbt_basename(filename);
     XBT_ERROR("The DOT described in %s is not a DAG. It contains a cycle.", base);
     free(base);
index cb9f44a..f44d4ad 100644 (file)
@@ -38,13 +38,14 @@ std::set<SD_task_t>* simulate(double how_long){
   sd_global->return_set->clear();
 
   /* explore the runnable tasks */
-  while(!sd_global->runnable_tasks->empty())
+  while (not sd_global->runnable_tasks->empty())
     SD_task_run(*(sd_global->runnable_tasks->begin()));
 
   double elapsed_time = 0.0;
   double total_time = 0.0;
   /* main loop */
-  while (elapsed_time >= 0 && (how_long < 0 || 0.00001 < (how_long -total_time)) && !sd_global->watch_point_reached) {
+  while (elapsed_time >= 0 && (how_long < 0 || 0.00001 < (how_long - total_time)) &&
+         not sd_global->watch_point_reached) {
 
     XBT_DEBUG("Total time: %f", total_time);
 
@@ -78,7 +79,7 @@ std::set<SD_task_t>* simulate(double how_long){
           if (SD_task_get_state(succ) == SD_SCHEDULED && succ->predecessors->empty() && succ->inputs->empty())
             SD_task_set_state(succ, SD_RUNNABLE);
 
-          if (SD_task_get_state(succ) == SD_RUNNABLE && !sd_global->watch_point_reached)
+          if (SD_task_get_state(succ) == SD_RUNNABLE && not sd_global->watch_point_reached)
             SD_task_run(succ);
         }
         task->successors->clear();
@@ -97,7 +98,7 @@ std::set<SD_task_t>* simulate(double how_long){
                 SD_task_get_name(output), SD_task_get_name(comm_dst), comm_dst->predecessors->size());
             SD_task_set_state(comm_dst, SD_SCHEDULABLE);
           }
-          if (SD_task_get_state(output) == SD_RUNNABLE && !sd_global->watch_point_reached)
+          if (SD_task_get_state(output) == SD_RUNNABLE && not sd_global->watch_point_reached)
             SD_task_run(output);
         }
         task->outputs->clear();
@@ -116,7 +117,7 @@ std::set<SD_task_t>* simulate(double how_long){
     }
   }
 
-  if (!sd_global->watch_point_reached && how_long < 0 && !sd_global->initial_tasks->empty()) {
+  if (not sd_global->watch_point_reached && how_long < 0 && not sd_global->initial_tasks->empty()) {
     XBT_WARN("Simulation is finished but %zu tasks are still not done", sd_global->initial_tasks->size());
     for (const auto& t : *sd_global->initial_tasks)
       XBT_WARN("%s is in %s state", SD_task_get_name(t), __get_state_name(SD_task_get_state(t)));
index e6ee5cf..e57a89d 100644 (file)
@@ -166,14 +166,14 @@ void SD_task_destroy(SD_task_t task)
   XBT_DEBUG("Destroying task %s...", SD_task_get_name(task));
 
   /* First Remove all dependencies associated with the task. */
-  while (!task->predecessors->empty())
+  while (not task->predecessors->empty())
     SD_task_dependency_remove(*(task->predecessors->begin()), task);
-  while (!task->inputs->empty())
+  while (not task->inputs->empty())
     SD_task_dependency_remove(*(task->inputs->begin()), task);
-  while (!task->successors->empty())
+  while (not task->successors->empty())
     SD_task_dependency_remove(task, *(task->successors->begin()));
-  while (!task->outputs->empty())
-   SD_task_dependency_remove(task, *(task->outputs->begin()));
+  while (not task->outputs->empty())
+    SD_task_dependency_remove(task, *(task->outputs->begin()));
 
   if (task->state == SD_SCHEDULED || task->state == SD_RUNNABLE)
     __SD_task_destroy_scheduling_data(task);
@@ -911,7 +911,7 @@ void SD_task_schedulev(SD_task_t task, int count, const sg_host_t * list)
   XBT_VERB("Schedule computation task %s on %zu host(s)", task->name, task->allocation->size());
 
   if (task->kind == SD_TASK_COMP_SEQ) {
-    if (!task->flops_amount){ /*This task has failed and is rescheduled. Reset the flops_amount*/
+    if (not task->flops_amount) { /*This task has failed and is rescheduled. Reset the flops_amount*/
       task->flops_amount = xbt_new0(double, 1);
       task->flops_amount[0] = task->amount;
     }
index 919fb94..52e1ab7 100644 (file)
@@ -242,7 +242,7 @@ void sg_host_dump(sg_host_t host)
   XBT_INFO("  - available speed: %.2f", sg_host_get_available_speed(host));
   props = host->properties();
 
-  if (!xbt_dict_is_empty(props)){
+  if (not xbt_dict_is_empty(props)) {
     XBT_INFO("  - properties:");
     xbt_dict_cursor_t cursor = nullptr;
     char* key;
index 729f1ee..8aa0849 100644 (file)
@@ -49,16 +49,16 @@ static void sg_config_cmd_line(int *argc, char **argv)
   int j;
 
   for (j = i = 1; i < *argc; i++) {
-    if (!strncmp(argv[i], "--cfg=", strlen("--cfg="))) {
+    if (not strncmp(argv[i], "--cfg=", strlen("--cfg="))) {
       char *opt = strchr(argv[i], '=');
       opt++;
 
       xbt_cfg_set_parse(opt);
       XBT_DEBUG("Did apply '%s' as config setting", opt);
-    } else if (!strcmp(argv[i], "--version")) {
+    } else if (not strcmp(argv[i], "--version")) {
       printf("%s\n", SIMGRID_VERSION_STRING);
       shall_exit = 1;
-    } else if (!strcmp(argv[i], "--cfg-help") || !strcmp(argv[i], "--help")) {
+    } else if (not strcmp(argv[i], "--cfg-help") || not strcmp(argv[i], "--help")) {
       printf("Description of the configuration accepted by this simulator:\n");
       xbt_cfg_help();
       printf(
@@ -76,12 +76,12 @@ static void sg_config_cmd_line(int *argc, char **argv)
           "\n"
         );
       shall_exit = 1;
-    } else if (!strcmp(argv[i], "--help-aliases")) {
+    } else if (not strcmp(argv[i], "--help-aliases")) {
       printf("Here is a list of all deprecated option names, with their replacement.\n");
       xbt_cfg_aliases();
       printf("Please consider using the recent names\n");
       shall_exit = 1;
-    } else if (!strcmp(argv[i], "--help-models")) {
+    } else if (not strcmp(argv[i], "--help-models")) {
       model_help("host", surf_host_model_description);
       printf("\n");
       model_help("CPU", surf_cpu_model_description);
@@ -94,7 +94,7 @@ static void sg_config_cmd_line(int *argc, char **argv)
                surf_optimization_mode_description[k].description);
       printf("Both network and CPU models have 'Lazy' as default optimization level\n\n");
       shall_exit = 1;
-    } else if (!strcmp(argv[i], "--help-tracing")) {
+    } else if (not strcmp(argv[i], "--help-tracing")) {
       TRACE_help (1);
       shall_exit = 1;
     } else {
@@ -118,7 +118,7 @@ static void _sg_cfg_cb__plugin(const char *name)
   if (val==nullptr || val[0] == '\0')
     return;
 
-  if (!strcmp(val, "help")) {
+  if (not strcmp(val, "help")) {
     model_help("plugin", surf_plugin_description);
     sg_cfg_exit_early();
   }
@@ -133,7 +133,7 @@ static void _sg_cfg_cb__host_model(const char *name)
   xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization");
 
   char *val = xbt_cfg_get_string(name);
-  if (!strcmp(val, "help")) {
+  if (not strcmp(val, "help")) {
     model_help("host", surf_host_model_description);
     sg_cfg_exit_early();
   }
@@ -148,7 +148,7 @@ static void _sg_cfg_cb__cpu_model(const char *name)
   xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization");
 
   char *val = xbt_cfg_get_string(name);
-  if (!strcmp(val, "help")) {
+  if (not strcmp(val, "help")) {
     model_help("CPU", surf_cpu_model_description);
     sg_cfg_exit_early();
   }
@@ -163,7 +163,7 @@ static void _sg_cfg_cb__optimization_mode(const char *name)
   xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization");
 
   char *val = xbt_cfg_get_string(name);
-  if (!strcmp(val, "help")) {
+  if (not strcmp(val, "help")) {
     model_help("optimization", surf_optimization_mode_description);
     sg_cfg_exit_early();
   }
@@ -178,7 +178,7 @@ static void _sg_cfg_cb__storage_mode(const char *name)
   xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization");
 
   char *val = xbt_cfg_get_string(name);
-  if (!strcmp(val, "help")) {
+  if (not strcmp(val, "help")) {
     model_help("storage", surf_storage_model_description);
     sg_cfg_exit_early();
   }
@@ -192,7 +192,7 @@ static void _sg_cfg_cb__network_model(const char *name)
   xbt_assert(_sg_cfg_init_status < 2, "Cannot change the model after the initialization");
 
   char *val = xbt_cfg_get_string(name);
-  if (!strcmp(val, "help")) {
+  if (not strcmp(val, "help")) {
     model_help("network", surf_network_model_description);
     sg_cfg_exit_early();
   }
@@ -253,13 +253,11 @@ static void _sg_cfg_cb_contexts_parallel_threshold(const char *name)
 static void _sg_cfg_cb_contexts_parallel_mode(const char *name)
 {
   const char* mode_name = xbt_cfg_get_string(name);
-  if (!strcmp(mode_name, "posix")) {
+  if (not strcmp(mode_name, "posix")) {
     SIMIX_context_set_parallel_mode(XBT_PARMAP_POSIX);
-  }
-  else if (!strcmp(mode_name, "futex")) {
+  } else if (not strcmp(mode_name, "futex")) {
     SIMIX_context_set_parallel_mode(XBT_PARMAP_FUTEX);
-  }
-  else if (!strcmp(mode_name, "busy_wait")) {
+  } else if (not strcmp(mode_name, "busy_wait")) {
     SIMIX_context_set_parallel_mode(XBT_PARMAP_BUSY_WAIT);
   }
   else {
@@ -486,6 +484,8 @@ void sg_config_init(int *argc, char **argv)
     xbt_cfg_register_alias("smpi/shared-malloc", "smpi/use-shared-malloc");
     xbt_cfg_register_alias("smpi/shared-malloc", "smpi/use_shared_malloc");
     xbt_cfg_register_double("smpi/shared-malloc-blocksize", 1UL << 20, nullptr, "Size of the bogus file which will be created for global shared allocations");
+    xbt_cfg_register_string("smpi/shared-malloc-hugepage", "", nullptr,
+                            "Path to a mounted hugetlbfs, to use huge pages with shared malloc.");
 
     xbt_cfg_register_double("smpi/cpu-threshold", 1e-6, nullptr, "Minimal computation time (in seconds) not discarded, or -1 for infinity.");
     xbt_cfg_register_alias("smpi/cpu-threshold", "smpi/cpu_threshold");
@@ -575,7 +575,7 @@ void sg_config_init(int *argc, char **argv)
 
 void sg_config_finalize()
 {
-  if (!_sg_cfg_init_status)
+  if (not _sg_cfg_init_status)
     return;                     /* Not initialized yet. Nothing to do */
 
   xbt_cfg_free(&simgrid_config);
index b16b66d..2930fc1 100644 (file)
 
 #include <boost/range/algorithm.hpp>
 
-#include <xbt/functional.hpp>
-#include <xbt/ex.hpp>
-#include <xbt/sysdep.h>
-#include <xbt/log.h>
-#include <xbt/dict.h>
+#include "xbt/dict.h"
+#include "xbt/ex.hpp"
+#include "xbt/functional.hpp"
+#include "xbt/log.h"
+#include "xbt/sysdep.h"
 
 #include "simgrid/s4u/Host.hpp"
 
-#include <mc/mc.h>
+#include "mc/mc.h"
 
 #include "smx_private.h"
+#include "src/kernel/activity/SleepImpl.hpp"
 #include "src/kernel/activity/SynchroIo.hpp"
 #include "src/kernel/activity/SynchroRaw.hpp"
-#include "src/kernel/activity/SynchroSleep.hpp"
 #include "src/mc/mc_replay.h"
 #include "src/mc/remote/Client.hpp"
 #include "src/msg/msg_private.h"
@@ -95,8 +95,8 @@ void SIMIX_process_cleanup(smx_actor_t process)
 
   /* cancel non-blocking communications */
   smx_activity_t synchro = static_cast<smx_activity_t>(process->comms.front());
-  while (!process->comms.empty()) {
-    simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+  while (not process->comms.empty()) {
+    simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
 
     /* make sure no one will finish the comm after this process is destroyed,
      * because src_proc or dst_proc would be an invalid pointer */
@@ -111,10 +111,8 @@ void SIMIX_process_cleanup(smx_actor_t process)
       if (comm->detached)
         XBT_DEBUG("Don't destroy it since it's a detached comm and I'm the sender");
       else
-        comm->unref();
-
-    }
-    else if (comm->dst_proc == process){
+        SIMIX_comm_unref(comm);
+    } else if (comm->dst_proc == process) {
       XBT_DEBUG("Found an unfinished recv comm %p, state %d, src = %p, dst = %p",
           comm, (int)comm->state, comm->src_proc, comm->dst_proc);
       comm->dst_proc = nullptr;
@@ -123,8 +121,7 @@ void SIMIX_process_cleanup(smx_actor_t process)
         /* the comm will be freed right now, remove it from the sender */
         comm->src_proc->comms.remove(comm);
       }
-      
-      comm->unref();
+      // SIMIX_comm_unref(comm);
     } else {
       xbt_die("Communication synchro %p is in my list but I'm not the sender nor the receiver", synchro);
     }
@@ -183,7 +180,7 @@ static int dying_daemon(void* exit_status, void* data)
 /** This process will be terminated automatically when the last non-daemon process finishes */
 void ActorImpl::daemonize()
 {
-  if (!daemon) {
+  if (not daemon) {
     daemon = true;
     simix_global->daemons.push_back(this);
     SIMIX_process_on_exit(this, dying_daemon, this);
@@ -205,10 +202,10 @@ void create_maestro(std::function<void()> code)
   maestro->name = "";
   maestro->data = nullptr;
 
-  if (!code) {
+  if (not code) {
     maestro->context = SIMIX_context_new(std::function<void()>(), nullptr, maestro);
   } else {
-    if (!simix_global)
+    if (not simix_global)
       xbt_die("simix is not initialized, please call MSG_init first");
     maestro->context =
       simix_global->context_factory->create_maestro(code, maestro);
@@ -340,7 +337,7 @@ smx_actor_t SIMIX_process_attach(const char* name, void* data, const char* hostn
   process->code = nullptr;
 
   XBT_VERB("Create context %s", process->name.c_str());
-  if (!simix_global)
+  if (not simix_global)
     xbt_die("simix is not initialized, please call MSG_init first");
   process->context = simix_global->context_factory->attach(
     simix_global->cleanup_process_function, process);
@@ -360,7 +357,7 @@ smx_actor_t SIMIX_process_attach(const char* name, void* data, const char* hostn
   TRACE_msg_process_create(process->cname(), process->pid, process->host);
 
   auto context = dynamic_cast<simgrid::kernel::context::AttachContext*>(process->context);
-  if (!context)
+  if (not context)
     xbt_die("Not a suitable context");
 
   context->attach_start();
@@ -370,7 +367,7 @@ smx_actor_t SIMIX_process_attach(const char* name, void* data, const char* hostn
 void SIMIX_process_detach()
 {
   auto context = dynamic_cast<simgrid::kernel::context::AttachContext*>(SIMIX_context_self());
-  if (!context)
+  if (not context)
     xbt_die("Not a suitable context");
 
   simix_global->cleanup_process_function(context->process());
@@ -428,9 +425,12 @@ void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) {
   /* destroy the blocking synchro if any */
   if (process->waiting_synchro) {
 
-    simgrid::kernel::activity::Exec *exec = dynamic_cast<simgrid::kernel::activity::Exec*>(process->waiting_synchro);
-    simgrid::kernel::activity::Comm *comm = dynamic_cast<simgrid::kernel::activity::Comm*>(process->waiting_synchro);
-    simgrid::kernel::activity::Sleep *sleep = dynamic_cast<simgrid::kernel::activity::Sleep*>(process->waiting_synchro);
+    simgrid::kernel::activity::ExecImpl* exec =
+        dynamic_cast<simgrid::kernel::activity::ExecImpl*>(process->waiting_synchro);
+    simgrid::kernel::activity::CommImpl* comm =
+        dynamic_cast<simgrid::kernel::activity::CommImpl*>(process->waiting_synchro);
+    simgrid::kernel::activity::SleepImpl* sleep =
+        dynamic_cast<simgrid::kernel::activity::SleepImpl*>(process->waiting_synchro);
     simgrid::kernel::activity::Raw *raw = dynamic_cast<simgrid::kernel::activity::Raw*>(process->waiting_synchro);
     simgrid::kernel::activity::Io *io = dynamic_cast<simgrid::kernel::activity::Io*>(process->waiting_synchro);
 
@@ -440,16 +440,11 @@ void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) {
     } else if (comm != nullptr) {
       process->comms.remove(process->waiting_synchro);
       comm->cancel();
-
       // Remove first occurrence of &process->simcall:
-      auto i = boost::range::find(
-        process->waiting_synchro->simcalls,
-        &process->simcall);
+      auto i = boost::range::find(process->waiting_synchro->simcalls, &process->simcall);
       if (i != process->waiting_synchro->simcalls.end())
         process->waiting_synchro->simcalls.remove(&process->simcall);
-
-      comm->unref();
-
+      SIMIX_comm_unref(comm);
     } else if (sleep != nullptr) {
       SIMIX_process_sleep_destroy(process->waiting_synchro);
 
@@ -470,7 +465,7 @@ void SIMIX_process_kill(smx_actor_t process, smx_actor_t issuer) {
 
     process->waiting_synchro = nullptr;
   }
-  if(!xbt_dynar_member(simix_global->process_to_run, &(process)) && process != issuer) {
+  if (not xbt_dynar_member(simix_global->process_to_run, &(process)) && process != issuer) {
     XBT_DEBUG("Inserting %s in the to_run list", process->name.c_str());
     xbt_dynar_push_as(simix_global->process_to_run, smx_actor_t, process);
   }
@@ -492,21 +487,24 @@ void SIMIX_process_throw(smx_actor_t process, xbt_errcat_t cat, int value, const
   /* cancel the blocking synchro if any */
   if (process->waiting_synchro) {
 
-    simgrid::kernel::activity::Exec *exec = dynamic_cast<simgrid::kernel::activity::Exec*>(process->waiting_synchro);
+    simgrid::kernel::activity::ExecImpl* exec =
+        dynamic_cast<simgrid::kernel::activity::ExecImpl*>(process->waiting_synchro);
     if (exec != nullptr) {
       SIMIX_execution_cancel(process->waiting_synchro);
     }
 
-    simgrid::kernel::activity::Comm *comm = dynamic_cast<simgrid::kernel::activity::Comm*>(process->waiting_synchro);
+    simgrid::kernel::activity::CommImpl* comm =
+        dynamic_cast<simgrid::kernel::activity::CommImpl*>(process->waiting_synchro);
     if (comm != nullptr) {
       process->comms.remove(comm);
       comm->cancel();
     }
 
-    simgrid::kernel::activity::Sleep *sleep = dynamic_cast<simgrid::kernel::activity::Sleep*>(process->waiting_synchro);
+    simgrid::kernel::activity::SleepImpl* sleep =
+        dynamic_cast<simgrid::kernel::activity::SleepImpl*>(process->waiting_synchro);
     if (sleep != nullptr) {
       SIMIX_process_sleep_destroy(process->waiting_synchro);
-      if (!xbt_dynar_member(simix_global->process_to_run, &(process)) && process != SIMIX_process_self()) {
+      if (not xbt_dynar_member(simix_global->process_to_run, &(process)) && process != SIMIX_process_self()) {
         XBT_DEBUG("Inserting %s in the to_run list", process->name.c_str());
         xbt_dynar_push_as(simix_global->process_to_run, smx_actor_t, process);
       }
@@ -606,7 +604,7 @@ void SIMIX_process_resume(smx_actor_t process)
     return;
   }
 
-  if (!process->suspended)
+  if (not process->suspended)
     return;
   process->suspended = 0;
 
@@ -638,7 +636,7 @@ void* SIMIX_process_self_get_data()
 {
   smx_actor_t self = SIMIX_process_self();
 
-  if (!self) {
+  if (not self) {
     return nullptr;
   }
   return self->data;
@@ -699,12 +697,12 @@ void simcall_HANDLER_process_join(smx_simcall_t simcall, smx_actor_t process, do
 }
 
 static int SIMIX_process_join_finish(smx_process_exit_status_t status, smx_activity_t synchro){
-  simgrid::kernel::activity::Sleep *sleep = static_cast<simgrid::kernel::activity::Sleep*>(synchro);
+  simgrid::kernel::activity::SleepImpl* sleep = static_cast<simgrid::kernel::activity::SleepImpl*>(synchro);
 
   if (sleep->surf_sleep) {
     sleep->surf_sleep->cancel();
 
-    while (!sleep->simcalls.empty()) {
+    while (not sleep->simcalls.empty()) {
       smx_simcall_t simcall = sleep->simcalls.front();
       sleep->simcalls.pop_front();
       simcall_process_sleep__set__result(simcall, SIMIX_DONE);
@@ -759,7 +757,7 @@ smx_activity_t SIMIX_process_sleep(smx_actor_t process, double duration)
   if (host->isOff())
     THROWF(host_error, 0, "Host %s failed, you cannot sleep there.", host->cname());
 
-  simgrid::kernel::activity::Sleep *synchro = new simgrid::kernel::activity::Sleep();
+  simgrid::kernel::activity::SleepImpl* synchro = new simgrid::kernel::activity::SleepImpl();
   synchro->host = host;
   synchro->surf_sleep                       = host->pimpl_cpu->sleep(duration);
   synchro->surf_sleep->setData(synchro);
@@ -771,7 +769,7 @@ smx_activity_t SIMIX_process_sleep(smx_actor_t process, double duration)
 void SIMIX_process_sleep_destroy(smx_activity_t synchro)
 {
   XBT_DEBUG("Destroy synchro %p", synchro);
-  simgrid::kernel::activity::Sleep *sleep = static_cast<simgrid::kernel::activity::Sleep*>(synchro);
+  simgrid::kernel::activity::SleepImpl* sleep = static_cast<simgrid::kernel::activity::SleepImpl*>(synchro);
 
   if (sleep->surf_sleep) {
     sleep->surf_sleep->unref();
@@ -885,7 +883,7 @@ xbt_dynar_t SIMIX_processes_as_dynar() {
 void SIMIX_process_on_exit_runall(smx_actor_t process) {
   s_smx_process_exit_fun_t exit_fun;
   smx_process_exit_status_t exit_status = (process->context->iwannadie) ? SMX_EXIT_FAILURE : SMX_EXIT_SUCCESS;
-  while (!process->on_exit.empty()) {
+  while (not process->on_exit.empty()) {
     exit_fun = process->on_exit.back();
     (exit_fun.fun)((void*)exit_status, exit_fun.arg);
     process->on_exit.pop_back();
index 9b7e47b..4a53a46 100644 (file)
@@ -9,7 +9,7 @@
 #include "simgrid/s4u/Actor.hpp"
 #include "src/simix/popping_private.h"
 #include "xbt/swag.h"
-#include<list>
+#include <list>
 
 typedef struct s_smx_process_exit_fun {
   int_f_pvoid_pvoid_t fun;
index 098085a..a3aad4a 100644 (file)
 
 #include <functional>
 
-#include <xbt/functional.hpp>
-
-#include <simgrid/s4u/VirtualMachine.hpp>
-#include <simgrid/simix/blocking_simcall.hpp>
-
 #include "mc/mc.h"
+#include "simgrid/s4u/VirtualMachine.hpp"
+#include "simgrid/simix.hpp"
+#include "simgrid/simix/blocking_simcall.hpp"
 #include "smx_private.h"
-#include "src/kernel/activity/SynchroComm.hpp"
+#include "src/kernel/activity/CommImpl.hpp"
 #include "src/mc/mc_forward.hpp"
 #include "src/mc/mc_replay.h"
 #include "src/plugins/vm/VirtualMachineImpl.hpp"
 #include "src/simix/smx_host_private.h"
 #include "xbt/ex.h"
-
-#include <simgrid/simix.hpp>
+#include "xbt/functional.hpp"
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix);
 
@@ -461,8 +458,8 @@ smx_activity_t simcall_comm_iprobe(smx_mailbox_t mbox, int type, int src, int ta
  */
 void simcall_comm_cancel(smx_activity_t synchro)
 {
-  simgrid::simix::kernelImmediate([synchro]{
-    simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+  simgrid::simix::kernelImmediate([synchro] {
+    simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
     comm->cancel();
   });
 }
@@ -524,7 +521,7 @@ int simcall_comm_test(smx_activity_t comm)
  */
 smx_mutex_t simcall_mutex_init()
 {
-  if(!simix_global) {
+  if (not simix_global) {
     fprintf(stderr,"You must run MSG_init before using MSG\n"); // We can't use xbt_die since we may get there before the initialization
     xbt_abort();
   }
index c488326..396969d 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2010-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2010-2017. 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 "src/mc/mc_private.h"
 #endif
 
-#include "src/kernel/activity/SynchroExec.hpp"
-#include "src/kernel/activity/SynchroComm.hpp"
-#include "src/kernel/activity/SynchroSleep.hpp"
-#include "src/kernel/activity/SynchroRaw.hpp"
+#include "src/kernel/activity/CommImpl.hpp"
+#include "src/kernel/activity/ExecImpl.hpp"
+#include "src/kernel/activity/SleepImpl.hpp"
 #include "src/kernel/activity/SynchroIo.hpp"
+#include "src/kernel/activity/SynchroRaw.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_popping, simix,
                                 "Popping part of SIMIX (transmuting from user request into kernel handlers)");
@@ -28,7 +27,7 @@ void SIMIX_simcall_answer(smx_simcall_t simcall)
 /*    This check should be useless and slows everyone. Reactivate if you see something
  *    weird in process scheduling.
  */
-/*    if(!xbt_dynar_member(simix_global->process_to_run, &(simcall->issuer))) */
+    /*    if(not xbt_dynar_member(simix_global->process_to_run, &(simcall->issuer))) */
     xbt_dynar_push_as(simix_global->process_to_run, smx_actor_t, simcall->issuer);
 /*    else DIE_IMPOSSIBLE; */
   }
index 343b8a1..8ce7f9f 100644 (file)
@@ -4,6 +4,7 @@
 /*                    DO NOT EVER CHANGE THIS FILE                    */
 /*                                                                    */
 /* change simcalls specification in src/simix/simcalls.in             */
+/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved.    */
 /**********************************************************************/
 
 /*
index 0268240..758d874 100644 (file)
@@ -4,6 +4,7 @@
 /*                    DO NOT EVER CHANGE THIS FILE                    */
 /*                                                                    */
 /* change simcalls specification in src/simix/simcalls.in             */
+/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved.    */
 /**********************************************************************/
 
 /*
index 205d92b..e533a24 100644 (file)
@@ -4,6 +4,7 @@
 /*                    DO NOT EVER CHANGE THIS FILE                    */
 /*                                                                    */
 /* change simcalls specification in src/simix/simcalls.in             */
+/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved.    */
 /**********************************************************************/
 
 /*
index 968e7bc..45bd19d 100644 (file)
@@ -4,6 +4,7 @@
 /*                    DO NOT EVER CHANGE THIS FILE                    */
 /*                                                                    */
 /* change simcalls specification in src/simix/simcalls.in             */
+/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved.    */
 /**********************************************************************/
 
 /*
index 706dc92..68635e5 100755 (executable)
@@ -11,9 +11,9 @@ import glob
 
 class Arg(object):
 
-    def __init__(self, name, type):
+    def __init__(self, name, thetype):
         self.name = name
-        self.type = type
+        self.type = thetype
 
     def field(self):
         return self.simcall_types[self.type]
@@ -218,6 +218,8 @@ def header(name):
         '/*                                                                    */\n')
     fd.write(
         '/* change simcalls specification in src/simix/simcalls.in             */\n')
+    fd.write(
+        '/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved.    */\n')
     fd.write(
         '/**********************************************************************/\n\n')
     fd.write('/*\n')
@@ -233,17 +235,16 @@ def header(name):
 
 
 def handle(fd, func, simcalls, guarded_simcalls):
-    def nonempty(e): 
+    def nonempty(e):
         return e != ''
     fd.write('\n'.join(filter(nonempty, (func(simcall) for simcall in simcalls))))
 
-    for guard, list in guarded_simcalls.items():
+    for guard, ll in guarded_simcalls.items():
         fd.write('\n#if %s\n' % (guard))
-        fd.write('\n'.join(func(simcall) for simcall in list))
+        fd.write('\n'.join(func(simcall) for simcall in ll))
         fd.write('\n#endif\n')
 
 if __name__ == '__main__':
-    import sys
     simcalls, simcalls_dict = parse('simcalls.in')
 
     ok = True
index 712ab9c..b9911d1 100644 (file)
@@ -100,7 +100,7 @@ void SIMIX_context_mod_init()
 {
   xbt_assert(simix_global->context_factory == nullptr);
 
-#if HAVE_THREAD_CONTEXTS && !HAVE_THREAD_LOCAL_STORAGE
+#if HAVE_THREAD_CONTEXTS && not HAVE_THREAD_LOCAL_STORAGE
   /* the __thread storage class is not available on this platform:
    * use getspecific/setspecific instead to store the current context in each thread */
   xbt_os_thread_key_create(&smx_current_context_key);
@@ -171,11 +171,11 @@ void *SIMIX_context_stack_new()
    * growing downward (PTH_STACKGROWTH == -1).  Protected pages need to be put
    * after the stack when PTH_STACKGROWTH == 1. */
 
-  if (smx_context_guard_size > 0 && !MC_is_active()) {
+  if (smx_context_guard_size > 0 && not MC_is_active()) {
 
 #if !defined(PTH_STACKGROWTH) || (PTH_STACKGROWTH != -1)
     static int warned_once = 0;
-    if (!warned_once) {
+    if (not warned_once) {
       XBT_WARN("Stack overflow protection is known to be broken on your system.  Either stack grows upwards, or it was not even tested properly.");
       warned_once = 1;
     }
@@ -221,7 +221,7 @@ void *SIMIX_context_stack_new()
 
 void SIMIX_context_stack_delete(void *stack)
 {
-  if (!stack)
+  if (not stack)
     return;
 
 #if HAVE_VALGRIND_H
@@ -231,7 +231,7 @@ void SIMIX_context_stack_delete(void *stack)
 #endif
 
 #ifndef _WIN32
-  if (smx_context_guard_size > 0 && !MC_is_active()) {
+  if (smx_context_guard_size > 0 && not MC_is_active()) {
     stack = (char *)stack - smx_context_guard_size;
     if (mprotect(stack, smx_context_guard_size, PROT_READ | PROT_WRITE) == -1) {
       XBT_WARN("Failed to remove page protection: %s", strerror(errno));
@@ -274,7 +274,7 @@ void SIMIX_context_set_nthreads(int nb_threads) {
   if (nb_threads<=0) {  
      nb_threads = xbt_os_get_numcores();
      XBT_INFO("Auto-setting contexts/nthreads to %d",nb_threads);
-  }   
+  }
 #if !HAVE_THREAD_CONTEXTS
   xbt_assert(nb_threads == 1, "Parallel runs are impossible when the pthreads are missing.");
 #endif
index daa1b11..946f64b 100644 (file)
@@ -46,7 +46,7 @@ void SIMIX_launch_application(const char *file)
   try {
     parse_status = surf_parse();
     surf_parse_close();
-    xbt_assert(!parse_status, "Parse error at %s:%d", file,surf_parse_lineno);
+    xbt_assert(not parse_status, "Parse error at %s:%d", file, surf_parse_lineno);
   }
   catch (xbt_ex& e) {
     XBT_ERROR("Unrecoverable error at %s:%d. The full exception stack follows, in case it helps you to diagnose the problem.",
@@ -124,7 +124,7 @@ void SIMIX_process_set_function(const char *process_host,
   memset(&process,0,sizeof(process));
 
   sg_host_t host = sg_host_by_name(process_host);
-  if (!host)
+  if (not host)
     THROWF(arg_error, 0, "Host '%s' unknown", process_host);
   process.host = host->cname();
 
index 9292bf6..a3c309a 100644 (file)
 #include "simgrid/s4u/Host.hpp"
 
 #include "src/surf/surf_interface.hpp"
-#include "src/surf/storage_interface.hpp"
 #include "src/surf/xml/platf.hpp"
 #include "smx_private.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/mc/mc_replay.h"
+#include "src/surf/StorageImpl.hpp"
 
 #include "src/smpi/smpi_process.hpp"
 
-#include "src/kernel/activity/SynchroExec.hpp"
-#include "src/kernel/activity/SynchroComm.hpp"
-#include "src/kernel/activity/SynchroSleep.hpp"
+#include "src/kernel/activity/CommImpl.hpp"
+#include "src/kernel/activity/ExecImpl.hpp"
+#include "src/kernel/activity/SleepImpl.hpp"
 #include "src/kernel/activity/SynchroIo.hpp"
 #include "src/kernel/activity/SynchroRaw.hpp"
 
@@ -125,7 +126,7 @@ static void install_segvhandler()
     XBT_WARN("Failed to register alternate signal stack: %s", strerror(errno));
     return;
   }
-  if (!(old_stack.ss_flags & SS_DISABLE)) {
+  if (not(old_stack.ss_flags & SS_DISABLE)) {
     XBT_DEBUG("An alternate stack was already installed (sp=%p, size=%zd, flags=%x). Restore it.",
               old_stack.ss_sp, old_stack.ss_size, old_stack.ss_flags);
     sigaltstack(&old_stack, nullptr);
@@ -199,7 +200,7 @@ void SIMIX_global_init(int *argc, char **argv)
   simgrid::mc::Client::initialize();
 #endif
 
-  if (!simix_global) {
+  if (not simix_global) {
     simix_global = std::unique_ptr<simgrid::simix::Global>(new simgrid::simix::Global());
 
     simgrid::simix::ActorImpl proc;
@@ -233,14 +234,14 @@ void SIMIX_global_init(int *argc, char **argv)
         host.extension_set<simgrid::simix::Host>(new simgrid::simix::Host());
     });
 
-    simgrid::surf::storageCreatedCallbacks.connect([](simgrid::surf::Storage* storage) {
+    simgrid::surf::storageCreatedCallbacks.connect([](simgrid::surf::StorageImpl* storage) {
       const char* name = storage->cname();
       // TODO, create sg_storage_by_name
       sg_storage_t s = xbt_lib_get_elm_or_null(storage_lib, name);
       xbt_assert(s != nullptr, "Storage not found for name %s", name);
     });
   }
-  if (!simix_timers)
+  if (not simix_timers)
     simix_timers = xbt_heap_new(8, [](void* p) {
       delete static_cast<smx_timer_t>(p);
     });
@@ -277,7 +278,7 @@ void SIMIX_clean()
 
   smx_cleaned = 1;
   XBT_DEBUG("SIMIX_clean called. Simulation's over.");
-  if (!xbt_dynar_is_empty(simix_global->process_to_run) && SIMIX_get_clock() <= 0.0) {
+  if (not xbt_dynar_is_empty(simix_global->process_to_run) && SIMIX_get_clock() <= 0.0) {
     XBT_CRITICAL("   ");
     XBT_CRITICAL("The time is still 0, and you still have processes ready to run.");
     XBT_CRITICAL("It seems that you forgot to run the simulation that you setup.");
@@ -410,7 +411,7 @@ static bool SIMIX_execute_tasks()
       task();
 
     simix_global->tasksTemp.clear();
-  } while (!simix_global->tasks.empty());
+  } while (not simix_global->tasks.empty());
 
   return true;
 }
@@ -433,7 +434,7 @@ void SIMIX_run()
 
     SIMIX_execute_tasks();
 
-    while (!xbt_dynar_is_empty(simix_global->process_to_run)) {
+    while (not xbt_dynar_is_empty(simix_global->process_to_run)) {
       XBT_DEBUG("New Sub-Schedule Round; size(queue)=%lu", xbt_dynar_length(simix_global->process_to_run));
 
       /* Run all processes that are ready to run, possibly in parallel */
@@ -551,12 +552,10 @@ void SIMIX_run()
     XBT_DEBUG("### time %f, #processes %zu, #to_run %lu", time, simix_global->process_list.size(),
               xbt_dynar_length(simix_global->process_to_run));
 
+    if (xbt_dynar_is_empty(simix_global->process_to_run) && not simix_global->process_list.empty())
+      simgrid::simix::onDeadlock();
 
-    if (xbt_dynar_is_empty(simix_global->process_to_run) &&
-        !simix_global->process_list.empty())
-    simgrid::simix::onDeadlock();
-
-  } while (time > -1.0 || !xbt_dynar_is_empty(simix_global->process_to_run));
+  } while (time > -1.0 || not xbt_dynar_is_empty(simix_global->process_to_run));
 
   if (simix_global->process_list.size() != 0) {
 
@@ -655,13 +654,13 @@ void SIMIX_display_process_status()
 
       const char* synchro_description = "unknown";
 
-      if (dynamic_cast<simgrid::kernel::activity::Exec*>(process->waiting_synchro) != nullptr)
+      if (dynamic_cast<simgrid::kernel::activity::ExecImpl*>(process->waiting_synchro) != nullptr)
         synchro_description = "execution";
 
-      if (dynamic_cast<simgrid::kernel::activity::Comm*>(process->waiting_synchro) != nullptr)
+      if (dynamic_cast<simgrid::kernel::activity::CommImpl*>(process->waiting_synchro) != nullptr)
         synchro_description = "communication";
 
-      if (dynamic_cast<simgrid::kernel::activity::Sleep*>(process->waiting_synchro) != nullptr)
+      if (dynamic_cast<simgrid::kernel::activity::SleepImpl*>(process->waiting_synchro) != nullptr)
         synchro_description = "sleeping";
 
       if (dynamic_cast<simgrid::kernel::activity::Raw*>(process->waiting_synchro) != nullptr)
index eca8a19..e459249 100644 (file)
@@ -5,11 +5,10 @@
 
 #include "mc/mc.h"
 #include "smx_private.h"
+#include "src/kernel/activity/CommImpl.hpp"
 #include "src/mc/mc_replay.h"
 #include "src/plugins/vm/VirtualMachineImpl.hpp"
-#include <xbt/ex.hpp>
-
-#include "src/kernel/activity/SynchroComm.hpp"
+#include "xbt/ex.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_host, simix, "SIMIX hosts");
 
@@ -19,7 +18,7 @@ namespace simgrid {
 
     Host::Host()
     {
-      if (!Host::EXTENSION_ID.valid())
+      if (not Host::EXTENSION_ID.valid())
         Host::EXTENSION_ID = s4u::Host::extension_create<simix::Host>();
 
       simgrid::simix::ActorImpl act;
@@ -129,7 +128,7 @@ void SIMIX_host_add_auto_restart_process(
   arg->properties = properties;
   arg->auto_restart = auto_restart;
 
-  if (host->isOff() && !xbt_dict_get_or_null(watched_hosts_lib, host->cname())) {
+  if (host->isOff() && not xbt_dict_get_or_null(watched_hosts_lib, host->cname())) {
     xbt_dict_set(watched_hosts_lib, host->cname(), host, nullptr);
     XBT_DEBUG("Push host %s to watched_hosts_lib because state == SURF_RESOURCE_OFF", host->cname());
   }
@@ -162,10 +161,10 @@ smx_activity_t SIMIX_execution_start(smx_actor_t issuer, const char *name, doubl
                                     double bound){
 
   /* alloc structures and initialize */
-  simgrid::kernel::activity::Exec *exec = new simgrid::kernel::activity::Exec(name, issuer->host);
+  simgrid::kernel::activity::ExecImpl* exec = new simgrid::kernel::activity::ExecImpl(name, issuer->host);
 
   /* set surf's action */
-  if (!MC_is_active() && !MC_record_replay_is_active()) {
+  if (not MC_is_active() && not MC_record_replay_is_active()) {
 
     exec->surf_exec = issuer->host->pimpl_cpu->execution_start(flops_amount);
     exec->surf_exec->setData(exec);
@@ -185,7 +184,7 @@ smx_activity_t SIMIX_execution_parallel_start(const char* name, int host_nb, sg_
 {
 
   /* alloc structures and initialize */
-  simgrid::kernel::activity::Exec *exec = new simgrid::kernel::activity::Exec(name, nullptr);
+  simgrid::kernel::activity::ExecImpl* exec = new simgrid::kernel::activity::ExecImpl(name, nullptr);
 
   /* set surf's synchro */
   sg_host_t *host_list_cpy = xbt_new0(sg_host_t, host_nb);
@@ -200,7 +199,7 @@ smx_activity_t SIMIX_execution_parallel_start(const char* name, int host_nb, sg_
   }
 
   /* set surf's synchro */
-  if (!MC_is_active() && !MC_record_replay_is_active()) {
+  if (not MC_is_active() && not MC_record_replay_is_active()) {
     exec->surf_exec = surf_host_model->executeParallelTask(host_nb, host_list_cpy, flops_amount, bytes_amount, rate);
     exec->surf_exec->setData(exec);
     if (timeout > 0) {
@@ -216,7 +215,7 @@ smx_activity_t SIMIX_execution_parallel_start(const char* name, int host_nb, sg_
 void SIMIX_execution_cancel(smx_activity_t synchro)
 {
   XBT_DEBUG("Cancel synchro %p", synchro);
-  simgrid::kernel::activity::Exec *exec = static_cast<simgrid::kernel::activity::Exec *>(synchro);
+  simgrid::kernel::activity::ExecImpl* exec = static_cast<simgrid::kernel::activity::ExecImpl*>(synchro);
 
   if (exec->surf_exec)
     exec->surf_exec->cancel();
@@ -224,21 +223,21 @@ void SIMIX_execution_cancel(smx_activity_t synchro)
 
 void SIMIX_execution_set_priority(smx_activity_t synchro, double priority)
 {
-  simgrid::kernel::activity::Exec *exec = static_cast<simgrid::kernel::activity::Exec *>(synchro);
+  simgrid::kernel::activity::ExecImpl* exec = static_cast<simgrid::kernel::activity::ExecImpl*>(synchro);
   if(exec->surf_exec)
     exec->surf_exec->setPriority(priority);
 }
 
 void SIMIX_execution_set_bound(smx_activity_t synchro, double bound)
 {
-  simgrid::kernel::activity::Exec *exec = static_cast<simgrid::kernel::activity::Exec *>(synchro);
+  simgrid::kernel::activity::ExecImpl* exec = static_cast<simgrid::kernel::activity::ExecImpl*>(synchro);
   if(exec->surf_exec)
     static_cast<simgrid::surf::CpuAction*>(exec->surf_exec)->setBound(bound);
 }
 
 void simcall_HANDLER_execution_wait(smx_simcall_t simcall, smx_activity_t synchro)
 {
-  simgrid::kernel::activity::Exec *exec = static_cast<simgrid::kernel::activity::Exec *>(synchro);
+  simgrid::kernel::activity::ExecImpl* exec = static_cast<simgrid::kernel::activity::ExecImpl*>(synchro);
   XBT_DEBUG("Wait for execution of synchro %p, state %d", synchro, (int)synchro->state);
 
   /* Associate this simcall to the synchro */
@@ -257,7 +256,7 @@ void simcall_HANDLER_execution_wait(smx_simcall_t simcall, smx_activity_t synchr
     SIMIX_execution_finish(exec);
 }
 
-void SIMIX_execution_finish(simgrid::kernel::activity::Exec *exec)
+void SIMIX_execution_finish(simgrid::kernel::activity::ExecImpl* exec)
 {
   for (smx_simcall_t simcall : exec->simcalls) {
     switch (exec->state) {
@@ -305,13 +304,13 @@ void SIMIX_set_category(smx_activity_t synchro, const char *category)
   if (synchro->state != SIMIX_RUNNING)
     return;
 
-  simgrid::kernel::activity::Exec *exec = dynamic_cast<simgrid::kernel::activity::Exec *>(synchro);
+  simgrid::kernel::activity::ExecImpl* exec = dynamic_cast<simgrid::kernel::activity::ExecImpl*>(synchro);
   if (exec != nullptr) {
     exec->surf_exec->setCategory(category);
     return;
   }
 
-  simgrid::kernel::activity::Comm *comm = dynamic_cast<simgrid::kernel::activity::Comm *>(synchro);
+  simgrid::kernel::activity::CommImpl* comm = dynamic_cast<simgrid::kernel::activity::CommImpl*>(synchro);
   if (comm != nullptr) {
     comm->surf_comm->setCategory(category);
   }
index 3db24e8..91149d1 100644 (file)
@@ -15,7 +15,7 @@
 #include "simgrid/simix.h"
 #include "popping_private.h"
 
-#include "src/kernel/activity/SynchroExec.hpp"
+#include "src/kernel/activity/ExecImpl.hpp"
 
 /** @brief Host datatype from SIMIX POV */
 namespace simgrid {
@@ -57,7 +57,7 @@ XBT_PRIVATE void SIMIX_execution_cancel(smx_activity_t synchro);
 XBT_PRIVATE void SIMIX_execution_set_priority(smx_activity_t synchro, double priority);
 XBT_PRIVATE void SIMIX_execution_set_bound(smx_activity_t synchro, double bound);
 
-XBT_PRIVATE void SIMIX_execution_finish(simgrid::kernel::activity::Exec *exec);
+XBT_PRIVATE void SIMIX_execution_finish(simgrid::kernel::activity::ExecImpl* exec);
 
 XBT_PRIVATE void SIMIX_set_category(smx_activity_t synchro, const char *category);
 
index 2da73fd..9ac82e3 100644 (file)
@@ -7,18 +7,19 @@
 
 #include <boost/range/algorithm.hpp>
 
+#include "src/kernel/activity/CommImpl.hpp"
 #include <xbt/ex.hpp>
 
 #include "simgrid/s4u/Host.hpp"
 
 #include "mc/mc.h"
+#include "simgrid/s4u/Activity.hpp"
 #include "simgrid/s4u/Mailbox.hpp"
 #include "src/mc/mc_replay.h"
 #include "src/simix/smx_private.h"
 #include "src/surf/cpu_interface.hpp"
 #include "src/surf/surf_interface.hpp"
 
-#include "src/kernel/activity/SynchroComm.hpp"
 #include "src/surf/network_interface.hpp"
 
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_network, simix, "SIMIX network-related synchronization");
@@ -26,7 +27,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_network, simix, "SIMIX network-related syn
 static void SIMIX_waitany_remove_simcall_from_actions(smx_simcall_t simcall);
 static void SIMIX_comm_copy_data(smx_activity_t comm);
 static void SIMIX_comm_start(smx_activity_t synchro);
-static simgrid::kernel::activity::Comm*
+static simgrid::kernel::activity::CommImpl*
 _find_matching_comm(boost::circular_buffer_space_optimized<smx_activity_t>* deque, e_smx_comm_type_t type,
                     int (*match_fun)(void*, void*, smx_activity_t), void* user_data, smx_activity_t my_synchro,
                     bool remove_matching);
@@ -36,7 +37,7 @@ _find_matching_comm(boost::circular_buffer_space_optimized<smx_activity_t>* dequ
  *  \param type The type of communication we are looking for (comm_send, comm_recv)
  *  \return The communication activity if found, nullptr otherwise
  */
-static simgrid::kernel::activity::Comm*
+static simgrid::kernel::activity::CommImpl*
 _find_matching_comm(boost::circular_buffer_space_optimized<smx_activity_t>* deque, e_smx_comm_type_t type,
                     int (*match_fun)(void*, void*, smx_activity_t), void* this_user_data, smx_activity_t my_synchro,
                     bool remove_matching)
@@ -45,20 +46,19 @@ _find_matching_comm(boost::circular_buffer_space_optimized<smx_activity_t>* dequ
 
   for(auto it = deque->begin(); it != deque->end(); it++){
     smx_activity_t synchro = *it;
-    simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+    simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
 
     if (comm->type == SIMIX_COMM_SEND) {
       other_user_data = comm->src_data;
     } else if (comm->type == SIMIX_COMM_RECEIVE) {
       other_user_data = comm->dst_data;
     }
-    if (comm->type == type &&
-        (!      match_fun ||       match_fun(this_user_data,  other_user_data, synchro)) &&
-        (!comm->match_fun || comm->match_fun(other_user_data, this_user_data,  my_synchro))) {
+    if (comm->type == type && (match_fun == nullptr || match_fun(this_user_data, other_user_data, synchro)) &&
+        (not comm->match_fun || comm->match_fun(other_user_data, this_user_data, my_synchro))) {
       XBT_DEBUG("Found a matching communication synchro %p", comm);
       if (remove_matching)
         deque->erase(it);
-      comm->ref();
+      SIMIX_comm_ref(comm);
 #if SIMGRID_HAVE_MC
       comm->mbox_cpy = comm->mbox;
 #endif
@@ -99,23 +99,23 @@ XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_isend(smx_simcall_t simcall, smx
   XBT_DEBUG("send from %p", mbox);
 
   /* Prepare a synchro describing us, so that it gets passed to the user-provided filter of other side */
-  simgrid::kernel::activity::Comm* this_comm = new simgrid::kernel::activity::Comm(SIMIX_COMM_SEND);
+  simgrid::kernel::activity::CommImpl* this_comm = new simgrid::kernel::activity::CommImpl(SIMIX_COMM_SEND);
 
   /* Look for communication synchro matching our needs. We also provide a description of
    * ourself so that the other side also gets a chance of choosing if it wants to match with us.
    *
    * If it is not found then push our communication into the rendez-vous point */
-  simgrid::kernel::activity::Comm* other_comm =
+  simgrid::kernel::activity::CommImpl* other_comm =
       _find_matching_comm(&mbox->comm_queue, SIMIX_COMM_RECEIVE, match_fun, data, this_comm, /*remove_matching*/ true);
 
-  if (!other_comm) {
+  if (not other_comm) {
     other_comm = this_comm;
 
     if (mbox->permanent_receiver!=nullptr){
       //this mailbox is for small messages, which have to be sent right now
       other_comm->state   = SIMIX_READY;
       other_comm->dst_proc=mbox->permanent_receiver.get();
-      other_comm->ref();
+      other_comm          = static_cast<simgrid::kernel::activity::CommImpl*>(SIMIX_comm_ref(other_comm));
       mbox->done_comm_queue.push_back(other_comm);
       XBT_DEBUG("pushing a message into the permanent receive list %p, comm %p", mbox, &(other_comm));
 
@@ -124,7 +124,7 @@ XBT_PRIVATE smx_activity_t simcall_HANDLER_comm_isend(smx_simcall_t simcall, smx
     }
   } else {
     XBT_DEBUG("Receive already pushed");
-    this_comm->unref();
+    SIMIX_comm_unref(this_comm);
 
     other_comm->state = SIMIX_READY;
     other_comm->type = SIMIX_COMM_READY;
@@ -185,31 +185,31 @@ smx_activity_t SIMIX_comm_irecv(smx_actor_t dst_proc, smx_mailbox_t mbox, void *
     void (*copy_data_fun)(smx_activity_t, void*, size_t), // used to copy data if not default one
     void *data, double rate)
 {
-  XBT_DEBUG("recv from %p %p", mbox, &mbox->comm_queue);
-  simgrid::kernel::activity::Comm* this_synchro = new simgrid::kernel::activity::Comm(SIMIX_COMM_RECEIVE);
+  simgrid::kernel::activity::CommImpl* this_synchro = new simgrid::kernel::activity::CommImpl(SIMIX_COMM_RECEIVE);
+  XBT_DEBUG("recv from %p %p. this_synchro=%p", mbox, &mbox->comm_queue, this_synchro);
 
-  simgrid::kernel::activity::Comm* other_comm;
+  simgrid::kernel::activity::CommImpl* other_comm;
   //communication already done, get it inside the list of completed comms
-  if (mbox->permanent_receiver != nullptr && ! mbox->done_comm_queue.empty()) {
+  if (mbox->permanent_receiver != nullptr && not mbox->done_comm_queue.empty()) {
 
     XBT_DEBUG("We have a comm that has probably already been received, trying to match it, to skip the communication");
     //find a match in the list of already received comms
     other_comm = _find_matching_comm(&mbox->done_comm_queue, SIMIX_COMM_SEND, match_fun, data, this_synchro,
                                      /*remove_matching*/ true);
     //if not found, assume the receiver came first, register it to the mailbox in the classical way
-    if (!other_comm) {
+    if (not other_comm) {
       XBT_DEBUG("We have messages in the permanent receive list, but not the one we are looking for, pushing request into list");
       other_comm = this_synchro;
       mbox->push(this_synchro);
     } else {
-      if(other_comm->surf_comm && other_comm->remains() < 1e-12) {
+      if (other_comm->surf_comm && other_comm->remains() < 1e-12) {
         XBT_DEBUG("comm %p has been already sent, and is finished, destroy it",other_comm);
         other_comm->state = SIMIX_DONE;
         other_comm->type = SIMIX_COMM_DONE;
         other_comm->mbox = nullptr;
       }
-      other_comm->unref();
-      static_cast<simgrid::kernel::activity::Comm*>(this_synchro)->unref();
+      SIMIX_comm_unref(other_comm);
+      SIMIX_comm_unref(this_synchro);
     }
   } else {
     /* Prepare a comm describing us, so that it gets passed to the user-provided filter of other side */
@@ -221,15 +221,19 @@ smx_activity_t SIMIX_comm_irecv(smx_actor_t dst_proc, smx_mailbox_t mbox, void *
     other_comm = _find_matching_comm(&mbox->comm_queue, SIMIX_COMM_SEND, match_fun, data, this_synchro,
                                      /*remove_matching*/ true);
 
-    if (!other_comm) {
+    if (not other_comm) {
       XBT_DEBUG("Receive pushed first %zu", mbox->comm_queue.size());
       other_comm = this_synchro;
       mbox->push(this_synchro);
     } else {
-      this_synchro->unref();
+      XBT_DEBUG("Match my %p with the existing %p", this_synchro, other_comm);
+
+      other_comm = static_cast<simgrid::kernel::activity::CommImpl*>(other_comm);
 
       other_comm->state = SIMIX_READY;
       other_comm->type = SIMIX_COMM_READY;
+      SIMIX_comm_unref(this_synchro);
+      SIMIX_comm_unref(this_synchro);
     }
     dst_proc->comms.push_back(other_comm);
   }
@@ -266,31 +270,31 @@ smx_activity_t SIMIX_comm_iprobe(smx_actor_t dst_proc, smx_mailbox_t mbox, int t
                               int tag, int (*match_fun)(void *, void *, smx_activity_t), void *data)
 {
   XBT_DEBUG("iprobe from %p %p", mbox, &mbox->comm_queue);
-  simgrid::kernel::activity::Comm* this_comm;
+  simgrid::kernel::activity::CommImpl* this_comm;
   int smx_type;
   if(type == 1){
-    this_comm = new simgrid::kernel::activity::Comm(SIMIX_COMM_SEND);
+    this_comm = new simgrid::kernel::activity::CommImpl(SIMIX_COMM_SEND);
     smx_type = SIMIX_COMM_RECEIVE;
   } else{
-    this_comm = new simgrid::kernel::activity::Comm(SIMIX_COMM_RECEIVE);
+    this_comm = new simgrid::kernel::activity::CommImpl(SIMIX_COMM_RECEIVE);
     smx_type = SIMIX_COMM_SEND;
   } 
   smx_activity_t other_synchro=nullptr;
-  if (mbox->permanent_receiver != nullptr && !mbox->done_comm_queue.empty()) {
+  if (mbox->permanent_receiver != nullptr && not mbox->done_comm_queue.empty()) {
     XBT_DEBUG("first check in the permanent recv mailbox, to see if we already got something");
     other_synchro = _find_matching_comm(&mbox->done_comm_queue,
       (e_smx_comm_type_t) smx_type, match_fun, data, this_comm,/*remove_matching*/false);
   }
-  if (!other_synchro){
+  if (not other_synchro) {
     XBT_DEBUG("check if we have more luck in the normal mailbox");
     other_synchro = _find_matching_comm(&mbox->comm_queue,
       (e_smx_comm_type_t) smx_type, match_fun, data, this_comm,/*remove_matching*/false);
   }
 
   if(other_synchro)
-    other_synchro->unref();
+    SIMIX_comm_unref(other_synchro);
 
-  this_comm->unref();
+  SIMIX_comm_unref(this_comm);
   return other_synchro;
 }
 
@@ -312,7 +316,7 @@ void simcall_HANDLER_comm_wait(smx_simcall_t simcall, smx_activity_t synchro, do
       if (timeout < 0.0)
         THROW_IMPOSSIBLE;
 
-      simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+      simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
       if (comm->src_proc == simcall->issuer)
         comm->state = SIMIX_SRC_TIMEOUT;
       else
@@ -331,7 +335,7 @@ void simcall_HANDLER_comm_wait(smx_simcall_t simcall, smx_activity_t synchro, do
     surf_action_t sleep = simcall->issuer->host->pimpl_cpu->sleep(timeout);
     sleep->setData(synchro);
 
-    simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+    simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
     if (simcall->issuer == comm->src_proc)
       comm->src_timeout = sleep;
     else
@@ -341,7 +345,7 @@ void simcall_HANDLER_comm_wait(smx_simcall_t simcall, smx_activity_t synchro, do
 
 void simcall_HANDLER_comm_test(smx_simcall_t simcall, smx_activity_t synchro)
 {
-  simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+  simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
 
   if (MC_is_active() || MC_record_replay_is_active()){
     simcall_comm_test__set__result(simcall, comm->src_proc && comm->dst_proc);
@@ -456,7 +460,7 @@ void SIMIX_waitany_remove_simcall_from_actions(smx_simcall_t simcall)
  */
 static inline void SIMIX_comm_start(smx_activity_t synchro)
 {
-  simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+  simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
 
   /* If both the sender and the receiver are already there, start the communication */
   if (synchro->state == SIMIX_READY) {
@@ -464,12 +468,13 @@ static inline void SIMIX_comm_start(smx_activity_t synchro)
     simgrid::s4u::Host* sender   = comm->src_proc->host;
     simgrid::s4u::Host* receiver = comm->dst_proc->host;
 
-    XBT_DEBUG("Starting communication %p from '%s' to '%s'", synchro, sender->cname(), receiver->cname());
-
     comm->surf_comm = surf_network_model->communicate(sender, receiver, comm->task_size, comm->rate);
     comm->surf_comm->setData(synchro);
     comm->state = SIMIX_RUNNING;
 
+    XBT_DEBUG("Starting communication %p from '%s' to '%s' (surf_action: %p)", synchro, sender->cname(),
+              receiver->cname(), comm->surf_comm);
+
     /* If a link is failed, detect it immediately */
     if (comm->surf_comm->getState() == simgrid::surf::Action::State::failed) {
       XBT_DEBUG("Communication from '%s' to '%s' failed to start because of a link failure", sender->cname(),
@@ -501,17 +506,15 @@ static inline void SIMIX_comm_start(smx_activity_t synchro)
  */
 void SIMIX_comm_finish(smx_activity_t synchro)
 {
-  simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
-  unsigned int destroy_count = 0;
+  simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
 
-  while (!synchro->simcalls.empty()) {
+  while (not synchro->simcalls.empty()) {
     smx_simcall_t simcall = synchro->simcalls.front();
     synchro->simcalls.pop_front();
 
-    /* If a waitany simcall is waiting for this synchro to finish, then remove
-       it from the other synchros in the waitany list. Afterwards, get the
-       position of the actual synchro in the waitany dynar and
-       return it as the result of the simcall */
+    /* If a waitany simcall is waiting for this synchro to finish, then remove it from the other synchros in the waitany
+     * list. Afterwards, get the position of the actual synchro in the waitany dynar and return it as the result of the
+     * simcall */
 
     if (simcall->call == SIMCALL_NONE) //FIXME: maybe a better way to handle this case
       continue; // if process handling comm is killed
@@ -521,13 +524,14 @@ void SIMIX_comm_finish(smx_activity_t synchro)
         SIMIX_timer_remove(simcall->timer);
         simcall->timer = nullptr;
       }
-      if (!MC_is_active() && !MC_record_replay_is_active())
-        simcall_comm_waitany__set__result(simcall, xbt_dynar_search(simcall_comm_waitany__get__comms(simcall), &synchro));
+      if (not MC_is_active() && not MC_record_replay_is_active())
+        simcall_comm_waitany__set__result(simcall,
+                                          xbt_dynar_search(simcall_comm_waitany__get__comms(simcall), &synchro));
     }
 
     /* If the synchro is still in a rendez-vous point then remove from it */
     if (comm->mbox)
-      comm->mbox->remove(synchro);
+      comm->mbox->remove(comm);
 
     XBT_DEBUG("SIMIX_comm_finish: synchro state = %d", (int)synchro->state);
 
@@ -537,63 +541,62 @@ void SIMIX_comm_finish(smx_activity_t synchro)
       simcall->issuer->context->iwannadie = 1;
       SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
     } else {
-      switch (synchro->state) {
-
-      case SIMIX_DONE:
-        XBT_DEBUG("Communication %p complete!", synchro);
-        SIMIX_comm_copy_data(synchro);
-        break;
-
-      case SIMIX_SRC_TIMEOUT:
-        SMX_EXCEPTION(simcall->issuer, timeout_error, 0, "Communication timeouted because of sender");
-        break;
-
-      case SIMIX_DST_TIMEOUT:
-        SMX_EXCEPTION(simcall->issuer, timeout_error, 0, "Communication timeouted because of receiver");
-        break;
-
-      case SIMIX_SRC_HOST_FAILURE:
-        if (simcall->issuer == comm->src_proc)
-          simcall->issuer->context->iwannadie = 1;
-  //          SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
-        else
-          SMX_EXCEPTION(simcall->issuer, network_error, 0, "Remote peer failed");
-        break;
-
-      case SIMIX_DST_HOST_FAILURE:
-        if (simcall->issuer == comm->dst_proc)
-          simcall->issuer->context->iwannadie = 1;
-  //          SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
-        else
-          SMX_EXCEPTION(simcall->issuer, network_error, 0, "Remote peer failed");
-        break;
-
-      case SIMIX_LINK_FAILURE:
-
-        XBT_DEBUG(
-            "Link failure in synchro %p between '%s' and '%s': posting an exception to the issuer: %s (%p) detached:%d",
-            synchro, comm->src_proc ? comm->src_proc->host->cname() : nullptr,
-            comm->dst_proc ? comm->dst_proc->host->cname() : nullptr, simcall->issuer->cname(), simcall->issuer,
-            comm->detached);
-        if (comm->src_proc == simcall->issuer) {
-          XBT_DEBUG("I'm source");
-        } else if (comm->dst_proc == simcall->issuer) {
-          XBT_DEBUG("I'm dest");
-        } else {
-          XBT_DEBUG("I'm neither source nor dest");
-        }
-        SMX_EXCEPTION(simcall->issuer, network_error, 0, "Link failure");
-        break;
-
-      case SIMIX_CANCELED:
-        if (simcall->issuer == comm->dst_proc)
-          SMX_EXCEPTION(simcall->issuer, cancel_error, 0, "Communication canceled by the sender");
-        else
-          SMX_EXCEPTION(simcall->issuer, cancel_error, 0, "Communication canceled by the receiver");
-        break;
-
-      default:
-        xbt_die("Unexpected synchro state in SIMIX_comm_finish: %d", (int)synchro->state);
+      switch (comm->state) {
+
+        case SIMIX_DONE:
+          XBT_DEBUG("Communication %p complete!", synchro);
+          SIMIX_comm_copy_data(synchro);
+          break;
+
+        case SIMIX_SRC_TIMEOUT:
+          SMX_EXCEPTION(simcall->issuer, timeout_error, 0, "Communication timeouted because of sender");
+          break;
+
+        case SIMIX_DST_TIMEOUT:
+          SMX_EXCEPTION(simcall->issuer, timeout_error, 0, "Communication timeouted because of receiver");
+          break;
+
+        case SIMIX_SRC_HOST_FAILURE:
+          if (simcall->issuer == comm->src_proc)
+            simcall->issuer->context->iwannadie = 1;
+          //          SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
+          else
+            SMX_EXCEPTION(simcall->issuer, network_error, 0, "Remote peer failed");
+          break;
+
+        case SIMIX_DST_HOST_FAILURE:
+          if (simcall->issuer == comm->dst_proc)
+            simcall->issuer->context->iwannadie = 1;
+          //          SMX_EXCEPTION(simcall->issuer, host_error, 0, "Host failed");
+          else
+            SMX_EXCEPTION(simcall->issuer, network_error, 0, "Remote peer failed");
+          break;
+
+        case SIMIX_LINK_FAILURE:
+          XBT_DEBUG("Link failure in synchro %p between '%s' and '%s': posting an exception to the issuer: %s (%p) "
+                    "detached:%d",
+                    synchro, comm->src_proc ? comm->src_proc->host->cname() : nullptr,
+                    comm->dst_proc ? comm->dst_proc->host->cname() : nullptr, simcall->issuer->cname(), simcall->issuer,
+                    comm->detached);
+          if (comm->src_proc == simcall->issuer) {
+            XBT_DEBUG("I'm source");
+          } else if (comm->dst_proc == simcall->issuer) {
+            XBT_DEBUG("I'm dest");
+          } else {
+            XBT_DEBUG("I'm neither source nor dest");
+          }
+          SMX_EXCEPTION(simcall->issuer, network_error, 0, "Link failure");
+          break;
+
+        case SIMIX_CANCELED:
+          if (simcall->issuer == comm->dst_proc)
+            SMX_EXCEPTION(simcall->issuer, cancel_error, 0, "Communication canceled by the sender");
+          else
+            SMX_EXCEPTION(simcall->issuer, cancel_error, 0, "Communication canceled by the receiver");
+          break;
+
+        default:
+          xbt_die("Unexpected synchro state in SIMIX_comm_finish: %d", (int)synchro->state);
       }
     }
 
@@ -643,16 +646,10 @@ void SIMIX_comm_finish(smx_activity_t synchro)
         comm->dst_proc->comms.remove(synchro);
         comm->src_proc->comms.remove(synchro);
       }
-      //in case of a detached comm we have an extra ref to remove, as the sender won't do it
-      destroy_count++;
     }
 
     SIMIX_simcall_answer(simcall);
-    destroy_count++;
   }
-
-  while (destroy_count-- > 0)
-    static_cast<simgrid::kernel::activity::Comm*>(synchro)->unref();
 }
 
 /******************************************************************************/
@@ -667,7 +664,7 @@ void SIMIX_comm_set_copy_data_callback(void (*callback) (smx_activity_t, void*,
 
 void SIMIX_comm_copy_pointer_callback(smx_activity_t synchro, void* buff, size_t buff_size)
 {
-  simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+  simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
 
   xbt_assert((buff_size == sizeof(void *)), "Cannot copy %zu bytes: must be sizeof(void*)", buff_size);
   *(void **) (comm->dst_buff) = buff;
@@ -675,7 +672,7 @@ void SIMIX_comm_copy_pointer_callback(smx_activity_t synchro, void* buff, size_t
 
 void SIMIX_comm_copy_buffer_callback(smx_activity_t synchro, void* buff, size_t buff_size)
 {
-  simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+  simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
 
   XBT_DEBUG("Copy the data over");
   memcpy(comm->dst_buff, buff, buff_size);
@@ -685,18 +682,17 @@ void SIMIX_comm_copy_buffer_callback(smx_activity_t synchro, void* buff, size_t
   }
 }
 
-
 /**
  *  @brief Copy the communication data from the sender's buffer to the receiver's one
  *  @param synchro The communication
  */
 void SIMIX_comm_copy_data(smx_activity_t synchro)
 {
-  simgrid::kernel::activity::Comm *comm = static_cast<simgrid::kernel::activity::Comm*>(synchro);
+  simgrid::kernel::activity::CommImpl* comm = static_cast<simgrid::kernel::activity::CommImpl*>(synchro);
 
   size_t buff_size = comm->src_buff_size;
   /* If there is no data to copy then return */
-  if (!comm->src_buff || !comm->dst_buff || comm->copied)
+  if (not comm->src_buff || not comm->dst_buff || comm->copied)
     return;
 
   XBT_DEBUG("Copying comm %p data from %s (%p) -> %s (%p) (%zu bytes)", comm,
@@ -718,8 +714,22 @@ void SIMIX_comm_copy_data(smx_activity_t synchro)
         SIMIX_comm_copy_data_callback (comm, comm->src_buff, buff_size);
   }
 
-
   /* Set the copied flag so we copy data only once */
   /* (this function might be called from both communication ends) */
   comm->copied = 1;
 }
+
+/** Increase the refcount for this comm */
+smx_activity_t SIMIX_comm_ref(smx_activity_t comm)
+{
+  if (comm != nullptr)
+    intrusive_ptr_add_ref(comm);
+  return comm;
+}
+
+/** Decrease the refcount for this comm */
+void SIMIX_comm_unref(smx_activity_t comm)
+{
+  if (comm != nullptr)
+    intrusive_ptr_release(comm);
+}
index f2a98c7..2095a4c 100644 (file)
@@ -98,7 +98,7 @@ void SIMIX_synchro_finish(smx_activity_t synchro)
 namespace simgrid {
 namespace simix {
 
-Mutex::Mutex() : mutex_(this)
+MutexImpl::MutexImpl() : mutex_(this)
 {
   XBT_IN("(%p)", this);
   // Useful to initialize sleeping swag:
@@ -107,14 +107,14 @@ Mutex::Mutex() : mutex_(this)
   XBT_OUT();
 }
 
-Mutex::~Mutex()
+MutexImpl::~MutexImpl()
 {
   XBT_IN("(%p)", this);
   xbt_swag_free(this->sleeping);
   XBT_OUT();
 }
 
-void Mutex::lock(smx_actor_t issuer)
+void MutexImpl::lock(smx_actor_t issuer)
 {
   XBT_IN("(%p; %p)", this, issuer);
   /* FIXME: check where to validate the arguments */
@@ -141,7 +141,7 @@ void Mutex::lock(smx_actor_t issuer)
  * \param  issuer  the process that tries to acquire the mutex
  * \return whether we managed to lock the mutex
  */
-bool Mutex::try_lock(smx_actor_t issuer)
+bool MutexImpl::try_lock(smx_actor_t issuer)
 {
   XBT_IN("(%p, %p)", this, issuer);
   if (this->locked) {
@@ -161,10 +161,10 @@ bool Mutex::try_lock(smx_actor_t issuer)
  * If the unlocker is not the owner of the mutex nothing happens.
  * If there are no process waiting, it sets the mutex as free.
  */
-void Mutex::unlock(smx_actor_t issuer)
+void MutexImpl::unlock(smx_actor_t issuer)
 {
   XBT_IN("(%p, %p)", this, issuer);
-  if(!this->locked)
+  if (not this->locked)
     THROWF(mismatch_error, 0, "Cannot release that mutex: it was not locked.");
 
   /* If the mutex is not owned by the issuer, that's not good */
@@ -207,7 +207,7 @@ void SIMIX_mutex_unref(smx_mutex_t mutex)
 
 smx_mutex_t simcall_HANDLER_mutex_init(smx_simcall_t simcall)
 {
-  return new simgrid::simix::Mutex();
+  return new simgrid::simix::MutexImpl();
 }
 
 // Simcall handlers:
@@ -375,7 +375,6 @@ void intrusive_ptr_add_ref(s_smx_cond_t *cond)
 {
   auto previous = (cond->refcount_)++;
   xbt_assert(previous != 0);
-  (void) previous;
 }
 
 void intrusive_ptr_release(s_smx_cond_t *cond)
index c4c5371..37b5f13 100644 (file)
 namespace simgrid {
 namespace simix {
 
-class XBT_PUBLIC() Mutex {
+class XBT_PUBLIC() MutexImpl {
 public:
-  Mutex();
-  ~Mutex();
-  Mutex(Mutex const&) = delete;
-  Mutex& operator=(Mutex const&) = delete;
+  MutexImpl();
+  ~MutexImpl();
+  MutexImpl(MutexImpl const&) = delete;
+  MutexImpl& operator=(MutexImpl const&) = delete;
 
   void lock(smx_actor_t issuer);
   bool try_lock(smx_actor_t issuer);
@@ -29,14 +29,14 @@ public:
   xbt_swag_t sleeping = nullptr;
 
   // boost::intrusive_ptr<Mutex> support:
-  friend void intrusive_ptr_add_ref(Mutex* mutex)
+  friend void intrusive_ptr_add_ref(MutexImpl* mutex)
   {
     // Atomic operation! Do not split in two instructions!
     auto previous = (mutex->refcount_)++;
     xbt_assert(previous != 0);
     (void) previous;
   }
-  friend void intrusive_ptr_release(Mutex* mutex)
+  friend void intrusive_ptr_release(MutexImpl* mutex)
   {
     // Atomic operation! Do not split in two instructions!
     auto count = --(mutex->refcount_);
index 9f0e626..c7b8dba 100644 (file)
@@ -88,7 +88,7 @@ double SmpiHost::oisend(size_t size)
 
 SmpiHost::SmpiHost(simgrid::s4u::Host *ptr) : host(ptr)
 {
-  if (!SmpiHost::EXTENSION_ID.valid())
+  if (not SmpiHost::EXTENSION_ID.valid())
     SmpiHost::EXTENSION_ID = simgrid::s4u::Host::extension_create<SmpiHost>();
 
   const char* orecv_string = host->property("smpi/or");
index e7cd1f7..786b0af 100644 (file)
@@ -130,7 +130,7 @@ Coll_allgather_2dmesh::allgather(void *send_buff, int send_count, MPI_Datatype
 
   block_size = extent * send_count;
 
-  if (!is_2dmesh(num_procs, &X, &Y))
+  if (not is_2dmesh(num_procs, &X, &Y))
     THROWF(arg_error,0, "allgather_2dmesh algorithm can't be used with this number of processes! ");
 
   my_row_base = (rank / Y) * Y;
index 35c2d1b..b97d22a 100644 (file)
@@ -113,7 +113,7 @@ int Coll_allgather_3dmesh::allgather(void *send_buff, int send_count,
   num_procs = comm->size();
   extent = send_type->get_extent();
 
-  if (!is_3dmesh(num_procs, &X, &Y, &Z))
+  if (not is_3dmesh(num_procs, &X, &Y, &Z))
     THROWF(arg_error,0, "allgather_3dmesh algorithm can't be used with this number of processes! ");
 
 
index d648f5d..366f74f 100644 (file)
@@ -45,7 +45,7 @@ int Coll_allgather_SMP_NTS::allgather(void *sbuf, int scount,
 
   /* for too small number of processes, use default implementation */
   if (comm_size <= num_core) {
-    XBT_WARN("MPI_allgather_SMP_NTS use default MPI_allgather.");        
+    XBT_WARN("MPI_allgather_SMP_NTS use default MPI_allgather.");
     Coll_allgather_default::allgather(sbuf, scount, stype, rbuf, rcount, rtype, comm);
     return MPI_SUCCESS;    
   }
index 064a8f7..f2fd8b8 100644 (file)
@@ -104,8 +104,7 @@ int Coll_allgather_bruck::allgather(void *send_buff, int send_count,
   tmp_buff = (char *) smpi_get_tmp_sendbuffer(num_procs * recv_count * recv_extent);
 
   // perform a local copy
-  Datatype::copy(send_ptr, send_count, send_type,
-                    tmp_buff, recv_count, recv_type);
+  Datatype::copy(send_ptr, send_count, send_type, tmp_buff, recv_count, recv_type);
   while (pof2 <= (num_procs / 2)) {
     src = (rank + pof2) % num_procs;
     dst = (rank - pof2 + num_procs) % num_procs;
index 6732afc..ddb11c2 100644 (file)
@@ -92,10 +92,9 @@ if(comm->get_leaders_comm()==MPI_COMM_NULL){
       if (intra_rank == j) {
         if (i != inter_comm_size - 1) {
 
-          inter_rrequest = Request::irecv((char *)rbuf + inter_recv_offset, rcount, rtype,
-                                         inter_src, tag, comm);
-          inter_srequest_array[inter_srequest_count++] = Request::isend((char *)rbuf + inter_send_offset, scount, stype,
-                                                                       inter_dst, tag, comm);
+          inter_rrequest = Request::irecv((char*)rbuf + inter_recv_offset, rcount, rtype, inter_src, tag, comm);
+          inter_srequest_array[inter_srequest_count++] =
+              Request::isend((char*)rbuf + inter_send_offset, scount, stype, inter_dst, tag, comm);
         }
       }
       //intra_communication
index 6054049..740c911 100644 (file)
@@ -52,8 +52,8 @@ int Coll_allgather_mvapich2_smp::allgather(void *sendbuf,int sendcnt, MPI_Dataty
   if(comm->get_leaders_comm()==MPI_COMM_NULL){
     comm->init_smp();
   }
-  
-    if(!comm->is_uniform() || !comm->is_blocked())
+
+  if (not comm->is_uniform() || not comm->is_blocked())
     THROWF(arg_error,0, "allgather MVAPICH2 smp algorithm can't be used with irregular deployment. Please insure that processes deployed on the same node are contiguous and that each node has the same number of processes");
   
     if (recvcnt == 0) {
@@ -114,8 +114,8 @@ int Coll_allgather_mvapich2_smp::allgather(void *sendbuf,int sendcnt, MPI_Dataty
 
             displs =  static_cast<int *>(xbt_malloc(sizeof (int) * leader_comm_size));
             recvcnts =  static_cast<int *>(xbt_malloc(sizeof (int) * leader_comm_size));
-            if (!displs || !recvcnts) {
-                return MPI_ERR_OTHER;
+            if (not displs || not recvcnts) {
+              return MPI_ERR_OTHER;
             }
             recvcnts[0] = node_sizes[0] * recvcnt;
             displs[0] = 0;
index 8f4d2a9..cb350c6 100644 (file)
@@ -115,7 +115,7 @@ Coll_allgather_ompi_neighborexchange::allgather(void *sbuf, int scount,
    } 
 
    /* Determine neighbors, order in which blocks will arrive, etc. */
-   even_rank = !(rank % 2);
+   even_rank = not(rank % 2);
    if (even_rank) {
       neighbor[0] = (rank + 1) % size;
       neighbor[1] = (rank - 1 + size) % size;
index e0d180c..2311385 100644 (file)
@@ -94,10 +94,8 @@ Coll_allgather_rhv::allgather(void *sbuf, int send_count,
 
     //  printf("node %d send to %d in phase %d s_offset = %d r_offset = %d count = %d\n",rank,dst,phase, send_base_offset, recv_base_offset, curr_count);
 
-    Request::sendrecv((char *)rbuf + send_offset, curr_count, recv_type, dst, tag,
-                (char *)rbuf + recv_offset, curr_count, recv_type, dst, tag,
-                 comm, &status);
-
+    Request::sendrecv((char*)rbuf + send_offset, curr_count, recv_type, dst, tag, (char*)rbuf + recv_offset, curr_count,
+                      recv_type, dst, tag, comm, &status);
 
     curr_count *= 2;
     i *= 2;
index fb7f12f..df47969 100644 (file)
@@ -91,7 +91,7 @@ Coll_allgather_spreading_simple::allgather(void *send_buff, int send_count,
 
   num_reqs = (2 * num_procs) - 2;
   reqs = (MPI_Request *) xbt_malloc(num_reqs * sizeof(MPI_Request));
-  if (!reqs) {
+  if (not reqs) {
     printf("allgather-spreading-simple.c:40: cannot allocate memory\n");
     MPI_Finalize();
     exit(0);
index 875ca1e..2701c23 100644 (file)
@@ -15,8 +15,7 @@ int Coll_allgatherv_GB::allgatherv(void *send_buff, int send_count,
                                  int *recv_counts, int *recv_disps, MPI_Datatype recv_type,
                                  MPI_Comm comm)
 {
-  Colls::gatherv(send_buff, send_count, send_type, recv_buff, recv_counts,
-                  recv_disps, recv_type, 0, comm);
+  Colls::gatherv(send_buff, send_count, send_type, recv_buff, recv_counts, recv_disps, recv_type, 0, comm);
   int num_procs, i, current, max = 0;
   num_procs = comm->size();
   for (i = 0; i < num_procs; i++) {
index 4af5cd8..e2e973a 100644 (file)
@@ -72,7 +72,7 @@ Coll_allgatherv_mpich_ring::allgatherv(void *sendbuf, int sendcount,
     min = 32768*8 / recvtype_extent;
   /* Handle the case where the datatype extent is larger than
    * the pipeline size. */
-  if (!min)
+  if (not min)
     min = 1;
 
   sidx = rank;
@@ -86,25 +86,23 @@ Coll_allgatherv_mpich_ring::allgatherv(void *sendbuf, int sendcount,
       rbuf = (char *)recvbuf + ((displs[ridx] + roffset) * recvtype_extent);
 
       /* Protect against wrap-around of indices */
-      if (!tosend)
+      if (not tosend)
         sendnow = 0;
-      if (!torecv)
+      if (not torecv)
         recvnow = 0;
 
       /* Communicate */
-      if (!sendnow && !recvnow) {
-          /* Don't do anything. This case is possible if two
-           * consecutive processes contribute 0 bytes each. */
-      }
-      else if (!sendnow) { /* If there's no data to send, just do a recv call */
-          Request::recv(rbuf, recvnow, recvtype, left, COLL_TAG_ALLGATHERV, comm, &status);
+      if (not sendnow && not recvnow) {
+        /* Don't do anything. This case is possible if two
+         * consecutive processes contribute 0 bytes each. */
+      } else if (not sendnow) { /* If there's no data to send, just do a recv call */
+        Request::recv(rbuf, recvnow, recvtype, left, COLL_TAG_ALLGATHERV, comm, &status);
 
-          torecv -= recvnow;
-      }
-      else if (!recvnow) { /* If there's no data to receive, just do a send call */
-          Request::send(sbuf, sendnow, recvtype, right, COLL_TAG_ALLGATHERV, comm);
+        torecv -= recvnow;
+      } else if (not recvnow) { /* If there's no data to receive, just do a send call */
+        Request::send(sbuf, sendnow, recvtype, right, COLL_TAG_ALLGATHERV, comm);
 
-          tosend -= sendnow;
+        tosend -= sendnow;
       }
       else { /* There's data to be sent and received */
           Request::sendrecv(sbuf, sendnow, recvtype, right, COLL_TAG_ALLGATHERV,
index 15829ae..1b9f5af 100644 (file)
@@ -39,7 +39,7 @@ Coll_allreduce_lr::allreduce(void *sbuf, void *rbuf, int rcount,
 
   /* when communication size is smaller than number of process (not support) */
   if (rcount < size) {
-    XBT_WARN("MPI_allreduce_lr use default MPI_allreduce.");     
+    XBT_WARN("MPI_allreduce_lr use default MPI_allreduce.");
     Coll_allreduce_default::allreduce(sbuf, rbuf, rcount, dtype, op, comm);
     return MPI_SUCCESS; 
   }
index ca2d0f9..afc21e8 100644 (file)
@@ -56,7 +56,7 @@ int Coll_allreduce_smp_rsag_lr::allreduce(void *send_buf, void *recv_buf,
 
   int inter_comm_size = (comm_size + num_core - 1) / num_core;
 
-  if (!rank) {
+  if (not rank) {
     //printf("intra com size = %d\n",num_core);
     //printf("inter com size = %d\n",inter_comm_size);
   }
index fe9a81a..ea08353 100644 (file)
@@ -55,7 +55,7 @@ int Coll_allreduce_smp_rsag::allreduce(void *send_buf, void *recv_buf,
 
   int inter_comm_size = (comm_size + num_core - 1) / num_core;
 
-  if (!rank) {
+  if (not rank) {
     //printf("intra com size = %d\n",num_core);
     //printf("inter com size = %d\n",inter_comm_size);
   }
index 6b6c841..7c476a3 100644 (file)
@@ -74,7 +74,7 @@ int Coll_alltoall_2dmesh::alltoall(void *send_buff, int send_count,
   num_procs = comm->size();
   extent = send_type->get_extent();
 
-  if (!alltoall_check_is_2dmesh(num_procs, &X, &Y))
+  if (not alltoall_check_is_2dmesh(num_procs, &X, &Y))
     return MPI_ERR_OTHER;
 
   my_row_base = (rank / Y) * Y;
index 24c6b35..bb8ca3d 100644 (file)
@@ -65,7 +65,7 @@ int Coll_alltoall_3dmesh::alltoall(void *send_buff, int send_count,
   num_procs = comm->size();
   extent = send_type->get_extent();
 
-  if (!alltoall_check_is_3dmesh(num_procs, &X, &Y, &Z))
+  if (not alltoall_check_is_3dmesh(num_procs, &X, &Y, &Z))
     return MPI_ERR_OTHER;
 
   num_reqs = X;
index fae85c5..24b1a75 100644 (file)
@@ -91,9 +91,8 @@ int Coll_alltoall_pair::alltoall(void *send_buff, int send_count,
 
   for (i = 0; i < num_procs; i++) {
     src = dst = rank ^ i;
-    Request::sendrecv(send_ptr + dst * send_chunk, send_count, send_type, dst, tag,
-                recv_ptr + src * recv_chunk, recv_count, recv_type, src, tag,
-                comm, &s);
+    Request::sendrecv(send_ptr + dst * send_chunk, send_count, send_type, dst, tag, recv_ptr + src * recv_chunk,
+                      recv_count, recv_type, src, tag, comm, &s);
   }
 
   return MPI_SUCCESS;
index 474078c..e706a79 100644 (file)
@@ -54,8 +54,7 @@ int Coll_alltoallv_pair::alltoallv(void *send_buff, int *send_counts, int *send_
   for (i = 0; i < num_procs; i++) {
     src = dst = rank ^ i;
     Request::sendrecv(send_ptr + send_disps[dst] * send_chunk, send_counts[dst], send_type, dst, tag,
-                recv_ptr + recv_disps[src] * recv_chunk, recv_counts[src], recv_type, src, tag,
-                comm, &s);
+                      recv_ptr + recv_disps[src] * recv_chunk, recv_counts[src], recv_type, src, tag, comm, &s);
   }
   return MPI_SUCCESS;
 }
index 3f68369..2290059 100644 (file)
  ****************************************************************************/
 namespace simgrid{
 namespace smpi{
-int
-Coll_alltoallv_ring::alltoallv(void *send_buff, int *send_counts, int *send_disps,
-                             MPI_Datatype send_type,
-                             void *recv_buff, int *recv_counts, int *recv_disps, 
-                             MPI_Datatype recv_type,
-                              MPI_Comm comm)
+int Coll_alltoallv_ring::alltoallv(void* send_buff, int* send_counts, int* send_disps, MPI_Datatype send_type,
+                                   void* recv_buff, int* recv_counts, int* recv_disps, MPI_Datatype recv_type,
+                                   MPI_Comm comm)
 {
   MPI_Status s;
   MPI_Aint send_chunk, recv_chunk;
index b49a519..94131da 100644 (file)
@@ -45,8 +45,7 @@
  */
 namespace simgrid{
 namespace smpi{
-int Coll_barrier_ompi_doublering::barrier(MPI_Comm comm
-                                            )
+int Coll_barrier_ompi_doublering::barrier(MPI_Comm comm)
 {
     int rank, size;
     int left, right;
@@ -106,8 +105,7 @@ int Coll_barrier_ompi_doublering::barrier(MPI_Comm comm
  * To make synchronous, uses sync sends and sync sendrecvs
  */
 
-int Coll_barrier_ompi_recursivedoubling::barrier(MPI_Comm comm
-                                                   )
+int Coll_barrier_ompi_recursivedoubling::barrier(MPI_Comm comm)
 {
     int rank, size, adjsize;
     int mask, remote;
@@ -181,8 +179,7 @@ int Coll_barrier_ompi_recursivedoubling::barrier(MPI_Comm comm
  * To make synchronous, uses sync sends and sync sendrecvs
  */
 
-int Coll_barrier_ompi_bruck::barrier(MPI_Comm comm
-                                       )
+int Coll_barrier_ompi_bruck::barrier(MPI_Comm comm)
 {
     int rank, size;
     int distance, to, from;
@@ -214,8 +211,7 @@ int Coll_barrier_ompi_bruck::barrier(MPI_Comm comm
  * To make synchronous, uses sync sends and sync sendrecvs
  */
 /* special case for two processes */
-int Coll_barrier_ompi_two_procs::barrier(MPI_Comm comm
-                                           )
+int Coll_barrier_ompi_two_procs::barrier(MPI_Comm comm)
 {
     int remote;
 
index c5f5242..d91d728 100644 (file)
@@ -177,7 +177,7 @@ int Coll_bcast_NTSB::bcast(void *buf, int count, MPI_Datatype datatype,
 
   /* when count is not divisible by block size, use default BCAST for the remainder */
   if ((remainder != 0) && (count > segment)) {
-    XBT_WARN("MPI_bcast_NTSB use default MPI_bcast.");           
+    XBT_WARN("MPI_bcast_NTSB use default MPI_bcast.");
     Colls::bcast((char *) buf + (pipe_length * increment), remainder, datatype,
               root, comm);
   }
index 464bb5c..64e97a4 100644 (file)
@@ -125,7 +125,7 @@ int Coll_bcast_NTSL_Isend::bcast(void *buf, int count, MPI_Datatype datatype,
 
   /* when count is not divisible by block size, use default BCAST for the remainder */
   if ((remainder != 0) && (count > segment)) {
-    XBT_WARN("MPI_bcast_NTSL_Isend_nb use default MPI_bcast.");                  
+    XBT_WARN("MPI_bcast_NTSL_Isend_nb use default MPI_bcast.");
     Colls::bcast((char *) buf + (pipe_length * increment), remainder, datatype,
               root, comm);
   }
index 791e21f..801889e 100644 (file)
@@ -222,7 +222,7 @@ int Coll_bcast_SMP_binary::bcast(void *buf, int count,
 
   // when count is not divisible by block size, use default BCAST for the remainder
   if ((remainder != 0) && (count > segment)) {
-    XBT_WARN("MPI_bcast_SMP_binary use default MPI_bcast.");     
+    XBT_WARN("MPI_bcast_SMP_binary use default MPI_bcast.");
     Colls::bcast((char *) buf + (pipe_length * increment), remainder, datatype,
               root, comm);
   }
index 29d24a1..8c241b9 100644 (file)
@@ -53,7 +53,7 @@ int Coll_bcast_SMP_linear::bcast(void *buf, int count,
 
   // call native when MPI communication size is too small
   if (size <= num_core) {
-    XBT_WARN("MPI_bcast_SMP_linear use default MPI_bcast.");             
+    XBT_WARN("MPI_bcast_SMP_linear use default MPI_bcast.");
     Coll_bcast_default::bcast(buf, count, datatype, root, comm);
     return MPI_SUCCESS;            
   }
@@ -170,7 +170,7 @@ int Coll_bcast_SMP_linear::bcast(void *buf, int count,
 
   // when count is not divisible by block size, use default BCAST for the remainder
   if ((remainder != 0) && (count > segment)) {
-    XBT_WARN("MPI_bcast_SMP_linear use default MPI_bcast.");                    
+    XBT_WARN("MPI_bcast_SMP_linear use default MPI_bcast.");
     Colls::bcast((char *) buf + (pipe_length * increment), remainder, datatype,
               root, comm);
   }
index 89a92d2..66da225 100644 (file)
@@ -247,7 +247,7 @@ int Coll_bcast_arrival_pattern_aware_wait::bcast(void *buf, int count,
 
   /* when count is not divisible by block size, use default BCAST for the remainder */
   if ((remainder != 0) && (count > segment)) {
-    XBT_WARN("MPI_bcast_arrival_pattern_aware_wait use default MPI_bcast.");             
+    XBT_WARN("MPI_bcast_arrival_pattern_aware_wait use default MPI_bcast.");
     Colls::bcast((char *)buf + (pipe_length * increment), remainder, datatype, root, comm);
   }
 
index 39160e4..b4202d3 100644 (file)
@@ -358,7 +358,7 @@ int Coll_bcast_arrival_pattern_aware::bcast(void *buf, int count,
 
   /* when count is not divisible by block size, use default BCAST for the remainder */
   if ((remainder != 0) && (count > segment)) {
-    XBT_WARN("MPI_bcast_arrival_pattern_aware use default MPI_bcast.");          
+    XBT_WARN("MPI_bcast_arrival_pattern_aware use default MPI_bcast.");
     Colls::bcast((char *)buf + (pipe_length * increment), remainder, datatype, root, comm);
   }
 
index b457fcb..8ac87db 100644 (file)
@@ -318,24 +318,22 @@ int Coll_bcast_mvapich2_intra_node::bcast(void *buffer,
 #endif
         ) {
 
-        if (!is_contig || !is_homogeneous) {
-            tmp_buf=(void *)smpi_get_tmp_sendbuffer(nbytes);
-
-            /* TODO: Pipeline the packing and communication */
-           // position = 0;
-/*            if (rank == root) {*/
-/*                mpi_errno =*/
-/*                    MPIR_Pack_impl(buffer, count, datatype, tmp_buf, nbytes, &position);*/
-/*                if (mpi_errno)*/
-/*                    MPIU_ERR_POP(mpi_errno);*/
-/*            }*/
+      if (not is_contig || not is_homogeneous) {
+        tmp_buf = (void*)smpi_get_tmp_sendbuffer(nbytes);
+
+        /* TODO: Pipeline the packing and communication */
+        // position = 0;
+        /*            if (rank == root) {*/
+        /*                mpi_errno =*/
+        /*                    MPIR_Pack_impl(buffer, count, datatype, tmp_buf, nbytes, &position);*/
+        /*                if (mpi_errno)*/
+        /*                    MPIU_ERR_POP(mpi_errno);*/
+        /*            }*/
         }
 
         shmem_comm = comm->get_intra_comm();
-        if (!is_contig || !is_homogeneous) {
-            mpi_errno =
-                MPIR_Bcast_inter_node_helper_MV2(tmp_buf, nbytes, MPI_BYTE,
-                                                 root, comm);
+        if (not is_contig || not is_homogeneous) {
+          mpi_errno = MPIR_Bcast_inter_node_helper_MV2(tmp_buf, nbytes, MPI_BYTE, root, comm);
         } else {
             mpi_errno =
                 MPIR_Bcast_inter_node_helper_MV2(buffer, count, datatype, root,
@@ -344,20 +342,15 @@ int Coll_bcast_mvapich2_intra_node::bcast(void *buffer,
 
         /* We are now done with the inter-node phase */
             if (nbytes <= mv2_knomial_intra_node_threshold) {
-                if (!is_contig || !is_homogeneous) {
-                    mpi_errno = MPIR_Shmem_Bcast_MV2(tmp_buf, nbytes, MPI_BYTE,
-                                                     root, shmem_comm);
+              if (not is_contig || not is_homogeneous) {
+                mpi_errno = MPIR_Shmem_Bcast_MV2(tmp_buf, nbytes, MPI_BYTE, root, shmem_comm);
                 } else {
                     mpi_errno = MPIR_Shmem_Bcast_MV2(buffer, count, datatype,
                                                      root, shmem_comm);
                 }
             } else {
-                if (!is_contig || !is_homogeneous) {
-                    mpi_errno =
-                        MPIR_Knomial_Bcast_intra_node_MV2(tmp_buf, nbytes,
-                                                          MPI_BYTE,
-                                                          INTRA_NODE_ROOT,
-                                                          shmem_comm);
+              if (not is_contig || not is_homogeneous) {
+                mpi_errno = MPIR_Knomial_Bcast_intra_node_MV2(tmp_buf, nbytes, MPI_BYTE, INTRA_NODE_ROOT, shmem_comm);
                 } else {
                     mpi_errno =
                         MPIR_Knomial_Bcast_intra_node_MV2(buffer, count,
index 861a86d..cd8ea10 100644 (file)
@@ -117,8 +117,8 @@ Coll_bcast_ompi_split_bintree::bcast ( void* buffer,
         /* Note that ompi_datatype_type_size() will never return a negative
            value in typelng; it returns an int [vs. an unsigned type]
            because of the MPI spec. */
-       if (segsize < ((uint32_t) type_size)) {
-            segsize = type_size; /* push segsize up to hold one type */
+        if (segsize < ((uint32_t)type_size)) {
+          segsize = type_size; /* push segsize up to hold one type */
         }
         segcount[0] = segcount[1] = segsize / type_size; 
         num_segments[0] = counts[0]/segcount[0];
index 1a1fe1a..775b82e 100644 (file)
@@ -324,15 +324,13 @@ Coll_bcast_scatter_rdb_allgather::bcast (
       xbt_die("we didn't receive enough !");
     }
 
-    if (!is_contig || !is_homogeneous)
-    {
-        if (rank != root)
-        {
-            position = 0;
-            mpi_errno = MPI_Unpack(tmp_buf, nbytes, &position, buffer,
-                                         count, datatype, comm);
-            if (mpi_errno) xbt_die("error when unpacking %d", mpi_errno);
-        }
+    if (not is_contig || not is_homogeneous) {
+      if (rank != root) {
+        position  = 0;
+        mpi_errno = MPI_Unpack(tmp_buf, nbytes, &position, buffer, count, datatype, comm);
+        if (mpi_errno)
+          xbt_die("error when unpacking %d", mpi_errno);
+      }
     }
 
 fn_exit:
index 4d8cf57..f90e726 100644 (file)
@@ -99,9 +99,9 @@ ompi_coll_tuned_topo_build_tree( int fanout,
     rank = comm->rank();
 
     tree = (ompi_coll_tree_t*)malloc(sizeof(ompi_coll_tree_t));
-    if (!tree) {
-        XBT_DEBUG("coll:tuned:topo_build_tree PANIC::out of memory");
-        return NULL;
+    if (not tree) {
+      XBT_DEBUG("coll:tuned:topo_build_tree PANIC::out of memory");
+      return NULL;
     }
 
     tree->tree_root     = MPI_UNDEFINED;
@@ -199,10 +199,9 @@ ompi_coll_tuned_topo_build_in_order_bintree( MPI_Comm comm )
     rank = comm->rank();
 
     tree = (ompi_coll_tree_t*)malloc(sizeof(ompi_coll_tree_t));
-    if (!tree) {
-        XBT_DEBUG(
-                     "coll:tuned:topo_build_tree PANIC::out of memory");
-        return NULL;
+    if (not tree) {
+      XBT_DEBUG("coll:tuned:topo_build_tree PANIC::out of memory");
+      return NULL;
     }
 
     tree->tree_root     = MPI_UNDEFINED;
@@ -296,8 +295,8 @@ int ompi_coll_tuned_topo_destroy_tree( ompi_coll_tree_t** tree )
 {
     ompi_coll_tree_t *ptr;
 
-    if ((!tree)||(!*tree)) {
-        return MPI_SUCCESS;
+    if ((tree == nullptr) || (*tree == nullptr)) {
+      return MPI_SUCCESS;
     }
 
     ptr = *tree;
@@ -344,9 +343,9 @@ ompi_coll_tuned_topo_build_bmtree( MPI_Comm comm,
     index = rank -root;
 
     bmtree = (ompi_coll_tree_t*)malloc(sizeof(ompi_coll_tree_t));
-    if (!bmtree) {
-        XBT_DEBUG("coll:tuned:topo:build_bmtree PANIC out of memory");
-        return NULL;
+    if (not bmtree) {
+      XBT_DEBUG("coll:tuned:topo:build_bmtree PANIC out of memory");
+      return NULL;
     }
 
     bmtree->tree_bmtree   = 1;
@@ -402,9 +401,7 @@ ompi_coll_tuned_topo_build_bmtree( MPI_Comm comm,
  *                                                                 |
  *                                                                 7
  */
-ompi_coll_tree_t*
-ompi_coll_tuned_topo_build_in_order_bmtree( MPI_Comm comm,
-                                           int root )
+ompi_coll_tree_t* ompi_coll_tuned_topo_build_in_order_bmtree(MPI_Comm comm, int root)
 {
     int childs = 0;
     int rank, vrank;
@@ -425,9 +422,9 @@ ompi_coll_tuned_topo_build_in_order_bmtree( MPI_Comm comm,
     vrank = (rank - root + size) % size;
 
     bmtree = (ompi_coll_tree_t*)xbt_malloc(sizeof(ompi_coll_tree_t));
-    if (!bmtree) {
-        XBT_DEBUG("coll:tuned:topo:build_bmtree PANIC out of memory");
-        return NULL;
+    if (not bmtree) {
+      XBT_DEBUG("coll:tuned:topo:build_bmtree PANIC out of memory");
+      return NULL;
     }
 
     bmtree->tree_bmtree   = 1;
@@ -438,25 +435,23 @@ ompi_coll_tuned_topo_build_in_order_bmtree( MPI_Comm comm,
     }
 
     if (root == rank) {
-       bmtree->tree_prev = root;
+      bmtree->tree_prev = root;
     }
 
     while (mask < size) {
-       remote = vrank ^ mask;
-       if (remote < vrank) {
-           bmtree->tree_prev = (remote + root) % size;
-           break;
-       } else if (remote < size) {
-           bmtree->tree_next[childs] = (remote + root) % size;
-           childs++;
-           if (childs==MAXTREEFANOUT) {
-               XBT_DEBUG(
-                            "coll:tuned:topo:build_bmtree max fanout incorrect %d needed %d",
-                            MAXTREEFANOUT, childs);
-               return NULL;
-           }
-       }
-       mask <<= 1;
+      remote = vrank ^ mask;
+      if (remote < vrank) {
+        bmtree->tree_prev = (remote + root) % size;
+        break;
+      } else if (remote < size) {
+        bmtree->tree_next[childs] = (remote + root) % size;
+        childs++;
+        if (childs == MAXTREEFANOUT) {
+          XBT_DEBUG("coll:tuned:topo:build_bmtree max fanout incorrect %d needed %d", MAXTREEFANOUT, childs);
+          return NULL;
+        }
+      }
+      mask <<= 1;
     }
     bmtree->tree_nextsize = childs;
     bmtree->tree_root     = root;
@@ -497,10 +492,10 @@ ompi_coll_tuned_topo_build_chain( int fanout,
      * Allocate space for topology arrays if needed 
      */
     chain = (ompi_coll_tree_t*)malloc( sizeof(ompi_coll_tree_t) );
-    if (!chain) {
-        XBT_DEBUG("coll:tuned:topo:build_chain PANIC out of memory");
-        fflush(stdout);
-        return NULL;
+    if (not chain) {
+      XBT_DEBUG("coll:tuned:topo:build_chain PANIC out of memory");
+      fflush(stdout);
+      return NULL;
     }
     chain->tree_root     = MPI_UNDEFINED;
     chain->tree_nextsize = -1;
index cb66954..2702723 100644 (file)
@@ -55,9 +55,7 @@
     ompi_coll_tree_t*
     ompi_coll_tuned_topo_build_bmtree( MPI_Comm comm,
                                        int root );
-    ompi_coll_tree_t*
-    ompi_coll_tuned_topo_build_in_order_bmtree( MPI_Comm comm,
-                                               int root );
+    ompi_coll_tree_t* ompi_coll_tuned_topo_build_in_order_bmtree(MPI_Comm comm, int root);
     ompi_coll_tree_t*
     ompi_coll_tuned_topo_build_chain( int fanout,
                                       MPI_Comm com,
index 21c2142..407a3b3 100644 (file)
@@ -278,89 +278,80 @@ int Coll_gather_mvapich2_two_level::gather(void *sendbuf,
     /* leader_root is the rank of the leader of the root in leader_comm. 
      * leader_root is to be used as the root of the inter-leader gather ops 
      */
-    if (!comm->is_uniform()) {
-        if (local_rank == 0) {
-            int *displs = NULL;
-            int *recvcnts = NULL;
-            int *node_sizes;
-            int i = 0;
-            /* Node leaders have all the data. But, different nodes can have
-             * different number of processes. Do a Gather first to get the 
-             * buffer lengths at each leader, followed by a Gatherv to move
-             * the actual data */
+    if (not comm->is_uniform()) {
+      if (local_rank == 0) {
+        int* displs   = NULL;
+        int* recvcnts = NULL;
+        int* node_sizes;
+        int i = 0;
+        /* Node leaders have all the data. But, different nodes can have
+         * different number of processes. Do a Gather first to get the
+         * buffer lengths at each leader, followed by a Gatherv to move
+         * the actual data */
+
+        if (leader_comm_rank == leader_root && root != leader_of_root) {
+          /* The root of the Gather operation is not a node-level
+           * leader and this process's rank in the leader_comm
+           * is the same as leader_root */
+          if (rank == root) {
+            leader_gather_buf =
+                smpi_get_tmp_recvbuffer(recvcnt * MAX(recvtype_extent, recvtype_true_extent) * comm_size);
+          } else {
+            leader_gather_buf =
+                smpi_get_tmp_sendbuffer(sendcnt * MAX(sendtype_extent, sendtype_true_extent) * comm_size);
+          }
+          if (leader_gather_buf == NULL) {
+            mpi_errno = MPI_ERR_OTHER;
+            return mpi_errno;
+          }
+        }
 
-            if (leader_comm_rank == leader_root && root != leader_of_root) {
-                /* The root of the Gather operation is not a node-level 
-                 * leader and this process's rank in the leader_comm 
-                 * is the same as leader_root */
-                if(rank == root) { 
-                    leader_gather_buf = smpi_get_tmp_recvbuffer(recvcnt *
-                                                MAX(recvtype_extent,
-                                                recvtype_true_extent) *
-                                                comm_size);
-                } else { 
-                    leader_gather_buf = smpi_get_tmp_sendbuffer(sendcnt *
-                                                MAX(sendtype_extent,
-                                                sendtype_true_extent) *
-                                                comm_size);
-                } 
-                if (leader_gather_buf == NULL) {
-                    mpi_errno =  MPI_ERR_OTHER;
-                    return mpi_errno;
-                }
-            }
+        node_sizes = comm->get_non_uniform_map();
 
-            node_sizes = comm->get_non_uniform_map();
+        if (leader_comm_rank == leader_root) {
+          displs   = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+          recvcnts = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+          if (not displs || not recvcnts) {
+            mpi_errno = MPI_ERR_OTHER;
+            return mpi_errno;
+          }
+        }
 
-            if (leader_comm_rank == leader_root) {
-                displs =  static_cast<int *>(xbt_malloc(sizeof (int) * leader_comm_size));
-                recvcnts =  static_cast<int *>(xbt_malloc(sizeof (int) * leader_comm_size));
-                if (!displs || !recvcnts) {
-                    mpi_errno = MPI_ERR_OTHER;
-                    return mpi_errno;
-                }
-            }
+        if (root == leader_of_root) {
+          /* The root of the gather operation is also the node
+           * leader. Receive into recvbuf and we are done */
+          if (leader_comm_rank == leader_root) {
+            recvcnts[0] = node_sizes[0] * recvcnt;
+            displs[0]   = 0;
 
-            if (root == leader_of_root) {
-                /* The root of the gather operation is also the node 
-                 * leader. Receive into recvbuf and we are done */
-                if (leader_comm_rank == leader_root) {
-                    recvcnts[0] = node_sizes[0] * recvcnt;
-                    displs[0] = 0;
-
-                    for (i = 1; i < leader_comm_size; i++) {
-                        displs[i] = displs[i - 1] + node_sizes[i - 1] * recvcnt;
-                        recvcnts[i] = node_sizes[i] * recvcnt;
-                    }
-                } 
-                Colls::gatherv(tmp_buf,
-                                         local_size * nbytes,
-                                         MPI_BYTE, recvbuf, recvcnts,
-                                         displs, recvtype,
-                                         leader_root, leader_comm);
-            } else {
-                /* The root of the gather operation is not the node leader. 
-                 * Receive into leader_gather_buf and then send 
-                 * to the root */
-                if (leader_comm_rank == leader_root) {
-                    recvcnts[0] = node_sizes[0] * nbytes;
-                    displs[0] = 0;
-
-                    for (i = 1; i < leader_comm_size; i++) {
-                        displs[i] = displs[i - 1] + node_sizes[i - 1] * nbytes;
-                        recvcnts[i] = node_sizes[i] * nbytes;
-                    }
-                } 
-                Colls::gatherv(tmp_buf, local_size * nbytes,
-                                         MPI_BYTE, leader_gather_buf,
-                                         recvcnts, displs, MPI_BYTE,
-                                         leader_root, leader_comm);
+            for (i = 1; i < leader_comm_size; i++) {
+              displs[i]   = displs[i - 1] + node_sizes[i - 1] * recvcnt;
+              recvcnts[i] = node_sizes[i] * recvcnt;
             }
-            if (leader_comm_rank == leader_root) {
-                xbt_free(displs);
-                xbt_free(recvcnts);
+          }
+          Colls::gatherv(tmp_buf, local_size * nbytes, MPI_BYTE, recvbuf, recvcnts, displs, recvtype, leader_root,
+                         leader_comm);
+        } else {
+          /* The root of the gather operation is not the node leader.
+           * Receive into leader_gather_buf and then send
+           * to the root */
+          if (leader_comm_rank == leader_root) {
+            recvcnts[0] = node_sizes[0] * nbytes;
+            displs[0]   = 0;
+
+            for (i = 1; i < leader_comm_size; i++) {
+              displs[i]   = displs[i - 1] + node_sizes[i - 1] * nbytes;
+              recvcnts[i] = node_sizes[i] * nbytes;
             }
+          }
+          Colls::gatherv(tmp_buf, local_size * nbytes, MPI_BYTE, leader_gather_buf, recvcnts, displs, MPI_BYTE,
+                         leader_root, leader_comm);
+        }
+        if (leader_comm_rank == leader_root) {
+          xbt_free(displs);
+          xbt_free(recvcnts);
         }
+      }
     } else {
         /* All nodes have the same number of processes. 
          * Just do one Gather to get all 
index ab4a62d..0420e51 100644 (file)
 namespace simgrid{
 namespace smpi{
 
-
-int Coll_gather_ompi_binomial::gather(void *sbuf, int scount,
-                                     MPI_Datatype sdtype,
-                                     void *rbuf, int rcount,
-                                     MPI_Datatype rdtype,
-                                     int root,
-                                     MPI_Comm comm)
+int Coll_gather_ompi_binomial::gather(void* sbuf, int scount, MPI_Datatype sdtype, void* rbuf, int rcount,
+                                      MPI_Datatype rdtype, int root, MPI_Comm comm)
 {
     int line = -1;
     int i;
@@ -51,8 +46,7 @@ int Coll_gather_ompi_binomial::gather(void *sbuf, int scount,
     size = comm->size();
     rank = comm->rank();
 
-    XBT_DEBUG(
-                "smpi_coll_tuned_gather_ompi_binomial rank %d", rank);
+    XBT_DEBUG("smpi_coll_tuned_gather_ompi_binomial rank %d", rank);
 
     /* create the binomial tree */
    // COLL_TUNED_UPDATE_IN_ORDER_BMTREE( comm, tuned_module, root );
@@ -67,133 +61,143 @@ int Coll_gather_ompi_binomial::gather(void *sbuf, int scount,
     if (rank == root) {
         rdtype->extent(&rlb, &rextent);
         rdtype->extent(&rtrue_lb, &rtrue_extent);
-       if (0 == root){
-           /* root on 0, just use the recv buffer */
-           ptmp = (char *) rbuf;
-           if (sbuf != MPI_IN_PLACE) {
-               err = Datatype::copy(sbuf, scount, sdtype,
-                                     ptmp, rcount, rdtype);
-               if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
-           }
-       } else {
-           /* root is not on 0, allocate temp buffer for recv,
-            * rotate data at the end */
-           tempbuf = (char *) smpi_get_tmp_recvbuffer(rtrue_extent + (rcount*size - 1) * rextent);
-           if (NULL == tempbuf) {
-               err= MPI_ERR_OTHER; line = __LINE__; goto err_hndl;
-           }
-
-           ptmp = tempbuf - rlb;
-           if (sbuf != MPI_IN_PLACE) {
-               /* copy from sbuf to temp buffer */
-               err = Datatype::copy(sbuf, scount, sdtype,
-                                     ptmp, rcount, rdtype);
-               if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
-           } else {
-               /* copy from rbuf to temp buffer  */
-               err = Datatype::copy((char *) rbuf + rank*rextent*rcount, rcount, rdtype, ptmp, rcount, rdtype );
-               if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
-           }
-       }
-       total_recv = rcount;
+        if (0 == root) {
+          /* root on 0, just use the recv buffer */
+          ptmp = (char*)rbuf;
+          if (sbuf != MPI_IN_PLACE) {
+            err = Datatype::copy(sbuf, scount, sdtype, ptmp, rcount, rdtype);
+            if (MPI_SUCCESS != err) {
+              line = __LINE__;
+              goto err_hndl;
+            }
+          }
+        } else {
+          /* root is not on 0, allocate temp buffer for recv,
+           * rotate data at the end */
+          tempbuf = (char*)smpi_get_tmp_recvbuffer(rtrue_extent + (rcount * size - 1) * rextent);
+          if (NULL == tempbuf) {
+            err  = MPI_ERR_OTHER;
+            line = __LINE__;
+            goto err_hndl;
+          }
+
+          ptmp = tempbuf - rlb;
+          if (sbuf != MPI_IN_PLACE) {
+            /* copy from sbuf to temp buffer */
+            err = Datatype::copy(sbuf, scount, sdtype, ptmp, rcount, rdtype);
+            if (MPI_SUCCESS != err) {
+              line = __LINE__;
+              goto err_hndl;
+            }
+          } else {
+            /* copy from rbuf to temp buffer  */
+            err = Datatype::copy((char*)rbuf + rank * rextent * rcount, rcount, rdtype, ptmp, rcount, rdtype);
+            if (MPI_SUCCESS != err) {
+              line = __LINE__;
+              goto err_hndl;
+            }
+          }
+        }
+        total_recv = rcount;
     } else if (!(vrank % 2)) {
-       /* other non-leaf nodes, allocate temp buffer for data received from
-        * children, the most we need is half of the total data elements due
-        * to the property of binimoal tree */
-       tempbuf = (char *) smpi_get_tmp_sendbuffer(strue_extent + (scount*size - 1) * sextent);
-       if (NULL == tempbuf) {
-           err= MPI_ERR_OTHER; line = __LINE__; goto err_hndl;
-       }
-
-       ptmp = tempbuf - slb;
-       /* local copy to tempbuf */
-       err = Datatype::copy(sbuf, scount, sdtype,
-                                   ptmp, scount, sdtype);
-       if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
-
-       /* use sdtype,scount as rdtype,rdcount since they are ignored on
-        * non-root procs */
-       rdtype = sdtype;
-       rcount = scount;
-       rextent = sextent;
-       total_recv = rcount;
+      /* other non-leaf nodes, allocate temp buffer for data received from
+       * children, the most we need is half of the total data elements due
+       * to the property of binimoal tree */
+      tempbuf = (char*)smpi_get_tmp_sendbuffer(strue_extent + (scount * size - 1) * sextent);
+      if (NULL == tempbuf) {
+        err  = MPI_ERR_OTHER;
+        line = __LINE__;
+        goto err_hndl;
+      }
+
+      ptmp = tempbuf - slb;
+      /* local copy to tempbuf */
+      err = Datatype::copy(sbuf, scount, sdtype, ptmp, scount, sdtype);
+      if (MPI_SUCCESS != err) {
+        line = __LINE__;
+        goto err_hndl;
+      }
+
+      /* use sdtype,scount as rdtype,rdcount since they are ignored on
+       * non-root procs */
+      rdtype     = sdtype;
+      rcount     = scount;
+      rextent    = sextent;
+      total_recv = rcount;
     } else {
-       /* leaf nodes, no temp buffer needed, use sdtype,scount as
-        * rdtype,rdcount since they are ignored on non-root procs */
-       ptmp = (char *) sbuf;
-       total_recv = scount;
+      /* leaf nodes, no temp buffer needed, use sdtype,scount as
+       * rdtype,rdcount since they are ignored on non-root procs */
+      ptmp       = (char*)sbuf;
+      total_recv = scount;
     }
 
     if (!(vrank % 2)) {
-       /* all non-leaf nodes recv from children */
-       for (i = 0; i < bmtree->tree_nextsize; i++) {
-           int mycount = 0, vkid;
-           /* figure out how much data I have to send to this child */
-           vkid = (bmtree->tree_next[i] - root + size) % size;
-           mycount = vkid - vrank;
-           if (mycount > (size - vkid))
-               mycount = size - vkid;
-           mycount *= rcount;
-
-           XBT_DEBUG(
-                        "smpi_coll_tuned_gather_ompi_binomial rank %d recv %d mycount = %d",
-                        rank, bmtree->tree_next[i], mycount);
-
-           Request::recv(ptmp + total_recv*rextent, mycount, rdtype,
-                                   bmtree->tree_next[i], COLL_TAG_GATHER,
-                                   comm, &status);
-
-           total_recv += mycount;
-       }
+      /* all non-leaf nodes recv from children */
+      for (i = 0; i < bmtree->tree_nextsize; i++) {
+        int mycount = 0, vkid;
+        /* figure out how much data I have to send to this child */
+        vkid    = (bmtree->tree_next[i] - root + size) % size;
+        mycount = vkid - vrank;
+        if (mycount > (size - vkid))
+          mycount = size - vkid;
+        mycount *= rcount;
+
+        XBT_DEBUG("smpi_coll_tuned_gather_ompi_binomial rank %d recv %d mycount = %d", rank, bmtree->tree_next[i],
+                  mycount);
+
+        Request::recv(ptmp + total_recv * rextent, mycount, rdtype, bmtree->tree_next[i], COLL_TAG_GATHER, comm,
+                      &status);
+
+        total_recv += mycount;
+      }
     }
 
     if (rank != root) {
-       /* all nodes except root send to parents */
-       XBT_DEBUG(
-                    "smpi_coll_tuned_gather_ompi_binomial rank %d send %d count %d\n",
-                    rank, bmtree->tree_prev, total_recv);
-
-       Request::send(ptmp, total_recv, sdtype,
-                               bmtree->tree_prev,
-                               COLL_TAG_GATHER,
-                                comm);
+      /* all nodes except root send to parents */
+      XBT_DEBUG("smpi_coll_tuned_gather_ompi_binomial rank %d send %d count %d\n", rank, bmtree->tree_prev, total_recv);
+
+      Request::send(ptmp, total_recv, sdtype, bmtree->tree_prev, COLL_TAG_GATHER, comm);
   }
     if (rank == root) {
-       if (root != 0) {
-           /* rotate received data on root if root != 0 */
-           err = Datatype::copy(ptmp, rcount*(size - root), rdtype,
-                                                (char *) rbuf + rextent*root*rcount, rcount*(size - root), rdtype );
-           if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
-
+      if (root != 0) {
+        /* rotate received data on root if root != 0 */
+        err = Datatype::copy(ptmp, rcount * (size - root), rdtype, (char*)rbuf + rextent * root * rcount,
+                             rcount * (size - root), rdtype);
+        if (MPI_SUCCESS != err) {
+          line = __LINE__;
+          goto err_hndl;
+        }
 
-           err = Datatype::copy( ptmp + rextent*rcount*(size-root), rcount*root,rdtype, 
-                                                (char *) rbuf,rcount*root,rdtype);
-           if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
+        err = Datatype::copy(ptmp + rextent * rcount * (size - root), rcount * root, rdtype, (char*)rbuf, rcount * root,
+                             rdtype);
+        if (MPI_SUCCESS != err) {
+          line = __LINE__;
+          goto err_hndl;
+        }
 
-           smpi_free_tmp_buffer(tempbuf);
-       }
+        smpi_free_tmp_buffer(tempbuf);
+      }
     } else if (!(vrank % 2)) {
-       /* other non-leaf nodes */
-       smpi_free_tmp_buffer(tempbuf);
+      /* other non-leaf nodes */
+      smpi_free_tmp_buffer(tempbuf);
     }
     xbt_free(bmtree);
     return MPI_SUCCESS;
 
  err_hndl:
     if (NULL != tempbuf)
-       smpi_free_tmp_buffer(tempbuf);
+      smpi_free_tmp_buffer(tempbuf);
 
-    XBT_DEBUG(  "%s:%4d\tError occurred %d, rank %2d",
-                __FILE__, line, err, rank);
+    XBT_DEBUG("%s:%4d\tError occurred %d, rank %2d", __FILE__, line, err, rank);
     return err;
 }
 
 /*
- *     gather_intra_linear_sync
+ *  gather_intra_linear_sync
  *
- *     Function:       - synchronized gather operation with
- *     Accepts:        - same arguments as MPI_Gather(), first segment size
- *     Returns:        - MPI_SUCCESS or error code
+ *  Function:  - synchronized gather operation with
+ *  Accepts:  - same arguments as MPI_Gather(), first segment size
+ *  Returns:  - MPI_SUCCESS or error code
  */
 int Coll_gather_ompi_linear_sync::gather(void *sbuf, int scount,
                                          MPI_Datatype sdtype,
@@ -229,50 +233,45 @@ int Coll_gather_ompi_linear_sync::gather(void *sbuf, int scount,
      first_segment_size = 1024;
      }
 
-    XBT_DEBUG(
-                "smpi_coll_tuned_gather_ompi_linear_sync rank %d, segment %d", rank, first_segment_size);
+     XBT_DEBUG("smpi_coll_tuned_gather_ompi_linear_sync rank %d, segment %d", rank, first_segment_size);
 
-    if (rank != root) {
-        /* Non-root processes:
-           - receive zero byte message from the root,
-           - send the first segment of the data synchronously,
-           - send the second segment of the data.
-        */
-
-        typelng= sdtype->size();
-        sdtype->extent(&lb, &extent);
-        first_segment_count = scount;
-        COLL_TUNED_COMPUTED_SEGCOUNT( (size_t) first_segment_size, typelng, 
-                                      first_segment_count );
+     if (rank != root) {
+       /* Non-root processes:
+          - receive zero byte message from the root,
+          - send the first segment of the data synchronously,
+          - send the second segment of the data.
+       */
+
+       typelng = sdtype->size();
+       sdtype->extent(&lb, &extent);
+       first_segment_count = scount;
+       COLL_TUNED_COMPUTED_SEGCOUNT((size_t)first_segment_size, typelng, first_segment_count);
 
-        Request::recv(sbuf, 0, MPI_BYTE, root, 
-                                COLL_TAG_GATHER,
-                                comm, MPI_STATUS_IGNORE);
+       Request::recv(sbuf, 0, MPI_BYTE, root, COLL_TAG_GATHER, comm, MPI_STATUS_IGNORE);
 
-        Request::send(sbuf, first_segment_count, sdtype, root,
-                                COLL_TAG_GATHER,
-                                 comm);
+       Request::send(sbuf, first_segment_count, sdtype, root, COLL_TAG_GATHER, comm);
 
-        Request::send((char*)sbuf + extent * first_segment_count, 
-                                (scount - first_segment_count), sdtype, 
-                                root, COLL_TAG_GATHER,
-                                 comm);
+       Request::send((char*)sbuf + extent * first_segment_count, (scount - first_segment_count), sdtype, root,
+                     COLL_TAG_GATHER, comm);
     }
 
     else {
-        /* Root process, 
-           - For every non-root node:
-          - post irecv for the first segment of the message
-          - send zero byte message to signal node to send the message
-          - post irecv for the second segment of the message
-          - wait for the first segment to complete
-           - Copy local data if necessary
-           - Waitall for all the second segments to complete.
-       */
-        char *ptmp;
-        MPI_Request *reqs = NULL, first_segment_req;
-        reqs = (MPI_Request *) calloc(size, sizeof(MPI_Request ));
-        if (NULL == reqs) { ret = -1; line = __LINE__; goto error_hndl; }
+      /* Root process,
+         - For every non-root node:
+   - post irecv for the first segment of the message
+   - send zero byte message to signal node to send the message
+   - post irecv for the second segment of the message
+   - wait for the first segment to complete
+         - Copy local data if necessary
+         - Waitall for all the second segments to complete.
+*/
+      char* ptmp;
+      MPI_Request *reqs = NULL, first_segment_req;
+      reqs              = (MPI_Request*)calloc(size, sizeof(MPI_Request));
+      if (NULL == reqs) {
+        ret  = -1;
+        line = __LINE__;
+        goto error_hndl; }
         
         typelng=rdtype->size();
         rdtype->extent(&lb, &extent);
@@ -347,18 +346,14 @@ int Coll_gather_ompi_linear_sync::gather(void *sbuf, int scount,
 
 /* copied function (with appropriate renaming) starts here */
 /*
- *     gather_intra
+ *  gather_intra
  *
- *     Function:       - basic gather operation
- *     Accepts:        - same arguments as MPI_Gather()
- *     Returns:        - MPI_SUCCESS or error code
+ *  Function:  - basic gather operation
+ *  Accepts:  - same arguments as MPI_Gather()
+ *  Returns:  - MPI_SUCCESS or error code
  */
-int Coll_gather_ompi_basic_linear::gather(void *sbuf, int scount,
-                                         MPI_Datatype sdtype,
-                                         void *rbuf, int rcount,
-                                         MPI_Datatype rdtype,
-                                         int root,
-                                         MPI_Comm comm)
+int Coll_gather_ompi_basic_linear::gather(void* sbuf, int scount, MPI_Datatype sdtype, void* rbuf, int rcount,
+                                          MPI_Datatype rdtype, int root, MPI_Comm comm)
 {
     int i;
     int err;
@@ -373,8 +368,7 @@ int Coll_gather_ompi_basic_linear::gather(void *sbuf, int scount,
     rank = comm->rank();
 
     /* Everyone but root sends data and returns. */
-    XBT_DEBUG(
-                "ompi_coll_tuned_gather_intra_basic_linear rank %d", rank);
+    XBT_DEBUG("ompi_coll_tuned_gather_intra_basic_linear rank %d", rank);
 
     if (rank != root) {
         Request::send(sbuf, scount, sdtype, root,
index c2ac62b..4032b3d 100644 (file)
@@ -143,7 +143,7 @@ int Coll_reduce_NTSL::reduce(void *buf, void *rbuf, int count,
 
   /* when count is not divisible by block size, use default BCAST for the remainder */
   if ((remainder != 0) && (count > segment)) {
-    XBT_WARN("MPI_reduce_NTSL use default MPI_reduce.");         
+    XBT_WARN("MPI_reduce_NTSL use default MPI_reduce.");
     Coll_reduce_default::reduce((char *)buf + (pipe_length * increment),
                (char *)rbuf + (pipe_length * increment), remainder, datatype, op, root,
                comm);
index 9aed09b..ed8fb0e 100644 (file)
@@ -345,9 +345,8 @@ int Coll_reduce_arrival_pattern_aware::reduce(void *buf, void *rbuf,
 
   /* when count is not divisible by block size, use default BCAST for the remainder */
   if ((remainder != 0) && (count > segment)) {
-    Coll_reduce_default::reduce((char *)buf + (pipe_length * increment),
-              (char *)rbuf + (pipe_length * increment), remainder, datatype, op, root,
-               comm);
+    Coll_reduce_default::reduce((char*)buf + (pipe_length * increment), (char*)rbuf + (pipe_length * increment),
+                                remainder, datatype, op, root, comm);
   }
 
   smpi_free_tmp_buffer(tmp_buf);
index e7dfd60..e0cdc0c 100644 (file)
@@ -77,7 +77,7 @@ int Coll_reduce_binomial::reduce(void *sendbuf, void *recvbuf, int count,
     mask <<= 1;
   }
 
-  if (!is_commutative && (root != 0)){
+  if (not is_commutative && (root != 0)) {
     if (rank == 0){
       Request::send(recvbuf, count, datatype, root,tag, comm);
     }else if (rank == root){
@@ -86,7 +86,7 @@ int Coll_reduce_binomial::reduce(void *sendbuf, void *recvbuf, int count,
   }
 
   if (rank != root) {
-         smpi_free_tmp_buffer(recvbuf);
+    smpi_free_tmp_buffer(recvbuf);
   }
   smpi_free_tmp_buffer(tmp_buf);
 
index b5cea46..c60e9f9 100644 (file)
@@ -150,17 +150,12 @@ int Coll_reduce_mvapich2_two_level::reduce( void *sendbuf,
                 out_buf = NULL;
             }
 
-           if (count * (MAX(extent, true_extent)) < SHMEM_COLL_BLOCK_SIZE) {
-               mpi_errno = MPIR_Reduce_shmem_MV2(in_buf, out_buf, count,
-                                                 datatype, op,
-                                                 0, shmem_comm);
-           }
-           else {
-               mpi_errno = MPIR_Reduce_intra_knomial_wrapper_MV2(in_buf, out_buf, count,
-                                                                 datatype, op,
-                                                                 0, shmem_comm);
-           }
-           
+            if (count * (MAX(extent, true_extent)) < SHMEM_COLL_BLOCK_SIZE) {
+              mpi_errno = MPIR_Reduce_shmem_MV2(in_buf, out_buf, count, datatype, op, 0, shmem_comm);
+            } else {
+              mpi_errno = MPIR_Reduce_intra_knomial_wrapper_MV2(in_buf, out_buf, count, datatype, op, 0, shmem_comm);
+            }
+
             if (local_rank == 0 && root != my_rank) {
                 Request::send(out_buf, count, datatype, root,
                                          COLL_TAG_REDUCE+1, comm);
@@ -219,11 +214,8 @@ int Coll_reduce_mvapich2_two_level::reduce( void *sendbuf,
          *this step*/
         if (MV2_Reduce_intra_function == & MPIR_Reduce_shmem_MV2)
         {
-            if (is_commutative == 1
-               && (count * (MAX(extent, true_extent)) < SHMEM_COLL_BLOCK_SIZE)) {
-                    mpi_errno = MV2_Reduce_intra_function(in_buf, out_buf, count,
-                                      datatype, op,
-                                      intra_node_root, shmem_comm);
+          if (is_commutative == 1 && (count * (MAX(extent, true_extent)) < SHMEM_COLL_BLOCK_SIZE)) {
+            mpi_errno = MV2_Reduce_intra_function(in_buf, out_buf, count, datatype, op, intra_node_root, shmem_comm);
             } else {
                     mpi_errno = MPIR_Reduce_intra_knomial_wrapper_MV2(in_buf, out_buf, count,
                                       datatype, op,
index 47fac6e..b476889 100644 (file)
@@ -93,10 +93,8 @@ int smpi_coll_tuned_ompi_reduce_generic( void* sendbuf, void* recvbuf, int origi
 
         /* If this is a non-commutative operation we must copy
            sendbuf to the accumbuf, in order to simplfy the loops */
-        if ( (op!=MPI_OP_NULL && !op->is_commutative())) {
-            Datatype::copy(
-                                                (char*)sendtmpbuf, original_count, datatype,
-                                                (char*)accumbuf, original_count, datatype);
+        if ((op != MPI_OP_NULL && not op->is_commutative())) {
+          Datatype::copy((char*)sendtmpbuf, original_count, datatype, (char*)accumbuf, original_count, datatype);
         }
         /* Allocate two buffers for incoming segments */
         real_segment_size = true_extent + (count_by_segment - 1) * extent;
index b5e2fbe..cc0eb11 100644 (file)
@@ -40,7 +40,7 @@ int Coll_reduce_scatter_gather::reduce(void *sendbuf, void *recvbuf,
   extent = datatype->get_extent();
   /* If I'm not the root, then my recvbuf may not be valid, therefore
   I have to allocate a temporary one */
-  if (rank != root && !recvbuf) {
+  if (rank != root && not recvbuf) {
     temporary_buffer=1;
     recvbuf = (void *)smpi_get_tmp_recvbuffer(count * extent);
   }
index 2693c2c..60f03bf 100644 (file)
@@ -91,42 +91,37 @@ int Coll_reduce_scatter_mpich_pair::reduce_scatter(void *sendbuf, void *recvbuf,
             
             if (is_commutative || (src < rank)) {
                 if (sendbuf != MPI_IN_PLACE) {
-                    if(op!=MPI_OP_NULL) op->apply(
-                                                 tmp_recvbuf, recvbuf, &recvcounts[rank],
-                               datatype); 
+                  if (op != MPI_OP_NULL)
+                    op->apply(tmp_recvbuf, recvbuf, &recvcounts[rank], datatype);
                 }
                 else {
-                   if(op!=MPI_OP_NULL) op->apply( 
-                       tmp_recvbuf, ((char *)recvbuf+disps[rank]*extent), 
-                       &recvcounts[rank], datatype);
-                    /* we can't store the result at the beginning of
-                       recvbuf right here because there is useful data
-                       there that other process/processes need. at the
-                       end, we will copy back the result to the
-                       beginning of recvbuf. */
+                  if (op != MPI_OP_NULL)
+                    op->apply(tmp_recvbuf, ((char*)recvbuf + disps[rank] * extent), &recvcounts[rank], datatype);
+                  /* we can't store the result at the beginning of
+                     recvbuf right here because there is useful data
+                     there that other process/processes need. at the
+                     end, we will copy back the result to the
+                     beginning of recvbuf. */
                 }
             }
             else {
                 if (sendbuf != MPI_IN_PLACE) {
-                   if(op!=MPI_OP_NULL) op->apply( 
-                      recvbuf, tmp_recvbuf, &recvcounts[rank], datatype);
-                    /* copy result back into recvbuf */
-                    mpi_errno = Datatype::copy(tmp_recvbuf, recvcounts[rank],
-                                               datatype, recvbuf,
-                                               recvcounts[rank], datatype);
-                    if (mpi_errno) return(mpi_errno);
+                  if (op != MPI_OP_NULL)
+                    op->apply(recvbuf, tmp_recvbuf, &recvcounts[rank], datatype);
+                  /* copy result back into recvbuf */
+                  mpi_errno =
+                      Datatype::copy(tmp_recvbuf, recvcounts[rank], datatype, recvbuf, recvcounts[rank], datatype);
+                  if (mpi_errno)
+                    return (mpi_errno);
                 }
                 else {
-                   if(op!=MPI_OP_NULL) op->apply( 
-                        ((char *)recvbuf+disps[rank]*extent),
-                       tmp_recvbuf, &recvcounts[rank], datatype);
-                    /* copy result back into recvbuf */
-                    mpi_errno = Datatype::copy(tmp_recvbuf, recvcounts[rank],
-                                               datatype, 
-                                               ((char *)recvbuf +
-                                                disps[rank]*extent), 
-                                               recvcounts[rank], datatype);
-                    if (mpi_errno) return(mpi_errno);
+                  if (op != MPI_OP_NULL)
+                    op->apply(((char*)recvbuf + disps[rank] * extent), tmp_recvbuf, &recvcounts[rank], datatype);
+                  /* copy result back into recvbuf */
+                  mpi_errno = Datatype::copy(tmp_recvbuf, recvcounts[rank], datatype,
+                                             ((char*)recvbuf + disps[rank] * extent), recvcounts[rank], datatype);
+                  if (mpi_errno)
+                    return (mpi_errno);
                 }
             }
         }
@@ -241,11 +236,10 @@ int Coll_reduce_scatter_mpich_noncomm::reduce_scatter(void *sendbuf, void *recvb
         }
         else {
             /* lower ranked value so need to call op(my_data, received_data) */
-           if(op!=MPI_OP_NULL) op->apply(
-                    outgoing_data + recv_offset*true_extent,
-                     incoming_data + recv_offset*true_extent,
-                     &size, datatype);
-            buf0_was_inout = !buf0_was_inout;
+            if (op != MPI_OP_NULL)
+              op->apply(outgoing_data + recv_offset * true_extent, incoming_data + recv_offset * true_extent, &size,
+                        datatype);
+            buf0_was_inout = not buf0_was_inout;
         }
 
         /* the next round of send/recv needs to happen within the block (of size
@@ -455,24 +449,20 @@ int Coll_reduce_scatter_mpich_rdb::reduce_scatter(void *sendbuf, void *recvbuf,
                 if (received) {
                     if (is_commutative || (dst_tree_root < my_tree_root)) {
                         {
-                                if(op!=MPI_OP_NULL) op->apply( 
-                               tmp_recvbuf, tmp_results, &blklens[0],
-                              datatype); 
-                               if(op!=MPI_OP_NULL) op->apply( 
-                               ((char *)tmp_recvbuf + dis[1]*extent),
-                              ((char *)tmp_results + dis[1]*extent),
-                              &blklens[1], datatype); 
+                          if (op != MPI_OP_NULL)
+                            op->apply(tmp_recvbuf, tmp_results, &blklens[0], datatype);
+                          if (op != MPI_OP_NULL)
+                            op->apply(((char*)tmp_recvbuf + dis[1] * extent), ((char*)tmp_results + dis[1] * extent),
+                                      &blklens[1], datatype);
                         }
                     }
                     else {
                         {
-                                if(op!=MPI_OP_NULL) op->apply(
-                                   tmp_results, tmp_recvbuf, &blklens[0],
-                                   datatype); 
-                                if(op!=MPI_OP_NULL) op->apply(
-                                   ((char *)tmp_results + dis[1]*extent),
-                                   ((char *)tmp_recvbuf + dis[1]*extent),
-                                   &blklens[1], datatype); 
+                          if (op != MPI_OP_NULL)
+                            op->apply(tmp_results, tmp_recvbuf, &blklens[0], datatype);
+                          if (op != MPI_OP_NULL)
+                            op->apply(((char*)tmp_results + dis[1] * extent), ((char*)tmp_recvbuf + dis[1] * extent),
+                                      &blklens[1], datatype);
                         }
                         /* copy result back into tmp_results */
                         mpi_errno = Datatype::copy(tmp_recvbuf, 1, recvtype, 
index 6eea9d6..84fd737 100644 (file)
@@ -63,7 +63,7 @@ Coll_reduce_scatter_ompi_basic_recursivehalving::reduce_scatter(void *sbuf,
     size = comm->size();
    
     XBT_DEBUG("coll:tuned:reduce_scatter_ompi_basic_recursivehalving, rank %d", rank);
-    if( (op!=MPI_OP_NULL && !op->is_commutative()))
+    if ((op != MPI_OP_NULL && not op->is_commutative()))
       THROWF(arg_error,0, " reduce_scatter ompi_basic_recursivehalving can only be used for commutative operations! ");
 
     /* Find displacements and the like */
index 8d4dd5f..cff366c 100644 (file)
@@ -141,51 +141,46 @@ int Coll_scatter_mvapich2_two_level_direct::scatter(void *sendbuf,
         }
 
         if (leader_comm_size > 1 && local_rank == 0) {
-            if (!comm->is_uniform()) {
-                int *displs = NULL;
-                int *sendcnts = NULL;
-                int *node_sizes;
-                int i = 0;
-                node_sizes = comm->get_non_uniform_map();
-
-                if (root != leader_of_root) {
-                    if (leader_comm_rank == leader_root) {
-                        displs = static_cast<int*>(xbt_malloc(sizeof (int) * leader_comm_size));
-                        sendcnts = static_cast<int*>(xbt_malloc(sizeof (int) * leader_comm_size));
-                        sendcnts[0] = node_sizes[0] * nbytes;
-                        displs[0] = 0;
-
-                        for (i = 1; i < leader_comm_size; i++) {
-                            displs[i] =
-                                displs[i - 1] + node_sizes[i - 1] * nbytes;
-                            sendcnts[i] = node_sizes[i] * nbytes;
-                        }
-                    }
-                        Colls::scatterv(leader_scatter_buf, sendcnts, displs,
-                                      MPI_BYTE, tmp_buf, nbytes * local_size,
-                                      MPI_BYTE, leader_root, leader_comm);
-                } else {
-                    if (leader_comm_rank == leader_root) {
-                        displs = static_cast<int*>(xbt_malloc(sizeof (int) * leader_comm_size));
-                        sendcnts = static_cast<int*>(xbt_malloc(sizeof (int) * leader_comm_size));
-                        sendcnts[0] = node_sizes[0] * sendcnt;
-                        displs[0] = 0;
-
-                        for (i = 1; i < leader_comm_size; i++) {
-                            displs[i] =
-                                displs[i - 1] + node_sizes[i - 1] * sendcnt;
-                            sendcnts[i] = node_sizes[i] * sendcnt;
-                        }
-                    }
-                    Colls::scatterv(sendbuf, sendcnts, displs,
-                                              sendtype, tmp_buf,
-                                              nbytes * local_size, MPI_BYTE,
-                                              leader_root, leader_comm);
+          if (not comm->is_uniform()) {
+            int* displs   = NULL;
+            int* sendcnts = NULL;
+            int* node_sizes;
+            int i      = 0;
+            node_sizes = comm->get_non_uniform_map();
+
+            if (root != leader_of_root) {
+              if (leader_comm_rank == leader_root) {
+                displs      = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+                sendcnts    = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+                sendcnts[0] = node_sizes[0] * nbytes;
+                displs[0]   = 0;
+
+                for (i = 1; i < leader_comm_size; i++) {
+                  displs[i]   = displs[i - 1] + node_sizes[i - 1] * nbytes;
+                  sendcnts[i] = node_sizes[i] * nbytes;
                 }
-                if (leader_comm_rank == leader_root) {
-                    xbt_free(displs);
-                    xbt_free(sendcnts);
+              }
+              Colls::scatterv(leader_scatter_buf, sendcnts, displs, MPI_BYTE, tmp_buf, nbytes * local_size, MPI_BYTE,
+                              leader_root, leader_comm);
+            } else {
+              if (leader_comm_rank == leader_root) {
+                displs      = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+                sendcnts    = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+                sendcnts[0] = node_sizes[0] * sendcnt;
+                displs[0]   = 0;
+
+                for (i = 1; i < leader_comm_size; i++) {
+                  displs[i]   = displs[i - 1] + node_sizes[i - 1] * sendcnt;
+                  sendcnts[i] = node_sizes[i] * sendcnt;
                 }
+              }
+              Colls::scatterv(sendbuf, sendcnts, displs, sendtype, tmp_buf, nbytes * local_size, MPI_BYTE, leader_root,
+                              leader_comm);
+            }
+            if (leader_comm_rank == leader_root) {
+              xbt_free(displs);
+              xbt_free(sendcnts);
+            }
             } else {
                 if (leader_of_root != root) {
                     mpi_errno =
@@ -322,51 +317,46 @@ int Coll_scatter_mvapich2_two_level_binomial::scatter(void *sendbuf,
         }
 
         if (leader_comm_size > 1 && local_rank == 0) {
-            if (!comm->is_uniform()) {
-                int *displs = NULL;
-                int *sendcnts = NULL;
-                int *node_sizes;
-                int i = 0;
-                node_sizes = comm->get_non_uniform_map();
-
-                if (root != leader_of_root) {
-                    if (leader_comm_rank == leader_root) {
-                        displs = static_cast<int*>(xbt_malloc(sizeof (int) * leader_comm_size));
-                        sendcnts = static_cast<int*>(xbt_malloc(sizeof (int) * leader_comm_size));
-                        sendcnts[0] = node_sizes[0] * nbytes;
-                        displs[0] = 0;
-
-                        for (i = 1; i < leader_comm_size; i++) {
-                            displs[i] =
-                                displs[i - 1] + node_sizes[i - 1] * nbytes;
-                            sendcnts[i] = node_sizes[i] * nbytes;
-                        }
-                    }
-                        Colls::scatterv(leader_scatter_buf, sendcnts, displs,
-                                      MPI_BYTE, tmp_buf, nbytes * local_size,
-                                      MPI_BYTE, leader_root, leader_comm);
-                } else {
-                    if (leader_comm_rank == leader_root) {
-                        displs = static_cast<int*>(xbt_malloc(sizeof (int) * leader_comm_size));
-                        sendcnts = static_cast<int*>(xbt_malloc(sizeof (int) * leader_comm_size));
-                        sendcnts[0] = node_sizes[0] * sendcnt;
-                        displs[0] = 0;
-
-                        for (i = 1; i < leader_comm_size; i++) {
-                            displs[i] =
-                                displs[i - 1] + node_sizes[i - 1] * sendcnt;
-                            sendcnts[i] = node_sizes[i] * sendcnt;
-                        }
-                    }
-                    Colls::scatterv(sendbuf, sendcnts, displs,
-                                              sendtype, tmp_buf,
-                                              nbytes * local_size, MPI_BYTE,
-                                              leader_root, leader_comm);
+          if (not comm->is_uniform()) {
+            int* displs   = NULL;
+            int* sendcnts = NULL;
+            int* node_sizes;
+            int i      = 0;
+            node_sizes = comm->get_non_uniform_map();
+
+            if (root != leader_of_root) {
+              if (leader_comm_rank == leader_root) {
+                displs      = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+                sendcnts    = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+                sendcnts[0] = node_sizes[0] * nbytes;
+                displs[0]   = 0;
+
+                for (i = 1; i < leader_comm_size; i++) {
+                  displs[i]   = displs[i - 1] + node_sizes[i - 1] * nbytes;
+                  sendcnts[i] = node_sizes[i] * nbytes;
                 }
-                if (leader_comm_rank == leader_root) {
-                    xbt_free(displs);
-                    xbt_free(sendcnts);
+              }
+              Colls::scatterv(leader_scatter_buf, sendcnts, displs, MPI_BYTE, tmp_buf, nbytes * local_size, MPI_BYTE,
+                              leader_root, leader_comm);
+            } else {
+              if (leader_comm_rank == leader_root) {
+                displs      = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+                sendcnts    = static_cast<int*>(xbt_malloc(sizeof(int) * leader_comm_size));
+                sendcnts[0] = node_sizes[0] * sendcnt;
+                displs[0]   = 0;
+
+                for (i = 1; i < leader_comm_size; i++) {
+                  displs[i]   = displs[i - 1] + node_sizes[i - 1] * sendcnt;
+                  sendcnts[i] = node_sizes[i] * sendcnt;
                 }
+              }
+              Colls::scatterv(sendbuf, sendcnts, displs, sendtype, tmp_buf, nbytes * local_size, MPI_BYTE, leader_root,
+                              leader_comm);
+            }
+            if (leader_comm_rank == leader_root) {
+              xbt_free(displs);
+              xbt_free(sendcnts);
+            }
             } else {
                 if (leader_of_root != root) {
                     mpi_errno =
index 9640369..9d14907 100644 (file)
 namespace simgrid{
 namespace smpi{
 
-
-int
-Coll_scatter_ompi_binomial::scatter(void *sbuf, int scount,
-                                      MPI_Datatype sdtype,
-                                      void *rbuf, int rcount,
-                                      MPI_Datatype rdtype,
-                                      int root,
-                                      MPI_Comm comm
-                                      )
+int Coll_scatter_ompi_binomial::scatter(void* sbuf, int scount, MPI_Datatype sdtype, void* rbuf, int rcount,
+                                        MPI_Datatype rdtype, int root, MPI_Comm comm)
 {
     int line = -1;
     int i;
@@ -69,107 +62,113 @@ Coll_scatter_ompi_binomial::scatter(void *sbuf, int scount,
     vrank = (rank - root + size) % size;
 
     if (rank == root) {
-       if (0 == root) {
-           /* root on 0, just use the send buffer */
-           ptmp = (char *) sbuf;
-           if (rbuf != MPI_IN_PLACE) {
-               /* local copy to rbuf */
-               err = Datatype::copy(sbuf, scount, sdtype,
-                                     rbuf, rcount, rdtype);
-               if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
-           }
-       } else {
-           /* root is not on 0, allocate temp buffer for send */
-           tempbuf = (char *) smpi_get_tmp_sendbuffer(strue_extent + (scount*size - 1) * sextent);
-           if (NULL == tempbuf) {
-               err = MPI_ERR_OTHER; line = __LINE__; goto err_hndl;
-           }
-
-           ptmp = tempbuf - slb;
-
-           /* and rotate data so they will eventually in the right place */
-           err = Datatype::copy((char *) sbuf + sextent*root*scount, scount*(size-root), sdtype,
-            ptmp, scount*(size-root), sdtype);
-           if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
-
-
-           err = Datatype::copy((char*)sbuf, scount*root, sdtype,
-                                                ptmp + sextent*scount*(size - root), scount*root, sdtype);
-           if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
-
-           if (rbuf != MPI_IN_PLACE) {
-               /* local copy to rbuf */
-               err = Datatype::copy(ptmp, scount, sdtype,
-                                     rbuf, rcount, rdtype);
-               if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
-           }
-       }
-       total_send = scount;
-    } else if (!(vrank % 2)) {
-       /* non-root, non-leaf nodes, allocate temp buffer for recv
-        * the most we need is rcount*size/2 */
-       tempbuf = (char *) smpi_get_tmp_recvbuffer(rtrue_extent + (rcount*size - 1) * rextent);
-       if (NULL == tempbuf) {
-           err= MPI_ERR_OTHER; line = __LINE__; goto err_hndl;
-       }
-
-       ptmp = tempbuf - rlb;
-
-       sdtype = rdtype;
-       scount = rcount;
-       sextent = rextent;
-       total_send = scount;
+      if (0 == root) {
+        /* root on 0, just use the send buffer */
+        ptmp = (char*)sbuf;
+        if (rbuf != MPI_IN_PLACE) {
+          /* local copy to rbuf */
+          err = Datatype::copy(sbuf, scount, sdtype, rbuf, rcount, rdtype);
+          if (MPI_SUCCESS != err) {
+            line = __LINE__;
+            goto err_hndl;
+          }
+        }
+      } else {
+        /* root is not on 0, allocate temp buffer for send */
+        tempbuf = (char*)smpi_get_tmp_sendbuffer(strue_extent + (scount * size - 1) * sextent);
+        if (NULL == tempbuf) {
+          err  = MPI_ERR_OTHER;
+          line = __LINE__;
+          goto err_hndl;
+        }
+
+        ptmp = tempbuf - slb;
+
+        /* and rotate data so they will eventually in the right place */
+        err = Datatype::copy((char*)sbuf + sextent * root * scount, scount * (size - root), sdtype, ptmp,
+                             scount * (size - root), sdtype);
+        if (MPI_SUCCESS != err) {
+          line = __LINE__;
+          goto err_hndl;
+        }
+
+        err = Datatype::copy((char*)sbuf, scount * root, sdtype, ptmp + sextent * scount * (size - root), scount * root,
+                             sdtype);
+        if (MPI_SUCCESS != err) {
+          line = __LINE__;
+          goto err_hndl;
+        }
+
+        if (rbuf != MPI_IN_PLACE) {
+          /* local copy to rbuf */
+          err = Datatype::copy(ptmp, scount, sdtype, rbuf, rcount, rdtype);
+          if (MPI_SUCCESS != err) {
+            line = __LINE__;
+            goto err_hndl;
+          }
+        }
+      }
+      total_send = scount;
+    } else if (not(vrank % 2)) {
+      /* non-root, non-leaf nodes, allocate temp buffer for recv
+       * the most we need is rcount*size/2 */
+      tempbuf = (char*)smpi_get_tmp_recvbuffer(rtrue_extent + (rcount * size - 1) * rextent);
+      if (NULL == tempbuf) {
+        err  = MPI_ERR_OTHER;
+        line = __LINE__;
+        goto err_hndl;
+      }
+
+      ptmp = tempbuf - rlb;
+
+      sdtype     = rdtype;
+      scount     = rcount;
+      sextent    = rextent;
+      total_send = scount;
     } else {
-       /* leaf nodes, just use rbuf */
-       ptmp = (char *) rbuf;
+      /* leaf nodes, just use rbuf */
+      ptmp = (char*)rbuf;
     }
 
-    if (!(vrank % 2)) {
-       if (rank != root) {
-           /* recv from parent on non-root */
-           Request::recv(ptmp, rcount*size, rdtype, bmtree->tree_prev,
-                                   COLL_TAG_SCATTER, comm, &status);
-           /* local copy to rbuf */
-           Datatype::copy(ptmp, scount, sdtype, rbuf, rcount, rdtype);
-       }
-       /* send to children on all non-leaf */
-       for (i = 0; i < bmtree->tree_nextsize; i++) {
-           int mycount = 0, vkid;
-           /* figure out how much data I have to send to this child */
-           vkid = (bmtree->tree_next[i] - root + size) % size;
-           mycount = vkid - vrank;
-           if (mycount > (size - vkid))
-               mycount = size - vkid;
-           mycount *= scount;
-
-           Request::send(ptmp + total_send*sextent, mycount, sdtype,
-                                   bmtree->tree_next[i],
-                                   COLL_TAG_SCATTER,
-                                    comm);
-
-           total_send += mycount;
-       }
-
+    if (not(vrank % 2)) {
+      if (rank != root) {
+        /* recv from parent on non-root */
+        Request::recv(ptmp, rcount * size, rdtype, bmtree->tree_prev, COLL_TAG_SCATTER, comm, &status);
+        /* local copy to rbuf */
+        Datatype::copy(ptmp, scount, sdtype, rbuf, rcount, rdtype);
+      }
+      /* send to children on all non-leaf */
+      for (i = 0; i < bmtree->tree_nextsize; i++) {
+        int mycount = 0, vkid;
+        /* figure out how much data I have to send to this child */
+        vkid    = (bmtree->tree_next[i] - root + size) % size;
+        mycount = vkid - vrank;
+        if (mycount > (size - vkid))
+          mycount = size - vkid;
+        mycount *= scount;
+
+        Request::send(ptmp + total_send * sextent, mycount, sdtype, bmtree->tree_next[i], COLL_TAG_SCATTER, comm);
+
+        total_send += mycount;
+      }
 
     } else {
-       /* recv from parent on leaf nodes */
-       Request::recv(ptmp, rcount, rdtype, bmtree->tree_prev,
-                               COLL_TAG_SCATTER, comm, &status);
+      /* recv from parent on leaf nodes */
+      Request::recv(ptmp, rcount, rdtype, bmtree->tree_prev, COLL_TAG_SCATTER, comm, &status);
     }
 
     if (NULL != tempbuf)
       smpi_free_tmp_buffer(tempbuf);
-    //!FIXME : store the tree, as done in ompi, instead of calculating it each time ?
+    // not FIXME : store the tree, as done in ompi, instead of calculating it each time ?
     xbt_free(bmtree);
 
     return MPI_SUCCESS;
 
  err_hndl:
     if (NULL != tempbuf)
-       free(tempbuf);
+      free(tempbuf);
 
-    XBT_DEBUG(  "%s:%4d\tError occurred %d, rank %2d",
-                __FILE__, line, err, rank);
+    XBT_DEBUG("%s:%4d\tError occurred %d, rank %2d", __FILE__, line, err, rank);
     return err;
 }
 
@@ -187,20 +186,14 @@ Coll_scatter_ompi_binomial::scatter(void *sbuf, int scount,
 
 /* copied function (with appropriate renaming) starts here */
 /*
- *     scatter_intra
+ *  scatter_intra
  *
- *     Function:       - basic scatter operation
- *     Accepts:        - same arguments as MPI_Scatter()
- *     Returns:        - MPI_SUCCESS or error code
+ *  Function:  - basic scatter operation
+ *  Accepts:  - same arguments as MPI_Scatter()
+ *  Returns:  - MPI_SUCCESS or error code
  */
-int
-Coll_scatter_ompi_basic_linear::scatter(void *sbuf, int scount,
-                                          MPI_Datatype sdtype,
-                                          void *rbuf, int rcount,
-                                          MPI_Datatype rdtype,
-                                          int root,
-                                          MPI_Comm comm
-                                          )
+int Coll_scatter_ompi_basic_linear::scatter(void* sbuf, int scount, MPI_Datatype sdtype, void* rbuf, int rcount,
+                                            MPI_Datatype rdtype, int root, MPI_Comm comm)
 {
     int i, rank, size, err;
     char *ptmp;
index cac0ea2..9afee14 100644 (file)
 
 //attempt to do a quick autotuning version of the collective,
 
-#define TRACE_AUTO_COLL(cat) if (TRACE_is_enabled()){\
-        type_t type = PJ_type_get_or_null (#cat, PJ_type_get_root());\
-         if (!type){\
-             type=PJ_type_event_new(#cat, PJ_type_get_root());\
-         }\
-         char cont_name[25];\
-         snprintf(cont_name,25, "rank-%d", smpi_process()->index());\
-         val_t value = PJ_value_get_or_new(Colls::mpi_coll_##cat##_description[i].name,"1.0 1.0 1.0", type);\
-         new NewEvent (SIMIX_get_clock(), PJ_container_get(cont_name), type, value);\
-      }
+#define TRACE_AUTO_COLL(cat)                                                                                           \
+  if (TRACE_is_enabled()) {                                                                                            \
+    type_t type = PJ_type_get_or_null(#cat, PJ_type_get_root());                                                       \
+    if (not type) {                                                                                                    \
+      type = PJ_type_event_new(#cat, PJ_type_get_root());                                                              \
+    }                                                                                                                  \
+    char cont_name[25];                                                                                                \
+    snprintf(cont_name, 25, "rank-%d", smpi_process()->index());                                                       \
+    val_t value = PJ_value_get_or_new(Colls::mpi_coll_##cat##_description[i].name, "1.0 1.0 1.0", type);               \
+    new NewEvent(SIMIX_get_clock(), PJ_container_get(cont_name), type, value);                                         \
+  }
 
-#define AUTOMATIC_COLL_BENCH(cat, ret, args, args2)\
-    ret Coll_ ## cat ## _automatic:: cat (COLL_UNPAREN args)\
-{\
-  double time1, time2, time_min=DBL_MAX;\
-  int min_coll=-1, global_coll=-1;\
-  int i;\
-  double buf_in, buf_out, max_min=DBL_MAX;\
-  for (i = 0; Colls::mpi_coll_##cat##_description[i].name; i++){\
-      if(!strcmp(Colls::mpi_coll_##cat##_description[i].name, "automatic"))continue;\
-      if(!strcmp(Colls::mpi_coll_##cat##_description[i].name, "default"))continue;\
-      Coll_barrier_default::barrier(comm);\
-      TRACE_AUTO_COLL(cat)\
-      time1 = SIMIX_get_clock();\
-      try {\
-      ((int (*) args)\
-          Colls::mpi_coll_##cat##_description[i].coll) args2 ;\
-      }\
-      catch (std::exception& ex) {\
-        continue;\
-      }\
-      time2 = SIMIX_get_clock();\
-      buf_out=time2-time1;\
-      Coll_reduce_default::reduce((void*)&buf_out,(void*)&buf_in, 1, MPI_DOUBLE, MPI_MAX, 0,comm );\
-      if(time2-time1<time_min){\
-          min_coll=i;\
-          time_min=time2-time1;\
-      }\
-      if(comm->rank()==0){\
-          if(buf_in<max_min){\
-              max_min=buf_in;\
-              global_coll=i;\
-          }\
-      }\
-  }\
-  if(comm->rank()==0){\
-      XBT_WARN("For rank 0, the quickest was %s : %f , but global was %s : %f at max",Colls::mpi_coll_##cat##_description[min_coll].name, time_min,Colls::mpi_coll_##cat##_description[global_coll].name, max_min);\
-  }else\
-  XBT_WARN("The quickest %s was %s on rank %d and took %f",#cat,Colls::mpi_coll_##cat##_description[min_coll].name, comm->rank(), time_min);\
-  return (min_coll!=-1)?MPI_SUCCESS:MPI_ERR_INTERN;\
-}
+#define AUTOMATIC_COLL_BENCH(cat, ret, args, args2)                                                                    \
+  ret Coll_##cat##_automatic::cat(COLL_UNPAREN args)                                                                   \
+  {                                                                                                                    \
+    double time1, time2, time_min = DBL_MAX;                                                                           \
+    int min_coll = -1, global_coll = -1;                                                                               \
+    int i;                                                                                                             \
+    double buf_in, buf_out, max_min = DBL_MAX;                                                                         \
+    for (i = 0; Colls::mpi_coll_##cat##_description[i].name; i++) {                                                    \
+      if (not strcmp(Colls::mpi_coll_##cat##_description[i].name, "automatic"))                                        \
+        continue;                                                                                                      \
+      if (not strcmp(Colls::mpi_coll_##cat##_description[i].name, "default"))                                          \
+        continue;                                                                                                      \
+      Coll_barrier_default::barrier(comm);                                                                             \
+      TRACE_AUTO_COLL(cat)                                                                                             \
+      time1 = SIMIX_get_clock();                                                                                       \
+      try {                                                                                                            \
+        ((int(*) args)Colls::mpi_coll_##cat##_description[i].coll) args2;                                              \
+      } catch (std::exception & ex) {                                                                                  \
+        continue;                                                                                                      \
+      }                                                                                                                \
+      time2   = SIMIX_get_clock();                                                                                     \
+      buf_out = time2 - time1;                                                                                         \
+      Coll_reduce_default::reduce((void*)&buf_out, (void*)&buf_in, 1, MPI_DOUBLE, MPI_MAX, 0, comm);                   \
+      if (time2 - time1 < time_min) {                                                                                  \
+        min_coll = i;                                                                                                  \
+        time_min = time2 - time1;                                                                                      \
+      }                                                                                                                \
+      if (comm->rank() == 0) {                                                                                         \
+        if (buf_in < max_min) {                                                                                        \
+          max_min     = buf_in;                                                                                        \
+          global_coll = i;                                                                                             \
+        }                                                                                                              \
+      }                                                                                                                \
+    }                                                                                                                  \
+    if (comm->rank() == 0) {                                                                                           \
+      XBT_WARN("For rank 0, the quickest was %s : %f , but global was %s : %f at max",                                 \
+               Colls::mpi_coll_##cat##_description[min_coll].name, time_min,                                           \
+               Colls::mpi_coll_##cat##_description[global_coll].name, max_min);                                        \
+    } else                                                                                                             \
+      XBT_WARN("The quickest %s was %s on rank %d and took %f", #cat,                                                  \
+               Colls::mpi_coll_##cat##_description[min_coll].name, comm->rank(), time_min);                            \
+    return (min_coll != -1) ? MPI_SUCCESS : MPI_ERR_INTERN;                                                            \
+  }
 
 namespace simgrid{
 namespace smpi{
index 546c2b7..6c48761 100644 (file)
@@ -214,7 +214,7 @@ int Coll_reduce_default::reduce(void *sendbuf, void *recvbuf, int count, MPI_Dat
   int rank = comm->rank();
   int size = comm->size();
   //non commutative case, use a working algo from openmpi
-  if(op != MPI_OP_NULL && !op->is_commutative()){
+  if (op != MPI_OP_NULL && not op->is_commutative()) {
     return Coll_reduce_ompi_basic_linear::reduce(sendtmpbuf, recvbuf, count, datatype, op, root, comm);
   }
 
@@ -237,7 +237,7 @@ int Coll_reduce_default::reduce(void *sendbuf, void *recvbuf, int count, MPI_Dat
     int index = 0;
     for (int src = 0; src < size; src++) {
       if (src != root) {
-         if (!smpi_process()->replaying())
+        if (not smpi_process()->replaying())
           tmpbufs[index] = xbt_malloc(count * dataext);
          else
            tmpbufs[index] = smpi_get_tmp_sendbuffer(count * dataext);
index cc9cf96..7fd3910 100644 (file)
@@ -360,9 +360,8 @@ int Coll_reduce_mpich::reduce( void *sendbuf, void *recvbuf,
     while (pof2 <= communicator_size) pof2 <<= 1;
     pof2 >>= 1;
 
-
-    if ((count < pof2) || (message_size < 2048) || (op!=MPI_OP_NULL && !op->is_commutative())) {
-        return Coll_reduce_binomial::reduce (sendbuf, recvbuf, count, datatype, op, root, comm); 
+    if ((count < pof2) || (message_size < 2048) || (op != MPI_OP_NULL && not op->is_commutative())) {
+      return Coll_reduce_binomial::reduce(sendbuf, recvbuf, count, datatype, op, root, comm); 
     }
         return Coll_reduce_scatter_gather::reduce(sendbuf, recvbuf, count, datatype, op, root, comm/*, module,
                                                      segsize, max_requests*/);
@@ -442,26 +441,27 @@ int Coll_reduce_scatter_mpich::reduce_scatter( void *sbuf, void *rbuf,
     if( (op==MPI_OP_NULL || op->is_commutative()) &&  total_message_size > 524288) { 
         return Coll_reduce_scatter_mpich_pair::reduce_scatter (sbuf, rbuf, rcounts, 
                                                                     dtype, op, 
-                                                                    comm); 
-    }else if ((op!=MPI_OP_NULL && !op->is_commutative())) {
-        int is_block_regular = 1;
-        for (i = 0; i < (comm_size - 1); ++i) {
-            if (rcounts[i] != rcounts[i+1]) {
-                is_block_regular = 0;
-                break;
-            }
+                                                                    comm);
+    } else if ((op != MPI_OP_NULL && not op->is_commutative())) {
+      int is_block_regular = 1;
+      for (i = 0; i < (comm_size - 1); ++i) {
+        if (rcounts[i] != rcounts[i + 1]) {
+          is_block_regular = 0;
+          break;
         }
+      }
 
-        /* slightly retask pof2 to mean pof2 equal or greater, not always greater as it is above */
-        int pof2 = 1;
-        while (pof2 < comm_size) pof2 <<= 1;
+      /* slightly retask pof2 to mean pof2 equal or greater, not always greater as it is above */
+      int pof2 = 1;
+      while (pof2 < comm_size)
+        pof2 <<= 1;
 
-        if (pof2 == comm_size && is_block_regular) {
-            /* noncommutative, pof2 size, and block regular */
-            return Coll_reduce_scatter_mpich_noncomm::reduce_scatter(sbuf, rbuf, rcounts, dtype, op, comm);
-        }
+      if (pof2 == comm_size && is_block_regular) {
+        /* noncommutative, pof2 size, and block regular */
+        return Coll_reduce_scatter_mpich_noncomm::reduce_scatter(sbuf, rbuf, rcounts, dtype, op, comm);
+      }
 
-       return Coll_reduce_scatter_mpich_rdb::reduce_scatter(sbuf, rbuf, rcounts, dtype, op, comm);
+      return Coll_reduce_scatter_mpich_rdb::reduce_scatter(sbuf, rbuf, rcounts, dtype, op, comm);
     }else{      
        return Coll_reduce_scatter_mpich_rdb::reduce_scatter(sbuf, rbuf, rcounts, dtype, op, comm);
     }
index f9722a9..99290fb 100644 (file)
@@ -304,13 +304,9 @@ int Coll_allgatherv_mvapich2::allgatherv(void *sendbuf, int sendcount, MPI_Datat
 
   if (MV2_Allgatherv_function == &MPIR_Allgatherv_Rec_Doubling_MV2)
     {
-      if(!(comm_size & (comm_size - 1)))
-        {
-          mpi_errno =
-              MPIR_Allgatherv_Rec_Doubling_MV2(sendbuf, sendcount,
-                  sendtype, recvbuf,
-                  recvcounts, displs,
-                  recvtype, comm);
+    if (not(comm_size & (comm_size - 1))) {
+      mpi_errno =
+          MPIR_Allgatherv_Rec_Doubling_MV2(sendbuf, sendcount, sendtype, recvbuf, recvcounts, displs, recvtype, comm);
         } else {
             mpi_errno =
                 MPIR_Allgatherv_Bruck_MV2(sendbuf, sendcount,
@@ -500,7 +496,7 @@ int Coll_bcast_mvapich2::bcast(void *buffer,
     if(comm->get_leaders_comm()==MPI_COMM_NULL){
       comm->init_smp();
     }
-    if(!mv2_bcast_thresholds_table)
+    if (not mv2_bcast_thresholds_table)
       init_mv2_bcast_tables_stampede();
     comm_size = comm->size();
     //rank = comm->rank();
@@ -601,23 +597,22 @@ int Coll_bcast_mvapich2::bcast(void *buffer,
         mv2_bcast_thresholds_table[range].is_two_level_bcast[range_threshold];
 #endif
      if (two_level_bcast == 1) {
-        if (!is_contig || !is_homogeneous) {
-            tmp_buf=(void *)smpi_get_tmp_sendbuffer(nbytes);
-
-/*            position = 0;*/
-/*            if (rank == root) {*/
-/*                mpi_errno =*/
-/*                    MPIR_Pack_impl(buffer, count, datatype, tmp_buf, nbytes, &position);*/
-/*                if (mpi_errno)*/
-/*                    MPIU_ERR_POP(mpi_errno);*/
-/*            }*/
+       if (not is_contig || not is_homogeneous) {
+         tmp_buf = (void*)smpi_get_tmp_sendbuffer(nbytes);
+
+         /*            position = 0;*/
+         /*            if (rank == root) {*/
+         /*                mpi_errno =*/
+         /*                    MPIR_Pack_impl(buffer, count, datatype, tmp_buf, nbytes, &position);*/
+         /*                if (mpi_errno)*/
+         /*                    MPIU_ERR_POP(mpi_errno);*/
+         /*            }*/
         }
 #ifdef CHANNEL_MRAIL_GEN2
         if ((mv2_enable_zcpy_bcast == 1) &&
-              (&MPIR_Pipelined_Bcast_Zcpy_MV2 == MV2_Bcast_function)) {  
-            if (!is_contig || !is_homogeneous) {
-                mpi_errno = MPIR_Pipelined_Bcast_Zcpy_MV2(tmp_buf, nbytes, MPI_BYTE,
-                                                 root, comm);
+              (&MPIR_Pipelined_Bcast_Zcpy_MV2 == MV2_Bcast_function)) {
+          if (not is_contig || not is_homogeneous) {
+            mpi_errno = MPIR_Pipelined_Bcast_Zcpy_MV2(tmp_buf, nbytes, MPI_BYTE, root, comm);
             } else { 
                 mpi_errno = MPIR_Pipelined_Bcast_Zcpy_MV2(buffer, count, datatype,
                                                  root, comm);
@@ -626,10 +621,8 @@ int Coll_bcast_mvapich2::bcast(void *buffer,
 #endif /* defined(CHANNEL_MRAIL_GEN2) */
         { 
             shmem_comm = comm->get_intra_comm();
-            if (!is_contig || !is_homogeneous) {
-                mpi_errno =
-                    MPIR_Bcast_tune_inter_node_helper_MV2(tmp_buf, nbytes, MPI_BYTE,
-                                                          root, comm);
+            if (not is_contig || not is_homogeneous) {
+              mpi_errno = MPIR_Bcast_tune_inter_node_helper_MV2(tmp_buf, nbytes, MPI_BYTE, root, comm);
             } else {
                 mpi_errno =
                     MPIR_Bcast_tune_inter_node_helper_MV2(buffer, count, datatype, root,
@@ -640,24 +633,22 @@ int Coll_bcast_mvapich2::bcast(void *buffer,
 
 
                     root = INTRA_NODE_ROOT;
-   
 
-                if (!is_contig || !is_homogeneous) {
-                    mpi_errno = MV2_Bcast_intra_node_function(tmp_buf, nbytes,
-                                                              MPI_BYTE, root, shmem_comm);
+                    if (not is_contig || not is_homogeneous) {
+                      mpi_errno = MV2_Bcast_intra_node_function(tmp_buf, nbytes, MPI_BYTE, root, shmem_comm);
                 } else {
                     mpi_errno = MV2_Bcast_intra_node_function(buffer, count,
                                                               datatype, root, shmem_comm);
 
                 }
-        } 
-/*        if (!is_contig || !is_homogeneous) {*/
-/*            if (rank != root) {*/
-/*                position = 0;*/
-/*                mpi_errno = MPIR_Unpack_impl(tmp_buf, nbytes, &position, buffer,*/
-/*                                             count, datatype);*/
-/*            }*/
-/*        }*/
+        }
+        /*        if (not is_contig || not is_homogeneous) {*/
+        /*            if (rank != root) {*/
+        /*                position = 0;*/
+        /*                mpi_errno = MPIR_Unpack_impl(tmp_buf, nbytes, &position, buffer,*/
+        /*                                             count, datatype);*/
+        /*            }*/
+        /*        }*/
     } else {
         /* We use Knomial for intra node */
         MV2_Bcast_intra_node_function = &MPIR_Knomial_Bcast_intra_node_MV2;
@@ -1007,30 +998,30 @@ int Coll_scatter_mvapich2::scatter(void *sendbuf,
 }
 }
 
-
-void smpi_coll_cleanup_mvapich2(void){
-int i=0;
-if(mv2_alltoall_thresholds_table)
-  xbt_free(mv2_alltoall_thresholds_table[i]);
-xbt_free(mv2_alltoall_thresholds_table);
-xbt_free(mv2_size_alltoall_tuning_table);
-xbt_free(mv2_alltoall_table_ppn_conf);
-
-xbt_free(mv2_gather_thresholds_table);
-if(mv2_allgather_thresholds_table)
-  xbt_free(mv2_allgather_thresholds_table[0]);
-xbt_free(mv2_size_allgather_tuning_table);
-xbt_free(mv2_allgather_table_ppn_conf);
-xbt_free(mv2_allgather_thresholds_table);
-
-xbt_free(mv2_allgatherv_thresholds_table);
-xbt_free(mv2_reduce_thresholds_table);
-xbt_free(mv2_red_scat_thresholds_table);
-xbt_free(mv2_allreduce_thresholds_table);
-xbt_free(mv2_bcast_thresholds_table);
-if(mv2_scatter_thresholds_table)
-  xbt_free(mv2_scatter_thresholds_table[0]);
-xbt_free(mv2_scatter_thresholds_table);
-xbt_free(mv2_size_scatter_tuning_table);
-xbt_free(mv2_scatter_table_ppn_conf);
+void smpi_coll_cleanup_mvapich2()
+{
+  int i = 0;
+  if (mv2_alltoall_thresholds_table)
+    xbt_free(mv2_alltoall_thresholds_table[i]);
+  xbt_free(mv2_alltoall_thresholds_table);
+  xbt_free(mv2_size_alltoall_tuning_table);
+  xbt_free(mv2_alltoall_table_ppn_conf);
+
+  xbt_free(mv2_gather_thresholds_table);
+  if (mv2_allgather_thresholds_table)
+    xbt_free(mv2_allgather_thresholds_table[0]);
+  xbt_free(mv2_size_allgather_tuning_table);
+  xbt_free(mv2_allgather_table_ppn_conf);
+  xbt_free(mv2_allgather_thresholds_table);
+
+  xbt_free(mv2_allgatherv_thresholds_table);
+  xbt_free(mv2_reduce_thresholds_table);
+  xbt_free(mv2_red_scat_thresholds_table);
+  xbt_free(mv2_allreduce_thresholds_table);
+  xbt_free(mv2_bcast_thresholds_table);
+  if (mv2_scatter_thresholds_table)
+    xbt_free(mv2_scatter_thresholds_table[0]);
+  xbt_free(mv2_scatter_thresholds_table);
+  xbt_free(mv2_size_scatter_tuning_table);
+  xbt_free(mv2_scatter_table_ppn_conf);
 }
index 5c6bb3d..509f007 100644 (file)
@@ -255,11 +255,11 @@ int Coll_reduce_ompi::reduce( void *sendbuf, void *recvbuf,
      * If the operation is non commutative we currently have choice of linear 
      * or in-order binary tree algorithm.
      */
-    if(  (op!=MPI_OP_NULL) && !op->is_commutative() ) {
-        if ((communicator_size < 12) && (message_size < 2048)) {
-            return Coll_reduce_ompi_basic_linear::reduce (sendbuf, recvbuf, count, datatype, op, root, comm/*, module*/); 
-        } 
-        return Coll_reduce_ompi_in_order_binary::reduce (sendbuf, recvbuf, count, datatype, op, root, comm/*, module,
+    if ((op != MPI_OP_NULL) && not op->is_commutative()) {
+      if ((communicator_size < 12) && (message_size < 2048)) {
+        return Coll_reduce_ompi_basic_linear::reduce(sendbuf, recvbuf, count, datatype, op, root, comm /*, module*/);
+      }
+      return Coll_reduce_ompi_in_order_binary::reduce(sendbuf, recvbuf, count, datatype, op, root, comm /*, module,
                                                              0, max_requests*/); 
     }
 
@@ -355,11 +355,9 @@ int Coll_reduce_scatter_ompi::reduce_scatter( void *sbuf, void *rbuf,
         }
     }
 
-    if(  ((op!=MPI_OP_NULL) && !op->is_commutative()) || (zerocounts)) {
-        Coll_reduce_scatter_default::reduce_scatter (sbuf, rbuf, rcounts, 
-                                                                    dtype, op, 
-                                                                    comm); 
-        return MPI_SUCCESS;
+    if (((op != MPI_OP_NULL) && not op->is_commutative()) || (zerocounts)) {
+      Coll_reduce_scatter_default::reduce_scatter(sbuf, rbuf, rcounts, dtype, op, comm);
+      return MPI_SUCCESS;
     }
    
     total_message_size *= dsize;
index b589dc7..3a7525e 100644 (file)
@@ -151,7 +151,7 @@ static void cleanup_extra_data (instr_extra_data extra){
 
 void TRACE_internal_smpi_set_category (const char *category)
 {
-  if (!TRACE_smpi_is_enabled())
+  if (not TRACE_smpi_is_enabled())
     return;
 
   //declare category
@@ -167,7 +167,7 @@ void TRACE_internal_smpi_set_category (const char *category)
 
 const char *TRACE_internal_smpi_get_category ()
 {
-  if (!TRACE_smpi_is_enabled())
+  if (not TRACE_smpi_is_enabled())
     return nullptr;
 
   char processid[INSTR_DEFAULT_STR_SIZE];
@@ -189,7 +189,7 @@ void TRACE_smpi_release()
 
 void TRACE_smpi_init(int rank)
 {
-  if (!TRACE_smpi_is_enabled())
+  if (not TRACE_smpi_is_enabled())
     return;
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -224,7 +224,7 @@ void TRACE_smpi_init(int rank)
 
 void TRACE_smpi_finalize(int rank)
 {
-  if (!TRACE_smpi_is_enabled())
+  if (not TRACE_smpi_is_enabled())
     return;
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -235,9 +235,9 @@ void TRACE_smpi_finalize(int rank)
 
 void TRACE_smpi_collective_in(int rank, int root, const char *operation, instr_extra_data extra)
 {
-  if (!TRACE_smpi_is_enabled()) {
-      cleanup_extra_data(extra);
-      return;
+  if (not TRACE_smpi_is_enabled()) {
+    cleanup_extra_data(extra);
+    return;
   }
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -251,7 +251,7 @@ void TRACE_smpi_collective_in(int rank, int root, const char *operation, instr_e
 
 void TRACE_smpi_collective_out(int rank, int root, const char *operation)
 {
-  if (!TRACE_smpi_is_enabled()) 
+  if (not TRACE_smpi_is_enabled())
     return;
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -265,24 +265,24 @@ void TRACE_smpi_collective_out(int rank, int root, const char *operation)
 void TRACE_smpi_computing_init(int rank)
 {
  //first use, initialize the color in the trace
-  if (!TRACE_smpi_is_enabled() || !TRACE_smpi_is_computing()) 
-    return;
-
 char str[INSTR_DEFAULT_STR_SIZE];
 smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE);
 container_t container = PJ_container_get (str);
 type_t type = PJ_type_get ("MPI_STATE", container->type);
 const char *color = instr_find_color ("computing");
 val_t value = PJ_value_get_or_new ("computing", color, type);
 new PushStateEvent (SIMIX_get_clock(), container, type, value);
+ if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_computing())
+   return;
+
+ char str[INSTR_DEFAULT_STR_SIZE];
+ smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE);
container_t container = PJ_container_get(str);
type_t type           = PJ_type_get("MPI_STATE", container->type);
const char* color     = instr_find_color("computing");
val_t value           = PJ_value_get_or_new("computing", color, type);
new PushStateEvent(SIMIX_get_clock(), container, type, value);
 }
 
 void TRACE_smpi_computing_in(int rank, instr_extra_data extra)
 {
   //do not forget to set the color first, otherwise this will explode
-  if (!TRACE_smpi_is_enabled()|| !TRACE_smpi_is_computing()) {
-      cleanup_extra_data(extra);
-      return;
+  if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_computing()) {
+    cleanup_extra_data(extra);
+    return;
   }
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -295,7 +295,7 @@ void TRACE_smpi_computing_in(int rank, instr_extra_data extra)
 
 void TRACE_smpi_computing_out(int rank)
 {
-  if (!TRACE_smpi_is_enabled()|| !TRACE_smpi_is_computing())
+  if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_computing())
     return;
   char str[INSTR_DEFAULT_STR_SIZE];
   smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE);
@@ -307,7 +307,7 @@ void TRACE_smpi_computing_out(int rank)
 void TRACE_smpi_sleeping_init(int rank)
 {
   //first use, initialize the color in the trace
-  if (!TRACE_smpi_is_enabled() || !TRACE_smpi_is_sleeping())
+  if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_sleeping())
     return;
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -322,9 +322,9 @@ void TRACE_smpi_sleeping_init(int rank)
 void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra)
 {
   //do not forget to set the color first, otherwise this will explode
-  if (!TRACE_smpi_is_enabled()|| !TRACE_smpi_is_sleeping()) {
-      cleanup_extra_data(extra);
-      return;
+  if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_sleeping()) {
+    cleanup_extra_data(extra);
+    return;
   }
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -337,7 +337,7 @@ void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra)
 
 void TRACE_smpi_sleeping_out(int rank)
 {
-  if (!TRACE_smpi_is_enabled()|| !TRACE_smpi_is_sleeping())
+  if (not TRACE_smpi_is_enabled() || not TRACE_smpi_is_sleeping())
     return;
   char str[INSTR_DEFAULT_STR_SIZE];
   smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE);
@@ -349,9 +349,9 @@ void TRACE_smpi_sleeping_out(int rank)
 void TRACE_smpi_testing_in(int rank, instr_extra_data extra)
 {
   //do not forget to set the color first, otherwise this will explode
-  if (!TRACE_smpi_is_enabled()) {
-      cleanup_extra_data(extra);
-      return;
+  if (not TRACE_smpi_is_enabled()) {
+    cleanup_extra_data(extra);
+    return;
   }
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -364,7 +364,7 @@ void TRACE_smpi_testing_in(int rank, instr_extra_data extra)
 
 void TRACE_smpi_testing_out(int rank)
 {
-  if (!TRACE_smpi_is_enabled())
+  if (not TRACE_smpi_is_enabled())
     return;
   char str[INSTR_DEFAULT_STR_SIZE];
   smpi_container(rank, str, INSTR_DEFAULT_STR_SIZE);
@@ -375,9 +375,9 @@ void TRACE_smpi_testing_out(int rank)
 
 void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation, instr_extra_data extra)
 {
-  if (!TRACE_smpi_is_enabled()) {
-      cleanup_extra_data(extra);
-      return;
+  if (not TRACE_smpi_is_enabled()) {
+    cleanup_extra_data(extra);
+    return;
   }
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -391,7 +391,7 @@ void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation, instr_
 
 void TRACE_smpi_ptp_out(int rank, int src, int dst, const char *operation)
 {
-  if (!TRACE_smpi_is_enabled())
+  if (not TRACE_smpi_is_enabled())
     return;
 
   char str[INSTR_DEFAULT_STR_SIZE];
@@ -404,7 +404,7 @@ void TRACE_smpi_ptp_out(int rank, int src, int dst, const char *operation)
 
 void TRACE_smpi_send(int rank, int src, int dst, int tag, int size)
 {
-  if (!TRACE_smpi_is_enabled())
+  if (not TRACE_smpi_is_enabled())
     return;
 
   char key[INSTR_DEFAULT_STR_SIZE] = {0};
@@ -420,7 +420,7 @@ void TRACE_smpi_send(int rank, int src, int dst, int tag, int size)
 
 void TRACE_smpi_recv(int rank, int src, int dst, int tag)
 {
-  if (!TRACE_smpi_is_enabled())
+  if (not TRACE_smpi_is_enabled())
     return;
 
   char key[INSTR_DEFAULT_STR_SIZE] = {0};
index 326f462..bb7d606 100644 (file)
@@ -1,7 +1,6 @@
-/* smpi_coll.c -- various optimized routing for collectives                   */
+/* smpi_coll.c -- various optimized routing for collectives                 */
 
-/* Copyright (c) 2009-2017. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2009-2017. 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. */
@@ -73,13 +72,13 @@ int Colls::find_coll_description(s_mpi_coll_description_t * table, const char *n
 {
   char *name_list = nullptr;
   for (int i = 0; table[i].name; i++)
-    if (!strcmp(name, table[i].name)) {
+    if (not strcmp(name, table[i].name)) {
       if (strcmp(table[i].name,"default"))
         XBT_INFO("Switch to algorithm %s for collective %s",table[i].name,desc);
       return i;
     }
 
-  if (!table[0].name)
+  if (not table[0].name)
     xbt_die("No collective is valid for '%s'! This is a bug.",name);
   name_list = xbt_strdup(table[0].name);
   for (int i = 1; table[i].name; i++) {
@@ -339,8 +338,3 @@ int Colls::exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype
 
 }
 }
-
-
-
-
-
index 213a822..39e5132 100644 (file)
@@ -79,7 +79,7 @@ int Comm::dup(MPI_Comm* newcomm){
   (*newcomm) = new  Comm(cp, this->topo());
   int ret = MPI_SUCCESS;
 
-  if(!attributes()->empty()){
+  if (not attributes()->empty()) {
     int flag;
     void* value_out;
     for(auto it : *attributes()){
index 49cf5a8..b5ea234 100644 (file)
@@ -121,8 +121,8 @@ Datatype::Datatype(Datatype *datatype, int* ret) : name_(nullptr), lb_(datatype-
   *ret = MPI_SUCCESS;
   if(datatype->name_)
     name_ = xbt_strdup(datatype->name_);
-  
-  if(!(datatype->attributes()->empty())){
+
+  if (not datatype->attributes()->empty()) {
     int flag;
     void* value_out;
     for(auto it = datatype->attributes()->begin(); it != datatype->attributes()->end(); it++){
@@ -175,7 +175,7 @@ void Datatype::unref(MPI_Datatype datatype)
   if (datatype->refcount_ > 0)
     datatype->refcount_--;
 
-  if (datatype->refcount_ == 0  && !(datatype->flags_ & DT_FLAG_PREDEFINED))
+  if (datatype->refcount_ == 0 && not(datatype->flags_ & DT_FLAG_PREDEFINED))
     delete datatype;
 
 #if SIMGRID_HAVE_MC
@@ -276,16 +276,12 @@ int Datatype::copy(void *sendbuf, int sendcount, MPI_Datatype sendtype,
     recvcount *= recvtype->size();
     count = sendcount < recvcount ? sendcount : recvcount;
 
-    if(!(sendtype->flags() & DT_FLAG_DERIVED) && !(recvtype->flags() & DT_FLAG_DERIVED)) {
-      if(!smpi_process()->replaying()) 
+    if (not(sendtype->flags() & DT_FLAG_DERIVED) && not(recvtype->flags() & DT_FLAG_DERIVED)) {
+      if (not smpi_process()->replaying())
         memcpy(recvbuf, sendbuf, count);
-    }
-    else if (!(sendtype->flags() & DT_FLAG_DERIVED))
-    {
+    } else if (not(sendtype->flags() & DT_FLAG_DERIVED)) {
       recvtype->unserialize( sendbuf, recvbuf, recvcount/recvtype->size(), MPI_REPLACE);
-    }
-    else if (!(recvtype->flags() & DT_FLAG_DERIVED))
-    {
+    } else if (not(recvtype->flags() & DT_FLAG_DERIVED)) {
       sendtype->serialize(sendbuf, recvbuf, sendcount/sendtype->size());
     }else{
 
@@ -404,7 +400,7 @@ int Datatype::create_indexed(int count, int* block_lengths, int* indices, MPI_Da
   if(old_type->flags_ & DT_FLAG_DERIVED)
     contiguous=false;
 
-  if(!contiguous){
+  if (not contiguous) {
     *new_type = new Type_Indexed(size * old_type->size(),lb,ub,
                                  DT_FLAG_DERIVED|DT_FLAG_DATA, count, block_lengths, indices, old_type);
   }else{
@@ -438,7 +434,7 @@ int Datatype::create_hindexed(int count, int* block_lengths, MPI_Aint* indices,
   if (old_type->flags_ & DT_FLAG_DERIVED || lb!=0)
     contiguous=false;
 
-  if(!contiguous){
+  if (not contiguous) {
     *new_type = new Type_Hindexed(size * old_type->size(),lb,ub,
                                    DT_FLAG_DERIVED|DT_FLAG_DATA, count, block_lengths, indices, old_type);
   }else{
@@ -475,15 +471,15 @@ int Datatype::create_struct(int count, int* block_lengths, MPI_Aint* indices, MP
       forced_ub=true;
     }
 
-    if(!forced_lb && indices[i]+old_types[i]->lb()<lb) 
+    if (not forced_lb && indices[i] + old_types[i]->lb() < lb)
       lb = indices[i];
-    if(!forced_ub &&  indices[i]+block_lengths[i]*old_types[i]->ub()>ub)
+    if (not forced_ub && indices[i] + block_lengths[i] * old_types[i]->ub() > ub)
       ub = indices[i]+block_lengths[i]*old_types[i]->ub();
 
     if ( (i< count -1) && (indices[i]+block_lengths[i]*static_cast<int>(old_types[i]->size()) != indices[i+1]) )
       contiguous=false;
   }
-  if(!contiguous){
+  if (not contiguous) {
     *new_type = new Type_Struct(size, lb,ub, DT_FLAG_DERIVED|DT_FLAG_DATA, 
                                 count, block_lengths, indices, old_types);
   }else{
index cc00885..afc16ca 100644 (file)
@@ -49,15 +49,14 @@ Type_Vector::~Type_Vector(){
 
 void Type_Vector::serialize( void* noncontiguous_buf, void *contiguous_buf, 
                             int count){
-  int i;
   char* contiguous_buf_char = static_cast<char*>(contiguous_buf);
   char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf);
 
-  for (i = 0; i < block_count_ * count; i++) {
-      if (!(old_type_->flags() & DT_FLAG_DERIVED))
-        memcpy(contiguous_buf_char, noncontiguous_buf_char, block_length_ * old_type_->size());
-      else        
-        old_type_->serialize(noncontiguous_buf_char, contiguous_buf_char, block_length_);
+  for (int i = 0; i < block_count_ * count; i++) {
+    if (not(old_type_->flags() & DT_FLAG_DERIVED))
+      memcpy(contiguous_buf_char, noncontiguous_buf_char, block_length_ * old_type_->size());
+    else
+      old_type_->serialize(noncontiguous_buf_char, contiguous_buf_char, block_length_);
 
     contiguous_buf_char += block_length_*old_type_->size();
     if((i+1)%block_count_ ==0)
@@ -69,12 +68,11 @@ void Type_Vector::serialize( void* noncontiguous_buf, void *contiguous_buf,
 
 void Type_Vector::unserialize( void* contiguous_buf, void *noncontiguous_buf, 
                               int count, MPI_Op op){
-  int i;
   char* contiguous_buf_char = static_cast<char*>(contiguous_buf);
   char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf);
 
-  for (i = 0; i < block_count_ * count; i++) {
-    if (!(old_type_->flags() & DT_FLAG_DERIVED)){
+  for (int i = 0; i < block_count_ * count; i++) {
+    if (not(old_type_->flags() & DT_FLAG_DERIVED)) {
       if(op != MPI_OP_NULL)
         op->apply(contiguous_buf_char, noncontiguous_buf_char, &block_length_,
           old_type_);
@@ -98,12 +96,11 @@ Type_Hvector::~Type_Hvector(){
 
 void Type_Hvector::serialize( void* noncontiguous_buf, void *contiguous_buf, 
                     int count){
-  int i;
   char* contiguous_buf_char = static_cast<char*>(contiguous_buf);
   char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf);
 
-  for (i = 0; i < block_count_ * count; i++) {
-    if (!(old_type_->flags() & DT_FLAG_DERIVED))
+  for (int i = 0; i < block_count_ * count; i++) {
+    if (not(old_type_->flags() & DT_FLAG_DERIVED))
       memcpy(contiguous_buf_char, noncontiguous_buf_char, block_length_ * old_type_->size());
     else
       old_type_->serialize( noncontiguous_buf_char, contiguous_buf_char, block_length_);
@@ -119,12 +116,11 @@ void Type_Hvector::serialize( void* noncontiguous_buf, void *contiguous_buf,
 
 void Type_Hvector::unserialize( void* contiguous_buf, void *noncontiguous_buf, 
                               int count, MPI_Op op){
-  int i;
   char* contiguous_buf_char = static_cast<char*>(contiguous_buf);
   char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf);
 
-  for (i = 0; i < block_count_ * count; i++) {
-    if (!(old_type_->flags() & DT_FLAG_DERIVED)){
+  for (int i = 0; i < block_count_ * count; i++) {
+    if (not(old_type_->flags() & DT_FLAG_DERIVED)) {
       if(op!=MPI_OP_NULL) 
         op->apply( contiguous_buf_char, noncontiguous_buf_char, &block_length_, old_type_);
     }else
@@ -162,7 +158,7 @@ void Type_Indexed::serialize( void* noncontiguous_buf, void *contiguous_buf,
   char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf)+block_indices_[0] * old_type_->size();
   for (int j = 0; j < count; j++) {
     for (int i = 0; i < block_count_; i++) {
-      if (!(old_type_->flags() & DT_FLAG_DERIVED))
+      if (not(old_type_->flags() & DT_FLAG_DERIVED))
         memcpy(contiguous_buf_char, noncontiguous_buf_char, block_lengths_[i] * old_type_->size());
       else
         old_type_->serialize( noncontiguous_buf_char, contiguous_buf_char, block_lengths_[i]);
@@ -186,7 +182,7 @@ void Type_Indexed::unserialize( void* contiguous_buf, void *noncontiguous_buf,
     static_cast<char*>(noncontiguous_buf)+block_indices_[0]*old_type_->get_extent();
   for (int j = 0; j < count; j++) {
     for (int i = 0; i < block_count_; i++) {
-      if (!(old_type_->flags() & DT_FLAG_DERIVED)){
+      if (not(old_type_->flags() & DT_FLAG_DERIVED)) {
         if(op!=MPI_OP_NULL) 
           op->apply( contiguous_buf_char, noncontiguous_buf_char, &block_lengths_[i],
                     old_type_);
@@ -230,7 +226,7 @@ void Type_Hindexed::serialize( void* noncontiguous_buf, void *contiguous_buf,
   char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf)+ block_indices_[0];
   for (int j = 0; j < count; j++) {
     for (int i = 0; i < block_count_; i++) {
-      if (!(old_type_->flags() & DT_FLAG_DERIVED))
+      if (not(old_type_->flags() & DT_FLAG_DERIVED))
         memcpy(contiguous_buf_char, noncontiguous_buf_char, block_lengths_[i] * old_type_->size());
       else
         old_type_->serialize(noncontiguous_buf_char, contiguous_buf_char,block_lengths_[i]);
@@ -251,7 +247,7 @@ void Type_Hindexed::unserialize( void* contiguous_buf, void *noncontiguous_buf,
   char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf)+ block_indices_[0];
   for (int j = 0; j < count; j++) {
     for (int i = 0; i < block_count_; i++) {
-      if (!(old_type_->flags() & DT_FLAG_DERIVED)){
+      if (not(old_type_->flags() & DT_FLAG_DERIVED)) {
         if(op!=MPI_OP_NULL) 
           op->apply( contiguous_buf_char, noncontiguous_buf_char, &block_lengths_[i],
                             old_type_);
@@ -298,7 +294,7 @@ void Type_Struct::serialize( void* noncontiguous_buf, void *contiguous_buf,
   char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf)+ block_indices_[0];
   for (int j = 0; j < count; j++) {
     for (int i = 0; i < block_count_; i++) {
-      if (!(old_types_[i]->flags() & DT_FLAG_DERIVED))
+      if (not(old_types_[i]->flags() & DT_FLAG_DERIVED))
         memcpy(contiguous_buf_char, noncontiguous_buf_char, block_lengths_[i] * old_types_[i]->size());
       else
         old_types_[i]->serialize( noncontiguous_buf_char,contiguous_buf_char,block_lengths_[i]);
@@ -320,7 +316,7 @@ void Type_Struct::unserialize( void* contiguous_buf, void *noncontiguous_buf,
   char* noncontiguous_buf_char = static_cast<char*>(noncontiguous_buf)+ block_indices_[0];
   for (int j = 0; j < count; j++) {
     for (int i = 0; i < block_count_; i++) {
-      if (!(old_types_[i]->flags() & DT_FLAG_DERIVED)){
+      if (not(old_types_[i]->flags() & DT_FLAG_DERIVED)) {
         if(op!=MPI_OP_NULL) 
           op->apply( contiguous_buf_char, noncontiguous_buf_char, &block_lengths_[i], old_types_[i]);
       }else
index 475688f..791b8da 100644 (file)
@@ -58,7 +58,7 @@ void SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_
   SIMIX_function_register(name, code);
 
   static int already_called = 0;
-  if (!already_called) {
+  if (not already_called) {
     already_called = 1;
     for (auto& item : simgrid::s4u::host_list) {
       simgrid::s4u::Host* host = item.second;
index ff2da6f..687e972 100644 (file)
@@ -12,7 +12,6 @@
 #include "src/smpi/SmpiHost.hpp"
 #include "xbt/config.hpp"
 #include "src/smpi/private.h"
-#include "smpi/smpi_shared_malloc.hpp"
 #include "src/smpi/smpi_coll.hpp"
 #include "src/smpi/smpi_comm.hpp"
 #include "src/smpi/smpi_group.hpp"
@@ -145,7 +144,7 @@ static void check_blocks(std::vector<std::pair<size_t, size_t>> &private_blocks,
 
 void smpi_comm_copy_buffer_callback(smx_activity_t synchro, void *buff, size_t buff_size)
 {
-  simgrid::kernel::activity::Comm *comm = dynamic_cast<simgrid::kernel::activity::Comm*>(synchro);
+  simgrid::kernel::activity::CommImpl* comm = dynamic_cast<simgrid::kernel::activity::CommImpl*>(synchro);
   int src_shared                        = 0;
   int dst_shared                        = 0;
   size_t src_offset                     = 0;
@@ -238,7 +237,7 @@ void smpi_global_init()
 {
   MPI_Group group;
 
-  if (!MC_is_active()) {
+  if (not MC_is_active()) {
     global_timer = xbt_os_timer_new();
     xbt_os_walltimer_start(global_timer);
   }
@@ -246,7 +245,7 @@ void smpi_global_init()
   if (xbt_cfg_get_string("smpi/comp-adjustment-file")[0] != '\0') { 
     std::string filename {xbt_cfg_get_string("smpi/comp-adjustment-file")};
     std::ifstream fstream(filename);
-    if (!fstream.is_open()) {
+    if (not fstream.is_open()) {
       xbt_die("Could not open file %s. Does it exist?", filename.c_str());
     }
 
@@ -394,7 +393,7 @@ void smpi_global_destroy()
 
   MPI_COMM_WORLD = MPI_COMM_NULL;
 
-  if (!MC_is_active()) {
+  if (not MC_is_active()) {
     xbt_os_timer_free(global_timer);
   }
 
@@ -471,11 +470,12 @@ static void smpi_init_options(){
       smpi_cpu_threshold = DBL_MAX;
 
     char* val = xbt_cfg_get_string("smpi/shared-malloc");
-    if (!strcasecmp(val, "yes") || !strcmp(val, "1") || !strcasecmp(val, "on") || !strcasecmp(val, "global")) {
+    if (not strcasecmp(val, "yes") || not strcmp(val, "1") || not strcasecmp(val, "on") ||
+        not strcasecmp(val, "global")) {
       smpi_cfg_shared_malloc = shmalloc_global;
-    } else if (!strcasecmp(val, "local")) {
+    } else if (not strcasecmp(val, "local")) {
       smpi_cfg_shared_malloc = shmalloc_local;
-    } else if (!strcasecmp(val, "no") || !strcmp(val, "0") || !strcasecmp(val, "off")) {
+    } else if (not strcasecmp(val, "no") || not strcmp(val, "0") || not strcasecmp(val, "off")) {
       smpi_cfg_shared_malloc = shmalloc_none;
     } else {
       xbt_die("Invalid value '%s' for option smpi/shared-malloc. Possible values: 'on' or 'global', 'local', 'off'",
@@ -611,7 +611,7 @@ int smpi_main(const char* executable, int argc, char *argv[])
         if (handle == nullptr)
           xbt_die("dlopen failed: %s (errno: %d -- %s)", dlerror(), errno, strerror(errno));
         smpi_entry_point_type entry_point = smpi_resolve_function(handle);
-        if (!entry_point)
+        if (not entry_point)
           xbt_die("Could not resolve entry point");
 
         smpi_run_entry_point(entry_point, args);
@@ -626,7 +626,7 @@ int smpi_main(const char* executable, int argc, char *argv[])
     if (handle == nullptr)
       xbt_die("dlopen failed for %s: %s (errno: %d -- %s)", executable, dlerror(), errno, strerror(errno));
     smpi_entry_point_type entry_point = smpi_resolve_function(handle);
-    if (!entry_point)
+    if (not entry_point)
       xbt_die("main not found in %s", executable);
     // TODO, register the executable for SMPI privatization
 
index 590ba5e..4c4cd35 100644 (file)
@@ -24,22 +24,16 @@ Group::Group()
 
 Group::Group(int n) : size_(n)
 {
-  int i;
   rank_to_index_map_ = xbt_new(int, size_);
   index_to_rank_map_ = xbt_dict_new_homogeneous(xbt_free_f);
   refcount_ = 1;
-  for (i = 0; i < size_; i++) {
+  for (int i = 0; i < size_; i++) {
     rank_to_index_map_[i] = MPI_UNDEFINED;
   }
 }
 
 Group::Group(MPI_Group origin)
 {
-  char *key;
-  char *ptr_rank;
-  xbt_dict_cursor_t cursor = nullptr;
-  
-  int i;
   if(origin != MPI_GROUP_NULL
             && origin != MPI_GROUP_EMPTY)
     {
@@ -47,10 +41,13 @@ Group::Group(MPI_Group origin)
       rank_to_index_map_ = xbt_new(int, size_);
       index_to_rank_map_ = xbt_dict_new_homogeneous(xbt_free_f);
       refcount_ = 1;
-      for (i = 0; i < size_; i++) {
+      for (int i = 0; i < size_; i++) {
         rank_to_index_map_[i] = origin->rank_to_index_map_[i];
       }
 
+      char* key;
+      char* ptr_rank;
+      xbt_dict_cursor_t cursor = nullptr;
       xbt_dict_foreach(origin->index_to_rank_map_, cursor, key, ptr_rank) {
         int * cp = static_cast<int*>(xbt_malloc(sizeof(int)));
         *cp=*reinterpret_cast<int*>(ptr_rank);
@@ -129,17 +126,15 @@ int Group::compare(MPI_Group group2)
   int result;
   int i;
   int index;
-  int rank;
-  int sz;
 
   result = MPI_IDENT;
   if (size_ != group2->size()) {
     result = MPI_UNEQUAL;
   } else {
-    sz = group2->size();
+    int sz = group2->size();
     for (i = 0; i < sz; i++) {
       index = this->index(i);
-      rank = group2->rank(index);
+      int rank = group2->rank(index);
       if (rank == MPI_UNDEFINED) {
         result = MPI_UNEQUAL;
         break;
index aa01f3c..9c40f5e 100644 (file)
@@ -19,9 +19,9 @@ class Group : public F2C{
     xbt_dict_t index_to_rank_map_;
     int refcount_;
   public:
-    Group();
-    Group(int size);
-    Group(Group* origin);
+    explicit Group();
+    explicit Group(int size);
+    explicit Group(Group* origin);
     ~Group();
 
     void set_mapping(int index, int rank);
index 5dac6d2..584ab1f 100644 (file)
@@ -44,8 +44,6 @@ void Info::set(char *key, char *value){
   xbt_dict_set(dict_, key, xbt_strdup(value), nullptr);
 }
 
-
-
 int Info::get(char *key, int valuelen, char *value, int *flag){
   *flag=false;
   char* tmpvalue=static_cast<char*>(xbt_dict_get_or_null(dict_, key));
index 92f3384..52ad77e 100644 (file)
@@ -137,7 +137,7 @@ template <typename T> int Keyval::attr_put(int keyval, void* attr_value){
 }
 
 template <typename T> void Keyval::cleanup_attr(){
-  if(!attributes()->empty()){
+  if (not attributes()->empty()) {
     int flag=0;
     for(auto it : attributes_){
       try{
index d371616..4b62f24 100644 (file)
@@ -114,12 +114,7 @@ int smpi_is_privatisation_file(char* file)
 void smpi_initialize_global_memory_segments()
 {
 
-#if !HAVE_PRIVATIZATION
-  smpi_privatize_global_variables=false;
-  xbt_die("You are trying to use privatization on a system that does not support it. Don't.");
-  return;
-#else
-
+#if HAVE_PRIVATIZATION
   smpi_get_executable_global_size();
 
   XBT_DEBUG ("bss+data segment found : size %d starting at %p", smpi_size_data_exe, smpi_start_data_exe );
@@ -182,6 +177,10 @@ Ask the Internet about tutorials on how to increase the files limit such as: htt
     smpi_privatisation_regions[i].file_descriptor = file_descriptor;
     smpi_privatisation_regions[i].address         = address;
   }
+#else /* ! HAVE_PRIVATIZATION */
+  smpi_privatize_global_variables = false;
+  xbt_die("You are trying to use privatization on a system that does not support it. Don't.");
+  return;
 #endif
 }
 
index 599c0c2..9cd6612 100644 (file)
@@ -16,7 +16,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_op, smpi, "Logging specific to SMPI (op)");
 #define PROD_OP(a, b) (b) *= (a)
 #define LAND_OP(a, b) (b) = (a) && (b)
 #define LOR_OP(a, b)  (b) = (a) || (b)
-#define LXOR_OP(a, b) (b) = (!(a) && (b)) || ((a) && !(b))
+#define LXOR_OP(a, b) (b) = (not(a) && (b)) || ((a) && not(b))
 #define BAND_OP(a, b) (b) &= (a)
 #define BOR_OP(a, b)  (b) |= (a)
 #define BXOR_OP(a, b) (b) ^= (a)
@@ -245,8 +245,8 @@ void Op::apply(void *invec, void *inoutvec, int *len, MPI_Datatype datatype)
     smpi_switch_data_segment(smpi_process()->index());
   }
 
-  if(!smpi_process()->replaying() && *len > 0){
-    if(! is_fortran_op_)
+  if (not smpi_process()->replaying() && *len > 0) {
+    if (not is_fortran_op_)
       this->func_(invec, inoutvec, len, &datatype);
     else{
       XBT_DEBUG("Applying operation of length %d from %p and from/to %p", *len, invec, inoutvec);
index 1d9a5f3..7e9d901 100644 (file)
@@ -626,8 +626,8 @@ int PMPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dst, int tag
       retval = MPI_ERR_ARG;
   } else if (comm == MPI_COMM_NULL) {
       retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid()) {
-      retval = MPI_ERR_TYPE;
+  } else if (not datatype->is_valid()) {
+    retval = MPI_ERR_TYPE;
   } else if (dst == MPI_PROC_NULL) {
       retval = MPI_SUCCESS;
   } else {
@@ -649,8 +649,8 @@ int PMPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int src, int tag
     retval = MPI_ERR_ARG;
   } else if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid()) {
-      retval = MPI_ERR_TYPE;
+  } else if (not datatype->is_valid()) {
+    retval = MPI_ERR_TYPE;
   } else if (src == MPI_PROC_NULL) {
     retval = MPI_SUCCESS;
   } else {
@@ -672,8 +672,8 @@ int PMPI_Ssend_init(void* buf, int count, MPI_Datatype datatype, int dst, int ta
     retval = MPI_ERR_ARG;
   } else if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid()) {
-      retval = MPI_ERR_TYPE;
+  } else if (not datatype->is_valid()) {
+    retval = MPI_ERR_TYPE;
   } else if (dst == MPI_PROC_NULL) {
     retval = MPI_SUCCESS;
   } else {
@@ -754,8 +754,8 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MP
     retval = MPI_ERR_RANK;
   } else if ((count < 0) || (buf==nullptr && count > 0)) {
     retval = MPI_ERR_COUNT;
-  } else if (!datatype->is_valid()) {
-      retval = MPI_ERR_TYPE;
+  } else if (not datatype->is_valid()) {
+    retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
@@ -804,8 +804,8 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MP
     retval = MPI_ERR_RANK;
   } else if ((count < 0) || (buf==nullptr && count > 0)) {
     retval = MPI_ERR_COUNT;
-  } else if (!datatype->is_valid()) {
-      retval = MPI_ERR_TYPE;
+  } else if (not datatype->is_valid()) {
+    retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
@@ -852,8 +852,8 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, M
     retval = MPI_ERR_RANK;
   } else if ((count < 0)|| (buf==nullptr && count > 0)) {
     retval = MPI_ERR_COUNT;
-  } else if (!datatype->is_valid()) {
-      retval = MPI_ERR_TYPE;
+  } else if (not datatype->is_valid()) {
+    retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
@@ -899,8 +899,8 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI
     retval = MPI_ERR_RANK;
   } else if ((count < 0) || (buf==nullptr && count > 0)) {
     retval = MPI_ERR_COUNT;
-  } else if (!datatype->is_valid()) {
-      retval = MPI_ERR_TYPE;
+  } else if (not datatype->is_valid()) {
+    retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
   } else {
@@ -924,7 +924,7 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI
     // the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE)
     if (status != MPI_STATUS_IGNORE) {
       src_traced = comm->group()->index(status->MPI_SOURCE);
-      if (!TRACE_smpi_view_internals()) {
+      if (not TRACE_smpi_view_internals()) {
         TRACE_smpi_recv(rank, src_traced, rank, tag);
       }
     }
@@ -949,7 +949,7 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI
     retval = MPI_ERR_RANK;
   } else if ((count < 0) || (buf == nullptr && count > 0)) {
     retval = MPI_ERR_COUNT;
-  } else if (!datatype->is_valid()) {
+  } else if (not datatype->is_valid()) {
     retval = MPI_ERR_TYPE;
   } else if(tag < 0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
@@ -968,7 +968,7 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, MPI
     }
     extra->send_size = count*dt_size_send;
     TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
-    if (!TRACE_smpi_view_internals()) {
+    if (not TRACE_smpi_view_internals()) {
       TRACE_smpi_send(rank, rank, dst_traced, tag,count*datatype->size());
     }
 
@@ -995,7 +995,7 @@ int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MP
     retval = MPI_ERR_RANK;
   } else if ((count < 0) || (buf==nullptr && count > 0)) {
     retval = MPI_ERR_COUNT;
-  } else if (!datatype->is_valid()){
+  } else if (not datatype->is_valid()) {
     retval = MPI_ERR_TYPE;
   } else if(tag<0 && tag !=  MPI_ANY_TAG){
     retval = MPI_ERR_TAG;
@@ -1035,7 +1035,7 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dst,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!sendtype->is_valid() || !recvtype->is_valid()) {
+  } else if (not sendtype->is_valid() || not recvtype->is_valid()) {
     retval = MPI_ERR_TYPE;
   } else if (src == MPI_PROC_NULL || dst == MPI_PROC_NULL) {
     simgrid::smpi::Status::empty(status);
@@ -1089,7 +1089,7 @@ int PMPI_Sendrecv_replace(void* buf, int count, MPI_Datatype datatype, int dst,
                           MPI_Comm comm, MPI_Status* status)
 {
   int retval = 0;
-  if (!datatype->is_valid()) {
+  if (not datatype->is_valid()) {
     return MPI_ERR_TYPE;
   } else if (count < 0) {
     return MPI_ERR_COUNT;
@@ -1388,7 +1388,7 @@ int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm c
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid()) {
+  } else if (not datatype->is_valid()) {
     retval = MPI_ERR_ARG;
   } else {
     int rank        = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
@@ -1659,8 +1659,8 @@ int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (((comm->rank() == root) && (!sendtype->is_valid())) ||
-             ((recvbuf != MPI_IN_PLACE) && (!recvtype->is_valid()))) {
+  } else if (((comm->rank() == root) && (not sendtype->is_valid())) ||
+             ((recvbuf != MPI_IN_PLACE) && (not recvtype->is_valid()))) {
     retval = MPI_ERR_TYPE;
   } else if ((sendbuf == recvbuf) ||
       ((comm->rank()==root) && sendcount>0 && (sendbuf == nullptr))){
@@ -1758,7 +1758,7 @@ int PMPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid() || op == MPI_OP_NULL) {
+  } else if (not datatype->is_valid() || op == MPI_OP_NULL) {
     retval = MPI_ERR_ARG;
   } else {
     int rank               = comm != MPI_COMM_NULL ? smpi_process()->index() : -1;
@@ -1789,7 +1789,7 @@ int PMPI_Reduce_local(void *inbuf, void *inoutbuf, int count, MPI_Datatype datat
   int retval = 0;
 
   smpi_bench_end();
-  if (!datatype->is_valid() || op == MPI_OP_NULL) {
+  if (not datatype->is_valid() || op == MPI_OP_NULL) {
     retval = MPI_ERR_ARG;
   } else {
     op->apply(inbuf, inoutbuf, &count, datatype);
@@ -1807,7 +1807,7 @@ int PMPI_Allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid()) {
+  } else if (not datatype->is_valid()) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -1851,7 +1851,7 @@ int PMPI_Scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MP
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid()) {
+  } else if (not datatype->is_valid()) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -1884,7 +1884,7 @@ int PMPI_Exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid()) {
+  } else if (not datatype->is_valid()) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -1923,7 +1923,7 @@ int PMPI_Reduce_scatter(void *sendbuf, void *recvbuf, int *recvcounts, MPI_Datat
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid()) {
+  } else if (not datatype->is_valid()) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -1976,7 +1976,7 @@ int PMPI_Reduce_scatter_block(void *sendbuf, void *recvbuf, int recvcount,
 
   if (comm == MPI_COMM_NULL) {
     retval = MPI_ERR_COMM;
-  } else if (!datatype->is_valid()) {
+  } else if (not datatype->is_valid()) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2099,9 +2099,8 @@ int PMPI_Alltoallv(void* sendbuf, int* sendcounts, int* senddisps, MPI_Datatype
     extra->recvcounts      = xbt_new(int, size);
     extra->sendcounts      = xbt_new(int, size);
     int known              = 0;
-    int dt_size_recv       = 1;
     extra->datatype2       = encode_datatype(recvtype, &known);
-    dt_size_recv           = recvtype->size();
+    int dt_size_recv       = recvtype->size();
 
     void* sendtmpbuf         = static_cast<char*>(sendbuf);
     int* sendtmpcounts       = sendcounts;
@@ -2165,7 +2164,7 @@ int PMPI_Get_count(MPI_Status * status, MPI_Datatype datatype, int *count)
 {
   if (status == nullptr || count == nullptr) {
     return MPI_ERR_ARG;
-  } else if (!datatype->is_valid()) {
+  } else if (not datatype->is_valid()) {
     return MPI_ERR_TYPE;
   } else {
     size_t size = datatype->size();
@@ -2627,7 +2626,7 @@ int PMPI_Get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
   } else if ((origin_count < 0 || target_count < 0) ||
              (origin_addr==nullptr && origin_count > 0)){
     retval = MPI_ERR_COUNT;
-  } else if ((!origin_datatype->is_valid()) || (!target_datatype->is_valid())) {
+  } else if ((not origin_datatype->is_valid()) || (not target_datatype->is_valid())) {
     retval = MPI_ERR_TYPE;
   } else {
     int rank = smpi_process()->index();
@@ -2662,7 +2661,7 @@ int PMPI_Rget( void *origin_addr, int origin_count, MPI_Datatype origin_datatype
   } else if ((origin_count < 0 || target_count < 0) ||
              (origin_addr==nullptr && origin_count > 0)){
     retval = MPI_ERR_COUNT;
-  } else if ((!origin_datatype->is_valid()) || (!target_datatype->is_valid())) {
+  } else if ((not origin_datatype->is_valid()) || (not target_datatype->is_valid())) {
     retval = MPI_ERR_TYPE;
   } else if(request == nullptr){
     retval = MPI_ERR_REQUEST;
@@ -2698,7 +2697,7 @@ int PMPI_Put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype,
   } else if ((origin_count < 0 || target_count < 0) ||
             (origin_addr==nullptr && origin_count > 0)){
     retval = MPI_ERR_COUNT;
-  } else if ((!origin_datatype->is_valid()) || (!target_datatype->is_valid())) {
+  } else if ((not origin_datatype->is_valid()) || (not target_datatype->is_valid())) {
     retval = MPI_ERR_TYPE;
   } else {
     int rank = smpi_process()->index();
@@ -2734,7 +2733,7 @@ int PMPI_Rput( void *origin_addr, int origin_count, MPI_Datatype origin_datatype
   } else if ((origin_count < 0 || target_count < 0) ||
             (origin_addr==nullptr && origin_count > 0)){
     retval = MPI_ERR_COUNT;
-  } else if ((!origin_datatype->is_valid()) || (!target_datatype->is_valid())) {
+  } else if ((not origin_datatype->is_valid()) || (not target_datatype->is_valid())) {
     retval = MPI_ERR_TYPE;
   } else if(request == nullptr){
     retval = MPI_ERR_REQUEST;
@@ -2771,8 +2770,7 @@ int PMPI_Accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_da
   } else if ((origin_count < 0 || target_count < 0) ||
              (origin_addr==nullptr && origin_count > 0)){
     retval = MPI_ERR_COUNT;
-  } else if ((!origin_datatype->is_valid()) ||
-            (!target_datatype->is_valid())) {
+  } else if ((not origin_datatype->is_valid()) || (not target_datatype->is_valid())) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2809,8 +2807,7 @@ int PMPI_Raccumulate( void *origin_addr, int origin_count, MPI_Datatype origin_d
   } else if ((origin_count < 0 || target_count < 0) ||
              (origin_addr==nullptr && origin_count > 0)){
     retval = MPI_ERR_COUNT;
-  } else if ((!origin_datatype->is_valid()) ||
-            (!target_datatype->is_valid())) {
+  } else if ((not origin_datatype->is_valid()) || (not target_datatype->is_valid())) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2850,9 +2847,8 @@ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win){
              (origin_addr==nullptr && origin_count > 0 && op != MPI_NO_OP) ||
              (result_addr==nullptr && result_count > 0)){
     retval = MPI_ERR_COUNT;
-  } else if ((origin_datatype!=MPI_DATATYPE_NULL && !origin_datatype->is_valid()) ||
-            (!target_datatype->is_valid())||
-            (!result_datatype->is_valid())) {
+  } else if ((origin_datatype != MPI_DATATYPE_NULL && not origin_datatype->is_valid()) ||
+             (not target_datatype->is_valid()) || (not result_datatype->is_valid())) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2893,9 +2889,8 @@ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request){
              (origin_addr==nullptr && origin_count > 0 && op != MPI_NO_OP) ||
              (result_addr==nullptr && result_count > 0)){
     retval = MPI_ERR_COUNT;
-  } else if ((origin_datatype!=MPI_DATATYPE_NULL && !origin_datatype->is_valid()) ||
-            (!target_datatype->is_valid())||
-            (!result_datatype->is_valid())) {
+  } else if ((origin_datatype != MPI_DATATYPE_NULL && not origin_datatype->is_valid()) ||
+             (not target_datatype->is_valid()) || (not result_datatype->is_valid())) {
     retval = MPI_ERR_TYPE;
   } else if (op == MPI_OP_NULL) {
     retval = MPI_ERR_OP;
@@ -2938,7 +2933,7 @@ int PMPI_Compare_and_swap(void *origin_addr, void *compare_addr,
     retval = MPI_ERR_ARG;
   } else if (origin_addr==nullptr || result_addr==nullptr || compare_addr==nullptr){
     retval = MPI_ERR_COUNT;
-  } else if (!datatype->is_valid()) {
+  } else if (not datatype->is_valid()) {
     retval = MPI_ERR_TYPE;
   } else {
     int rank = smpi_process()->index();
@@ -3503,7 +3498,7 @@ int PMPI_Info_get_valuelen( MPI_Info info, char *key, int *valuelen, int *flag){
 int PMPI_Unpack(void* inbuf, int incount, int* position, void* outbuf, int outcount, MPI_Datatype type, MPI_Comm comm) {
   if(incount<0 || outcount < 0 || inbuf==nullptr || outbuf==nullptr)
     return MPI_ERR_ARG;
-  if(!type->is_valid())
+  if (not type->is_valid())
     return MPI_ERR_TYPE;
   if(comm==MPI_COMM_NULL)
     return MPI_ERR_COMM;
@@ -3513,7 +3508,7 @@ int PMPI_Unpack(void* inbuf, int incount, int* position, void* outbuf, int outco
 int PMPI_Pack(void* inbuf, int incount, MPI_Datatype type, void* outbuf, int outcount, int* position, MPI_Comm comm) {
   if(incount<0 || outcount < 0|| inbuf==nullptr || outbuf==nullptr)
     return MPI_ERR_ARG;
-  if(!type->is_valid())
+  if (not type->is_valid())
     return MPI_ERR_TYPE;
   if(comm==MPI_COMM_NULL)
     return MPI_ERR_COMM;
@@ -3523,7 +3518,7 @@ int PMPI_Pack(void* inbuf, int incount, MPI_Datatype type, void* outbuf, int out
 int PMPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm, int* size) {
   if(incount<0)
     return MPI_ERR_ARG;
-  if(!datatype->is_valid())
+  if (not datatype->is_valid())
     return MPI_ERR_TYPE;
   if(comm==MPI_COMM_NULL)
     return MPI_ERR_COMM;
index 27bc512..b6bc56a 100644 (file)
@@ -4,7 +4,6 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "mc/mc.h"
-#include "src/mc/mc_ignore.h"
 #include "src/mc/mc_replay.h"
 #include "src/msg/msg_private.h"
 #include "src/simix/smx_private.h"
@@ -196,12 +195,12 @@ xbt_mutex_t Process::mailboxes_mutex()
 }
 
 #if HAVE_PAPI
-int Process::papi_event_set(void)
+int Process::papi_event_set()
 {
   return papi_event_set_;
 }
 
-papi_counter_t& smpi_process_papi_counters(void)
+papi_counter_t& smpi_process_papi_counters()
 {
   return papi_counter_data_;
 }
index 8960249..f532ec7 100644 (file)
@@ -59,8 +59,8 @@ class Process {
     smx_mailbox_t mailbox_small();
     xbt_mutex_t mailboxes_mutex();
 #if HAVE_PAPI
-    int papi_event_set(void);
-    papi_counter_t& papi_counters(void);
+    int papi_event_set();
+    papi_counter_t& papi_counters();
 #endif
     xbt_os_timer_t timer();
     void simulated_start();
index 059bd0c..c626761 100644 (file)
@@ -52,7 +52,7 @@ static void set_reqq_self(std::vector<MPI_Request> *mpi_request)
 //allocate a single buffer for all sends, growing it if needed
 void* smpi_get_tmp_sendbuffer(int size)
 {
-  if (!smpi_process()->replaying())
+  if (not smpi_process()->replaying())
     return xbt_malloc(size);
   if (sendbuffer_size<size){
     sendbuffer=static_cast<char*>(xbt_realloc(sendbuffer,size));
@@ -63,7 +63,7 @@ void* smpi_get_tmp_sendbuffer(int size)
 
 //allocate a single buffer for all recv
 void* smpi_get_tmp_recvbuffer(int size){
-  if (!smpi_process()->replaying())
+  if (not smpi_process()->replaying())
     return xbt_malloc(size);
   if (recvbuffer_size<size){
     recvbuffer=static_cast<char*>(xbt_realloc(recvbuffer,size));
@@ -73,7 +73,7 @@ void* smpi_get_tmp_recvbuffer(int size){
 }
 
 void smpi_free_tmp_buffer(void* buf){
-  if (!smpi_process()->replaying())
+  if (not smpi_process()->replaying())
     xbt_free(buf);
 }
 
@@ -236,7 +236,7 @@ static void action_send(const char *const *action)
   extra->dst = dst_traced;
   extra->datatype1 = encode_datatype(MPI_CURRENT_TYPE, nullptr);
   TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
-  if (!TRACE_smpi_view_internals())
+  if (not TRACE_smpi_view_internals())
     TRACE_smpi_send(rank, rank, dst_traced, 0, size*MPI_CURRENT_TYPE->size());
 
   Request::send(nullptr, size, MPI_CURRENT_TYPE, to , 0, MPI_COMM_WORLD);
@@ -267,7 +267,7 @@ static void action_Isend(const char *const *action)
   extra->dst = dst_traced;
   extra->datatype1 = encode_datatype(MPI_CURRENT_TYPE, nullptr);
   TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
-  if (!TRACE_smpi_view_internals())
+  if (not TRACE_smpi_view_internals())
     TRACE_smpi_send(rank, rank, dst_traced, 0, size*MPI_CURRENT_TYPE->size());
 
   MPI_Request request = Request::isend(nullptr, size, MPI_CURRENT_TYPE, to, 0,MPI_COMM_WORLD);
@@ -311,7 +311,7 @@ static void action_recv(const char *const *action) {
   Request::recv(nullptr, size, MPI_CURRENT_TYPE, from, 0, MPI_COMM_WORLD, &status);
 
   TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__);
-  if (!TRACE_smpi_view_internals()) {
+  if (not TRACE_smpi_view_internals()) {
     TRACE_smpi_recv(rank, src_traced, rank, 0);
   }
 
@@ -905,8 +905,9 @@ static void action_allToAllv(const char *const *action) {
 
 }} // namespace simgrid::smpi
 
-void smpi_replay_run(int *argc, char***argv){
-  /* First initializes everything */
+/** @brief Only initialize the replay, don't do it for real */
+void smpi_replay_init(int* argc, char*** argv)
+{
   simgrid::smpi::Process::init(argc, argv);
   smpi_process()->mark_as_initialized();
   smpi_process()->set_replaying(true);
@@ -916,10 +917,8 @@ void smpi_replay_run(int *argc, char***argv){
   TRACE_smpi_computing_init(rank);
   instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
   extra->type = TRACING_INIT;
-  char *operation =bprintf("%s_init",__FUNCTION__);
-  TRACE_smpi_collective_in(rank, -1, operation, extra);
-  TRACE_smpi_collective_out(rank, -1, operation);
-  xbt_free(operation);
+  TRACE_smpi_collective_in(rank, -1, "smpi_replay_run_init", extra);
+  TRACE_smpi_collective_out(rank, -1, "smpi_replay_run_init");
   xbt_replay_action_register("init",       simgrid::smpi::action_init);
   xbt_replay_action_register("finalize",   simgrid::smpi::action_finalize);
   xbt_replay_action_register("comm_size",  simgrid::smpi::action_comm_size);
@@ -947,10 +946,7 @@ void smpi_replay_run(int *argc, char***argv){
 
   //if we have a delayed start, sleep here.
   if(*argc>2){
-    char *endptr;
-    double value = strtod((*argv)[2], &endptr);
-    if (*endptr != '\0')
-      THROWF(unknown_error, 0, "%s is not a double", (*argv)[2]);
+    double value = xbt_str_parse_double((*argv)[2], "%s is not a double");
     XBT_VERB("Delayed start for instance - Sleeping for %f flops ",value );
     smpi_execute_flops(value);
   } else {
@@ -958,14 +954,17 @@ void smpi_replay_run(int *argc, char***argv){
     XBT_DEBUG("Force context switch by smpi_execute_flops  - Sleeping for 0.0 flops ");
     smpi_execute_flops(0.0);
   }
+}
 
-  /* Actually run the replay */
+/** @brief actually run the replay after initialization */
+void smpi_replay_main(int* argc, char*** argv)
+{
   simgrid::xbt::replay_runner(*argc, *argv);
 
   /* and now, finalize everything */
   /* One active process will stop. Decrease the counter*/
   XBT_DEBUG("There are %zu elements in reqq[*]", get_reqq_self()->size());
-  if (!get_reqq_self()->empty()){
+  if (not get_reqq_self()->empty()) {
     unsigned int count_requests=get_reqq_self()->size();
     MPI_Request requests[count_requests];
     MPI_Status status[count_requests];
@@ -989,12 +988,17 @@ void smpi_replay_run(int *argc, char***argv){
 
   instr_extra_data extra_fin = xbt_new0(s_instr_extra_data_t,1);
   extra_fin->type = TRACING_FINALIZE;
-  operation =bprintf("%s_finalize",__FUNCTION__);
-  TRACE_smpi_collective_in(rank, -1, operation, extra_fin);
+  TRACE_smpi_collective_in(smpi_process()->index(), -1, "smpi_replay_run_finalize", extra_fin);
 
   smpi_process()->finalize();
 
-  TRACE_smpi_collective_out(rank, -1, operation);
+  TRACE_smpi_collective_out(smpi_process()->index(), -1, "smpi_replay_run_finalize");
   TRACE_smpi_finalize(smpi_process()->index());
-  xbt_free(operation);
+}
+
+/** @brief chain a replay initialization and a replay start */
+void smpi_replay_run(int* argc, char*** argv)
+{
+  smpi_replay_init(argc, argv);
+  smpi_replay_main(argc, argv);
 }
index 1838d94..e839534 100644 (file)
@@ -3,16 +3,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 "src/smpi/smpi_request.hpp"
+
 #include "mc/mc.h"
+#include "src/kernel/activity/CommImpl.hpp"
 #include "src/mc/mc_replay.h"
 #include "src/smpi/SmpiHost.hpp"
-#include "src/kernel/activity/SynchroComm.hpp"
 #include "src/smpi/private.h"
 #include "src/smpi/smpi_comm.hpp"
 #include "src/smpi/smpi_datatype.hpp"
 #include "src/smpi/smpi_op.hpp"
 #include "src/smpi/smpi_process.hpp"
-#include "src/smpi/smpi_request.hpp"
 
 #include <algorithm>
 
@@ -373,9 +374,9 @@ void Request::start()
 
     // we make a copy here, as the size is modified by simix, and we may reuse the request in another receive later
     real_size_=size_;
-    action_ = simcall_comm_irecv(process->process(), mailbox, buf_, &real_size_, &match_recv,
-                                         ! process->replaying()? smpi_comm_copy_data_callback
-                                         : &smpi_comm_null_copy_buffer_callback, this, -1.0);
+    action_   = simcall_comm_irecv(
+        process->process(), mailbox, buf_, &real_size_, &match_recv,
+        process->replaying() ? &smpi_comm_null_copy_buffer_callback : smpi_comm_copy_data_callback, this, -1.0);
     XBT_DEBUG("recv simcall posted");
 
     if (async_small_thresh != 0 || (flags_ & RMA) != 0 )
@@ -395,9 +396,9 @@ void Request::start()
       detached_ = 1;
       XBT_DEBUG("Send request %p is detached", this);
       refcount_++;
-      if(!(old_type_->flags() & DT_FLAG_DERIVED)){
+      if (not(old_type_->flags() & DT_FLAG_DERIVED)) {
         oldbuf = buf_;
-        if (!process->replaying() && oldbuf != nullptr && size_!=0){
+        if (not process->replaying() && oldbuf != nullptr && size_ != 0) {
           if((smpi_privatize_global_variables != 0)
             && (static_cast<char*>(buf_) >= smpi_start_data_exe)
             && (static_cast<char*>(buf_) < smpi_start_data_exe + smpi_size_data_exe )){
@@ -432,7 +433,7 @@ void Request::start()
     if (async_small_thresh != 0 || (flags_ & RMA) != 0)
       xbt_mutex_acquire(mut);
 
-    if (!(async_small_thresh != 0 || (flags_ & RMA) !=0)) {
+    if (not(async_small_thresh != 0 || (flags_ & RMA) != 0)) {
       mailbox = process->mailbox();
     } else if (((flags_ & RMA) != 0) || static_cast<int>(size_) < async_small_thresh) { // eager mode
       mailbox = process->mailbox();
@@ -462,13 +463,12 @@ void Request::start()
 
     // we make a copy here, as the size is modified by simix, and we may reuse the request in another receive later
     real_size_=size_;
-    action_ = simcall_comm_isend(SIMIX_process_from_PID(src_+1), mailbox, size_, -1.0,
-                                         buf, real_size_, &match_send,
-                         &xbt_free_f, // how to free the userdata if a detached send fails
-                         !process->replaying() ? smpi_comm_copy_data_callback
-                         : &smpi_comm_null_copy_buffer_callback, this,
-                         // detach if msg size < eager/rdv switch limit
-                         detached_);
+    action_   = simcall_comm_isend(
+        SIMIX_process_from_PID(src_ + 1), mailbox, size_, -1.0, buf, real_size_, &match_send,
+        &xbt_free_f, // how to free the userdata if a detached send fails
+        not process->replaying() ? smpi_comm_copy_data_callback : &smpi_comm_null_copy_buffer_callback, this,
+        // detach if msg size < eager/rdv switch limit
+        detached_);
     XBT_DEBUG("send simcall posted");
 
     /* FIXME: detached sends are not traceable (action_ == nullptr) */
@@ -554,12 +554,12 @@ int Request::testany(int count, MPI_Request requests[], int *index, MPI_Status *
 
   std::vector<int> map; /** Maps all matching comms back to their location in requests **/
   for(i = 0; i < count; i++) {
-    if ((requests[i] != MPI_REQUEST_NULL) && requests[i]->action_ && !(requests[i]->flags_ & PREPARED)) {
-       comms.push_back(requests[i]->action_);
-       map.push_back(i);
+    if ((requests[i] != MPI_REQUEST_NULL) && requests[i]->action_ && not(requests[i]->flags_ & PREPARED)) {
+      comms.push_back(requests[i]->action_);
+      map.push_back(i);
     }
   }
-  if(!map.empty()) {
+  if (not map.empty()) {
     //multiplier to the sleeptime, to increase speed of execution, each failed testany will increase it
     static int nsleeps = 1;
     if(smpi_test_sleep > 0) 
@@ -592,7 +592,7 @@ int Request::testall(int count, MPI_Request requests[], MPI_Status status[])
   MPI_Status *pstat = status == MPI_STATUSES_IGNORE ? MPI_STATUS_IGNORE : &stat;
   int flag=1;
   for(int i=0; i<count; i++){
-    if (requests[i] != MPI_REQUEST_NULL && !(requests[i]->flags_ & PREPARED)) {
+    if (requests[i] != MPI_REQUEST_NULL && not(requests[i]->flags_ & PREPARED)) {
       if (test(&requests[i], pstat)!=1){
         flag=0;
       }else{
@@ -652,7 +652,8 @@ void Request::iprobe(int source, int tag, MPI_Comm comm, int* flag, MPI_Status*
   }
 
   if (request->action_ != nullptr){
-    simgrid::kernel::activity::Comm *sync_comm = static_cast<simgrid::kernel::activity::Comm*>(request->action_);
+    simgrid::kernel::activity::CommImpl* sync_comm =
+        static_cast<simgrid::kernel::activity::CommImpl*>(request->action_);
     MPI_Request req                            = static_cast<MPI_Request>(sync_comm->src_data);
     *flag = 1;
     if(status != MPI_STATUS_IGNORE && (req->flags_ & PREPARED) == 0) {
@@ -676,7 +677,7 @@ void Request::finish_wait(MPI_Request* request, MPI_Status * status)
   MPI_Request req = *request;
   Status::empty(status);
 
-  if(!((req->detached_ != 0) && ((req->flags_ & SEND) != 0)) && ((req->flags_ & PREPARED) == 0)){
+  if (not((req->detached_ != 0) && ((req->flags_ & SEND) != 0)) && ((req->flags_ & PREPARED) == 0)) {
     if(status != MPI_STATUS_IGNORE) {
       int src = req->src_ == MPI_ANY_SOURCE ? req->real_src_ : req->src_;
       status->MPI_SOURCE = req->comm_->group()->rank(src);
@@ -691,9 +692,9 @@ void Request::finish_wait(MPI_Request* request, MPI_Status * status)
 
 // FIXME Handle the case of a partial shared malloc.
     if (((req->flags_ & ACCUMULATE) != 0) ||
-        (datatype->flags() & DT_FLAG_DERIVED)) { // && (!smpi_is_shared(req->old_buf_))){
+        (datatype->flags() & DT_FLAG_DERIVED)) { // && (not smpi_is_shared(req->old_buf_))){
 
-      if (!smpi_process()->replaying()){
+      if (not smpi_process()->replaying()) {
         if( smpi_privatize_global_variables != 0 && (static_cast<char*>(req->old_buf_) >= smpi_start_data_exe)
             && ((char*)req->old_buf_ < smpi_start_data_exe + smpi_size_data_exe )){
             XBT_VERB("Privatization : We are unserializing to a zone in global memory  Switch data segment ");
@@ -767,7 +768,8 @@ int Request::waitany(int count, MPI_Request requests[], MPI_Status * status)
     map = xbt_new(int, count);
     XBT_DEBUG("Wait for one of %d", count);
     for(i = 0; i < count; i++) {
-      if (requests[i] != MPI_REQUEST_NULL && !(requests[i]->flags_ & PREPARED) && !(requests[i]->flags_ & FINISHED)) {
+      if (requests[i] != MPI_REQUEST_NULL && not(requests[i]->flags_ & PREPARED) &&
+          not(requests[i]->flags_ & FINISHED)) {
         if (requests[i]->action_ != nullptr) {
           XBT_DEBUG("Waiting any %p ", requests[i]);
           xbt_dynar_push(&comms, &requests[i]->action_);
@@ -791,8 +793,8 @@ int Request::waitany(int count, MPI_Request requests[], MPI_Status * status)
       if (i != -1) {
         index = map[i];
         //in case of an accumulate, we have to wait the end of all requests to apply the operation, ordered correctly.
-        if ((requests[index] == MPI_REQUEST_NULL)
-             ||  (!((requests[index]->flags_ & ACCUMULATE) && (requests[index]->flags_ & RECV)))){
+        if ((requests[index] == MPI_REQUEST_NULL) ||
+            (not((requests[index]->flags_ & ACCUMULATE) && (requests[index]->flags_ & RECV)))) {
           finish_wait(&requests[index],status);
           if (requests[i] != MPI_REQUEST_NULL && (requests[i]->flags_ & NON_PERSISTENT))
             requests[index] = MPI_REQUEST_NULL;
@@ -856,7 +858,7 @@ int Request::waitall(int count, MPI_Request requests[], MPI_Status status[])
     }
   }
 
-  if (!accumulates.empty()) {
+  if (not accumulates.empty()) {
     std::sort(accumulates.begin(), accumulates.end(), sort_accumulates);
     for (auto req : accumulates) {
       finish_wait(&req, status);
index f9c8446..96d1cf8 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2010, 2013-2017. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2010-2017. 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. */
@@ -7,6 +6,7 @@
 #ifndef SMPI_REQUEST_HPP_INCLUDED
 #define SMPI_REQUEST_HPP_INCLUDED
 
+#include "smpi/smpi.h"
 #include "src/smpi/smpi_f2c.hpp"
 
 namespace simgrid{
index 09d9030..e5f24d6 100644 (file)
@@ -38,7 +38,6 @@
 
 #include "private.h"
 #include "private.hpp"
-#include "smpi/smpi_shared_malloc.hpp"
 #include "xbt/dict.h"
 #include "xbt/ex.hpp"
 #include <errno.h>
@@ -87,7 +86,7 @@ public:
     return filename_length == that.filename_length && line == that.line &&
            std::memcmp(filename, that.filename, filename_length) == 0;
   }
-  bool operator!=(smpi_source_location const& that) const { return !(*this == that); }
+  bool operator!=(smpi_source_location const& that) const { return not(*this == that); }
 };
 }
 
@@ -117,6 +116,8 @@ typedef std::unordered_map<smpi_source_location, shared_data_t>::value_type shar
 
 typedef struct {
   size_t size;
+  size_t allocated_size;
+  void *allocated_ptr;
   std::vector<std::pair<size_t, size_t>> private_blocks;
   shared_data_key_type* data;
 } shared_metadata_t;
@@ -125,6 +126,7 @@ std::map<void*, shared_metadata_t> allocs_metadata;
 xbt_dict_t calls = nullptr;           /* Allocated on first use */
 #ifndef WIN32
 static int smpi_shared_malloc_bogusfile           = -1;
+static int smpi_shared_malloc_bogusfile_huge_page  = -1;
 static unsigned long smpi_shared_malloc_blocksize = 1UL << 20;
 #endif
 }
@@ -210,6 +212,8 @@ static void *smpi_shared_malloc_local(size_t size, const char *file, int line)
 #define ALIGN_UP(n, align) (((n) + (align)-1) & -(align))
 #define ALIGN_DOWN(n, align) ((n) & -(align))
 
+#define HUGE_PAGE_SIZE 1<<21
+
 /*
  * Similar to smpi_shared_malloc, but only sharing the blocks described by shared_block_offsets.
  * This array contains the offsets (in bytes) of the block to share.
@@ -218,23 +222,59 @@ static void *smpi_shared_malloc_local(size_t size, const char *file, int line)
  */
 void* smpi_shared_malloc_partial(size_t size, size_t* shared_block_offsets, int nb_shared_blocks)
 {
-  void *mem;
-  xbt_assert(smpi_shared_malloc_blocksize % PAGE_SIZE == 0, "The block size of shared malloc should be a multiple of the page size.");
+  char *huge_page_mount_point = xbt_cfg_get_string("smpi/shared-malloc-hugepage");
+  bool use_huge_page = huge_page_mount_point[0] != '\0';
+#ifndef MAP_HUGETLB /* If the system header don't define that mmap flag */
+  xbt_assert(not use_huge_page,
+             "Huge pages are not available on your system, you cannot use the smpi/shared-malloc-hugepage option.");
+  use_huge_page = 0;
+#endif
+  smpi_shared_malloc_blocksize = static_cast<unsigned long>(xbt_cfg_get_double("smpi/shared-malloc-blocksize"));
+  void *mem, *allocated_ptr;
+  size_t allocated_size;
+  if(use_huge_page) {
+    xbt_assert(smpi_shared_malloc_blocksize == HUGE_PAGE_SIZE, "the block size of shared malloc should be equal to the size of a huge page.");
+    allocated_size = size + 2*smpi_shared_malloc_blocksize;
+  }
+  else {
+    xbt_assert(smpi_shared_malloc_blocksize % PAGE_SIZE == 0, "the block size of shared malloc should be a multiple of the page size.");
+    allocated_size = size;
+  }
+
+
   /* First reserve memory area */
-  mem = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+  allocated_ptr = mmap(NULL, allocated_size, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
 
-  xbt_assert(mem != MAP_FAILED, "Failed to allocate %zuMiB of memory. Run \"sysctl vm.overcommit_memory=1\" as root "
+
+  xbt_assert(allocated_ptr != MAP_FAILED, "Failed to allocate %zuMiB of memory. Run \"sysctl vm.overcommit_memory=1\" as root "
                                 "to allow big allocations.\n",
              size >> 20);
-
-  /* Create bogus file if not done already */
-  if (smpi_shared_malloc_bogusfile == -1) {
-    /* Create a fd to a new file on disk, make it smpi_shared_malloc_blocksize big, and unlink it.
-     * It still exists in memory but not in the file system (thus it cannot be leaked). */
-    smpi_shared_malloc_blocksize = static_cast<unsigned long>(xbt_cfg_get_double("smpi/shared-malloc-blocksize"));
-    XBT_DEBUG("global shared allocation. Blocksize %lu", smpi_shared_malloc_blocksize);
-    char* name                   = xbt_strdup("/tmp/simgrid-shmalloc-XXXXXX");
+  if(use_huge_page)
+    mem = (void*)ALIGN_UP((uint64_t)allocated_ptr, HUGE_PAGE_SIZE);
+  else
+    mem = allocated_ptr;
+
+  XBT_DEBUG("global shared allocation. Blocksize %lu", smpi_shared_malloc_blocksize);
+  /* Create a fd to a new file on disk, make it smpi_shared_malloc_blocksize big, and unlink it.
+   * It still exists in memory but not in the file system (thus it cannot be leaked). */
+  /* Create bogus file if not done already
+   * We need two different bogusfiles:
+   *    smpi_shared_malloc_bogusfile_huge_page is used for calls to mmap *with* MAP_HUGETLB,
+   *    smpi_shared_malloc_bogusfile is used for calls to mmap *without* MAP_HUGETLB.
+   * We cannot use a same file for the two type of calls, since the first one needs to be
+   * opened in a hugetlbfs mount point whereas the second needs to be a "classical" file. */
+  if(use_huge_page && smpi_shared_malloc_bogusfile_huge_page == -1) {
+    const char *const array[] = {huge_page_mount_point, "simgrid-shmalloc-XXXXXX", nullptr};
+    char *huge_page_filename = xbt_str_join_array(array, "/");
+    smpi_shared_malloc_bogusfile_huge_page = mkstemp(huge_page_filename);
+    XBT_DEBUG("bogusfile_huge_page: %s\n", huge_page_filename);
+    unlink(huge_page_filename);
+    xbt_free(huge_page_filename);
+  }
+  if(smpi_shared_malloc_bogusfile == -1) {
+    char *name                   = xbt_strdup("/tmp/simgrid-shmalloc-XXXXXX");
     smpi_shared_malloc_bogusfile = mkstemp(name);
+    XBT_DEBUG("bogusfile         : %s\n", name);
     unlink(name);
     xbt_free(name);
     char* dumb = (char*)calloc(1, smpi_shared_malloc_blocksize);
@@ -244,8 +284,19 @@ void* smpi_shared_malloc_partial(size_t size, size_t* shared_block_offsets, int
     xbt_free(dumb);
   }
 
+  int mmap_base_flag = MAP_FIXED | MAP_SHARED | MAP_POPULATE;
+  int mmap_flag = mmap_base_flag;
+  int huge_fd = use_huge_page ? smpi_shared_malloc_bogusfile_huge_page : smpi_shared_malloc_bogusfile;
+#ifdef MAP_HUGETLB
+  if(use_huge_page)
+    mmap_flag |= MAP_HUGETLB;
+#endif
+
+  XBT_DEBUG("global shared allocation, begin mmap");
+
   /* Map the bogus file in place of the anonymous memory */
   for(int i_block = 0; i_block < nb_shared_blocks; i_block ++) {
+    XBT_DEBUG("\tglobal shared allocation, mmap block %d/%d", i_block+1, nb_shared_blocks);
     size_t start_offset = shared_block_offsets[2*i_block];
     size_t stop_offset = shared_block_offsets[2*i_block+1];
     xbt_assert(start_offset < stop_offset, "start_offset (%zu) should be lower than stop offset (%zu)", start_offset, stop_offset);
@@ -255,21 +306,24 @@ void* smpi_shared_malloc_partial(size_t size, size_t* shared_block_offsets, int
               "stop_offset (%zu) should be lower than its successor start offset (%zu)", stop_offset, shared_block_offsets[2*i_block+2]);
     size_t start_block_offset = ALIGN_UP(start_offset, smpi_shared_malloc_blocksize);
     size_t stop_block_offset = ALIGN_DOWN(stop_offset, smpi_shared_malloc_blocksize);
-    unsigned int i;
-    for (i = start_block_offset / smpi_shared_malloc_blocksize; i < stop_block_offset / smpi_shared_malloc_blocksize; i++) {
+    for (unsigned block_id=0, i = start_block_offset / smpi_shared_malloc_blocksize; i < stop_block_offset / smpi_shared_malloc_blocksize; block_id++, i++) {
+      XBT_DEBUG("\t\tglobal shared allocation, mmap block offset %d", block_id);
       void* pos = (void*)((unsigned long)mem + i * smpi_shared_malloc_blocksize);
-      void* res = mmap(pos, smpi_shared_malloc_blocksize, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED | MAP_POPULATE,
-                       smpi_shared_malloc_bogusfile, 0);
+      void* res = mmap(pos, smpi_shared_malloc_blocksize, PROT_READ | PROT_WRITE, mmap_flag,
+                       huge_fd, 0);
       xbt_assert(res == pos, "Could not map folded virtual memory (%s). Do you perhaps need to increase the "
-                             "size of the mapped file using --cfg=smpi/shared-malloc-blocksize=newvalue (default 1048576) ?"
-                             "You can also try using  the sysctl vm.max_map_count",
+                             "size of the mapped file using --cfg=smpi/shared-malloc-blocksize=newvalue (default 1048576) ? "
+                             "You can also try using  the sysctl vm.max_map_count. "
+                             "If you are using huge pages, check that you have at least one huge page (/proc/sys/vm/nr_hugepages) "
+                             "and that the directory you are passing is mounted correctly (mount /path/to/huge -t hugetlbfs -o rw,mode=0777).",
                  strerror(errno));
     }
     size_t low_page_start_offset = ALIGN_UP(start_offset, PAGE_SIZE);
     size_t low_page_stop_offset = start_block_offset < ALIGN_DOWN(stop_offset, PAGE_SIZE) ? start_block_offset : ALIGN_DOWN(stop_offset, PAGE_SIZE);
     if(low_page_start_offset < low_page_stop_offset) {
+      XBT_DEBUG("\t\tglobal shared allocation, mmap block start");
       void* pos = (void*)((unsigned long)mem + low_page_start_offset);
-      void* res = mmap(pos, low_page_stop_offset-low_page_start_offset, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED | MAP_POPULATE,
+      void* res = mmap(pos, low_page_stop_offset-low_page_start_offset, PROT_READ | PROT_WRITE, mmap_base_flag, // not a full huge page
                        smpi_shared_malloc_bogusfile, 0);
       xbt_assert(res == pos, "Could not map folded virtual memory (%s). Do you perhaps need to increase the "
                              "size of the mapped file using --cfg=smpi/shared-malloc-blocksize=newvalue (default 1048576) ?"
@@ -277,10 +331,11 @@ void* smpi_shared_malloc_partial(size_t size, size_t* shared_block_offsets, int
                  strerror(errno));
     }
     if(low_page_stop_offset <= stop_block_offset) {
+      XBT_DEBUG("\t\tglobal shared allocation, mmap block stop");
       size_t high_page_stop_offset = stop_offset == size ? size : ALIGN_DOWN(stop_offset, PAGE_SIZE);
       if(high_page_stop_offset > stop_block_offset) {
         void* pos = (void*)((unsigned long)mem + stop_block_offset);
-        void* res = mmap(pos, high_page_stop_offset-stop_block_offset, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED | MAP_POPULATE,
+        void* res = mmap(pos, high_page_stop_offset-stop_block_offset, PROT_READ | PROT_WRITE, mmap_base_flag, // not a full huge page
                          smpi_shared_malloc_bogusfile, 0);
         xbt_assert(res == pos, "Could not map folded virtual memory (%s). Do you perhaps need to increase the "
                                "size of the mapped file using --cfg=smpi/shared-malloc-blocksize=newvalue (default 1048576) ?"
@@ -297,6 +352,8 @@ void* smpi_shared_malloc_partial(size_t size, size_t* shared_block_offsets, int
   data->second.count = 1;
   newmeta.size = size;
   newmeta.data = data;
+  newmeta.allocated_ptr = allocated_ptr;
+  newmeta.allocated_size = allocated_size;
   if(shared_block_offsets[0] > 0) {
     newmeta.private_blocks.push_back(std::make_pair(0, shared_block_offsets[0]));
   }
@@ -309,6 +366,9 @@ void* smpi_shared_malloc_partial(size_t size, size_t* shared_block_offsets, int
   }
   allocs_metadata[mem] = newmeta;
 
+  XBT_DEBUG("global shared allocation, allocated_ptr %p - %p", allocated_ptr, (void*)(((uint64_t)allocated_ptr)+allocated_size));
+  XBT_DEBUG("global shared allocation, returned_ptr  %p - %p", mem, (void*)(((uint64_t)mem)+size));
+
   return mem;
 }
 
@@ -397,7 +457,7 @@ void smpi_shared_free(void *ptr)
       return;
     }
     shared_data_t* data = &meta->second.data->second;
-    if (munmap(ptr, meta->second.size) < 0) {
+    if (munmap(meta->second.allocated_ptr, meta->second.allocated_size) < 0) {
       XBT_WARN("Unmapping of fd %d failed: %s", data->fd, strerror(errno));
     }
     data->count--;
index 0a8b280..7d26e57 100644 (file)
@@ -24,7 +24,7 @@ void smpi_register_static(void* arg, void_f_pvoid_t free_fn) {
 }
 
 void smpi_free_static() {
-  while (!registered_static_variables_stack.empty()) {
+  while (not registered_static_variables_stack.empty()) {
     s_smpi_static_t elm = registered_static_variables_stack.top();
     elm.free_fn(elm.ptr);
     registered_static_variables_stack.pop();
index 0240e93..6ddaeb5 100644 (file)
@@ -84,7 +84,7 @@ Win::~Win(){
 }
 
 int Win::attach (void *base, MPI_Aint size){
-  if (!(base_ == MPI_BOTTOM || base_ == 0))
+  if (not(base_ == MPI_BOTTOM || base_ == 0))
     return MPI_ERR_ARG;
   base_=0;//actually the address will be given in the RMA calls, as being the disp.
   size_+=size;
@@ -419,7 +419,7 @@ int Win::compare_and_swap(void *origin_addr, void *compare_addr,
               target_disp, 1, datatype, &req);
   if (req != MPI_REQUEST_NULL)
     Request::wait(&req, MPI_STATUS_IGNORE);
-  if(! memcmp (result_addr, compare_addr, datatype->get_extent() )){
+  if (not memcmp(result_addr, compare_addr, datatype->get_extent())) {
     put(origin_addr, 1, datatype, target_rank,
               target_disp, 1, datatype);
   }
@@ -573,8 +573,8 @@ int Win::lock(int lock_type, int rank, int assert){
     if(lock_type == MPI_LOCK_SHARED){//the window used to be exclusive, it's now shared.
       xbt_mutex_release(target_win->lock_mut_);
    }
-  } else if(!(target_win->mode_==MPI_LOCK_SHARED && lock_type == MPI_LOCK_EXCLUSIVE))
-        target_win->mode_+= lock_type; // don't set to exclusive if it's already shared
+  } else if (not(target_win->mode_ == MPI_LOCK_SHARED && lock_type == MPI_LOCK_EXCLUSIVE))
+    target_win->mode_ += lock_type; // don't set to exclusive if it's already shared
 
   target_win->lockers_.push_back(comm_->rank());
 
@@ -682,22 +682,21 @@ int Win::finish_comms(int rank){
   int size = static_cast<int>(reqqs->size());
   if (size > 0) {
     size = 0;
-    std::vector<MPI_Request>* myreqqs = new std::vector<MPI_Request>();
+    std::vector<MPI_Request> myreqqs;
     std::vector<MPI_Request>::iterator iter = reqqs->begin();
     while (iter != reqqs->end()){
       if(((*iter)!=MPI_REQUEST_NULL) && (((*iter)->src() == rank) || ((*iter)->dst() == rank))){
-          myreqqs->push_back(*iter);
-          iter = reqqs->erase(iter);
-          size++;
+        myreqqs.push_back(*iter);
+        iter = reqqs->erase(iter);
+        size++;
       } else {
         ++iter;
       }
     }
     if(size >0){
-      MPI_Request* treqs = &(*myreqqs)[0];
+      MPI_Request* treqs = &myreqqs[0];
       Request::waitall(size, treqs, MPI_STATUSES_IGNORE);
-      myreqqs->clear();
-      delete myreqqs;
+      myreqqs.clear();
     }
   }
   xbt_mutex_release(mut_);
index 459cac3..22869c3 100644 (file)
@@ -9,15 +9,15 @@
 SIMGRID_VERSION="@SIMGRID_VERSION_STRING@"
 SIMGRID_GITHASH="@SIMGRID_GITHASH@"
 
-F90=@SAVED_Fortran_COMPILER@
+F90=@SMPI_Fortran_COMPILER@
 
 INCLUDEARGS="@includeflag@"
 CMAKE_LINKARGS="-L@libdir@"
 
 @SMPITOOLS_SH@
 
-list_set FFLAGS "-fpic" "-ff2c" "-fno-second-underscore"
-list_set LINKARGS "-shared" "-lsimgrid" "-lm" "-lgfortran"
+list_set FFLAGS @SMPI_Fortran_FLAGS@
+list_set LINKARGS "-shared" "-lsimgrid" @SMPI_Fortran_LIBS@ "-lm"
 list_set TMPFILES
 main_name=main
 
index f78ffbd..eb28bc8 100644 (file)
@@ -9,15 +9,15 @@
 SIMGRID_VERSION="@SIMGRID_VERSION_STRING@"
 SIMGRID_GITHASH="@SIMGRID_GITHASH@"
 
-F77=@SAVED_Fortran_COMPILER@
+F77=@SMPI_Fortran_COMPILER@
 
 INCLUDEARGS="@includeflag@"
 CMAKE_LINKARGS="-L@libdir@"
 
 @SMPITOOLS_SH@
 
-list_set FFLAGS "-fpic" "-ff2c" "-fno-second-underscore"
-list_set LINKARGS "-shared" "-lsimgrid" "-lm" "-lgfortran"
+list_set FFLAGS @SMPI_Fortran_FLAGS@
+list_set LINKARGS "-shared" "-lsimgrid" @SMPI_Fortran_LIBS@ "-lm"
 list_set TMPFILES
 main_name=main
 
index 85a859b..b8ca1e8 100644 (file)
@@ -106,28 +106,13 @@ HostImpl::HostImpl(s4u::Host* host) : piface_(host)
   piface_->pimpl_ = this;
 }
 
-/** @brief use destroy() instead of this destructor */
-HostImpl::~HostImpl()
+simgrid::surf::StorageImpl* HostImpl::findStorageOnMountList(const char* mount)
 {
-  for (auto mnt : storage_)
-    xbt_free(mnt.name);
-}
-
-simgrid::surf::Storage* HostImpl::findStorageOnMountList(const char* mount)
-{
-  simgrid::surf::Storage* st = nullptr;
-
   XBT_DEBUG("Search for storage name '%s' on '%s'", mount, piface_->cname());
-  for (auto mnt : storage_) {
-    XBT_DEBUG("See '%s'", mnt.name);
-    if (!strcmp(mount, mnt.name)) {
-      st = static_cast<simgrid::surf::Storage*>(mnt.storage);
-      break;
-    }
-  }
-  if (!st)
+  if (storage_.find(mount) == storage_.end())
     xbt_die("Can't find mount '%s' for '%s'", mount, piface_->cname());
-  return st;
+
+  return storage_.at(mount);
 }
 
 xbt_dict_t HostImpl::getMountedStorageList()
@@ -136,8 +121,8 @@ xbt_dict_t HostImpl::getMountedStorageList()
   char* storage_name      = nullptr;
 
   for (auto mnt : storage_) {
-    storage_name = (char*)static_cast<simgrid::surf::Storage*>(mnt.storage)->cname();
-    xbt_dict_set(storage_list, mnt.name, storage_name, nullptr);
+    storage_name = (char*)mnt.second->cname();
+    xbt_dict_set(storage_list, mnt.first.c_str(), storage_name, nullptr);
   }
   return storage_list;
 }
@@ -150,9 +135,9 @@ void HostImpl::getAttachedStorageList(std::vector<const char*>* storages)
   xbt_lib_foreach(storage_lib, cursor, key, data)
   {
     if (xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != nullptr) {
-      simgrid::surf::Storage* storage = static_cast<simgrid::surf::Storage*>(
+      simgrid::surf::StorageImpl* storage = static_cast<simgrid::surf::StorageImpl*>(
           xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL));
-      if (!strcmp(static_cast<const char*>(storage->attach_), piface_->cname())) {
+      if (not strcmp(static_cast<const char*>(storage->attach_), piface_->cname())) {
         storages->push_back(storage->cname());
       }
     }
@@ -161,21 +146,20 @@ void HostImpl::getAttachedStorageList(std::vector<const char*>* storages)
 
 Action* HostImpl::open(const char* fullpath)
 {
-  simgrid::surf::Storage* st = nullptr;
+  simgrid::surf::StorageImpl* st = nullptr;
   size_t longest_prefix_length = 0;
   std::string path;
   std::string mount_name;
 
   XBT_DEBUG("Search for storage name for '%s' on '%s'", fullpath, piface_->cname());
   for (auto mnt : storage_) {
-    XBT_DEBUG("See '%s'", mnt.name);
-    std::string file_mount_name = std::string(fullpath).substr(0, strlen(mnt.name));
-
-    if (!strcmp(file_mount_name.c_str(), mnt.name) &&
-        strlen(mnt.name) > longest_prefix_length) { /* The current mount name is found in the full path and is
-                                                           bigger than the previous*/
-      longest_prefix_length = strlen(mnt.name);
-      st                    = static_cast<simgrid::surf::Storage*>(mnt.storage);
+    XBT_DEBUG("See '%s'", mnt.first.c_str());
+    std::string file_mount_name = std::string(fullpath).substr(0, mnt.first.size());
+
+    if (file_mount_name == mnt.first && mnt.first.length() > longest_prefix_length) {
+      /* The current mount name is found in the full path and is bigger than the previous*/
+      longest_prefix_length = mnt.first.length();
+      st                    = mnt.second;
     }
   }
   if (longest_prefix_length > 0) { /* Mount point found, split fullpath into mount_name and path+filename*/
@@ -191,33 +175,33 @@ Action* HostImpl::open(const char* fullpath)
 
 Action* HostImpl::close(surf_file_t fd)
 {
-  simgrid::surf::Storage* st = findStorageOnMountList(fd->mount);
+  simgrid::surf::StorageImpl* st = findStorageOnMountList(fd->mount);
   XBT_DEBUG("CLOSE %s on disk '%s'", fd->name, st->cname());
   return st->close(fd);
 }
 
 Action* HostImpl::read(surf_file_t fd, sg_size_t size)
 {
-  simgrid::surf::Storage* st = findStorageOnMountList(fd->mount);
+  simgrid::surf::StorageImpl* st = findStorageOnMountList(fd->mount);
   XBT_DEBUG("READ %s on disk '%s'", fd->name, st->cname());
   return st->read(fd, size);
 }
 
 Action* HostImpl::write(surf_file_t fd, sg_size_t size)
 {
-  simgrid::surf::Storage* st = findStorageOnMountList(fd->mount);
+  simgrid::surf::StorageImpl* st = findStorageOnMountList(fd->mount);
   XBT_DEBUG("WRITE %s on disk '%s'", fd->name, st->cname());
   return st->write(fd, size);
 }
 
 int HostImpl::unlink(surf_file_t fd)
 {
-  if (!fd) {
+  if (not fd) {
     XBT_WARN("No such file descriptor. Impossible to unlink");
     return -1;
   } else {
 
-    simgrid::surf::Storage* st = findStorageOnMountList(fd->mount);
+    simgrid::surf::StorageImpl* st = findStorageOnMountList(fd->mount);
     /* Check if the file is on this storage */
     if (st->content_->find(fd->name) == st->content_->end()) {
       XBT_WARN("File %s is not on disk %s. Impossible to unlink", fd->name, st->cname());
@@ -246,7 +230,7 @@ sg_size_t HostImpl::getSize(surf_file_t fd)
 
 xbt_dynar_t HostImpl::getInfo(surf_file_t fd)
 {
-  simgrid::surf::Storage* st = findStorageOnMountList(fd->mount);
+  simgrid::surf::StorageImpl* st = findStorageOnMountList(fd->mount);
   sg_size_t* psize           = xbt_new(sg_size_t, 1);
   *psize                     = fd->size;
   xbt_dynar_t info           = xbt_dynar_new(sizeof(void*), nullptr);
@@ -254,7 +238,6 @@ xbt_dynar_t HostImpl::getInfo(surf_file_t fd)
   xbt_dynar_push_as(info, void*, fd->mount);
   xbt_dynar_push_as(info, void*, (void*)st->cname());
   xbt_dynar_push_as(info, void*, st->typeId_);
-  xbt_dynar_push_as(info, void*, st->contentType_);
 
   return info;
 }
@@ -284,7 +267,7 @@ int HostImpl::fileSeek(surf_file_t fd, sg_offset_t offset, int origin)
 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))) {
+  if (not strncmp((const char*)fd->mount, fullpath, strlen(fd->mount))) {
     std::map<std::string, sg_size_t*>* content = findStorageOnMountList(fd->mount)->content_;
     if (content->find(fd->name) != content->end()) { // src file exists
       sg_size_t* psize     = content->at(std::string(fd->name));
index 6180248..4d7c3ea 100644 (file)
@@ -4,11 +4,11 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include "surf_interface.hpp"
-#include "storage_interface.hpp"
 #include "cpu_interface.hpp"
 #include "network_interface.hpp"
 #include "src/surf/PropertyHolder.hpp"
 
+#include "StorageImpl.hpp"
 #include <xbt/base.h>
 
 #ifndef SURF_HOST_INTERFACE_HPP_
@@ -64,10 +64,10 @@ class HostImpl : public simgrid::surf::PropertyHolder {
 
 public:
   explicit HostImpl(s4u::Host* host);
-  virtual ~HostImpl();
+  virtual ~HostImpl() = default;
 
   /** @brief Return the storage of corresponding mount point */
-  virtual simgrid::surf::Storage* findStorageOnMountList(const char* storage);
+  virtual simgrid::surf::StorageImpl* findStorageOnMountList(const char* storage);
 
   /** @brief Get the xbt_dict_t of mount_point: Storage */
   virtual xbt_dict_t getMountedStorageList();
@@ -173,7 +173,7 @@ public:
    */
   virtual int fileMove(surf_file_t fd, const char* fullpath);
 
-  std::vector<s_mount_t> storage_;
+  std::map<std::string, simgrid::surf::StorageImpl*> storage_;
   simgrid::s4u::Host* piface_ = nullptr;
 
   simgrid::s4u::Host* getHost() { return piface_; }
index 0683cc3..2eda708 100644 (file)
@@ -24,14 +24,14 @@ const char *PropertyHolder::getProperty(const char*key) {
 
 /** @brief Change the value of a given key in the property set */
 void PropertyHolder::setProperty(const char*key, const char*value) {
-  if (!properties_)
+  if (not properties_)
     properties_ = xbt_dict_new_homogeneous(xbt_free_f);
   xbt_dict_set(properties_, key, xbt_strdup(value), nullptr);
 }
 
 /** @brief Return the whole set of properties. Don't mess with it, dude! */
 xbt_dict_t PropertyHolder::getProperties() {
-  if (!properties_)
+  if (not properties_)
     properties_ = xbt_dict_new_homogeneous(xbt_free_f);
   return properties_;
 }
similarity index 67%
rename from src/surf/storage_interface.cpp
rename to src/surf/StorageImpl.cpp
index 554c9a2..3eb9910 100644 (file)
@@ -4,7 +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 "storage_interface.hpp"
+#include "StorageImpl.hpp"
+
 #include "surf_private.h"
 #include <boost/algorithm/string.hpp>
 #include <boost/algorithm/string/join.hpp>
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_storage, surf, "Logging specific to the SURF storage module");
 
 xbt_lib_t storage_lib;
-int MSG_STORAGE_LEVEL          = -1; // Msg storage level
-int ROUTING_STORAGE_LEVEL      = -1; // Routing for storage level
-int SURF_STORAGE_LEVEL = -1;
-simgrid::surf::StorageModel *surf_storage_model = nullptr;
+int MSG_STORAGE_LEVEL                           = -1; // Msg storage level
+int SURF_STORAGE_LEVEL                          = -1;
+simgrid::surf::StorageModel* surf_storage_model = nullptr;
 
 namespace simgrid {
 namespace surf {
@@ -26,21 +26,22 @@ namespace surf {
  * Callbacks *
  *************/
 
-simgrid::xbt::signal<void(Storage*)> storageCreatedCallbacks;
-simgrid::xbt::signal<void(Storage*)> storageDestructedCallbacks;
-simgrid::xbt::signal<void(Storage*, int, int)> storageStateChangedCallbacks; // signature: wasOn, isOn
+simgrid::xbt::signal<void(StorageImpl*)> storageCreatedCallbacks;
+simgrid::xbt::signal<void(StorageImpl*)> storageDestructedCallbacks;
+simgrid::xbt::signal<void(StorageImpl*, int, int)> storageStateChangedCallbacks; // signature: wasOn, isOn
 simgrid::xbt::signal<void(StorageAction*, Action::State, Action::State)> storageActionStateChangedCallbacks;
 
 /*********
  * Model *
  *********/
 
-StorageModel::StorageModel(): Model()
+StorageModel::StorageModel() : Model()
 {
   maxminSystem_ = lmm_system_new(true /* lazy update */);
 }
 
-StorageModel::~StorageModel(){
+StorageModel::~StorageModel()
+{
   lmm_system_free(maxminSystem_);
   surf_storage_model = nullptr;
 }
@@ -49,11 +50,9 @@ StorageModel::~StorageModel(){
  * Resource *
  ************/
 
-Storage::Storage(Model* model, const char* name, lmm_system_t maxminSystem, double bread, double bwrite,
-                 double bconnection, const char* type_id, const char* content_name, const char* content_type,
-                 sg_size_t size, const char* attach)
-    : Resource(model, name, lmm_constraint_new(maxminSystem, this, bconnection))
-    , contentType_(xbt_strdup(content_type))
+StorageImpl::StorageImpl(Model* model, const char* name, lmm_system_t maxminSystem, double bread, double bwrite,
+                         const char* type_id, const char* content_name, sg_size_t size, const char* attach)
+    : Resource(model, name, lmm_constraint_new(maxminSystem, this, MAX(bread, bwrite)))
     , size_(size)
     , usedSize_(0)
     , typeId_(xbt_strdup(type_id))
@@ -62,12 +61,13 @@ Storage::Storage(Model* model, const char* name, lmm_system_t maxminSystem, doub
   content_ = parseContent(content_name);
   attach_  = xbt_strdup(attach);
   turnOn();
-  XBT_DEBUG("Create resource with Bconnection '%f' Bread '%f' Bwrite '%f' and Size '%llu'", bconnection, bread, bwrite, size);
+  XBT_DEBUG("Create resource with Bread '%f' Bwrite '%f' and Size '%llu'", bread, bwrite, size);
   constraintRead_  = lmm_constraint_new(maxminSystem, this, bread);
   constraintWrite_ = lmm_constraint_new(maxminSystem, this, bwrite);
 }
 
-Storage::~Storage(){
+StorageImpl::~StorageImpl()
+{
   storageDestructedCallbacks(this);
   if (content_ != nullptr) {
     for (auto entry : *content_)
@@ -75,14 +75,13 @@ Storage::~Storage(){
     delete content_;
   }
   free(typeId_);
-  free(contentType_);
   free(attach_);
 }
 
-std::map<std::string, sg_size_t*>* Storage::parseContent(const char* filename)
+std::map<std::string, sg_size_t*>* StorageImpl::parseContent(const char* filename)
 {
   usedSize_ = 0;
-  if ((!filename) || (strcmp(filename, "") == 0))
+  if ((not filename) || (strcmp(filename, "") == 0))
     return nullptr;
 
   std::map<std::string, sg_size_t*>* parse_content = new std::map<std::string, sg_size_t*>();
@@ -101,74 +100,78 @@ std::map<std::string, sg_size_t*>* Storage::parseContent(const char* filename)
 
       usedSize_ += size;
       sg_size_t* psize = new sg_size_t;
-      *psize = size;
+      *psize           = size;
       parse_content->insert({tokens.front(), psize});
     }
-  } while (!fs->eof());
+  } while (not fs->eof());
   delete fs;
   return parse_content;
 }
 
-bool Storage::isUsed()
+bool StorageImpl::isUsed()
 {
   THROW_UNIMPLEMENTED;
   return false;
 }
 
-void Storage::apply_event(tmgr_trace_event_t /*event*/, double /*value*/)
+void StorageImpl::apply_event(tmgr_trace_event_t /*event*/, double /*value*/)
 {
   THROW_UNIMPLEMENTED;
 }
 
-void Storage::turnOn() {
+void StorageImpl::turnOn()
+{
   if (isOff()) {
     Resource::turnOn();
     storageStateChangedCallbacks(this, 0, 1);
   }
 }
-void Storage::turnOff() {
+void StorageImpl::turnOff()
+{
   if (isOn()) {
     Resource::turnOff();
     storageStateChangedCallbacks(this, 1, 0);
   }
 }
 
-std::map<std::string, sg_size_t*>* Storage::getContent()
+std::map<std::string, sg_size_t*>* StorageImpl::getContent()
 {
   /* For the moment this action has no cost, but in the future we could take in account access latency of the disk */
   return content_;
 }
 
-sg_size_t Storage::getFreeSize(){
+sg_size_t StorageImpl::getFreeSize()
+{
   return size_ - usedSize_;
 }
 
-sg_size_t Storage::getUsedSize(){
+sg_size_t StorageImpl::getUsedSize()
+{
   return usedSize_;
 }
 
 /**********
  * Action *
  **********/
-StorageAction::StorageAction(Model* model, double cost, bool failed, Storage* storage,
+StorageAction::StorageAction(Model* model, double cost, bool failed, StorageImpl* storage,
                              e_surf_action_storage_type_t type)
     : Action(model, cost, failed), type_(type), storage_(storage), file_(nullptr)
 {
   progress_ = 0;
 };
 
-StorageAction::StorageAction(Model* model, double cost, bool failed, lmm_variable_t var, Storage* storage,
+StorageAction::StorageAction(Model* model, double cost, bool failed, lmm_variable_t var, StorageImpl* storage,
                              e_surf_action_storage_type_t type)
     : Action(model, cost, failed, var), type_(type), storage_(storage), file_(nullptr)
 {
   progress_ = 0;
 }
 
-void StorageAction::setState(Action::State state){
+void StorageAction::setState(Action::State state)
+{
   Action::State old = getState();
   Action::setState(state);
   storageActionStateChangedCallbacks(this, old, state);
 }
-
 }
 }
similarity index 66%
rename from src/surf/storage_interface.hpp
rename to src/surf/StorageImpl.hpp
index 31c6dc8..b02503e 100644 (file)
@@ -31,25 +31,29 @@ class StorageAction;
  * @brief Callbacks handler which emit the callbacks after Storage creation *
  * @details Callback functions have the following signature: `void(Storage*)`
  */
-XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::Storage*)>) storageCreatedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::StorageImpl*)>) storageCreatedCallbacks;
 
 /** @ingroup SURF_callbacks
  * @brief Callbacks handler which emit the callbacks after Storage destruction *
  * @details Callback functions have the following signature: `void(StoragePtr)`
  */
-XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::Storage*)>) storageDestructedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::StorageImpl*)>) storageDestructedCallbacks;
 
 /** @ingroup SURF_callbacks
  * @brief Callbacks handler which emit the callbacks after Storage State changed *
- * @details Callback functions have the following signature: `void(StorageAction *action, int previouslyOn, int currentlyOn)`
+ * @details Callback functions have the following signature: `void(StorageAction *action, int previouslyOn, int
+ * currentlyOn)`
  */
-XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::Storage*, int, int)>) storageStateChangedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::StorageImpl*, int, int)>) storageStateChangedCallbacks;
 
 /** @ingroup SURF_callbacks
  * @brief Callbacks handler which emit the callbacks after StorageAction State changed *
- * @details Callback functions have the following signature: `void(StorageAction *action, simgrid::surf::Action::State old, simgrid::surf::Action::State current)`
+ * @details Callback functions have the following signature: `void(StorageAction *action, simgrid::surf::Action::State
+ * old, simgrid::surf::Action::State current)`
  */
-XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::StorageAction*, simgrid::surf::Action::State, simgrid::surf::Action::State)>) storageActionStateChangedCallbacks;
+XBT_PUBLIC_DATA(simgrid::xbt::signal<void(simgrid::surf::StorageAction*, simgrid::surf::Action::State,
+                                          simgrid::surf::Action::State)>)
+storageActionStateChangedCallbacks;
 
 /*********
  * Model *
@@ -63,10 +67,10 @@ public:
   StorageModel();
   ~StorageModel();
 
-  virtual Storage* createStorage(const char* id, const char* type_id, const char* content_name,
-                                 const char* content_type, const char* attach) = 0;
+  virtual StorageImpl* createStorage(const char* id, const char* type_id, const char* content_name,
+                                     const char* attach) = 0;
 
-  std::vector<Storage*> p_storageList;
+  std::vector<StorageImpl*> p_storageList;
 };
 
 /************
@@ -76,15 +80,13 @@ public:
  * @brief SURF storage interface class
  * @details A Storage represent a storage unit (e.g.: hard drive, usb key)
  */
-class Storage : public simgrid::surf::Resource,
-        public simgrid::surf::PropertyHolder {
+class StorageImpl : public simgrid::surf::Resource, public simgrid::surf::PropertyHolder {
 public:
-
   /** @brief Storage constructor */
-  Storage(Model* model, const char* name, lmm_system_t maxminSystem, double bread, double bwrite, double bconnection,
-          const char* type_id, const char* content_name, const char* content_type, sg_size_t size, const char* attach);
+  StorageImpl(Model* model, const char* name, lmm_system_t maxminSystem, double bread, double bwrite,
+              const char* type_id, const char* content_name, sg_size_t size, const char* attach);
 
-  ~Storage();
+  ~StorageImpl();
 
   /** @brief Check if the Storage is used (if an action currently uses its resources) */
   bool isUsed() override;
@@ -95,11 +97,10 @@ public:
   void turnOff() override;
 
   std::map<std::string, sg_size_t*>* content_;
-  char* contentType_;
   sg_size_t size_;
   sg_size_t usedSize_;
-  char * typeId_;
-  char* attach_; //FIXME: this is the name of the host. Use the host directly
+  char* typeId_;
+  char* attach_; // FIXME: this is the name of the host. Use the host directly
 
   /**
    * @brief Open a file
@@ -109,7 +110,7 @@ public:
    *
    * @return The StorageAction corresponding to the opening
    */
-  virtual StorageAction *open(const char* mount, const char* path)=0;
+  virtual StorageAction* open(const char* mount, const char* path) = 0;
 
   /**
    * @brief Close a file
@@ -117,7 +118,7 @@ public:
    * @param fd The file descriptor to close
    * @return The StorageAction corresponding to the closing
    */
-  virtual StorageAction *close(surf_file_t fd)=0;
+  virtual StorageAction* close(surf_file_t fd) = 0;
 
   /**
    * @brief Read a file
@@ -126,7 +127,7 @@ public:
    * @param size The size in bytes to read
    * @return The StorageAction corresponding to the reading
    */
-  virtual StorageAction *read(surf_file_t fd, sg_size_t size)=0;
+  virtual StorageAction* read(surf_file_t fd, sg_size_t size) = 0;
 
   /**
    * @brief Write a file
@@ -135,7 +136,7 @@ public:
    * @param size The size in bytes to write
    * @return The StorageAction corresponding to the writing
    */
-  virtual StorageAction *write(surf_file_t fd, sg_size_t size)=0;
+  virtual StorageAction* write(surf_file_t fd, sg_size_t size) = 0;
 
   /**
    * @brief Get the content of the current Storage
@@ -162,8 +163,8 @@ public:
 
   std::vector<StorageAction*> writeActions_;
 
-  lmm_constraint_t constraintWrite_;    /* Constraint for maximum write bandwidth*/
-  lmm_constraint_t constraintRead_;     /* Constraint for maximum write bandwidth*/
+  lmm_constraint_t constraintWrite_; /* Constraint for maximum write bandwidth*/
+  lmm_constraint_t constraintRead_;  /* Constraint for maximum write bandwidth*/
 };
 
 /**********
@@ -174,11 +175,11 @@ public:
  * @brief The possible type of action for the storage component
  */
 typedef enum {
-  READ=0, /**< Read a file */
-  WRITE,  /**< Write in a file */
-  STAT,   /**< Stat a file */
-  OPEN,   /**< Open a file */
-  CLOSE  /**< Close a file */
+  READ = 0, /**< Read a file */
+  WRITE,    /**< Write in a file */
+  STAT,     /**< Stat a file */
+  OPEN,     /**< Open a file */
+  CLOSE     /**< Close a file */
 } e_surf_action_storage_type_t;
 
 /** @ingroup SURF_storage_interface
@@ -195,53 +196,44 @@ public:
    * @param storage The Storage associated to this StorageAction
    * @param type [description]
    */
-  StorageAction(Model *model, double cost, bool failed, Storage *storage,
-      e_surf_action_storage_type_t type);
+  StorageAction(Model* model, double cost, bool failed, StorageImpl* storage, e_surf_action_storage_type_t type);
 
-    /**
  * @brief StorageAction constructor
  *
  * @param model The StorageModel associated to this StorageAction
  * @param cost The cost of this  StorageAction in [TODO]
  * @param failed [description]
  * @param var The lmm variable associated to this StorageAction if it is part of a LMM component
  * @param storage The Storage associated to this StorageAction
  * @param type [description]
  */
-  StorageAction(Model *model, double cost, bool failed, lmm_variable_t var,
-      Storage *storage, e_surf_action_storage_type_t type);
+  /**
+ * @brief StorageAction constructor
+ *
+ * @param model The StorageModel associated to this StorageAction
+ * @param cost The cost of this  StorageAction in [TODO]
+ * @param failed [description]
+ * @param var The lmm variable associated to this StorageAction if it is part of a LMM component
+ * @param storage The Storage associated to this StorageAction
+ * @param type [description]
+ */
+  StorageAction(Model* model, double cost, bool failed, lmm_variable_t var, StorageImpl* storage,
+                e_surf_action_storage_type_t type);
 
   void setState(simgrid::surf::Action::State state) override;
 
   e_surf_action_storage_type_t type_;
-  Storage* storage_;
+  StorageImpl* storage_;
   surf_file_t file_;
   double progress_;
 };
-
 }
 }
 
 typedef struct s_storage_type {
-  char *model;
-  char *content;
-  char *content_type;
-  char *type_id;
+  char* model;
+  char* content;
+  char* type_id;
   xbt_dict_t properties;
   std::map<std::string, std::string>* model_properties;
   sg_size_t size;
 } s_storage_type_t;
 typedef s_storage_type_t* storage_type_t;
 
-typedef struct s_mount {
-  void *storage;
-  char *name;
-} s_mount_t;
-typedef s_mount_t* mount_t;
-
 typedef struct surf_file {
-  char *name;
-  char *mount;
+  charname;
+  charmount;
   sg_size_t size;
   sg_size_t current_position;
 } s_surf_file_t;
index 8c11636..5bf8fe0 100644 (file)
@@ -16,11 +16,11 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu_cas, surf_cpu, "Logging specific to the
  *********/
 void surf_cpu_model_init_Cas01()
 {
-  xbt_assert(!surf_cpu_model_pm);
-  xbt_assert(!surf_cpu_model_vm);
+  xbt_assert(not surf_cpu_model_pm);
+  xbt_assert(not surf_cpu_model_vm);
 
   char *optim = xbt_cfg_get_string("cpu/optim");
-  if (!strcmp(optim, "TI")) {
+  if (not strcmp(optim, "TI")) {
     surf_cpu_model_init_ti();
     return;
   }
@@ -40,10 +40,10 @@ CpuCas01Model::CpuCas01Model() : simgrid::surf::CpuModel()
   char *optim = xbt_cfg_get_string("cpu/optim");
   bool select = xbt_cfg_get_boolean("cpu/maxmin-selective-update");
 
-  if (!strcmp(optim, "Full")) {
+  if (not strcmp(optim, "Full")) {
     updateMechanism_ = UM_FULL;
     selectiveUpdate_ = select;
-  } else if (!strcmp(optim, "Lazy")) {
+  } else if (not strcmp(optim, "Lazy")) {
     updateMechanism_ = UM_LAZY;
     selectiveUpdate_ = true;
     xbt_assert(select || (xbt_cfg_is_default_value("cpu/maxmin-selective-update")),
index e3b612a..79e74a2 100644 (file)
@@ -255,7 +255,7 @@ CpuTiTgmr::CpuTiTgmr(tmgr_trace_t speedTrace, double value) :
   trace_ = 0;
 
 /* no availability file, fixed trace */
-  if (!speedTrace) {
+  if (not speedTrace) {
     type_ = TRACE_FIXED;
     value_ = value;
     XBT_DEBUG("No availability trace. Constant value = %f", value);
@@ -296,9 +296,8 @@ int CpuTiTrace::binarySearch(double *array, double a, int low, int high)
 {
   xbt_assert(low < high, "Wrong parameters: low (%d) should be smaller than high (%d)", low, high);
 
-  int mid;
   do {
-    mid = low + (high - low) / 2;
+    int mid = low + (high - low) / 2;
     XBT_DEBUG("a %f low %d high %d mid %d value %f", a, low, high, mid, array[mid]);
 
     if (array[mid] > a)
@@ -320,8 +319,8 @@ int CpuTiTrace::binarySearch(double *array, double a, int low, int high)
 
 void surf_cpu_model_init_ti()
 {
-  xbt_assert(!surf_cpu_model_pm,"CPU model already initialized. This should not happen.");
-  xbt_assert(!surf_cpu_model_vm,"CPU model already initialized. This should not happen.");
+  xbt_assert(not surf_cpu_model_pm, "CPU model already initialized. This should not happen.");
+  xbt_assert(not surf_cpu_model_vm, "CPU model already initialized. This should not happen.");
 
   surf_cpu_model_pm = new simgrid::surf::CpuTiModel();
   all_existing_models->push_back(surf_cpu_model_pm);
@@ -491,7 +490,6 @@ void CpuTi::updateActionsFinishTime(double now)
   CpuTiAction *action;
   double sum_priority = 0.0;
   double total_area;
-  double min_finish = -1;
 
   /* update remaining amount of actions */
   updateRemainingAmount(now);
@@ -516,7 +514,7 @@ void CpuTi::updateActionsFinishTime(double now)
 
   for(ActionTiList::iterator it(actionSet_->begin()), itend(actionSet_->end()) ; it != itend ; ++it) {
     action = &*it;
-    min_finish = -1;
+    double min_finish = -1;
     /* action not running, skip it */
     if (action->getStateSet() !=  surf_cpu_model_pm->getRunningActionSet())
       continue;
@@ -560,7 +558,7 @@ void CpuTi::updateActionsFinishTime(double now)
 
 bool CpuTi::isUsed()
 {
-  return !actionSet_->empty();
+  return not actionSet_->empty();
 }
 
 double CpuTi::getAvailableSpeed()
@@ -649,7 +647,7 @@ CpuAction *CpuTi::sleep(double duration)
 void CpuTi::modified(bool modified){
   CpuTiList* modifiedCpu = static_cast<CpuTiModel*>(model())->modifiedCpu_;
   if (modified) {
-    if (!cpu_ti_hook.is_linked()) {
+    if (not cpu_ti_hook.is_linked()) {
       modifiedCpu->push_back(*this);
     }
   } else {
@@ -684,7 +682,7 @@ void CpuTiAction::setState(Action::State state)
 int CpuTiAction::unref()
 {
   refcount_--;
-  if (!refcount_) {
+  if (not refcount_) {
     if (action_hook.is_linked())
       getStateSet()->erase(getStateSet()->iterator_to(*this));
     /* remove from action_set */
index 4059783..e8fdace 100644 (file)
@@ -10,7 +10,6 @@
 
 #include "src/surf/cpu_interface.hpp"
 #include "src/surf/trace_mgr.hpp"
-#include "surf/surf_routing.h"
 
 /* Epsilon */
 #define EPSILON 0.000000001
index 270a399..1b2582b 100644 (file)
@@ -33,7 +33,7 @@ void bottleneck_solve(lmm_system_t sys)
 
   static s_xbt_swag_t cnst_to_update;
 
-  if (!(sys->modified))
+  if (not sys->modified)
     return;
 
   /* Init */
@@ -100,9 +100,9 @@ void bottleneck_solve(lmm_system_t sys)
           nb++;
       }
       XBT_DEBUG("\tThere are %d variables", nb);
-      if (nb > 0 && !cnst->sharing_policy)
+      if (nb > 0 && not cnst->sharing_policy)
         nb = 1;
-      if (!nb) {
+      if (not nb) {
         cnst->remaining = 0.0;
         cnst->usage = cnst->remaining;
         xbt_swag_remove(cnst, cnst_list);
@@ -147,7 +147,7 @@ void bottleneck_solve(lmm_system_t sys)
           cnst->usage = MIN(cnst->usage, elem->value * elem->variable->mu);
         }
       }
-      if (!cnst->sharing_policy) {
+      if (not cnst->sharing_policy) {
         XBT_DEBUG("\tUpdate constraint %p (%g) by %g", cnst, cnst->remaining, cnst->usage);
 
         double_update(&(cnst->remaining), cnst->usage, sg_maxmin_precision);
index 6dfffde..b9da9f5 100644 (file)
@@ -6,10 +6,10 @@
 
 #include <xbt/base.h>
 
-#include "storage_interface.hpp"
+#include "StorageImpl.hpp"
 #include "cpu_interface.hpp"
-#include "src/surf/HostImpl.hpp"
 #include "network_interface.hpp"
+#include "src/surf/HostImpl.hpp"
 
 #ifndef SURF_HOST_CLM03_HPP_
 #define SURF_HOST_CLM03_HPP_
index 0cac861..72d975c 100644 (file)
@@ -74,7 +74,7 @@ static void linkContainers (container_t src, container_t dst, xbt_dict_t filter)
 
   //find common father
   container_t father = lowestCommonAncestor (src, dst);
-  if (!father){
+  if (not father) {
     xbt_die ("common father unknown, this is a tracing problem");
   }
 
@@ -127,12 +127,12 @@ static void linkContainers (container_t src, container_t dst, xbt_dict_t filter)
 
 static void recursiveGraphExtraction(simgrid::s4u::NetZone* netzone, container_t container, xbt_dict_t filter)
 {
-  if (!TRACE_platform_topology()){
+  if (not TRACE_platform_topology()) {
     XBT_DEBUG("Graph extraction disabled by user.");
     return;
   }
   XBT_DEBUG("Graph extraction for NetZone = %s", netzone->name());
-  if (!netzone->children()->empty()) {
+  if (not netzone->children()->empty()) {
     //bottom-up recursion
     for (auto nz_son : *netzone->children()) {
       container_t child_container = static_cast<container_t>(xbt_dict_get(container->children, nz_son->name()));
@@ -176,7 +176,7 @@ void sg_instr_AS_begin(sg_platf_AS_cbarg_t AS)
       type_t mpi = PJ_type_get_or_null ("MPI", root->type);
       if (mpi == nullptr){
         mpi = PJ_type_container_new("MPI", root->type);
-        if (!TRACE_smpi_is_grouped())
+        if (not TRACE_smpi_is_grouped())
           PJ_type_state_new ("MPI_STATE", mpi);
         PJ_type_link_new ("MPI_LINK", PJ_type_get_root(), mpi, mpi);
       }
@@ -213,7 +213,7 @@ static void instr_routing_parse_start_link(simgrid::s4u::Link& link)
 
   container_t container = PJ_container_new(link.name(), INSTR_LINK, father);
 
-  if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (! TRACE_disable_link())) {
+  if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (not TRACE_disable_link())) {
     type_t bandwidth = PJ_type_get_or_null("bandwidth", container->type);
     if (bandwidth == nullptr) {
       bandwidth = PJ_type_variable_new("bandwidth", nullptr, container->type);
@@ -238,7 +238,7 @@ void sg_instr_new_host(simgrid::s4u::Host& host)
   container_t father = currentContainer.back();
   container_t container = PJ_container_new(host.cname(), INSTR_HOST, father);
 
-  if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (! TRACE_disable_speed())) {
+  if ((TRACE_categorized() || TRACE_uncategorized() || TRACE_platform()) && (not TRACE_disable_speed())) {
     type_t speed = PJ_type_get_or_null ("power", container->type);
     if (speed == nullptr){
       speed = PJ_type_variable_new ("power", nullptr, container->type);
@@ -318,7 +318,7 @@ void instr_routing_define_callbacks ()
 {
   //always need the call backs to ASes (we need only the root AS),
   //to create the rootContainer and the rootType properly
-  if (!TRACE_is_enabled() || !TRACE_needs_platform())
+  if (not TRACE_is_enabled() || not TRACE_needs_platform())
     return;
   simgrid::s4u::Link::onCreation.connect(instr_routing_parse_start_link);
   simgrid::s4u::onPlatformCreated.connect(instr_routing_parse_end_platform);
@@ -329,17 +329,17 @@ void instr_routing_define_callbacks ()
  */
 static void recursiveNewVariableType (const char *new_typename, const char *color, type_t root)
 {
-  if (!strcmp (root->name, "HOST")){
+  if (not strcmp(root->name, "HOST")) {
     char tnstr[INSTR_DEFAULT_STR_SIZE];
     snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename);
     PJ_type_variable_new (tnstr, color, root);
   }
-  if (!strcmp (root->name, "MSG_VM")){
+  if (not strcmp(root->name, "MSG_VM")) {
     char tnstr[INSTR_DEFAULT_STR_SIZE];
     snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename);
     PJ_type_variable_new (tnstr, color, root);
   }
if (!strcmp (root->name, "LINK")){
 if (not strcmp(root->name, "LINK")) {
     char tnstr[INSTR_DEFAULT_STR_SIZE];
     snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "b%s", new_typename);
     PJ_type_variable_new (tnstr, color, root);
@@ -359,7 +359,7 @@ void instr_new_variable_type (const char *new_typename, const char *color)
 
 static void recursiveNewUserVariableType (const char *father_type, const char *new_typename, const char *color, type_t root)
 {
-  if (!strcmp (root->name, father_type)){
+  if (not strcmp(root->name, father_type)) {
     PJ_type_variable_new (new_typename, color, root);
   }
   xbt_dict_cursor_t cursor = nullptr;
@@ -377,7 +377,7 @@ void instr_new_user_variable_type  (const char *father_type, const char *new_typ
 
 static void recursiveNewUserStateType (const char *father_type, const char *new_typename, type_t root)
 {
-  if (!strcmp (root->name, father_type)){
+  if (not strcmp(root->name, father_type)) {
     PJ_type_state_new (new_typename, root);
   }
   xbt_dict_cursor_t cursor = nullptr;
@@ -395,7 +395,7 @@ void instr_new_user_state_type (const char *father_type, const char *new_typenam
 
 static void recursiveNewValueForUserStateType (const char *type_name, const char *value, const char *color, type_t root)
 {
-  if (!strcmp (root->name, type_name)){
+  if (not strcmp(root->name, type_name)) {
     PJ_value_new (value, color, root);
   }
   xbt_dict_cursor_t cursor = nullptr;
@@ -421,7 +421,7 @@ int instr_platform_traced ()
 static void recursiveXBTGraphExtraction(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges, sg_netzone_t netzone,
                                         container_t container)
 {
-  if (!netzone->children()->empty()) {
+  if (not netzone->children()->empty()) {
     //bottom-up recursion
     for (auto netzone_child : *netzone->children()) {
       container_t child_container = static_cast<container_t>(xbt_dict_get(container->children, netzone_child->name()));
index 801036a..df986ab 100644 (file)
@@ -39,11 +39,11 @@ void TRACE_surf_link_set_bandwidth(double date, const char *resource, double ban
 
 void TRACE_surf_action(surf_action_t surf_action, const char *category)
 {
-  if (!TRACE_is_enabled())
+  if (not TRACE_is_enabled())
     return;
-  if (!TRACE_categorized ())
+  if (not TRACE_categorized())
     return;
-  if (!category)
+  if (not category)
     return;
 
   surf_action->setCategory(category);
index 90a51f7..20f16b5 100644 (file)
@@ -68,7 +68,7 @@ static int __check_feasible(xbt_swag_t cnst_list, xbt_swag_t var_list, int warn)
 
   xbt_swag_foreach(_var, var_list) {
     var = static_cast<lmm_variable_t>(_var);
-    if (!var->weight)
+    if (not var->weight)
       break;
     if (var->bound < 0)
       continue;
@@ -124,7 +124,7 @@ static double dual_objective(xbt_swag_t var_list, xbt_swag_t cnst_list)
     var = static_cast<lmm_variable_t>(_var);
     double sigma_i = 0.0;
 
-    if (!var->weight)
+    if (not var->weight)
       break;
 
     for (int j = 0; j < var->cnsts_number; j++)
@@ -182,7 +182,7 @@ void lagrange_solve(lmm_system_t sys)
     lmm_print(sys);
   }
 
-  if (!(sys->modified))
+  if (not sys->modified)
     return;
 
   /* Initialize lambda. */
@@ -202,29 +202,29 @@ void lagrange_solve(lmm_system_t sys)
   i = 0;
   xbt_swag_foreach(_var, var_list) {
   var = static_cast<lmm_variable_t>(_var);
-    if (!var->weight)
-      var->value = 0.0;
-    else {
-      int nb = 0;
-      if (var->bound < 0.0) {
-        XBT_DEBUG("#### NOTE var(%d) is a boundless variable", i);
-        var->mu = -1.0;
-        var->value = new_value(var);
-      } else {
-        var->mu = 1.0;
-        var->new_mu = 2.0;
-        var->value = new_value(var);
-      }
-      XBT_DEBUG("#### var(%p) ->weight :  %e", var, var->weight);
-      XBT_DEBUG("#### var(%p) ->mu :  %e", var, var->mu);
-      XBT_DEBUG("#### var(%p) ->weight: %e", var, var->weight);
-      XBT_DEBUG("#### var(%p) ->bound: %e", var, var->bound);
-      for (i = 0; i < var->cnsts_number; i++) {
-        if (var->cnsts[i].value ==   0.0)
-          nb++;
-      }
-      if (nb == var->cnsts_number)
-        var->value = 1.0;
+  if (not var->weight)
+    var->value = 0.0;
+  else {
+    int nb = 0;
+    if (var->bound < 0.0) {
+      XBT_DEBUG("#### NOTE var(%d) is a boundless variable", i);
+      var->mu    = -1.0;
+      var->value = new_value(var);
+    } else {
+      var->mu     = 1.0;
+      var->new_mu = 2.0;
+      var->value  = new_value(var);
+    }
+    XBT_DEBUG("#### var(%p) ->weight :  %e", var, var->weight);
+    XBT_DEBUG("#### var(%p) ->mu :  %e", var, var->mu);
+    XBT_DEBUG("#### var(%p) ->weight: %e", var, var->weight);
+    XBT_DEBUG("#### var(%p) ->bound: %e", var, var->bound);
+    for (i = 0; i < var->cnsts_number; i++) {
+      if (var->cnsts[i].value == 0.0)
+        nb++;
+    }
+    if (nb == var->cnsts_number)
+      var->value = 1.0;
     }
   }
 
@@ -240,7 +240,7 @@ void lagrange_solve(lmm_system_t sys)
     /* Improve the value of mu_i */
     xbt_swag_foreach(_var, var_list) {
       var = static_cast<lmm_variable_t>(_var);
-      if (!var->weight)
+      if (not var->weight)
         break;
       if (var->bound >= 0) {
         XBT_DEBUG("Working on var (%p)", var);
@@ -291,13 +291,13 @@ void lagrange_solve(lmm_system_t sys)
     }
 
     XBT_DEBUG("-------------- Check feasability ----------");
-    if (!__check_feasible(cnst_list, var_list, 0))
+    if (not __check_feasible(cnst_list, var_list, 0))
       overall_modification = 1.0;
     XBT_DEBUG("Iteration %d: overall_modification : %f", iteration, overall_modification);
-/*     if(!dual_updated) { */
-/*       XBT_WARN("Could not improve the convergence at iteration %d. Drop it!",iteration); */
-/*       break; */
-/*     } */
+    /*     if(not dual_updated) { */
+    /*       XBT_WARN("Could not improve the convergence at iteration %d. Drop it!",iteration); */
+    /*       break; */
+    /*     } */
   }
 
   __check_feasible(cnst_list, var_list, 1);
index 99fc2a1..ffa7f59 100644 (file)
@@ -1,18 +1,20 @@
-/* Copyright (c) 2004-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2004-2017. 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. */
 
 /* \file callbacks.h */
 
-#include "xbt/sysdep.h"
+#include "maxmin_private.hpp"
 #include "xbt/log.h"
 #include "xbt/mallocator.h"
-#include "maxmin_private.hpp"
-#include <stdlib.h>
-#include <stdio.h>              /* sprintf */
+#include "xbt/sysdep.h"
+#include <cxxabi.h>
+#include <limits>
 #include <math.h>
+#include <stdio.h> /* sprintf */
+#include <stdlib.h>
+
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_maxmin, surf, "Logging specific to SURF (maxmin)");
 
 typedef struct s_dyn_light {
@@ -111,11 +113,16 @@ void lmm_system_free(lmm_system_t sys)
   lmm_variable_t var = nullptr;
   lmm_constraint_t cnst = nullptr;
 
-  if (!sys)
+  if (sys == nullptr)
     return;
 
   while ((var = (lmm_variable_t) extract_variable(sys))) {
-    XBT_WARN("Variable %d still in system when freing it: this may be a bug", var->id_int);
+    int status;
+    char* demangled = abi::__cxa_demangle(typeid(*var->id).name(), 0, 0, &status);
+
+    XBT_WARN("Probable bug: a %s variable (#%d) not removed before the LMM system destruction.", demangled,
+             var->id_int);
+    xbt_free(demangled);
     lmm_var_free(sys, var);
   }
   while ((cnst = (lmm_constraint_t) extract_constraint(sys)))
@@ -128,7 +135,6 @@ void lmm_system_free(lmm_system_t sys)
 static inline void lmm_variable_remove(lmm_system_t sys, lmm_variable_t var)
 {
   int i;
-  int nelements;
 
   lmm_element_t elem = nullptr;
 
@@ -147,9 +153,9 @@ static inline void lmm_variable_remove(lmm_system_t sys, lmm_variable_t var)
     xbt_swag_remove(elem, &(elem->constraint->enabled_element_set));
     xbt_swag_remove(elem, &(elem->constraint->disabled_element_set));
     xbt_swag_remove(elem, &(elem->constraint->active_element_set));
-    nelements=xbt_swag_size(&(elem->constraint->enabled_element_set)) +
-              xbt_swag_size(&(elem->constraint->disabled_element_set));
-    if (!nelements)
+    int nelements = xbt_swag_size(&(elem->constraint->enabled_element_set)) +
+                    xbt_swag_size(&(elem->constraint->disabled_element_set));
+    if (nelements == 0)
       make_constraint_inactive(sys, elem->constraint);
     else
       lmm_on_disabled_var(sys,elem->constraint);
@@ -248,9 +254,10 @@ int lmm_constraint_sharing_policy(lmm_constraint_t cnst)
  */
 inline void lmm_constraint_free(lmm_system_t sys,lmm_constraint_t cnst)
 {
-  xbt_assert(!xbt_swag_size(&(cnst->active_element_set)),"Removing constraint but it still has active elements");
-  xbt_assert(!xbt_swag_size(&(cnst->enabled_element_set)),"Removing constraint but it still has enabled elements");
-  xbt_assert(!xbt_swag_size(&(cnst->disabled_element_set)),"Removing constraint but it still has disabled elements");
+  xbt_assert(not xbt_swag_size(&(cnst->active_element_set)), "Removing constraint but it still has active elements");
+  xbt_assert(not xbt_swag_size(&(cnst->enabled_element_set)), "Removing constraint but it still has enabled elements");
+  xbt_assert(not xbt_swag_size(&(cnst->disabled_element_set)),
+             "Removing constraint but it still has disabled elements");
   remove_constraint(sys, cnst);
   lmm_cnst_free(sys, cnst);
 }
@@ -268,7 +275,8 @@ static void lmm_variable_mallocator_free_f(void *var)
   xbt_free(var);
 }
 
-lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id, double weight, double bound, int number_of_constraints)
+lmm_variable_t lmm_variable_new(lmm_system_t sys, simgrid::surf::Action* id, double weight, double bound,
+                                int number_of_constraints)
 {
   lmm_variable_t var = nullptr;
   int i;
@@ -353,7 +361,7 @@ void lmm_shrink(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var)
     }
   }
 
-  if (!found) {
+  if (not found) {
     XBT_DEBUG("cnst %p is not found in var %p", cnst, var);
     return;
   }
@@ -395,7 +403,6 @@ void lmm_shrink(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var)
 void lmm_expand(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var, double value)
 {
   lmm_element_t elem = nullptr;
-  double weight;
   int i,current_share;
 
   sys->modified = 1;
@@ -413,13 +420,13 @@ void lmm_expand(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var, dou
 
   //Check if we need to disable the variable 
   if(var->weight>0 && var->concurrency_share-current_share>lmm_concurrency_slack(cnst)) {
-    weight=var->weight;
+    double weight = var->weight;
     lmm_disable_var(sys,var);
     for (i = 0; i < var->cnsts_number; i++)
       lmm_on_disabled_var(sys,var->cnsts[i].constraint);
     value=0;
     var->staged_weight=weight;
-    xbt_assert(!var->weight);
+    xbt_assert(not var->weight);
   }
 
   xbt_assert(var->cnsts_number < var->cnsts_size, "Too much constraints");
@@ -436,7 +443,7 @@ void lmm_expand(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var, dou
   } else
     xbt_swag_insert_at_tail(elem, &(elem->constraint->disabled_element_set));
 
-  if(!sys->selective_update_active) {
+  if (not sys->selective_update_active) {
     make_constraint_active(sys, cnst);
   } else if(elem->value>0 || var->weight >0) {
     make_constraint_active(sys, cnst);
@@ -451,7 +458,7 @@ void lmm_expand(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var, dou
 
 void lmm_expand_add(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var, double value)
 {
-  int i,j;
+  int i;
   double weight;
   sys->modified = 1;
 
@@ -476,10 +483,10 @@ void lmm_expand_add(lmm_system_t sys, lmm_constraint_t cnst, lmm_variable_t var,
       if(lmm_concurrency_slack(cnst)<lmm_element_concurrency(&var->cnsts[i])){
         weight=var->weight;
         lmm_disable_var(sys,var);
-        for (j = 0; j < var->cnsts_number; j++)
+        for (int j = 0; j < var->cnsts_number; j++)
           lmm_on_disabled_var(sys,var->cnsts[j].constraint);
         var->staged_weight=weight;
-        xbt_assert(!var->weight);
+        xbt_assert(not var->weight);
       }
       lmm_increase_concurrency(&var->cnsts[i]);
     }
@@ -513,18 +520,18 @@ int lmm_get_number_of_cnst_from_var(lmm_system_t /*sys*/, lmm_variable_t var)
 
 lmm_variable_t lmm_get_var_from_cnst(lmm_system_t /*sys*/, lmm_constraint_t cnst, lmm_element_t * elem)
 {
-  if (!(*elem)) {
+  if (*elem == nullptr) {
     // That is the first call, pick the first element among enabled_element_set (or disabled_element_set if
     // enabled_element_set is empty)
     *elem = (lmm_element_t) xbt_swag_getFirst(&(cnst->enabled_element_set));
-    if (!(*elem))
+    if (*elem == nullptr)
       *elem = (lmm_element_t) xbt_swag_getFirst(&(cnst->disabled_element_set));
   } else {
     //elem is not null, so we carry on
     if(xbt_swag_belongs(*elem,&(cnst->enabled_element_set))){
       //Look at enabled_element_set, and jump to disabled_element_set when finished
       *elem = (lmm_element_t) xbt_swag_getNext(*elem, cnst->enabled_element_set.offset);
-      if (!(*elem))
+      if (*elem == nullptr)
         *elem = (lmm_element_t) xbt_swag_getFirst(&(cnst->disabled_element_set));
     } else {
       *elem = (lmm_element_t) xbt_swag_getNext(*elem, cnst->disabled_element_set.offset);      
@@ -541,10 +548,10 @@ lmm_variable_t lmm_get_var_from_cnst(lmm_system_t /*sys*/, lmm_constraint_t cnst
 lmm_variable_t lmm_get_var_from_cnst_safe(lmm_system_t /*sys*/, lmm_constraint_t cnst, lmm_element_t * elem,
                                           lmm_element_t * nextelem, int * numelem)
 {
-  if (!(*elem)){
+  if (*elem == nullptr) {
     *elem = (lmm_element_t) xbt_swag_getFirst(&(cnst->enabled_element_set));
     *numelem = xbt_swag_size(&(cnst->enabled_element_set))+xbt_swag_size(&(cnst->disabled_element_set))-1;
-    if (!(*elem))
+    if (*elem == nullptr)
       *elem = (lmm_element_t) xbt_swag_getFirst(&(cnst->disabled_element_set));
   }else{
     *elem = *nextelem;
@@ -558,7 +565,7 @@ lmm_variable_t lmm_get_var_from_cnst_safe(lmm_system_t /*sys*/, lmm_constraint_t
     if(xbt_swag_belongs(*elem,&(cnst->enabled_element_set))){
       //Look at enabled_element_set, and jump to disabled_element_set when finished
       *nextelem = (lmm_element_t) xbt_swag_getNext(*elem, cnst->enabled_element_set.offset);
-      if (!(*nextelem))
+      if (*nextelem == nullptr)
         *nextelem = (lmm_element_t) xbt_swag_getFirst(&(cnst->disabled_element_set));
     } else {
       *nextelem = (lmm_element_t) xbt_swag_getNext(*elem, cnst->disabled_element_set.offset);      
@@ -633,7 +640,6 @@ void lmm_print(lmm_system_t sys)
   xbt_swag_t var_list   = nullptr;
   xbt_swag_t elem_list  = nullptr;
   std::string buf       = std::string("MAX-MIN ( ");
-  double sum = 0.0;
 
   /* Printing Objective */
   var_list = &(sys->variable_set);
@@ -649,8 +655,8 @@ void lmm_print(lmm_system_t sys)
   /* Printing Constraints */
   cnst_list = &(sys->active_constraint_set);
   xbt_swag_foreach(_cnst, cnst_list) {
-  cnst = (lmm_constraint_t)_cnst;
-    sum = 0.0;
+    cnst       = (lmm_constraint_t)_cnst;
+    double sum = 0.0;
     //Show  the enabled variables
     elem_list = &(cnst->enabled_element_set);
     buf += "\t";
@@ -678,15 +684,15 @@ void lmm_print(lmm_system_t sys)
 
     buf = buf + "0) <= " + std::to_string(cnst->bound) + " ('" + std::to_string(cnst->id_int) + "')";
 
-    if (!cnst->sharing_policy) {
+    if (not cnst->sharing_policy) {
       buf += " [MAX-Constraint]";
     }
     XBT_DEBUG("%s", buf.c_str());
     buf.clear();
-    xbt_assert(!double_positive(sum - cnst->bound, cnst->bound*sg_maxmin_precision),
-        "Incorrect value (%f is not smaller than %f): %g", sum, cnst->bound, sum - cnst->bound);
-       //if(double_positive(sum - cnst->bound, cnst->bound*sg_maxmin_precision))
-       //XBT_ERROR("Incorrect value (%f is not smaller than %f): %g",sum, cnst->bound, sum - cnst->bound);
+    xbt_assert(not double_positive(sum - cnst->bound, cnst->bound * sg_maxmin_precision),
+               "Incorrect value (%f is not smaller than %f): %g", sum, cnst->bound, sum - cnst->bound);
+    // if(double_positive(sum - cnst->bound, cnst->bound*sg_maxmin_precision))
+    // XBT_ERROR("Incorrect value (%f is not smaller than %f): %g",sum, cnst->bound, sum - cnst->bound);
   }
 
   XBT_DEBUG("Variables");
@@ -695,8 +701,8 @@ void lmm_print(lmm_system_t sys)
   var = (lmm_variable_t)_var;
     if (var->bound > 0) {
       XBT_DEBUG("'%d'(%f) : %f (<=%f)", var->id_int, var->weight, var->value, var->bound);
-      xbt_assert(!double_positive(var->value - var->bound, var->bound*sg_maxmin_precision),
-                  "Incorrect value (%f is not smaller than %f", var->value, var->bound);
+      xbt_assert(not double_positive(var->value - var->bound, var->bound * sg_maxmin_precision),
+                 "Incorrect value (%f is not smaller than %f", var->value, var->bound);
     } else {
       XBT_DEBUG("'%d'(%f) : %f", var->id_int, var->weight, var->value);
     }
@@ -715,7 +721,7 @@ void lmm_solve(lmm_system_t sys)
   double min_usage = -1;
   double min_bound = -1;
 
-  if (!(sys->modified))
+  if (not sys->modified)
     return;
 
   XBT_IN("(sys=%p)", sys);
@@ -750,7 +756,7 @@ void lmm_solve(lmm_system_t sys)
     /* INIT: Collect constraints that actually need to be saturated (i.e remaining  and usage are strictly positive)
      * into cnst_light_tab. */
     cnst->remaining = cnst->bound;
-    if (!double_positive(cnst->remaining, cnst->bound*sg_maxmin_precision))
+    if (not double_positive(cnst->remaining, cnst->bound * sg_maxmin_precision))
       continue;
     cnst->usage = 0;
     elem_list = &(cnst->enabled_element_set);
@@ -765,7 +771,7 @@ void lmm_solve(lmm_system_t sys)
 
         make_elem_active(elem);
         simgrid::surf::Action *action = static_cast<simgrid::surf::Action*>(elem->variable->id);
-        if (sys->keep_track && !action->is_linked())
+        if (sys->keep_track && not action->is_linked())
           sys->keep_track->push_back(*action);
       }
     }
@@ -841,8 +847,8 @@ void lmm_solve(lmm_system_t sys)
           double_update(&(cnst->remaining),  elem->value * var->value, cnst->bound*sg_maxmin_precision);
           double_update(&(cnst->usage), elem->value / var->weight, sg_maxmin_precision);
           //If the constraint is saturated, remove it from the set of active constraints (light_tab)
-          if(!double_positive(cnst->usage,sg_maxmin_precision) ||
-             !double_positive(cnst->remaining,cnst->bound*sg_maxmin_precision)) {
+          if (not double_positive(cnst->usage, sg_maxmin_precision) ||
+              not double_positive(cnst->remaining, cnst->bound * sg_maxmin_precision)) {
             if (cnst->cnst_light) {
               int index = (cnst->cnst_light-cnst_light_tab);
               XBT_DEBUG("index: %d \t cnst_light_num: %d \t || usage: %f remaining: %f bound: %f  ",
@@ -872,8 +878,8 @@ void lmm_solve(lmm_system_t sys)
               cnst->usage = MAX(cnst->usage, elem->value / elem->variable->weight);
           }
           //If the constraint is saturated, remove it from the set of active constraints (light_tab)
-          if(!double_positive(cnst->usage,sg_maxmin_precision) ||
-             !double_positive(cnst->remaining,cnst->bound*sg_maxmin_precision)) {
+          if (not double_positive(cnst->usage, sg_maxmin_precision) ||
+              not double_positive(cnst->remaining, cnst->bound * sg_maxmin_precision)) {
             if(cnst->cnst_light) {
               int index = (cnst->cnst_light-cnst_light_tab);
               XBT_DEBUG("index: %d \t cnst_light_num: %d \t || \t cnst: %p \t cnst->cnst_light: %p "
@@ -957,15 +963,13 @@ int lmm_concurrency_slack(lmm_constraint_t cnstr){
 
 /** \brief Measure the minimum concurrency slack across all constraints where the given var is involved */
 int lmm_cnstrs_min_concurrency_slack(lmm_variable_t var){
-  int i;
-  //FIXME MARTIN: Replace by infinite value std::numeric_limits<int>::(max)(), or something better within Simgrid?
-  int slack,minslack=666;
-  for (i = 0; i < var->cnsts_number; i++) {
-    slack=lmm_concurrency_slack(var->cnsts[i].constraint);
+  int minslack = std::numeric_limits<int>::max();
+  for (int i = 0; i < var->cnsts_number; i++) {
+    int slack = lmm_concurrency_slack(var->cnsts[i].constraint);
 
     //This is only an optimization, to avoid looking at more constraints when slack is already zero
     //Disable it when debugging to let lmm_concurrency_slack catch nasty things
-    if(!slack   && !XBT_LOG_ISENABLED(surf_maxmin, xbt_log_priority_debug))
+    if (not slack && not XBT_LOG_ISENABLED(surf_maxmin, xbt_log_priority_debug))
       return 0;
 
     if(minslack>slack)
@@ -1020,7 +1024,7 @@ void lmm_disable_var(lmm_system_t sys, lmm_variable_t var){
   int i;
   lmm_element_t elem;
 
-  xbt_assert(!var->staged_weight,"Staged weight should have been cleared");
+  xbt_assert(not var->staged_weight, "Staged weight should have been cleared");
   //Disabling the variable, move to var to list tail. Subtility is: here, we need to call lmm_update_modified_set BEFORE
   //moving the last element of var.
   xbt_swag_remove(var, &(sys->variable_set));
@@ -1056,7 +1060,7 @@ void lmm_on_disabled_var(lmm_system_t sys, lmm_constraint_t cnstr){
     return;
 
   int numelem = xbt_swag_size(&(cnstr->disabled_element_set));
-  if(!numelem)
+  if (not numelem)
     return;
 
   lmm_element_t elem = (lmm_element_t)xbt_swag_getFirst(&(cnstr->disabled_element_set));
@@ -1175,7 +1179,7 @@ static void lmm_update_modified_set_rec(lmm_system_t sys, lmm_constraint_t cnst)
     s_lmm_element_t *cnsts = var->cnsts;
     int i;
     for (i = 0; var->visited != sys->visited_counter && i < var->cnsts_number ; i++) {
-      if (cnsts[i].constraint != cnst && !xbt_swag_belongs(cnsts[i].constraint, &sys->modified_constraint_set)) {
+      if (cnsts[i].constraint != cnst && not xbt_swag_belongs(cnsts[i].constraint, &sys->modified_constraint_set)) {
         xbt_swag_insert(cnsts[i].constraint, &sys->modified_constraint_set);
         lmm_update_modified_set_rec(sys, cnsts[i].constraint);
       }
@@ -1188,7 +1192,7 @@ static void lmm_update_modified_set_rec(lmm_system_t sys, lmm_constraint_t cnst)
 static void lmm_update_modified_set(lmm_system_t sys, lmm_constraint_t cnst)
 {
   /* nothing to do if selective update isn't active */
-  if (sys->selective_update_active && !xbt_swag_belongs(cnst, &sys->modified_constraint_set)) {
+  if (sys->selective_update_active && not xbt_swag_belongs(cnst, &sys->modified_constraint_set)) {
     xbt_swag_insert(cnst, &sys->modified_constraint_set);
     lmm_update_modified_set_rec(sys, cnst);
   }
@@ -1243,28 +1247,24 @@ double lmm_constraint_get_usage(lmm_constraint_t cnst) {
 }
 
 void lmm_check_concurrency(lmm_system_t sys){
-  void* _cnst;
-  void* _elem;
-  void* _var;
-  lmm_element_t elem;
-  lmm_constraint_t cnst;
-  lmm_variable_t var;
-  int concurrency;
-  int i,belong_to_enabled,belong_to_disabled,belong_to_active;
-
   //These checks are very expensive, so do them only if we want to debug SURF LMM
   if (XBT_LOG_ISENABLED(surf_maxmin, xbt_log_priority_debug)) {
-    xbt_swag_foreach(_cnst, &(sys->constraint_set)) {
-      cnst = (lmm_constraint_t) _cnst;
-      concurrency=0;
-      xbt_swag_foreach(_elem, &(cnst->enabled_element_set)) {
-        elem = (lmm_element_t)_elem;
+    void* cnstIt;
+    xbt_swag_foreach(cnstIt, &(sys->constraint_set))
+    {
+      lmm_constraint_t cnst = (lmm_constraint_t)cnstIt;
+      int concurrency       = 0;
+      void* elemIt;
+      xbt_swag_foreach(elemIt, &(cnst->enabled_element_set))
+      {
+        lmm_element_t elem = (lmm_element_t)elemIt;
         xbt_assert(elem->variable->weight > 0);
         concurrency+=lmm_element_concurrency(elem);
       }
 
-      xbt_swag_foreach(_elem, &(cnst->disabled_element_set)) {
-        elem = (lmm_element_t)_elem;
+      xbt_swag_foreach(elemIt, &(cnst->disabled_element_set))
+      {
+        lmm_element_t elem = (lmm_element_t)elemIt;
         //We should have staged variables only if concurrency is reached in some constraint
         xbt_assert(cnst->concurrency_limit<0 || elem->variable->staged_weight==0 ||
                    lmm_cnstrs_min_concurrency_slack(elem->variable) < elem->variable->concurrency_share,
@@ -1276,18 +1276,20 @@ void lmm_check_concurrency(lmm_system_t sys){
     }
 
     //Check that for each variable, all corresponding elements are in the same state (i.e. same element sets)
-    xbt_swag_foreach(_var, &(sys->variable_set)) {
-      var= (lmm_variable_t) _var;
+    void* varIt;
+    xbt_swag_foreach(varIt, &(sys->variable_set))
+    {
+      lmm_variable_t var = (lmm_variable_t)varIt;
 
-      if(!var->cnsts_number)
+      if (not var->cnsts_number)
         continue;
 
-      elem = &var->cnsts[0];
-      belong_to_enabled=xbt_swag_belongs(elem,&(elem->constraint->enabled_element_set));
-      belong_to_disabled=xbt_swag_belongs(elem,&(elem->constraint->disabled_element_set));
-      belong_to_active=xbt_swag_belongs(elem,&(elem->constraint->active_element_set));
+      lmm_element_t elem     = &var->cnsts[0];
+      int belong_to_enabled  = xbt_swag_belongs(elem, &(elem->constraint->enabled_element_set));
+      int belong_to_disabled = xbt_swag_belongs(elem, &(elem->constraint->disabled_element_set));
+      int belong_to_active   = xbt_swag_belongs(elem, &(elem->constraint->active_element_set));
 
-      for (i = 1; i < var->cnsts_number; i++) {
+      for (int i = 1; i < var->cnsts_number; i++) {
         elem = &var->cnsts[i];
         xbt_assert(belong_to_enabled==xbt_swag_belongs(elem,&(elem->constraint->enabled_element_set)),
                    "Variable inconsistency (1): enabled_element_set");
index 8c8bfbb..9b4ecae 100644 (file)
@@ -87,7 +87,7 @@ typedef struct lmm_variable {
   double bound;
   double value;
   short int concurrency_share; /* The maximum number of elements that variable will add to a constraint */
-  void *id;
+  simgrid::surf::Action* id;
   int id_int;
   unsigned visited;             /* used by lmm_update_modified_set */
   /* \begin{For Lagrange only} */
index 75af96b..2a867cf 100644 (file)
@@ -138,10 +138,10 @@ NetworkCm02Model::NetworkCm02Model()
   char *optim = xbt_cfg_get_string("network/optim");
   bool select = xbt_cfg_get_boolean("network/maxmin-selective-update");
 
-  if (!strcmp(optim, "Full")) {
+  if (not strcmp(optim, "Full")) {
     updateMechanism_ = UM_FULL;
     selectiveUpdate_ = select;
-  } else if (!strcmp(optim, "Lazy")) {
+  } else if (not strcmp(optim, "Lazy")) {
     updateMechanism_ = UM_LAZY;
     selectiveUpdate_ = true;
     xbt_assert(select || (xbt_cfg_is_default_value("network/maxmin-selective-update")),
@@ -234,7 +234,7 @@ void NetworkCm02Model::updateActionsStateFull(double now, double delta)
           double_update(&(deltap), action->latency_, sg_surf_precision);
           action->latency_ = 0.0;
         }
-        if (action->latency_ <= 0.0 && !(action->isSuspended()))
+        if (action->latency_ <= 0.0 && not action->isSuspended())
           lmm_update_variable_weight(maxminSystem_, action->getVariable(), action->weight_);
       }
       if (TRACE_is_enabled()) {
@@ -249,7 +249,7 @@ void NetworkCm02Model::updateActionsStateFull(double now, double delta)
                                           action->getLastUpdate(), now - action->getLastUpdate());
         }
       }
-      if (!lmm_get_number_of_cnst_from_var (maxminSystem_, action->getVariable())) {
+      if (not lmm_get_number_of_cnst_from_var(maxminSystem_, action->getVariable())) {
         /* There is actually no link used, hence an infinite bandwidth. This happens often when using models like
          * vivaldi. In such case, just make sure that the action completes immediately.
          */
@@ -279,7 +279,7 @@ Action* NetworkCm02Model::communicate(s4u::Host* src, s4u::Host* dst, double siz
   XBT_IN("(%s,%s,%g,%g)", src->cname(), dst->cname(), size, rate);
 
   src->routeTo(dst, route, &latency);
-  xbt_assert(!route->empty() || latency,
+  xbt_assert(not route->empty() || latency,
              "You're trying to send data from %s to %s but there is no connecting path between these two hosts.",
              src->cname(), dst->cname());
 
@@ -318,7 +318,7 @@ Action* NetworkCm02Model::communicate(s4u::Host* src, s4u::Host* dst, double siz
   action->latency_ *= latencyFactor(size);
   action->rate_ = bandwidthConstraint(action->rate_, bandwidth_bound, size);
   if (haveGap_) {
-    xbt_assert(! route->empty(),
+    xbt_assert(not route->empty(),
                "Using a model with a gap (e.g., SMPI) with a platform without links (e.g. vivaldi)!!!");
 
     gapAppend(size, route->at(0), action);
@@ -447,7 +447,7 @@ void NetworkCm02Link::setBandwidth(double value)
     while ((var = lmm_get_var_from_cnst_safe(model()->getMaxminSystem(), constraint(), &elem, &nextelem, &numelem))) {
       NetworkCm02Action *action = static_cast<NetworkCm02Action*>(lmm_variable_id(var));
       action->weight_ += delta;
-      if (!action->isSuspended())
+      if (not action->isSuspended())
         lmm_update_variable_weight(model()->getMaxminSystem(), action->getVariable(), action->weight_);
     }
   }
@@ -480,7 +480,7 @@ void NetworkCm02Link::setLatency(double value)
         XBT_INFO("Flow is limited BYLATENCY, latency of flow is %f", action->latCurrent_);
       }
     }
-    if (!action->isSuspended())
+    if (not action->isSuspended())
       lmm_update_variable_weight(model()->getMaxminSystem(), action->getVariable(), action->weight_);
   }
 }
index 0870271..04f6d98 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2013-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2013-2017. 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. */
@@ -13,7 +12,6 @@
 #include "xbt/graph.h"
 
 
-
 /***********
  * Classes *
  ***********/
index 0cf97ad..f0b3320 100644 (file)
@@ -159,9 +159,9 @@ namespace simgrid {
         if((*it)->init_rate==-1)
           (*it)->init_rate= rate_before_update;
 
-        penalized_bw= ! num_comm_out ? (*it)->init_rate : (*it)->init_rate /penalty;
+        penalized_bw = num_comm_out ? (*it)->init_rate / penalty : (*it)->init_rate;
 
-        if (!double_equals(penalized_bw, rate_before_update, sg_surf_precision)){
+        if (not double_equals(penalized_bw, rate_before_update, sg_surf_precision)) {
           XBT_DEBUG("%d->%d action %p penalty updated : bw now %f, before %f , initial rate %f", root->id,(*it)->destination->id,(*it)->action,penalized_bw, (*it)->action->getBound(), (*it)->init_rate );
           lmm_update_variable_bound(maxminSystem_, (*it)->action->getVariable(), penalized_bw);
         }else{
index 8b4f978..c315bb1 100644 (file)
@@ -104,7 +104,7 @@ namespace simgrid {
     {
 
       if (strcmp(name,"__loopback__"))
-        xbt_assert(!LinkImpl::byName(name), "Link '%s' declared several times in the platform.", name);
+        xbt_assert(not LinkImpl::byName(name), "Link '%s' declared several times in the platform.", name);
 
       latency_.scale   = 1;
       bandwidth_.scale = 1;
@@ -125,7 +125,7 @@ namespace simgrid {
      */
     void LinkImpl::destroy()
     {
-      if (!currentlyDestroying_) {
+      if (not currentlyDestroying_) {
         currentlyDestroying_ = true;
         s4u::Link::onDestruction(this->piface_);
         delete this;
@@ -198,7 +198,7 @@ namespace simgrid {
     {
       std::list<LinkImpl*> retlist;
       lmm_system_t sys = getModel()->getMaxminSystem();
-      int llen         = lmm_get_number_of_cnst_from_var(sys, getVariable());
+      int llen         = lmm_get_number_of_cnst_from_var(sys, variable_);
 
       for (int i = 0; i < llen; i++) {
         /* Beware of composite actions: ptasks put links and cpus together */
index 01a2372..59c93cc 100644 (file)
@@ -206,7 +206,7 @@ public:
       : simgrid::surf::Action(model, cost, failed, var){};
 
   void setState(simgrid::surf::Action::State state) override;
-  std::list<LinkImpl*> links();
+  virtual std::list<LinkImpl*> links();
 
   double latency_;
   double latCurrent_;
index adf7d54..aedde29 100644 (file)
@@ -69,7 +69,7 @@ static void clusterCreation_cb(sg_platf_cluster_cbarg_t cluster)
     NetPointNs3* host_src = sg_host_by_name(host_id)->pimpl_netpoint->extension<NetPointNs3>();
     xbt_assert(host_src, "Cannot find a NS3 host of name %s", host_id);
 
-    ns3_add_link(host_src->node_num, host_dst->node_num, bw,lat);
+    ns3_add_link(host_src, host_dst, bw, lat);
 
     delete host_dst;
     free(host_id);
@@ -108,17 +108,28 @@ static void routeCreation_cb(bool symmetrical, simgrid::kernel::routing::NetPoin
     xbt_assert(host_src != nullptr, "Network element %s does not seem to be NS3-ready", src->cname());
     xbt_assert(host_dst != nullptr, "Network element %s does not seem to be NS3-ready", dst->cname());
 
-    ns3_add_link(host_src->node_num, host_dst->node_num, link_bdw, link_lat);
+    ns3_add_link(host_src, host_dst, link_bdw, link_lat);
     if (symmetrical)
-      ns3_add_link(host_dst->node_num, host_src->node_num, link_bdw, link_lat);
+      ns3_add_link(host_dst, host_src, link_bdw, link_lat);
 
     xbt_free(link_bdw);
     xbt_free(link_lat);
+  } else {
+    static bool warned_about_long_routes = false;
+
+    if (not warned_about_long_routes)
+      XBT_WARN("Ignoring a route between %s and %s of length %zu: Only routes of length 1 are considered with NS3.\n"
+               "WARNING: You can ignore this warning if your hosts can still communicate when only considering routes "
+               "of length 1.\n"
+               "WARNING: Remove long routes to avoid this harmless message; subsequent long routes will be silently "
+               "ignored.",
+               src->cname(), dst->cname(), link_list->size());
+    warned_about_long_routes = true;
   }
 }
 
 /* Create the ns3 topology based on routing strategy */
-static void postparse_cb(void)
+static void postparse_cb()
 {
   IPV4addr.shrink_to_fit();
 
@@ -186,7 +197,7 @@ double NetworkNS3Model::nextOccuringEvent(double now)
   XBT_DEBUG("ns3_next_occuring_event");
 
   //get the first relevant value from the running_actions list
-  if (!getRunningActionSet()->size() || now == 0.0)
+  if (not getRunningActionSet()->size() || now == 0.0)
     return -1.0;
   else
     do {
@@ -245,7 +256,7 @@ void NetworkNS3Model::updateActionsState(double now, double delta)
     }
   }
 
-  while (!xbt_dynar_is_empty(socket_to_destroy)){
+  while (not xbt_dynar_is_empty(socket_to_destroy)) {
     xbt_dynar_pop(socket_to_destroy,&ns3Socket);
 
     if (XBT_LOG_ISENABLED(ns3, xbt_log_priority_debug)) {
@@ -306,7 +317,12 @@ void NetworkNS3Action::resume() {
   THROW_UNIMPLEMENTED;
 }
 
-  /* Test whether a flow is suspended */
+std::list<LinkImpl*> NetworkNS3Action::links()
+{
+  THROW_UNIMPLEMENTED;
+}
+
+/* Test whether a flow is suspended */
 bool NetworkNS3Action::isSuspended()
 {
   return false;
@@ -315,7 +331,7 @@ bool NetworkNS3Action::isSuspended()
 int NetworkNS3Action::unref()
 {
   refcount_--;
-  if (!refcount_) {
+  if (not refcount_) {
     if (action_hook.is_linked())
       stateSet_->erase(stateSet_->iterator_to(*this));
     XBT_DEBUG ("Removing action %p", this);
@@ -339,13 +355,17 @@ void ns3_simulator(double maxSeconds)
 void ns3_create_flow(simgrid::s4u::Host* src, simgrid::s4u::Host* dst, double startTime, u_int32_t TotalBytes,
                      simgrid::surf::NetworkNS3Action* action)
 {
-  int node1 = src->pimpl_netpoint->extension<NetPointNs3>()->node_num;
-  int node2 = dst->pimpl_netpoint->extension<NetPointNs3>()->node_num;
+  unsigned int node1 = src->pimpl_netpoint->extension<NetPointNs3>()->node_num;
+  unsigned int node2 = dst->pimpl_netpoint->extension<NetPointNs3>()->node_num;
 
   ns3::Ptr<ns3::Node> src_node = nodes.Get(node1);
   ns3::Ptr<ns3::Node> dst_node = nodes.Get(node2);
 
+  xbt_assert(node2 < IPV4addr.size(), "Element %s is unknown to NS3. Is it connected to any one-hop link?",
+             dst->pimpl_netpoint->cname());
   char* addr = IPV4addr.at(node2);
+  xbt_assert(addr != nullptr, "Element %s is unknown to NS3. Is it connected to any one-hop link?",
+             dst->pimpl_netpoint->cname());
 
   XBT_DEBUG("ns3_create_flow %d Bytes from %d to %d with Interface %s",TotalBytes, node1, node2,addr);
   ns3::PacketSinkHelper sink("ns3::TcpSocketFactory", ns3::InetSocketAddress (ns3::Ipv4Address::GetAny(), port_number));
@@ -376,20 +396,20 @@ void ns3_initialize(const char* TcpProtocol){
   ns3::Config::SetDefault ("ns3::TcpSocket::SegmentSize", ns3::UintegerValue (1024)); // 1024-byte packet for easier reading
   ns3::Config::SetDefault ("ns3::TcpSocket::DelAckCount", ns3::UintegerValue (1));
 
-  if (!strcmp(TcpProtocol,"default"))
+  if (not strcmp(TcpProtocol, "default"))
     return;
 
-  if (!strcmp(TcpProtocol,"Reno")) {
+  if (not strcmp(TcpProtocol, "Reno")) {
     XBT_INFO("Switching Tcp protocol to '%s'",TcpProtocol);
     ns3::Config::SetDefault ("ns3::TcpL4Protocol::SocketType", ns3::StringValue("ns3::TcpReno"));
     return;
   }
-  if (!strcmp(TcpProtocol,"NewReno")) {
+  if (not strcmp(TcpProtocol, "NewReno")) {
     XBT_INFO("Switching Tcp protocol to '%s'",TcpProtocol);
     ns3::Config::SetDefault ("ns3::TcpL4Protocol::SocketType", ns3::StringValue("ns3::TcpNewReno"));
     return;
   }
-  if(!strcmp(TcpProtocol,"Tahoe")){
+  if (not strcmp(TcpProtocol, "Tahoe")) {
     XBT_INFO("Switching Tcp protocol to '%s'",TcpProtocol);
     ns3::Config::SetDefault ("ns3::TcpL4Protocol::SocketType", ns3::StringValue("ns3::TcpTahoe"));
     return;
@@ -442,17 +462,20 @@ static char* transformIpv4Address (ns3::Ipv4Address from){
   return bprintf("%s",s.c_str());
 }
 
-void ns3_add_link(int src, int dst, char *bw, char *lat)
+void ns3_add_link(NetPointNs3* src, NetPointNs3* dst, char* bw, char* lat)
 {
   ns3::PointToPointHelper pointToPoint;
 
   ns3::NetDeviceContainer netA;
   ns3::Ipv4AddressHelper address;
 
-  ns3::Ptr<ns3::Node> a = nodes.Get(src);
-  ns3::Ptr<ns3::Node> b = nodes.Get(dst);
+  int srcNum = src->node_num;
+  int dstNum = dst->node_num;
+
+  ns3::Ptr<ns3::Node> a = nodes.Get(srcNum);
+  ns3::Ptr<ns3::Node> b = nodes.Get(dstNum);
 
-  XBT_DEBUG("\tAdd PTP from %d to %d bw:'%s' lat:'%s'",src,dst,bw,lat);
+  XBT_DEBUG("\tAdd PTP from %d to %d bw:'%s' lat:'%s'", srcNum, dstNum, bw, lat);
   pointToPoint.SetDeviceAttribute ("DataRate", ns3::StringValue (bw));
   pointToPoint.SetChannelAttribute ("Delay", ns3::StringValue (lat));
 
@@ -464,13 +487,13 @@ void ns3_add_link(int src, int dst, char *bw, char *lat)
   free(adr);
   interfaces.Add(address.Assign (netA));
 
-  if (IPV4addr.size() <= (unsigned)src)
-    IPV4addr.resize(src + 1, nullptr);
-  IPV4addr.at(src) = transformIpv4Address(interfaces.GetAddress(interfaces.GetN() - 2));
+  if (IPV4addr.size() <= (unsigned)srcNum)
+    IPV4addr.resize(srcNum + 1, nullptr);
+  IPV4addr.at(srcNum) = transformIpv4Address(interfaces.GetAddress(interfaces.GetN() - 2));
 
-  if (IPV4addr.size() <= (unsigned)dst)
-    IPV4addr.resize(dst + 1, nullptr);
-  IPV4addr.at(dst) = transformIpv4Address(interfaces.GetAddress(interfaces.GetN() - 1));
+  if (IPV4addr.size() <= (unsigned)dstNum)
+    IPV4addr.resize(dstNum + 1, nullptr);
+  IPV4addr.at(dstNum) = transformIpv4Address(interfaces.GetAddress(interfaces.GetN() - 1));
 
   if (number_of_links == 255){
     xbt_assert(number_of_networks < 255, "Number of links and networks exceed 255*255");
index ecdb950..d7ff3ce 100644 (file)
@@ -1,13 +1,12 @@
-/* Copyright (c) 2004-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2004-2017. 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 NETWORK_NS3_HPP_
 #define NETWORK_NS3_HPP_
 
-
-#include <xbt/base.h>
+#include "xbt/base.h"
 
 #include "network_interface.hpp"
 #include "src/surf/ns3/ns3_interface.h"
@@ -50,11 +49,12 @@ public:
   NetworkNS3Action(Model* model, double cost, s4u::Host* src, s4u::Host* dst);
 
   bool isSuspended();
-  int unref();
-  void suspend();
-  void resume();
+  int unref() override;
+  void suspend() override;
+  void resume() override;
+  std::list<LinkImpl*> links() override;
 
-//private:
+  // private:
   double lastSent_ = 0;
   s4u::Host* src_;
   s4u::Host* dst_;
index 1366932..b35d868 100644 (file)
@@ -30,7 +30,7 @@ ns3_create_flow(sg_host_t src, sg_host_t dst, double start, u_int32_t TotalBytes
                 simgrid::surf::NetworkNS3Action* action);
 XBT_PUBLIC(void) ns3_simulator(double maxSeconds);
 XBT_PUBLIC(void*) ns3_add_router(const char* id);
-XBT_PUBLIC(void) ns3_add_link(int src, int dst, char* bw, char* lat);
+XBT_PUBLIC(void) ns3_add_link(NetPointNs3* src, NetPointNs3* dst, char* bw, char* lat);
 XBT_PUBLIC(void) ns3_add_cluster(const char* id, char* bw, char* lat);
 
 SG_END_DECL()
index 608a3c3..c1f8842 100644 (file)
@@ -171,20 +171,20 @@ HostEnergy::~HostEnergy() = default;
 
 double HostEnergy::getWattMinAt(int pstate)
 {
-  xbt_assert(!power_range_watts_list.empty(), "No power range properties specified for host %s", host->cname());
+  xbt_assert(not power_range_watts_list.empty(), "No power range properties specified for host %s", host->cname());
   return power_range_watts_list[pstate].min;
 }
 
 double HostEnergy::getWattMaxAt(int pstate)
 {
-  xbt_assert(!power_range_watts_list.empty(), "No power range properties specified for host %s", host->cname());
+  xbt_assert(not power_range_watts_list.empty(), "No power range properties specified for host %s", host->cname());
   return power_range_watts_list[pstate].max;
 }
 
 /** @brief Computes the power consumed by the host according to the current pstate and processor load */
 double HostEnergy::getCurrentWattsValue(double cpu_load)
 {
-  xbt_assert(!power_range_watts_list.empty(), "No power range properties specified for host %s", host->cname());
+  xbt_assert(not power_range_watts_list.empty(), "No power range properties specified for host %s", host->cname());
 
   /* min_power corresponds to the power consumed when only one core is active */
   /* max_power is the power consumed at 100% cpu load       */
index a963b8c..042c185 100644 (file)
@@ -23,8 +23,8 @@ XBT_LOG_EXTERNAL_CATEGORY(xbt_cfg);
 void surf_host_model_init_ptask_L07()
 {
   XBT_CINFO(xbt_cfg,"Switching to the L07 model to handle parallel tasks.");
-  xbt_assert(!surf_cpu_model_pm, "CPU model type already defined");
-  xbt_assert(!surf_network_model, "network model type already defined");
+  xbt_assert(not surf_cpu_model_pm, "CPU model type already defined");
+  xbt_assert(not surf_network_model, "network model type already defined");
 
   surf_host_model = new simgrid::surf::HostL07Model();
   all_existing_models->push_back(surf_host_model);
@@ -432,7 +432,7 @@ void L07Action::updateBound()
 int L07Action::unref()
 {
   refcount_--;
-  if (!refcount_) {
+  if (not refcount_) {
     if (action_hook.is_linked())
       stateSet_->erase(stateSet_->iterator_to(*this));
     if (getVariable())
index 6c0cbf4..0b49f04 100644 (file)
@@ -28,7 +28,8 @@
 #include <string>
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_parse);
 
-XBT_PRIVATE std::vector<s_mount_t> mount_list;
+XBT_PRIVATE std::map<std::string, simgrid::surf::StorageImpl*> mount_list;
+XBT_PRIVATE std::vector<std::string> known_storages;
 
 namespace simgrid {
 namespace surf {
@@ -206,7 +207,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster)
     s_sg_platf_host_cbarg_t host;
     memset(&host, 0, sizeof(host));
     host.id = host_id;
-    if ((cluster->properties != nullptr) && (!xbt_dict_is_empty(cluster->properties))) {
+    if ((cluster->properties != nullptr) && (not xbt_dict_is_empty(cluster->properties))) {
       xbt_dict_cursor_t cursor=nullptr;
       char *key;
       char* data;
@@ -289,7 +290,7 @@ void sg_platf_new_cluster(sg_platf_cluster_cbarg_t cluster)
   // Add a router.
   XBT_DEBUG(" ");
   XBT_DEBUG("<router id=\"%s\"/>", cluster->router_id);
-  if (!cluster->router_id || !strcmp(cluster->router_id, "")) {
+  if (not cluster->router_id || not strcmp(cluster->router_id, "")) {
     char* newid         = bprintf("%s%s_router%s", cluster->prefix, cluster->id, cluster->suffix);
     current_as->router_ = sg_platf_new_router(newid, NULL);
     free(newid);
@@ -364,8 +365,8 @@ void sg_platf_new_cabinet(sg_platf_cabinet_cbarg_t cabinet)
 
 void sg_platf_new_storage(sg_platf_storage_cbarg_t storage)
 {
-  xbt_assert(!xbt_lib_get_or_null(storage_lib, storage->id,ROUTING_STORAGE_LEVEL),
-               "Refusing to add a second storage named \"%s\"", storage->id);
+  xbt_assert(std::find(known_storages.begin(), known_storages.end(), storage->id) == known_storages.end(),
+             "Refusing to add a second storage named \"%s\"", storage->id);
 
   xbt_assert(storage_types.find(storage->type_id) != storage_types.end(), "No storage type '%s'", storage->type_id);
   storage_type_t stype = storage_types.at(storage->type_id);
@@ -373,23 +374,20 @@ void sg_platf_new_storage(sg_platf_storage_cbarg_t storage)
   XBT_DEBUG("ROUTING Create a storage name '%s' with type_id '%s' and content '%s'", storage->id, storage->type_id,
             storage->content);
 
-  xbt_lib_set(storage_lib, storage->id, ROUTING_STORAGE_LEVEL, (void *) xbt_strdup(storage->type_id));
+  known_storages.push_back(storage->id);
 
   // if storage content is not specified use the content of storage_type if any
-  if (!strcmp(storage->content, "") && strcmp(stype->content, "")) {
+  if (not strcmp(storage->content, "") && strcmp(stype->content, "")) {
     storage->content      = stype->content;
-    storage->content_type = stype->content_type;
-    XBT_DEBUG("For disk '%s' content is empty, inherit the content (of type %s) from storage type '%s' ", storage->id,
-              stype->content_type, stype->type_id);
+    XBT_DEBUG("For disk '%s' content is empty, inherit the content (of type %s)", storage->id, stype->type_id);
   }
 
   XBT_DEBUG("SURF storage create resource\n\t\tid '%s'\n\t\ttype '%s' "
-            "\n\t\tmodel '%s' \n\t\tcontent '%s'\n\t\tcontent_type '%s' "
+            "\n\t\tmodel '%s' \n\t\tcontent '%s' "
             "\n\t\tproperties '%p''\n",
-            storage->id, stype->model, stype->type_id, storage->content, storage->content_type, storage->properties);
+            storage->id, stype->model, stype->type_id, storage->content, storage->properties);
 
-  auto s = surf_storage_model->createStorage(storage->id, stype->type_id, storage->content, storage->content_type,
-                                             storage->attach);
+  auto s = surf_storage_model->createStorage(storage->id, stype->type_id, storage->content, storage->attach);
 
   if (storage->properties) {
     xbt_dict_cursor_t cursor = nullptr;
@@ -410,30 +408,26 @@ void sg_platf_new_storage_type(sg_platf_storage_type_cbarg_t storage_type)
   stype->model = xbt_strdup(storage_type->model);
   stype->properties = storage_type->properties;
   stype->content = xbt_strdup(storage_type->content);
-  stype->content_type = xbt_strdup(storage_type->content_type);
   stype->type_id = xbt_strdup(storage_type->id);
   stype->size = storage_type->size;
   stype->model_properties = storage_type->model_properties;
 
-  XBT_DEBUG("ROUTING Create a storage type id '%s' with model '%s', content '%s', and content_type '%s'",
-            stype->type_id, stype->model, storage_type->content, storage_type->content_type);
+  XBT_DEBUG("ROUTING Create a storage type id '%s' with model '%s', content '%s'", stype->type_id, stype->model,
+            storage_type->content);
 
   storage_types.insert({std::string(stype->type_id), stype});
 }
 
 void sg_platf_new_mount(sg_platf_mount_cbarg_t mount){
-  xbt_assert(xbt_lib_get_or_null(storage_lib, mount->storageId, ROUTING_STORAGE_LEVEL),
-      "Cannot mount non-existent disk \"%s\"", mount->storageId);
+  xbt_assert(std::find(known_storages.begin(), known_storages.end(), mount->storageId) != known_storages.end(),
+             "Cannot mount non-existent disk \"%s\"", mount->storageId);
 
   XBT_DEBUG("ROUTING Mount '%s' on '%s'",mount->storageId, mount->name);
 
-  s_mount_t mnt;
-  mnt.storage = surf_storage_resource_priv(surf_storage_resource_by_name(mount->storageId));
-  mnt.name = xbt_strdup(mount->name);
-
   if (mount_list.empty())
     XBT_DEBUG("Create a Mount list for %s", A_surfxml_host_id);
-  mount_list.push_back(mnt);
+  mount_list.insert(
+      {std::string(mount->name), surf_storage_resource_priv(surf_storage_resource_by_name(mount->storageId))});
 }
 
 void sg_platf_new_route(sg_platf_route_cbarg_t route)
@@ -449,7 +443,7 @@ void sg_platf_new_bypassRoute(sg_platf_route_cbarg_t bypassRoute)
 void sg_platf_new_process(sg_platf_process_cbarg_t process)
 {
   sg_host_t host = sg_host_by_name(process->host);
-  if (!host) {
+  if (not host) {
     // The requested host does not exist. Do a nice message to the user
     std::string msg = std::string("Cannot create process '") + process->function + "': host '" + process->host +
                       "' does not exist\nExisting hosts: '";
@@ -557,14 +551,14 @@ static void surf_config_models_setup()
   const char* storage_model_name = xbt_cfg_get_string("storage/model");
 
   /* The compound host model is needed when using non-default net/cpu models */
-  if ((!xbt_cfg_is_default_value("network/model") || !xbt_cfg_is_default_value("cpu/model")) &&
+  if ((not xbt_cfg_is_default_value("network/model") || not xbt_cfg_is_default_value("cpu/model")) &&
       xbt_cfg_is_default_value("host/model")) {
     host_model_name = "compound";
     xbt_cfg_set_string("host/model", host_model_name);
   }
 
   XBT_DEBUG("host model: %s", host_model_name);
-  if (!strcmp(host_model_name, "compound")) {
+  if (not strcmp(host_model_name, "compound")) {
     xbt_assert(cpu_model_name, "Set a cpu model to use with the 'compound' host model");
     xbt_assert(network_model_name, "Set a network model to use with the 'compound' host model");
 
@@ -601,7 +595,7 @@ static void surf_config_models_setup()
  */
 simgrid::s4u::NetZone* sg_platf_new_AS_begin(sg_platf_AS_cbarg_t AS)
 {
-  if (!surf_parse_models_setup_already_called) {
+  if (not surf_parse_models_setup_already_called) {
     /* Initialize the surf models. That must be done after we got all config, and before we need the models.
      * That is, after the last <config> tag, if any, and before the first of cluster|peer|AS|trace|trace_connect
      *
index 275667e..5cffd79 100644 (file)
@@ -22,10 +22,10 @@ static void check_disk_attachment()
   void** data;
   xbt_lib_foreach(storage_lib, cursor, key, data) {
     if (xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != nullptr) {
-      simgrid::surf::Storage* storage =
-          static_cast<simgrid::surf::Storage*>(xbt_lib_get_or_null(storage_lib, key, SURF_STORAGE_LEVEL));
+      simgrid::surf::StorageImpl* storage =
+          static_cast<simgrid::surf::StorageImpl*>(xbt_lib_get_or_null(storage_lib, key, SURF_STORAGE_LEVEL));
       simgrid::kernel::routing::NetPoint* host_elm = sg_netpoint_by_name_or_null(storage->attach_);
-      if (!host_elm)
+      if (not host_elm)
         surf_parse_error("Unable to attach storage %s: host %s does not exist.", storage->cname(), storage->attach_);
     }
   }
@@ -36,10 +36,8 @@ void storage_register_callbacks()
   simgrid::s4u::onPlatformCreated.connect(check_disk_attachment);
   instr_routing_define_callbacks();
 
-  ROUTING_STORAGE_LEVEL = xbt_lib_add_level(storage_lib, xbt_free_f);
-  SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib, [](void *self) {
-    delete static_cast<simgrid::surf::Storage*>(self);
-  });
+  SURF_STORAGE_LEVEL =
+      xbt_lib_add_level(storage_lib, [](void* self) { delete static_cast<simgrid::surf::StorageImpl*>(self); });
 }
 
 /*********
@@ -55,26 +53,20 @@ void surf_storage_model_init_default()
 namespace simgrid {
 namespace surf {
 
-Storage* StorageN11Model::createStorage(const char* id, const char* type_id, const char* content_name,
-                                        const char* content_type, const char* attach)
+StorageImpl* StorageN11Model::createStorage(const char* id, const char* type_id, const char* content_name,
+                                            const char* attach)
 {
-
-  xbt_assert(!surf_storage_resource_priv(surf_storage_resource_by_name(id)),
-      "Storage '%s' declared several times in the platform file", id);
-
   storage_type_t storage_type = storage_types.at(type_id);
 
   double Bread =
       surf_parse_get_bandwidth(storage_type->model_properties->at("Bread").c_str(), "property Bread, storage", type_id);
   double Bwrite = surf_parse_get_bandwidth(storage_type->model_properties->at("Bwrite").c_str(),
                                            "property Bwrite, storage", type_id);
-  double Bconnection = surf_parse_get_bandwidth(storage_type->model_properties->at("Bconnection").c_str(),
-                                                "property Bconnection, storage", type_id);
 
-  Storage* storage = new StorageN11(this, id, maxminSystem_, Bread, Bwrite, Bconnection, type_id, (char*)content_name,
-                                    content_type, storage_type->size, (char*)attach);
-  storageCreatedCallbacks(storage);
+  StorageImpl* storage = new StorageN11(this, id, maxminSystem_, Bread, Bwrite, type_id, (char*)content_name,
+                                        storage_type->size, (char*)attach);
   xbt_lib_set(storage_lib, id, SURF_STORAGE_LEVEL, storage);
+  storageCreatedCallbacks(storage);
 
   XBT_DEBUG("SURF storage create resource\n\t\tid '%s'\n\t\ttype '%s'\n\t\tBread '%f'\n", id, type_id, Bread);
 
@@ -162,11 +154,10 @@ void StorageN11Model::updateActionsState(double /*now*/, double delta)
  ************/
 
 StorageN11::StorageN11(StorageModel* model, const char* name, lmm_system_t maxminSystem, double bread, double bwrite,
-                       double bconnection, const char* type_id, char* content_name, const char* content_type,
-                       sg_size_t size, char* attach)
-    : Storage(model, name, maxminSystem, bread, bwrite, bconnection, type_id, content_name, content_type, size, attach)
+                       const char* type_id, char* content_name, sg_size_t size, char* attach)
+    : StorageImpl(model, name, maxminSystem, bread, bwrite, type_id, content_name, size, attach)
 {
-  XBT_DEBUG("Create resource with Bconnection '%f' Bread '%f' Bwrite '%f' and Size '%llu'", bconnection, bread, bwrite, size);
+  XBT_DEBUG("Create resource with Bread '%f' Bwrite '%f' and Size '%llu'", bread, bwrite, size);
 }
 
 StorageAction *StorageN11::open(const char* mount, const char* path)
@@ -254,10 +245,10 @@ StorageAction *StorageN11::write(surf_file_t fd, sg_size_t size)
  * Action *
  **********/
 
-StorageN11Action::StorageN11Action(Model *model, double cost, bool failed, Storage *storage, e_surf_action_storage_type_t type)
-: StorageAction(model, cost, failed,
-    lmm_variable_new(model->getMaxminSystem(), this, 1.0, -1.0 , 3),
-    storage, type) {
+StorageN11Action::StorageN11Action(Model* model, double cost, bool failed, StorageImpl* storage,
+                                   e_surf_action_storage_type_t type)
+    : StorageAction(model, cost, failed, lmm_variable_new(model->getMaxminSystem(), this, 1.0, -1.0, 3), storage, type)
+{
   XBT_IN("(%s,%g", storage->cname(), cost);
 
   // Must be less than the max bandwidth for all actions
@@ -287,7 +278,7 @@ StorageN11Action::StorageN11Action(Model *model, double cost, bool failed, Stora
 int StorageN11Action::unref()
 {
   refcount_--;
-  if (!refcount_) {
+  if (not refcount_) {
     if (action_hook.is_linked())
       stateSet_->erase(stateSet_->iterator_to(*this));
     if (getVariable())
index 3a12eee..00bd08d 100644 (file)
@@ -6,7 +6,7 @@
 
 #include <xbt/base.h>
 
-#include "storage_interface.hpp"
+#include "StorageImpl.hpp"
 
 #ifndef STORAGE_N11_HPP_
 #define STORAGE_N11_HPP_
@@ -28,8 +28,8 @@ class XBT_PRIVATE StorageN11Action;
 
 class StorageN11Model : public StorageModel {
 public:
-  Storage* createStorage(const char* id, const char* type_id, const char* content_name, const char* content_type,
-                         const char* attach) override;
+  StorageImpl* createStorage(const char* id, const char* type_id, const char* content_name,
+                             const char* attach) override;
   double nextOccuringEvent(double now) override;
   void updateActionsState(double now, double delta) override;
 };
@@ -38,12 +38,10 @@ public:
  * Resource *
  ************/
 
-class StorageN11 : public Storage {
+class StorageN11 : public StorageImpl {
 public:
   StorageN11(StorageModel* model, const char* name, lmm_system_t maxminSystem, double bread, double bwrite,
-             double bconnection, const char* type_id, char* content_name, const char* content_type, sg_size_t size,
-             char* attach);
-
+             const char* type_id, char* content_name, sg_size_t size, char* attach);
   StorageAction *open(const char* mount, const char* path);
   StorageAction *close(surf_file_t fd);
   StorageAction *ls(const char *path);
@@ -58,7 +56,7 @@ public:
 
 class StorageN11Action : public StorageAction {
 public:
-  StorageN11Action(Model *model, double cost, bool failed, Storage *storage, e_surf_action_storage_type_t type);
+  StorageN11Action(Model* model, double cost, bool failed, StorageImpl* storage, e_surf_action_storage_type_t type);
   void suspend();
   int unref();
   void cancel();
@@ -66,7 +64,6 @@ public:
   bool isSuspended();
   void setMaxDuration(double duration);
   void setPriority(double priority);
-
 };
 
 }
index 85582c5..23cc5cc 100644 (file)
@@ -74,7 +74,7 @@ double surf_solve(double max_date)
     next_event_date = future_evt_set->next_date();
     XBT_DEBUG("Next TRACE event: %f", next_event_date);
 
-    if(! surf_network_model->nextOccuringEventIsIdempotent()){ // NS3, I see you
+    if (not surf_network_model->nextOccuringEventIsIdempotent()) { // NS3, I see you
       if (next_event_date!=-1.0 && time_delta!=-1.0) {
         time_delta = MIN(next_event_date - NOW, time_delta);
       } else {
@@ -207,27 +207,27 @@ int surf_host_file_move(sg_host_t host, surf_file_t fd, const char* fullpath){
 }
 
 sg_size_t surf_storage_get_size(surf_resource_t resource){
-  return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->size_;
+  return static_cast<simgrid::surf::StorageImpl*>(surf_storage_resource_priv(resource))->size_;
 }
 
 sg_size_t surf_storage_get_free_size(surf_resource_t resource){
-  return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->getFreeSize();
+  return static_cast<simgrid::surf::StorageImpl*>(surf_storage_resource_priv(resource))->getFreeSize();
 }
 
 sg_size_t surf_storage_get_used_size(surf_resource_t resource){
-  return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->getUsedSize();
+  return static_cast<simgrid::surf::StorageImpl*>(surf_storage_resource_priv(resource))->getUsedSize();
 }
 
 xbt_dict_t surf_storage_get_properties(surf_resource_t resource){
-  return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->getProperties();
+  return static_cast<simgrid::surf::StorageImpl*>(surf_storage_resource_priv(resource))->getProperties();
 }
 
 const char* surf_storage_get_host(surf_resource_t resource){
-  return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->attach_;
+  return static_cast<simgrid::surf::StorageImpl*>(surf_storage_resource_priv(resource))->attach_;
 }
 
 const char* surf_storage_get_name(surf_resource_t resource){
-  return static_cast<simgrid::surf::Storage*>(surf_storage_resource_priv(resource))->cname();
+  return static_cast<simgrid::surf::StorageImpl*>(surf_storage_resource_priv(resource))->cname();
 }
 
 void surf_cpu_action_set_bound(surf_action_t action, double bound) {
index 7ef46e5..7ebcf63 100644 (file)
@@ -32,8 +32,7 @@ extern std::map<std::string, storage_type_t> storage_types;
 namespace simgrid {
 namespace surf {
 
-simgrid::xbt::signal<void(void)> surfExitCallbacks;
-
+simgrid::xbt::signal<void()> surfExitCallbacks;
 }
 }
 
@@ -137,7 +136,7 @@ std::ifstream* surf_ifsopen(const char* name)
     std::string buff = path_elm + FILE_DELIM + name;
     fs->open(buff.c_str(), std::ifstream::in);
 
-    if (!fs->fail()) {
+    if (not fs->fail()) {
       XBT_DEBUG("Found file at %s", buff.c_str());
       return fs;
     }
@@ -147,7 +146,6 @@ std::ifstream* surf_ifsopen(const char* name)
 }
 FILE *surf_fopen(const char *name, const char *mode)
 {
-  char *buff;
   FILE *file = nullptr;
 
   xbt_assert(name);
@@ -157,7 +155,7 @@ FILE *surf_fopen(const char *name, const char *mode)
 
   /* search relative files in the path */
   for (auto path_elm : surf_path) {
-    buff = bprintf("%s" FILE_DELIM "%s", path_elm.c_str(), name);
+    char* buff = bprintf("%s" FILE_DELIM "%s", path_elm.c_str(), name);
     file = fopen(buff, mode);
     free(buff);
 
@@ -192,7 +190,7 @@ const char *__surf_get_initial_path()
   unsigned int len = GetCurrentDirectory(MAX_PATH + 1, current_directory);
   char root[4] = { 0 };
 
-  if (!len)
+  if (not len)
     return nullptr;
 
   strncpy(root, current_directory, 3);
@@ -243,10 +241,10 @@ int find_model_description(s_surf_model_description_t * table,
   char *name_list = nullptr;
 
   for (i = 0; table[i].name; i++)
-    if (!strcmp(name, table[i].name)) {
+    if (not strcmp(name, table[i].name)) {
       return i;
     }
-  if (!table[0].name)
+  if (not table[0].name)
     xbt_die("No model is valid! This is a bug.");
   name_list = xbt_strdup(table[0].name);
   for (i = 1; table[i].name; i++) {
@@ -260,7 +258,7 @@ int find_model_description(s_surf_model_description_t * table,
 
 static inline void surf_storage_free(void *r)
 {
-  delete static_cast<simgrid::surf::Storage*>(r);
+  delete static_cast<simgrid::surf::StorageImpl*>(r);
 }
 
 void sg_version_check(int lib_version_major,int lib_version_minor,int lib_version_patch) {
@@ -354,9 +352,9 @@ void surf_init(int *argc, char **argv)
   SURF_STORAGE_LEVEL = xbt_lib_add_level(storage_lib,surf_storage_free);
 
   xbt_init(argc, argv);
-  if (!all_existing_models)
+  if (not all_existing_models)
     all_existing_models = new std::vector<simgrid::surf::Model*>();
-  if (!future_evt_set)
+  if (not future_evt_set)
     future_evt_set = new simgrid::trace_mgr::future_evt_set();
 
   TRACE_surf_alloc();
@@ -381,7 +379,6 @@ void surf_exit()
     free(stype->model);
     free(stype->type_id);
     free(stype->content);
-    free(stype->content_type);
     xbt_dict_free(&(stype->properties));
     delete stype->model_properties;
     free(stype);
@@ -454,7 +451,7 @@ double Model::nextOccuringEventLazy(double now)
   lmm_solve(maxminSystem_);
   XBT_DEBUG("After share resources, The size of modified actions set is %zd", modifiedSet_->size());
 
-  while(!modifiedSet_->empty()) {
+  while (not modifiedSet_->empty()) {
     Action *action = &(modifiedSet_->front());
     modifiedSet_->pop_front();
     bool max_dur_flag = false;
@@ -579,7 +576,7 @@ bool Resource::isOn() const {
   return isOn_;
 }
 bool Resource::isOff() const {
-  return ! isOn_;
+  return not isOn_;
 }
 
 void Resource::turnOn()
@@ -767,7 +764,7 @@ void Action::cancel(){
 
 int Action::unref(){
   refcount_--;
-  if (!refcount_) {
+  if (not refcount_) {
     if (action_hook.is_linked())
       stateSet_->erase(stateSet_->iterator_to(*this));
     if (getVariable())
index ac226cd..f544d2f 100644 (file)
@@ -10,7 +10,6 @@
 
 #include "src/surf/surf_private.h"
 #include "surf/surf.h"
-#include "surf/surf_routing.h"
 #include "xbt/str.h"
 
 #include <boost/intrusive/list.hpp>
@@ -32,7 +31,7 @@ extern XBT_PRIVATE int sg_network_crosstraffic;
 extern XBT_PRIVATE std::vector<std::string> surf_path;
 
 extern "C" {
-XBT_PUBLIC(double) surf_get_clock(void);
+XBT_PUBLIC(double) surf_get_clock();
 }
 /** \ingroup SURF_simulation
  *  \brief List of hosts that have just restarted and whose autorestart process should be restarted.
@@ -45,8 +44,7 @@ extern XBT_PRIVATE double sg_sender_gap;
 namespace simgrid {
 namespace surf {
 
-extern XBT_PRIVATE simgrid::xbt::signal<void(void)> surfExitCallbacks;
-
+extern XBT_PRIVATE simgrid::xbt::signal<void()> surfExitCallbacks;
 }
 }
 
index 7fc1da1..7771715 100644 (file)
@@ -110,7 +110,7 @@ tmgr_trace_t tmgr_trace_new_from_file(const char *filename)
   xbt_assert(trace_list.find(filename) == trace_list.end(), "Refusing to define trace %s twice", filename);
 
   std::ifstream* f = surf_ifsopen(filename);
-  xbt_assert(!f->fail(), "Cannot open file '%s' (path=%s)", filename, (boost::join(surf_path, ":")).c_str());
+  xbt_assert(not f->fail(), "Cannot open file '%s' (path=%s)", filename, (boost::join(surf_path, ":")).c_str());
 
   std::stringstream buffer;
   buffer << f->rdbuf();
index d33a538..d78d4de 100644 (file)
@@ -31,7 +31,7 @@ typedef struct tmgr_trace_event* tmgr_trace_event_t;
 */
 XBT_PUBLIC(void) tmgr_trace_event_unref(tmgr_trace_event_t* trace_event);
 
-XBT_PUBLIC(void) tmgr_finalize(void);
+XBT_PUBLIC(void) tmgr_finalize();
 
 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, std::string input, double periodicity);
@@ -59,7 +59,7 @@ public:
   explicit DatedValue() = default;
   explicit DatedValue(double d, double v) : date_(d), value_(v) {}
   bool operator==(DatedValue e2);
-  bool operator!=(DatedValue e2) { return !(*this == e2); }
+  bool operator!=(DatedValue e2) { return not(*this == e2); }
 };
 std::ostream& operator<<(std::ostream& out, const DatedValue& e);
 
index ec62ccc..1ffead7 100644 (file)
@@ -132,7 +132,6 @@ typedef struct s_sg_platf_storage_cbarg {
   const char* id;
   const char* type_id;
   const char* content;
-  const char* content_type;
   xbt_dict_t properties;
   const char* attach;
 } s_sg_platf_storage_cbarg_t;
@@ -142,7 +141,6 @@ typedef struct s_sg_platf_storage_type_cbarg {
   const char* id;
   const char* model;
   const char* content;
-  const char* content_type;
   xbt_dict_t properties;
   std::map<std::string, std::string>* model_properties;
   sg_size_t size;
index 1a6e627..f69ea36 100644 (file)
@@ -103,10 +103,9 @@ To upgrade your files, use the tool simgrid_update_xml
 
 <!ELEMENT storage_type ((model_prop|prop)*)>
 <!ATTLIST storage_type id       CDATA #REQUIRED>
-<!ATTLIST storage_type model    CDATA #REQUIRED>
+<!ATTLIST storage_type model    CDATA "N11">
 <!ATTLIST storage_type size     CDATA #REQUIRED>
 <!ATTLIST storage_type content  CDATA "">
-<!ATTLIST storage_type content_type  CDATA "txt_unix">
 
 <!ELEMENT mount EMPTY>
 <!ATTLIST mount storageId CDATA #REQUIRED>
@@ -125,7 +124,6 @@ To upgrade your files, use the tool simgrid_update_xml
 <!ATTLIST storage id CDATA #REQUIRED>
 <!ATTLIST storage typeId CDATA #REQUIRED>
 <!ATTLIST storage content  CDATA "">
-<!ATTLIST storage content_type  CDATA "txt_unix">
 <!ATTLIST storage attach CDATA #REQUIRED>
 
 <!ELEMENT host_link EMPTY>
index 98336cb..834cf3f 100644 (file)
@@ -203,83 +203,83 @@ extern FILE *surf_parse_in, *surf_parse_out;
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
-       do \
-               { \
-               /* Undo effects of setting up surf_parse_text. */ \
+  do \
+    { \
+    /* Undo effects of setting up surf_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 surf_parse_text again */ \
-               } \
-       while ( 0 )
+    *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 surf_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.
-        */
-       int yy_buf_size;
-
-       /* Number of characters read into yy_ch_buf, not including EOB
-        * characters.
-        */
-       int 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;
+  {
+  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.
+   */
+  int yy_buf_size;
+
+  /* Number of characters read into yy_ch_buf, not including EOB
+   * characters.
+   */
+  int 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;
+  /* Whether to try to fill the input buffer when we reach the
+   * end of it.
+   */
+  int yy_fill_buffer;
 
-       int yy_buffer_status;
+  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 surf_parse_restart()), so that the user can continue scanning by
-        * just pointing surf_parse_in at a new input file.
-        */
+  /* 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 surf_parse_restart()), so that the user can continue scanning by
+   * just pointing surf_parse_in at a new input file.
+   */
 #define YY_BUFFER_EOF_PENDING 2
 
-       };
+  };
 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
 
 /* Stack of input buffers. */
@@ -304,13 +304,13 @@ static YY_BUFFER_STATE * yy_buffer_stack = NULL; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when surf_parse_text is formed. */
 static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+static int yy_n_chars;    /* number of characters read into yy_ch_buf */
 unsigned int surf_parse_leng;
 
 /* Points to current character in buffer. */
 static char *yy_c_buf_p = NULL;
-static int yy_init = 0;                /* whether we need to initialize */
-static int yy_start = 0;       /* start state number */
+static int yy_init = 0;    /* whether we need to initialize */
+static int yy_start = 0;  /* start state number */
 
 /* Flag which is used to allow surf_parse_wrap()'s to do buffer switches
  * instead of setting up a fresh surf_parse_in.  A bit of a hack ...
@@ -342,24 +342,24 @@ void surf_parse_free (void *  );
 #define yy_new_buffer surf_parse__create_buffer
 
 #define yy_set_interactive(is_interactive) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){ \
+  { \
+  if ( ! YY_CURRENT_BUFFER ){ \
         surf_parse_ensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
+    YY_CURRENT_BUFFER_LVALUE =    \
             surf_parse__create_buffer(surf_parse_in,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-       }
+  } \
+  YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+  }
 
 #define yy_set_bol(at_bol) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){\
+  { \
+  if ( ! YY_CURRENT_BUFFER ){\
         surf_parse_ensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
+    YY_CURRENT_BUFFER_LVALUE =    \
             surf_parse__create_buffer(surf_parse_in,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-       }
+  } \
+  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+  }
 
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
@@ -393,22 +393,22 @@ static void yynoreturn yy_fatal_error (yyconst char* msg  );
  * corresponding action - sets up surf_parse_text.
  */
 #define YY_DO_BEFORE_ACTION \
-       (yytext_ptr) = yy_bp; \
-       surf_parse_leng = (int) (yy_cp - yy_bp); \
-       (yy_hold_char) = *yy_cp; \
-       *yy_cp = '\0'; \
-       (yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 651
-#define YY_END_OF_BUFFER 652
+  (yytext_ptr) = yy_bp; \
+  surf_parse_leng = (int) (yy_cp - yy_bp); \
+  (yy_hold_char) = *yy_cp; \
+  *yy_cp = '\0'; \
+  (yy_c_buf_p) = yy_cp;
+
+#define YY_NUM_RULES 647
+#define YY_END_OF_BUFFER 648
 /* 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[3906] =
+  {
+  flex_int32_t yy_verify;
+  flex_int32_t yy_nxt;
+  };
+static yyconst flex_int16_t yy_accept[3886] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -441,15 +441,15 @@ static yyconst flex_int16_t yy_accept[3906] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      652,  650,   15,   10,   10,   15,   15,  630,   10,  630,
+      648,  646,   15,   10,   10,   15,   15,  626,   10,  626,
 
-        5,    6,    5,    8,    9,    8,  646,  638,  639,  647,
-      644,  647,  645,  649,  638,  639,  649,   42,   10,   42,
-       42,   42,   40,   42,   42,   46,   10,   46,   46,  650,
-       46,  650,  650,   46,   63,   10,   63,   63,   63,   61,
-       63,   63,   63,   67,   10,   67,  650,   67,   84,   10,
+        5,    6,    5,    8,    9,    8,  642,  634,  635,  643,
+      640,  643,  641,  645,  634,  635,  645,   42,   10,   42,
+       42,   42,   40,   42,   42,   46,   10,   46,   46,  646,
+       46,  646,  646,   46,   63,   10,   63,   63,   63,   61,
+       63,   63,   63,   67,   10,   67,  646,   67,   84,   10,
        84,   84,   84,   82,   84,   84,   84,   84,   84,   88,
-       10,   88,  650,   88,   95,   10,   95,   95,   95,   93,
+       10,   88,  646,   88,   95,   10,   95,   95,   95,   93,
        95,   99,   10,   99,  110,   10,  110,  110,  110,  108,
       110,  110,  110,  114,   10,  114,  127,   10,  127,  127,
       127,  125,  127,  127,  127,  131,   10,  131,  131,  140,
@@ -462,35 +462,35 @@ static yyconst flex_int16_t yy_accept[3906] =
       237,  237,  237,  241,   10,  241,  241,  248,   10,  248,
       248,  248,  246,  248,  252,   10,  252,  252,  271,   10,
       271,  271,  271,  269,  271,  271,  271,  271,  271,  275,
-       10,  275,  650,  275,  286,   10,  286,  286,  286,  284,
+       10,  275,  646,  275,  286,   10,  286,  286,  286,  284,
       286,  286,  286,  290,   10,  290,  297,   10,  297,  297,
 
-      297,  295,  297,  301,   10,  301,  650,  301,  324,   10,
+      297,  295,  297,  301,   10,  301,  646,  301,  324,   10,
       324,  324,  324,  322,  324,  324,  324,  324,  328,   10,
       328,  328,  341,   10,  341,  341,  341,  339,  341,  341,
       345,   10,  345,  354,   10,  354,  354,  354,  352,  354,
       354,  358,   10,  358,  367,   10,  367,  367,  367,  365,
       367,  367,  371,   10,  371,  392,   10,  392,  392,  392,
       390,  392,  392,  392,  392,  392,  392,  396,   10,  396,
-      650,  403,   10,  403,  403,  403,  401,  403,  407,   10,
-      407,  407,  650,  407,  650,  407,  424,   10,  424,  424,
+      646,  403,   10,  403,  403,  403,  401,  403,  407,   10,
+      407,  407,  646,  407,  646,  407,  424,   10,  424,  424,
       424,  422,  424,  424,  424,  424,  424,  428,   10,  428,
 
       428,  437,   10,  437,  437,  437,  435,  437,  437,  441,
        10,  441,  468,   10,  468,  468,  468,  466,  468,  468,
       468,  468,  468,  472,   10,  472,  485,   10,  485,  485,
       485,  483,  485,  485,  489,   10,  489,  489,  498,   10,
-      498,  498,  498,  496,  498,  498,  502,   10,  502,  517,
-       10,  517,  517,  517,  515,  517,  517,  517,  517,  521,
-       10,  521,  521,  536,   10,  536,  536,  536,  534,  536,
-      536,  536,  536,  540,   10,  540,  650,  540,  551,   10,
-      551,  551,  551,  549,  551,  551,  551,  647,  646,  573,
-       10,  573,  573,  573,  571,  573,  573,  573,  577,   10,
-
-      577,  604,   10,  604,  604,  604,  602,  604,  604,  608,
-       10,  608,  608,  608,  608,  625,   10,  625,  625,  625,
-      623,  625,  625,  625,  629,   10,  629,  629,   10,    0,
-        2,    2,    0,    4,    7,  641,  640,    0,    0,    0,
+      498,  498,  498,  496,  498,  498,  502,   10,  502,  515,
+       10,  515,  515,  515,  513,  515,  515,  515,  515,  519,
+       10,  519,  519,  532,   10,  532,  532,  532,  530,  532,
+      532,  532,  532,  536,   10,  536,  646,  536,  547,   10,
+      547,  547,  547,  545,  547,  547,  547,  643,  642,  569,
+       10,  569,  569,  569,  567,  569,  569,  569,  573,   10,
+
+      573,  600,   10,  600,  600,  600,  598,  600,  600,  604,
+       10,  604,  604,  604,  604,  621,   10,  621,  621,  621,
+      619,  621,  621,  621,  625,   10,  625,  625,   10,    0,
+        2,    2,    0,    4,    7,  637,  636,    0,    0,    0,
         0,    0,    0,   41,   43,   43,   43,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -514,13 +514,13 @@ static yyconst flex_int16_t yy_accept[3906] =
         0,  423,  425,  425,  425,  425,  425,  425,    0,  436,
       438,  438,  438,    0,  467,  469,  469,  469,  469,  469,
       469,  469,  469,  469,    0,  484,  486,  486,  486,  486,
-        0,  497,  499,  499,  499,    0,  516,  518,  518,  518,
-      518,  518,    0,  535,  537,  537,  537,  537,  537,    0,
-        0,  550,  552,  552,  552,  552,    0,    0,    0,  572,
-      574,  574,  574,  574,    0,  603,  605,  605,  605,    0,
-      624,  626,  626,  626,  626,  626,    0,    0,    0,    0,
+        0,  497,  499,  499,  499,    0,  514,  516,  516,  516,
+      516,  516,    0,  531,  533,  533,  533,  533,  533,    0,
+        0,  546,  548,  548,  548,  548,    0,    0,    0,  568,
+      570,  570,  570,  570,    0,  599,  601,  601,  601,    0,
+      620,  622,  622,  622,  622,  622,    0,    0,    0,    0,
 
-        0,    3,    0,    0,    0,    0,    0,    0,    0,  648,
+        0,    3,    0,    0,    0,    0,    0,    0,    0,  644,
         0,    0,   43,    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,
@@ -544,11 +544,11 @@ static yyconst flex_int16_t yy_accept[3906] =
 
         0,    0,  469,  469,  469,  469,  469,  469,    0,    0,
       486,  486,  486,    0,    0,  499,    0,    0,    0,    0,
-      518,  518,    0,    0,  518,    0,    0,  537,    0,    0,
-      537,  537,    0,    0,    0,  552,    0,    0,  552,    0,
-        0,    0,  643,  574,  574,  574,    0,    0,    0,    0,
-      605,    0,    0,  626,  626,  626,  626,    0,    0,    0,
-       14,    1,    0,    0,  636,    0,    0,    0,  633,  632,
+      516,  516,    0,    0,  516,    0,    0,  533,    0,    0,
+      533,  533,    0,    0,    0,  548,    0,    0,  548,    0,
+        0,    0,  639,  570,  570,  570,    0,    0,    0,    0,
+      601,    0,    0,  622,  622,  622,  622,    0,    0,    0,
+       14,    1,    0,    0,  632,    0,    0,    0,  629,  628,
         0,    0,   19,   18,   43,    0,    0,   45,    0,   17,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -582,18 +582,18 @@ static yyconst flex_int16_t yy_accept[3906] =
       452,    0,    0,  469,    0,    0,  469,  469,  469,    0,
         0,  471,    0,    0,    0,    0,    0,  486,    0,    0,
       488,    0,  499,    0,  495,  494,    0,    0,  501,    0,
-      518,  518,    0,  512,  511,  518,    0,    0,  520,    0,
-      537,    0,  529,  528,  537,  537,    0,    0,  539,    0,
-        0,  552,    0,  546,  545,  552,    0,    0,    0,  554,
-
-        0,  574,  574,  574,    0,    0,  576,    0,    0,  581,
-      580,  605,    0,    0,  607,    0,    0,    0,  626,  626,
-        0,    0,  626,    0,    0,  628,    0,    0,    0,  637,
-      631,    0,    0,   43,    0,   44,    0,    0,    0,    0,
+      516,  516,    0,  510,  509,  516,    0,    0,  518,    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,  577,
+      576,  601,    0,    0,  603,    0,    0,    0,  622,  622,
+        0,    0,  622,    0,    0,  624,    0,    0,    0,  633,
+      627,    0,    0,   43,    0,   44,    0,    0,    0,    0,
         0,    0,    0,    0,  254,    0,  303,    0,    0,  373,
-        0,    0,  430,    0,    0,    0,    0,  579,  429,    0,
+        0,    0,  430,    0,    0,    0,    0,  575,  429,    0,
         0,    0,    0,    0,  253,    0,  302,  372,    0,    0,
-        0,  578,    0,  578,    0,    0,   50,   49,   64,   64,
+        0,  574,    0,  574,    0,    0,   50,   49,   64,   64,
         0,   56,   55,   64,    0,  302,   85,    0,    0,   85,
        85,   85,    0,    0,   96,    0,  111,  111,    0,    0,
 
@@ -603,7 +603,7 @@ static yyconst flex_int16_t yy_accept[3906] =
       181,    0,  238,  238,  238,    0,    0,    0,  202,  201,
       238,  238,  238,  238,  238,  238,  238,  238,  238,  238,
         0,    0,  272,  272,    0,    0,  272,  272,  272,    0,
-        0,    0,    0,    0,    0,    0,    0,  579,  325,  325,
+        0,    0,    0,    0,    0,    0,    0,  575,  325,  325,
       325,  325,    0,  342,    0,  355,    0,    0,    0,  368,
         0,  393,  393,  393,  393,    0,  385,  384,  393,  393,
         0,    0,  404,    0,    0,    0,    0,    0,  425,    0,
@@ -611,16 +611,16 @@ static yyconst flex_int16_t yy_accept[3906] =
         0,  425,  425,  425,    0,  438,    0,  469,    0,  455,
       454,    0,    0,    0,  459,  458,  469,    0,    0,  469,
         0,    0,  476,  475,    0,  478,  477,  486,    0,  499,
-        0,  518,  518,  518,    0,  537,  537,    0,    0,    0,
-        0,    0,    0,  552,    0,    0,  574,    0,    0,  574,
-        0,  605,    0,    0,  612,  611,  626,  626,    0,  618,
-      617,  626,    0,    0,    0,    0,   12,    0,  634,  635,
+        0,  516,  516,  516,    0,  533,  533,    0,    0,    0,
+        0,    0,    0,  548,    0,    0,  570,    0,    0,  570,
+        0,  601,    0,    0,  608,  607,  622,  622,    0,  614,
+      613,  622,    0,    0,    0,    0,   12,    0,  630,  631,
        43,    0,   68,    0,    0,    0,    0,    0,    0,  254,
         0,    0,  303,    0,    0,  359,  373,    0,    0,  430,
-        0,  474,    0,  542,  579,    0,  429,    0,    0,    0,
+        0,  474,    0,  538,  575,    0,  429,    0,    0,    0,
 
-        0,    0,  253,    0,    0,  302,  372,  473,    0,  541,
-      578,    0,  474,  473,   64,   64,   64,    0,    0,   85,
+        0,    0,  253,    0,    0,  302,  372,  473,    0,  537,
+      574,    0,  474,  473,   64,   64,   64,    0,    0,   85,
         0,   73,   72,   85,   85,   85,    0,    0,    0,    0,
         0,  111,  111,    0,  128,  128,    0,    0,  158,  158,
         0,  181,  181,    0,    0,  181,    0,    0,    0,  238,
@@ -634,15 +634,15 @@ static yyconst flex_int16_t yy_accept[3906] =
         0,  404,    0,   69,    0,    0,    0,  425,    0,  413,
       412,  425,  425,  425,    0,    0,    0,    0,  469,    0,
       457,  456,  469,    0,  463,  462,  469,    0,  486,    0,
-      499,    0,  518,  518,  518,    0,  537,    0,    0,    0,
-      533,  532,    0,    0,    0,  544,  543,  552,    0,    0,
-      574,    0,    0,    0,    0,    0,    0,  605,    0,  626,
-      626,  626,    0,    0,    0,    0,   11,   43,    0,   68,
+      499,    0,  516,  516,  516,    0,  533,    0,    0,    0,
+      529,  528,    0,    0,    0,  540,  539,  548,    0,    0,
+      570,    0,    0,    0,    0,    0,    0,  601,    0,  622,
+      622,  622,    0,    0,    0,    0,   11,   43,    0,   68,
         0,    0,    0,    0,    0,  242,    0,    0,    0,    0,
-      359,    0,    0,  442,  474,  491,    0,  542,    0,    0,
+      359,    0,    0,  442,  474,  491,    0,  538,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,  473,  490,    0,
-      541,    0,    0,    0,    0,    0,    0,   64,    0,    0,
+      537,    0,    0,    0,    0,    0,    0,   64,    0,    0,
        85,   85,   85,   85,    0,    0,    0,   92,   91,    0,
       111,  111,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,  181,    0,  175,  174,
@@ -656,10 +656,10 @@ static yyconst flex_int16_t yy_accept[3906] =
       387,  386,  393,    0,  394,    0,  404,    0,   69,  243,
         0,  443,  425,  425,  425,  425,    0,    0,  434,  433,
         0,  439,  469,  469,  469,    0,  486,    0,  499,    0,
-        0,    0,  518,    0,    0,    0,  537,    0,  531,  530,
-        0,    0,  552,    0,    0,  574,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  570,  569,    0,  605,    0,
-      606,    0,    0,    0,    0,  626,    0,    0,    0,    0,
+        0,    0,  516,    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,  601,    0,
+      602,    0,    0,    0,    0,  622,    0,    0,    0,    0,
         0,    0,   48,    0,    0,    0,    0,    0,  163,  186,
       242,    0,  292,    0,    0,    0,  408,  442,  491,  504,
 
@@ -677,137 +677,135 @@ static yyconst flex_int16_t yy_accept[3906] =
       393,    0,  379,  378,  393,  393,    0,    0,    0,    0,
       243,  409,  443,  425,  425,  425,  425,    0,  469,    0,
         0,  469,    0,  486,    0,  487,  499,    0,    0,  506,
-      505,    0,    0,  518,    0,  514,  513,    0,    0,    0,
-      537,    0,    0,  552,    0,    0,  553,    0,    0,    0,
+      505,    0,    0,    0,  512,  511,    0,    0,    0,    0,
+        0,  548,    0,    0,  549,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  614,  613,    0,  616,  615,  626,    0,
-        0,    0,    0,    0,    0,    0,   48,   89,  101,    0,
-        0,    0,  163,  186,    0,  292,  329,    0,  397,  408,
-      504,    0,    0,    0,   47,  100,    0,    0,    0,  162,
-
-      185,    0,  291,  503,    0,    0,    0,   64,    0,  330,
-        0,    0,   85,   85,   85,   90,    0,  111,    0,  107,
-      106,    0,    0,    0,    0,    0,  173,  172,    0,  238,
-      238,  238,    0,  212,  211,  238,  238,  238,    0,    0,
-        0,    0,  250,  272,  272,  272,    0,    0,  325,    0,
-      311,  310,  325,  325,  325,  342,    0,    0,  368,  393,
-      393,  393,  398,    0,  400,  399,    0,  409,    0,    0,
-      425,  425,  425,    0,  469,    0,  461,  460,  469,    0,
-      470,  486,  499,    0,  500,    0,  508,  507,  518,    0,
-        0,  525,  524,  537,    0,    0,  552,  642,    0,  558,
-
-      557,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  626,    0,    0,    0,    0,
+        0,  610,  609,    0,  612,  611,  622,    0,    0,    0,
+        0,    0,    0,    0,   48,   89,  101,    0,    0,    0,
+      163,  186,    0,  292,  329,    0,  397,  408,  504,    0,
+        0,    0,   47,  100,    0,    0,    0,  162,  185,    0,
+
+      291,  503,    0,    0,    0,   64,    0,  330,    0,    0,
+       85,   85,   85,   90,    0,  111,    0,  107,  106,    0,
+        0,    0,    0,    0,  173,  172,    0,  238,  238,  238,
+        0,  212,  211,  238,  238,  238,    0,    0,    0,    0,
+      250,  272,  272,  272,    0,    0,  325,    0,  311,  310,
+      325,  325,  325,  342,    0,    0,  368,  393,  393,  393,
+      398,    0,  400,  399,    0,  409,    0,    0,  425,  425,
+      425,    0,  469,    0,  461,  460,  469,    0,  470,  486,
+      499,    0,  500,    0,  508,  507,    0,    0,  523,  522,
+        0,    0,  548,  638,    0,  554,  553,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       89,  101,    0,    0,    0,  277,  329,    0,  397,    0,
-        0,  610,  100,    0,    0,    0,  276,    0,    0,  609,
-       64,    0,   65,  330,    0,   71,   70,    0,    0,   85,
-       85,   90,    0,    0,    0,    0,    0,    0,    0,    0,
-      182,  238,  238,  238,  238,    0,    0,  238,  238,    0,
-        0,    0,    0,  239,  272,  272,  272,    0,    0,  299,
-        0,    0,  325,  325,  325,  325,    0,    0,    0,    0,
-
-        0,    0,  393,  393,  393,  398,    0,    0,  411,  410,
-        0,    0,  425,  425,    0,  426,    0,    0,  469,  486,
-      499,  518,    0,  519,  537,    0,    0,  552,    0,    0,
+        0,  622,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   89,  101,    0,    0,
+        0,  277,  329,    0,  397,    0,    0,  606,  100,    0,
+        0,    0,  276,    0,    0,  605,   64,    0,   65,  330,
+        0,   71,   70,    0,    0,   85,   85,   90,    0,    0,
+        0,    0,    0,    0,    0,    0,  182,  238,  238,  238,
+      238,    0,    0,  238,  238,    0,    0,    0,    0,  239,
+      272,  272,  272,    0,    0,  299,    0,    0,  325,  325,
+      325,  325,    0,    0,    0,    0,    0,    0,  393,  393,
+
+      393,  398,    0,    0,  411,  410,    0,    0,  425,  425,
+        0,  426,    0,    0,  469,  486,  499,    0,  517,    0,
+        0,  548,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  626,
+        0,    0,    0,  622,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  277,
-      346,    0,    0,  610,    0,    0,    0,  276,    0,    0,
-      609,   64,    0,   75,   74,    0,    0,    0,    0,    0,
-       97,    0,  103,  102,    0,  112,    0,    0,    0,  238,
-
-      238,  238,  238,    0,  214,  213,  238,  238,    0,    0,
-        0,    0,    0,    0,  272,  272,    0,    0,    0,    0,
-      305,  304,  325,  325,  325,    0,    0,    0,    0,    0,
-        0,  343,    0,    0,  364,  363,  393,  393,    0,    0,
-        0,  405,    0,  415,  414,    0,    0,    0,    0,    0,
-        0,    0,  469,  486,  499,  518,  537,    0,  347,  552,
+        0,    0,    0,  277,  346,    0,    0,  606,    0,    0,
+        0,  276,    0,    0,  605,   64,    0,   75,   74,    0,
+        0,    0,    0,    0,   97,    0,  103,  102,    0,  112,
+        0,    0,    0,  238,  238,  238,  238,    0,  214,  213,
+
+      238,  238,    0,    0,    0,    0,    0,    0,  272,  272,
+        0,    0,    0,    0,  305,  304,  325,  325,  325,    0,
+        0,    0,    0,    0,    0,  343,    0,    0,  364,  363,
+      393,  393,    0,    0,    0,  405,    0,  415,  414,    0,
+        0,    0,    0,    0,    0,    0,  469,  486,  499,    0,
+      347,  548,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  622,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  626,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  133,    0,  346,    0,    0,    0,  132,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   81,
+       80,    0,    0,    0,  238,  238,    0,    0,  238,  238,
+      238,    0,    0,    0,    0,    0,    0,    0,    0,  272,
+        0,    0,    0,  268,  267,    0,  288,  325,  325,  325,
+        0,  321,  320,    0,    0,    0,    0,    0,    0,    0,
+      393,    0,    0,    0,  389,  388,    0,    0,    0,    0,
+      421,  420,    0,    0,    0,    0,    0,    0,  469,    0,
+        0,    0,    0,    0,  347,    0,    0,    0,    0,    0,
+        0,  558,    0,    0,    0,    0,  557,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-        0,  133,    0,  346,    0,    0,    0,  132,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   81,   80,    0,
-        0,    0,  238,  238,    0,    0,  238,  238,  238,    0,
-        0,    0,    0,    0,    0,    0,    0,  272,    0,    0,
-        0,  268,  267,    0,  288,  325,  325,  325,    0,  321,
-      320,    0,    0,    0,    0,    0,    0,    0,  393,    0,
-        0,    0,  389,  388,    0,    0,    0,    0,  421,  420,
-        0,    0,    0,    0,    0,    0,  469,    0,    0,    0,
-        0,  518,  537,    0,  347,    0,    0,    0,    0,    0,
-        0,  562,    0,    0,    0,    0,  561,    0,    0,    0,
-
+        0,    0,    0,  623,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  627,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      133,    0,  523,    0,    0,  132,    0,  522,    0,    0,
+      133,    0,  521,    0,    0,  132,    0,  520,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,  238,
         0,    0,    0,  206,  205,    0,    0,  238,  238,    0,
         0,    0,    0,    0,    0,    0,    0,  272,    0,  258,
       257,  325,    0,    0,  325,    0,    0,    0,    0,    0,
         0,    0,  356,  393,    0,  381,  380,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,  469,
+        0,    0,    0,    0,  493,  492,    0,    0,  544,  543,
 
-        0,    0,    0,    0,  493,  492,    0,    0,    0,    0,
-        0,    0,  548,  547,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   21,   29,    0,    0,    0,
-        0,   20,   28,    0,  116,    0,  523,  556,  115,    0,
-      522,  555,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  142,    0,  238,    0,  204,  203,    0,  208,
-      207,  238,  238,    0,    0,    0,    0,    0,    0,    0,
-        0,  272,  325,    0,  313,  312,  325,    0,    0,  332,
-
-        0,    0,  331,  393,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,  510,  509,    0,  527,  526,    0,    0,
-        0,  568,    0,    0,    0,  567,    0,    0,    0,    0,
-        0,  583,  591,    0,    0,    0,    0,  582,  590,    0,
+        0,   21,   29,    0,    0,    0,    0,   20,   28,    0,
+      116,    0,  521,  552,  115,    0,  520,  551,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  142,    0,
+      238,    0,  204,  203,    0,  208,  207,  238,  238,    0,
+        0,    0,    0,    0,    0,    0,    0,  272,  325,    0,
+      313,  312,  325,    0,    0,  332,    0,    0,  331,  393,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  564,    0,    0,    0,  563,    0,    0,    0,    0,
+        0,  579,  587,    0,    0,    0,    0,  578,  586,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,   23,    0,    0,    0,   22,    0,  116,    0,
-      556,  115,    0,  555,    0,    0,    0,    0,    0,    0,
+      552,  115,    0,  551,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,  238,    0,    0,  238,    0,    0,
       228,    0,    0,    0,  227,    0,  272,    0,    0,    0,
-
         0,    0,    0,    0,    0,  393,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,  465,
-      464,    0,    0,    0,    0,    0,  538,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  585,    0,    0,    0,
-      584,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
+      464,    0,    0,    0,    0,    0,  534,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  581,    0,    0,    0,
+      580,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,  146,  145,
        60,    0,   59,    0,   77,    0,   76,    0,    0,  129,
         0,  238,    0,    0,    0,    0,    0,    0,    0,  230,
         0,    0,  229,  272,    0,  307,  306,    0,    0,    0,
       334,  336,  333,  335,  393,  417,    0,  416,    0,    0,
-
       451,  447,    0,    0,  450,  446,    0,  482,    0,  481,
-        0,  566,    0,    0,  565,    0,    0,    0,  575,    0,
-        0,    0,    0,    0,    0,  622,    0,  621,    0,    0,
+        0,  562,    0,    0,  561,    0,    0,    0,  571,    0,
+
+        0,    0,    0,    0,    0,  618,    0,  617,    0,    0,
         0,    0,   12,    0,   12,    0,   33,    0,    0,    0,
         0,   31,   32,    0,    0,    0,    0,   30,  146,  145,
        58,   57,    0,    0,    0,  238,    0,    0,    0,    0,
         0,  226,  225,    0,    0,    0,    0,  272,    0,    0,
         0,    0,  393,    0,    0,    0,    0,    0,    0,  480,
-      479,  560,  564,  559,  563,  595,    0,    0,    0,    0,
-      593,  594,    0,    0,    0,    0,  592,  620,  619,    0,
-
+      479,  556,  560,  555,  559,  591,    0,    0,    0,    0,
+      589,  590,    0,    0,    0,    0,  588,  616,  615,    0,
         0,    0,    0,    0,    0,    0,    0,   25,    0,    0,
         0,    0,   24,    0,    0,    0,    0,  159,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  587,
-        0,    0,    0,    0,  586,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  583,
+        0,    0,    0,    0,  582,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,  232,    0,
       231,    0,  256,  255,    0,    0,    0,    0,    0,    0,
         0,  375,  374,    0,    0,  445,    0,  444,    0,    0,
-
         0,    0,    0,    0,    0,    0,    0,    0,   11,    0,
         0,    0,    0,    0,    0,    0,    0,   79,   78,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,  234,
       233,    0,    0,    0,    0,    0,    0,  419,  418,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -816,20 +814,20 @@ static yyconst flex_int16_t yy_accept[3906] =
         0,    0,    0,    0,  449,  448,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,   35,    0,    0,
         0,   34,    0,    0,    0,    0,    0,    0,    0,    0,
-
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  597,    0,    0,    0,  596,    0,    0,    0,    0,
+        0,  593,    0,    0,    0,  592,    0,    0,    0,    0,
+
        27,    0,    0,   26,    0,    0,    0,    0,    0,    0,
       216,    0,    0,  215,    0,    0,  315,    0,    0,  314,
-        0,    0,  589,    0,    0,  588,    0,    0,   37,    0,
+        0,    0,  585,    0,    0,  584,    0,    0,   37,    0,
        36,    0,    0,    0,    0,  220,    0,  219,    0,  317,
-        0,  316,    0,    0,  599,    0,  598,    0,    0,    0,
+        0,  316,    0,    0,  595,    0,  594,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,   39,   38,    0,  192,    0,  191,    0,    0,    0,
-        0,  601,  600,    0,    0,  194,  193,  218,  217,  319,
-
+        0,  597,  596,    0,    0,  194,  193,  218,  217,  319,
       318,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
@@ -838,7 +836,6 @@ static yyconst flex_int16_t yy_accept[3906] =
         0,    0,    0,    0,    0,    0,    0,    0,    0,    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
     } ;
 
@@ -886,7 +883,7 @@ static yyconst YY_CHAR yy_meta[76] =
         5,    5,    5,    5,    5
     } ;
 
-static yyconst flex_uint16_t yy_base[4472] =
+static yyconst flex_uint16_t yy_base[4438] =
     {   0,
         0,    0,    0,    3,    6,    9,   12,   29,   16,   19,
        14,   17,   33,   36,   49,   55,   45,   61,  109,  176,
@@ -919,970 +916,962 @@ static yyconst flex_uint16_t yy_base[4472] =
      2548, 2552, 2609, 2612, 2615, 2620, 2677, 2680, 2683, 2688,
      2705, 2708, 2748, 2751, 2754, 2759, 2776, 2779, 4141, 4209,
      2819, 2822, 2825, 2830, 2847, 2887, 2890, 2893,    0,    0,
-    10406,13997,13997,   96,  100,   29,   41,13997,  103,   51,
-
-    13997,13997,10395,13997,13997,10380,13997,10395,10395,  674,
-    13997,13997,13997,13997,10389,10389,10343,13997,  160,10366,
-        0,   87,13997,10332,10320,13997,  166, 4273,10314, 4344,
-     2906, 1200,10366,   31,13997,  169,10357,    0,  120,13997,
-    10304,10299,   21,13997,  256,  154,   84,  153,13997,  261,
-    10350,    0,  211,13997,10295,10300,10305,10295,10288,13997,
-      264,   16,10306,  237,13997,  326,10331,    0,  248,13997,
-    10300,13997,  329,  305,13997,  332,10329,    0,  282,13997,
-    10294,10290,10292,13997,  394,  373,13997,  397,10317,    0,
-      350,13997,10268,10263,10263,13997,  400,  453,  249,13997,
-
-      466,10309,    0,  418,13997,10260,10256,13997,  534,  521,
-      381,13997,  597,10302,    0,  439,13997,10253,10244,10248,
-    13997,  600,  595,  426,13997,  668,10294,    0,  442,13997,
-    10237,10255,10257,10235,10251,   81,13997,  671,  716,13997,
-      674,10280,    0,  445,13997,  141, 9610, 9620,   90, 9604,
-       27,  450, 9606,13997,  796, 9657,  441,13997,  799, 9648,
-        0,  507,13997, 9614,13997,  862, 9654,  509,13997,  865,
-     9645,    0,  554,13997, 9592, 9598, 9607, 9584,  242,13997,
-      868,  313, 9589,  594,13997,  930, 9621,    0,  584,13997,
-     9576, 9585, 9568,13997,  933,  784,13997,  936, 9612,    0,
-
-      625,13997, 9568,13997,  995, 2911, 9612,  713,13997,  998,
-     9603,    0,  696,13997, 9571, 9563, 9565,  164,13997, 1001,
-     9597,  726,13997, 1004, 9588,    0,  818,13997, 9540, 9544,
-    13997, 1063,  841,13997, 1066, 9575,    0,  886,13997, 9534,
-     9536,13997, 1069,  909,13997, 1072, 9564,    0,  954,13997,
-     9531, 9507,13997, 1134, 1113,13997, 1137, 9555,    0, 1022,
-    13997, 9498, 9496, 9499, 9509, 9501,  514,13997, 1140, 1181,
-     1187,13997, 1202, 9530,    0, 1090,13997, 9487,13997, 1207,
-     1534,  664, 1203,  727,  677,  773,13997, 1275, 9512,    0,
-     1158,13997, 9461, 9459, 9464, 9457, 9446,13997, 1333,  258,
-
-      917,13997, 1336, 9494,    0, 1226,13997, 9455, 9447,13997,
-     1343, 1321,13997, 1402, 9476,    0, 1253,13997, 9430, 9427,
-     1265, 9427,  920,13997, 1411, 1389,13997, 1471, 9455,    0,
-     1362,13997, 9403,  583,13997, 1480, 1395, 1045,13997, 1537,
-     9449,    0, 1431,13997, 9404, 9413,13997, 1540, 1458,13997,
-     1600, 9429,    0, 1500,13997, 9379, 9373, 9380, 9357,13997,
-     1656, 9418, 1189,13997, 1662, 9408,    0, 1524,13997, 9361,
-     9370, 9355, 9348,13997, 1665,  449, 9343, 1195,13997, 1724,
-     9383,    0, 1558,13997, 9340, 9344, 9341, 1775, 9332,13997,
-     1730, 9345,    0, 1616,13997, 9302, 9304, 9292,13997, 1733,
-
-     1845,13997, 1798, 9338,    0, 1640,13997, 9303, 9287,13997,
-     1801, 4415, 9285, 2977, 1234,13997, 1806, 9318,    0, 1651,
-    13997, 9265, 9249,  776,13997, 1868, 1522, 1249, 1871, 1247,
-     9240,13997, 9301, 9290,13997,13997,13997, 1973,   90, 9239,
-     9228, 9216, 9265,13997,    0, 2555, 9213, 9256, 9238, 1276,
-      332,  320, 9210, 9209, 9213, 9205, 1651,  467, 9198, 9199,
-     9200, 1859, 9211,  712,  856, 9185, 9184, 9183, 1914,  797,
-     9169, 9165, 9166, 9187,  732, 1969,  992, 9156,  868, 1069,
-    13997,    0, 9145, 9164, 9159, 9138, 9177, 9139,13997,    0,
-     9129, 9123, 9128, 9139, 9136, 9134, 1330,13997,    0, 9122,
-
-     9131,13997,    0, 9098, 2897, 9091, 9092,13997,    0, 9071,
-     9090, 9085, 9085,13997,    0, 9065, 9070, 9070,13997,    0,
-     9046, 9061, 9057, 9048,13997,    0, 2900, 2958, 9029, 9034,
-     9034, 9031, 9022, 9022,13997,    0, 9020, 3028, 9001, 3031,
-     8993, 8995, 8992, 9000, 8993, 8975, 8992, 8987, 8984, 8973,
-     8984,13997,    0, 3036, 8975,13997,    0, 8975,  177, 3054,
-     8951, 8965, 8967, 8952, 8944,13997,    0, 8934, 3057, 3097,
-     8944,13997,    0, 8938, 8940, 8957, 8929,13997,    0, 8928,
-     3100, 8905, 8923, 8921, 8909,13997,    0, 8901, 3103, 8884,
-    13997,    0, 3107, 8883, 8880,13997,    0, 8878, 8871, 8872,
-
-    13997,    0, 8882, 8871, 8855, 3110, 8844, 8857, 8860, 8843,
-     8829,13997,    0, 8822, 8814, 1341, 1401, 1980, 1416, 1528,
-     1983,13997,    0, 8815, 8808, 8807, 8818, 8815, 8795,13997,
-        0, 3165, 8798, 8792,13997,    0, 8789, 3168, 8772, 8793,
-     8779, 8787, 8775, 8775, 8759,13997,    0, 8756, 8770, 8759,
-     8752,13997,    0, 8742, 3171, 8731,13997,    0, 8727, 8722,
-     3175, 8719, 8712,13997,    0, 8710, 3178, 8719, 8679, 8685,
-     8687,13997,    0, 8689, 3233, 8681,   13, 8673, 8720,13997,
-        0, 8681, 8671, 8682, 8655,13997,    0, 3236, 8653, 8643,
-    13997,    0, 8648, 8656, 8644, 8633, 8618, 8672, 8665, 1693,
-
-     8612,13997, 1918,    0, 8607, 8603, 8649, 8647, 8599,13997,
-     3239, 2109, 8588, 2964, 3301, 2052, 8586, 8598, 8597, 8583,
-     8591, 8567, 8573, 8557, 8571, 8552, 1406, 8560, 8562, 8543,
-     8543, 8534, 8529, 8540, 8522, 8520, 2175, 8526, 8508, 8521,
-     8499, 8500, 8514, 8502, 8509, 8488, 8493, 8501, 8487, 2233,
-     8478, 8474, 8465, 3243, 3312, 3246, 3316, 3304, 3307, 8471,
-     8480, 8460, 8446, 8449, 8432, 3369, 3379, 8440, 8415, 3372,
-     3382, 8431, 3431, 2301, 8425, 3436, 3440, 3443, 3497, 3485,
+    10364,13842,13842,   96,  100,   29,   41,13842,  103,   51,
+
+    13842,13842,10353,13842,13842,10338,13842,10353,10353,  674,
+    13842,13842,13842,13842,10347,10347,10301,13842,  160,10324,
+        0,   87,13842,10290,10278,13842,  166, 4273,10272, 4344,
+     2906, 1200,10324,   31,13842,  169,10315,    0,  120,13842,
+    10262,10257,   21,13842,  256,  154,   84,  153,13842,  261,
+    10308,    0,  211,13842,10253,10258,10263,10253,10246,13842,
+      264,   16,10264,  237,13842,  326,10289,    0,  248,13842,
+    10258,13842,  329,  305,13842,  332,10287,    0,  282,13842,
+    10252,10248,10250,13842,  394,  373,13842,  397,10275,    0,
+      350,13842,10226,10221,10221,13842,  400,  453,  249,13842,
+
+      466,10267,    0,  418,13842,10218,10214,13842,  534,  521,
+      381,13842,  597,10260,    0,  439,13842,10211,10202,10206,
+    13842,  600,  595,  426,13842,  668,10252,    0,  442,13842,
+    10195,10213,10215,10193,10209,   81,13842,  671,  716,13842,
+      674,10238,    0,  445,13842,  141,10189,10199,   90,10184,
+       27,  450, 9561,13842,  796, 9612,  441,13842,  799, 9602,
+        0,  507,13842, 9568,13842,  862, 9608,  509,13842,  865,
+     9599,    0,  554,13842, 9547, 9553, 9563, 9546,  242,13842,
+      868,  313, 9551,  594,13842,  930, 9591,    0,  584,13842,
+     9539, 9549, 9535,13842,  933,  784,13842,  936, 9571,    0,
+
+      625,13842, 9531,13842,  995, 2911, 9572,  713,13842,  998,
+     9563,    0,  696,13842, 9531, 9523, 9525,  164,13842, 1001,
+     9556,  726,13842, 1004, 9547,    0,  818,13842, 9507, 9511,
+    13842, 1063,  841,13842, 1066, 9530,    0,  886,13842, 9496,
+     9497,13842, 1069,  909,13842, 1072, 9518,    0,  954,13842,
+     9486, 9463,13842, 1134, 1113,13842, 1137, 9510,    0, 1022,
+    13842, 9458, 9455, 9462, 9467, 9469,  514,13842, 1140, 1181,
+     1187,13842, 1202, 9497,    0, 1090,13842, 9462,13842, 1207,
+     1534,  664, 1203,  727,  677,  773,13842, 1275, 9479,    0,
+     1158,13842, 9427, 9430, 9433, 9426, 9401,13842, 1333,  258,
+
+      917,13842, 1336, 9449,    0, 1226,13842, 9414, 9412,13842,
+     1343, 1321,13842, 1402, 9441,    0, 1253,13842, 9405, 9400,
+     1265, 9401,  920,13842, 1411, 1389,13842, 1471, 9427,    0,
+     1362,13842, 9368,  583,13842, 1480, 1395, 1045,13842, 1537,
+     9415,    0, 1431,13842, 9355, 9365,13842, 1540, 1458,13842,
+     1600, 9396,    0, 1500,13842, 9342, 9346, 9355, 9319,13842,
+     1656, 9376, 1189,13842, 1662, 9367,    0, 1524,13842, 9312,
+     9322, 9309, 9314,13842, 1665,  449, 9303, 1195,13842, 1724,
+     9344,    0, 1558,13842, 9304, 9301, 9299, 1775, 9303,13842,
+     1730, 9330,    0, 1616,13842, 9287, 9276, 9266,13842, 1733,
+
+     1845,13842, 1798, 9297,    0, 1640,13842, 9263, 9249,13842,
+     1801, 4415, 9246, 2977, 1234,13842, 1806, 9286,    0, 1651,
+    13842, 9237, 9231,  776,13842, 1868, 1522, 1249, 1871, 1247,
+     9218,13842, 9280, 9268,13842,13842,13842, 1973,   90, 9217,
+     9216, 9200, 9248,13842,    0, 2555, 9197, 9243, 9224, 1276,
+      332,  320, 9198, 9197, 9182, 9175, 1651,  467, 9162, 9155,
+     9156, 1859, 9180,  712,  856, 9142, 9142, 9145, 1914,  797,
+     9133, 9129, 9130, 9151,  732, 1969,  992, 9120,  868, 1069,
+    13842,    0, 9109, 9128, 9123, 9102, 9141, 9103,13842,    0,
+     9093, 9087, 9092, 9103, 9100, 9098, 1330,13842,    0, 9086,
+
+     9095,13842,    0, 9062, 2897, 9055, 9056,13842,    0, 9035,
+     9054, 9049, 9049,13842,    0, 9029, 9034, 9034,13842,    0,
+     9010, 9025, 9021, 9020,13842,    0, 2900, 2958, 8994, 9006,
+     9002, 9000, 8993, 8991,13842,    0, 8993, 3028, 8973, 3031,
+     8963, 8969, 8964, 8973, 8972, 8954, 8972, 8959, 8956, 8941,
+     8953,13842,    0, 3036, 8951,13842,    0, 8945,  177, 3054,
+     8925, 8938, 8937, 8928, 8920,13842,    0, 8910, 3057, 3097,
+     8922,13842,    0, 8916, 8901, 8918, 8889,13842,    0, 8888,
+     3100, 8875, 8880, 8875, 8862,13842,    0, 8855, 3103, 8859,
+    13842,    0, 3107, 8851, 8849,13842,    0, 8843, 8840, 8840,
+
+    13842,    0, 8837, 8837, 8812, 3110, 8806, 8819, 8815, 8799,
+     8801,13842,    0, 8790, 8791, 1341, 1401, 1980, 1416, 1528,
+     1983,13842,    0, 8791, 8781, 8781, 8791, 8789, 8772,13842,
+        0, 3165, 8765, 8760,13842,    0, 8760, 3168, 8749, 8769,
+     8755, 8763, 8749, 8742, 8726,13842,    0, 8713, 8729, 8715,
+     8703,13842,    0, 8705, 3171, 8684,13842,    0, 8681, 8685,
+     3175, 8682, 8677,13842,    0, 8676, 3178, 8684, 8657, 8663,
+     8665,13842,    0, 8660, 3233, 8653,   13, 8646, 8694,13842,
+        0, 8648, 8630, 8642, 8621,13842,    0, 3236, 8619, 8597,
+    13842,    0, 8602, 8620, 8612, 8601, 8586, 8640, 8644, 1693,
+
+     8590,13842, 1918,    0, 8586, 8582, 8628, 8622, 8570,13842,
+     3239, 2109, 8564, 2964, 3301, 2052, 8553, 8564, 8560, 8546,
+     8558, 8534, 8540, 8533, 8538, 8524, 1406, 8528, 8531, 8511,
+     8507, 8499, 8502, 8515, 8500, 8498, 2175, 8508, 8490, 8503,
+     8478, 8479, 8493, 8471, 8478, 8461, 8465, 8476, 8441, 2233,
+     8431, 8433, 8423, 3243, 3312, 3246, 3316, 3304, 3307, 8419,
+     8429, 8407, 8414, 8410, 8397, 3369, 3379, 8406, 8378, 3372,
+     3382, 8394, 3431, 2301, 8384, 3436, 3440, 3443, 3497, 3485,
      3489, 3494, 3503, 3554, 3557, 3560, 3568, 3572, 3624, 3627,
      3633, 3691, 2372, 3694, 2436, 3697, 3718, 3762, 3772, 3776,
 
-     3642, 3780, 1866, 3766, 2505, 8424, 3825, 2574, 3830, 8410,
-     8402, 8410, 8393, 8381, 8374, 8386, 8375, 8364, 3833, 3836,
-     3839, 2640, 3843, 3890, 8369, 8355, 8367, 3896, 2711, 8364,
-     8355, 8339, 3899, 3902, 1687, 8343, 3905, 2782, 3909, 2988,
-     3958, 3967, 8351, 3961, 3970, 2584, 8337, 8335, 3980, 3063,
-     8333, 8309, 8305, 3973, 4032, 8316, 4037, 3128, 4040, 4043,
-     4047, 3196, 8288, 4094, 4100, 8301, 8283, 4103, 4106, 8291,
-      385, 8277, 4109, 3265, 4114, 8289, 8268, 4163, 4171, 8286,
-     8266, 4175, 4178, 8254, 8259, 8251, 8250, 8258, 8240, 8224,
-     8229, 8215, 4182, 4229, 4232, 3335, 8207, 4238, 4241, 8222,
-
-     4244, 3522, 4250, 8211, 4264, 8211, 8214, 8217, 4268, 4271,
-     4278, 4296, 4299, 4302, 4307, 8197, 4310, 3591, 4342, 4350,
-     8213, 8192, 4353, 3654, 8206, 4356, 4365, 8189, 4371, 3700,
-     8203, 8182, 4377, 4380, 1725, 8180, 4384, 3722, 8175, 8207,
-     4413, 4419,13997, 8168, 8170, 8153, 4422, 4426, 4389, 3928,
-     8129, 4441, 4448, 4451, 4455, 4460, 4485, 4493, 4496, 8176,
-    13997,13997,  721, 8130,13997, 8173, 8171, 8090,13997,13997,
-     8088, 4055,13997,13997, 8090, 4499, 4507,13997, 4518, 1876,
-     8075, 8074, 8063, 8066, 8074, 8053, 8042, 8053, 8031, 8038,
-     8037, 8042, 8026, 8020, 8017,  477, 8028, 8011, 8011, 8021,
-
-     8012, 1721, 2119, 7972, 7974, 7983, 7957, 7945, 7937, 7943,
-     7932, 7919, 7916, 7916, 7930, 7926, 7908, 7922, 7905, 4522,
-     4197, 7905, 7889, 4526, 4530, 7901, 4546, 4549,13997, 4552,
-     7893, 7881, 4540, 7899, 7893, 7862, 4559, 4571,13997, 4574,
-     7854, 7864, 4578, 4581,13997, 4584, 7839, 4593,13997,13997,
-     7843, 4603, 4606,13997, 4609, 4612, 4618, 7832, 7831, 4630,
-     4633, 4642, 4648,13997, 4651, 4654, 4661, 4672, 4675, 4683,
-     4686,13997, 4690, 4693, 4696, 7827, 7820, 4705, 4711, 4719,
-     4723,13997, 4726, 4729,13997,13997, 4738,13997,13997, 4746,
-     4750, 7821, 7811, 7795, 7789, 4758, 4764,13997, 4767, 7773,
-
-     7772, 7762, 4770,13997,13997, 4778, 4786,13997,13997, 4796,
-     4799, 7734, 7698, 7676, 7679, 7672, 7649, 7653, 7641, 1129,
-     4807, 4810,13997, 4817, 4820,13997,13997, 4829, 4832,13997,
-     4836, 7611, 7598, 4839, 4842,13997,13997, 7557, 7481, 7473,
-     4851, 4857,13997, 4860, 7460, 4863, 4866,13997,13997, 4882,
-    13997,13997, 4890, 4893,13997, 4898, 4901, 4904, 4912,13997,
-     4919, 7452, 7365, 4927,13997,13997, 7351, 7354, 7317, 4923,
-     4938,13997, 4942, 7309, 4945,13997,13997, 4953, 4957,13997,
-     4961, 4966,13997,13997, 7220, 4976, 4980,13997, 4983, 4987,
-     4990, 4995, 5008,13997, 5014, 7142, 7066, 7035, 6932, 5017,
-
-    13997,13997, 5027, 5035, 6892, 6885, 5045, 5048,13997, 5051,
-     6810,   13, 5054, 5057,13997, 5060,   25,  119, 1732,  197,
-      244, 5079,  267,  288,  307, 5083, 5086,13997, 5089, 5093,
-    13997,13997,  325, 5109, 5112,13997, 5115,  385, 5118,13997,
-    13997, 5135, 5138, 5146, 5153, 5157,  420, 5165,  421, 5171,
-     5174,13997, 5178, 5183, 5186, 5197, 5201,  480, 5209, 5215,
-    13997, 5218,  487, 5221,13997,13997, 5229, 5240,13997, 5243,
-      528,  531, 5248,13997,13997,  558, 5262, 5265,13997, 5269,
-      554, 5272,13997,13997,  549, 5288, 5291, 5294,13997, 5297,
-      557, 5300, 5306,13997,13997, 5318,  588, 5321, 5324,13997,
-
-     5327,  591, 5332,  597, 5336, 5346,13997, 5350, 5356,13997,
-    13997,  595, 5365, 5369,13997, 5372, 5376, 5384,  586,  612,
-     5394, 5399,  628, 5407, 5412,13997, 5416, 1309, 5419,13997,
-    13997,  667,  705,  681, 5422,13997,  713,  721,  782,  798,
+     3642, 3780, 1866, 3766, 2505, 8383, 3825, 2574, 3830, 8369,
+     8360, 8369, 8361, 8349, 8344, 8352, 8350, 8339, 3833, 3836,
+     3839, 2640, 3843, 3890, 8344, 8330, 8331, 3896, 2711, 8334,
+     8319, 8302, 3899, 3902, 1687, 8304, 3905, 2782, 3909, 2988,
+     3958, 3967, 8301, 3961, 3970, 2584, 8289, 8294, 3980, 3063,
+     8292, 8274, 8271, 3973, 4032, 8280, 4037, 3128, 4040, 4043,
+     4047, 3196, 8263, 4094, 4100, 8277, 8253, 4103, 4106, 8261,
+      385, 8245, 4109, 3265, 4114, 8256, 8238, 4163, 4171, 8256,
+     8214, 4175, 4178, 8212, 8216, 8210, 8210, 8219, 8197, 8203,
+     8208, 8194, 4182, 4229, 4232, 3335, 8190, 4238, 4241, 8204,
+
+     4244, 3522, 4250, 8194, 4264, 8197, 8201, 8184, 4268, 4271,
+     4278, 4296, 4299, 4302, 4307, 8164, 4310, 3591, 4342, 4350,
+     8180, 8159, 4353, 3654, 8173, 4356, 4365, 8151, 4371, 3700,
+     8148, 8141, 4377, 4380, 1725, 8139, 4384, 3722, 8130, 8163,
+     4413, 4419,13842, 8123, 8102, 8102, 4422, 4426, 4389, 3928,
+     8076, 4441, 4448, 4451, 4455, 4460, 4485, 4493, 4496, 8116,
+    13842,13842,  721, 8074,13842, 8113, 8106, 8053,13842,13842,
+     8039, 4055,13842,13842, 8049, 4499, 4507,13842, 4518, 1876,
+     8041, 8033, 8026, 8034, 8043, 8028, 8016, 8028, 8009, 8016,
+     8015, 8016, 8000, 7966, 7962,  477, 7977, 7943, 7943, 7951,
+
+     7947, 1721, 2119, 7926, 7929, 7933, 7924, 7912, 7910, 7916,
+     7916, 7907, 7904, 7904, 7918, 7899, 7883, 7896, 7878, 4522,
+     4197, 7877, 7873, 4526, 4530, 7873, 4546, 4549,13842, 4552,
+     7861, 7846, 4540, 7859, 7853, 7828, 4559, 4571,13842, 4574,
+     7822, 7830, 4578, 4581,13842, 4584, 7804, 4593,13842,13842,
+     7797, 4603, 4606,13842, 4609, 4612, 4618, 7776, 7775, 4630,
+     4633, 4642, 4648,13842, 4651, 4654, 4661, 4672, 4675, 4683,
+     4686,13842, 4690, 4693, 4696, 7751, 7749, 4705, 4711, 4719,
+     4723,13842, 4726, 4729,13842,13842, 4738,13842,13842, 4746,
+     4750, 7742, 7694, 7686, 7673, 4758, 4764,13842, 4767, 7658,
+
+     7678, 7666, 4770,13842,13842, 4778, 4786,13842,13842, 4796,
+     4799, 7635, 7652, 7638, 7617, 7569, 7545, 7481, 7449, 1129,
+     4807, 4810,13842, 4817, 4820,13842,13842, 4829, 4832,13842,
+     4836, 7445, 7398, 4839, 4842,13842,13842, 7345, 7345, 7314,
+     4851, 4857,13842, 4860, 7295, 4863, 4866,13842,13842, 4882,
+    13842,13842, 4890, 4893,13842, 4898, 4901, 4904, 4912,13842,
+     4919, 7286, 7141, 4927,13842,13842, 7149, 7142, 7127, 4923,
+     4938,13842, 4942, 7116, 4945,13842,13842, 4953, 4957,13842,
+     4961, 4966,13842,13842, 7047, 4976, 4980,13842, 4983, 4987,
+     4990, 4995, 5008,13842, 5014, 7039, 7035, 6920, 6932, 5017,
+
+    13842,13842, 5027, 5035, 6892, 6885, 5045, 5048,13842, 5051,
+     6808,   13, 5054, 5057,13842, 5060,   25,  119, 1732,  197,
+      244, 5079,  267,  288,  307, 5083, 5086,13842, 5089, 5093,
+    13842,13842,  325, 5109, 5112,13842, 5115,  385, 5118,13842,
+    13842, 5135, 5138, 5146, 5153, 5157,  420, 5165,  421, 5171,
+     5174,13842, 5178, 5183, 5186, 5197, 5201,  480, 5209, 5215,
+    13842, 5218,  487, 5221,13842,13842, 5229, 5240,13842, 5243,
+      528,  531, 5248,13842,13842,  558, 5262, 5265,13842, 5269,
+      554, 5272,13842,13842,  549, 5288, 5291, 5294,13842, 5297,
+      557, 5300, 5306,13842,13842, 5318,  588, 5321, 5324,13842,
+
+     5327,  591, 5332,  597, 5336, 5346,13842, 5350, 5356,13842,
+    13842,  595, 5365, 5369,13842, 5372, 5376, 5384,  586,  612,
+     5394, 5399,  628, 5407, 5412,13842, 5416, 1309, 5419,13842,
+    13842,  667,  705,  681, 5422,13842,  713,  721,  782,  798,
       784,  811,  842,  854, 2179,  845, 2237,  918,  911, 2122,
       928,  931, 2515,  922,  934,  960,  993, 2650, 2858,  978,
       999,  983,  990,  985, 2999, 1008, 3139, 3206, 1061, 1066,
-     1067, 3274, 1068, 3391, 1070, 5441,13997,13997, 1077, 1131,
-     5449,13997,13997, 1115, 5426, 3402, 1129, 5457, 5460, 1120,
+     1067, 3274, 1068, 3391, 1070, 5441,13842,13842, 1077, 1131,
+     5449,13842,13842, 1115, 5426, 3402, 1129, 5457, 5460, 1120,
      1156, 1222, 5468, 1213, 5478, 5471, 1223, 1268, 5482, 5490,
 
-    13997,13997, 1253, 1273, 5501,13997,13997, 5509, 5512,13997,
-    13997, 5521,13997,13997, 5531, 5534,13997,13997, 1318, 1336,
-     5543,13997,13997, 5551, 5554,13997,13997, 1317, 1341, 5563,
-     1323, 5566, 5570, 5573, 5576, 5581, 5600, 5608,13997,13997,
+    13842,13842, 1253, 1273, 5501,13842,13842, 5509, 5512,13842,
+    13842, 5521,13842,13842, 5531, 5534,13842,13842, 1318, 1336,
+     5543,13842,13842, 5551, 5554,13842,13842, 1317, 1341, 5563,
+     1323, 5566, 5570, 5573, 5576, 5581, 5600, 5608,13842,13842,
      5594, 5616, 5619, 5625, 5628, 5637, 5648, 5651, 5655, 5658,
      5661, 5676, 1361, 1359, 5669, 5680, 1403, 5695, 1428, 5699,
      1417, 5702, 5706, 5714, 5723, 5734, 5742, 3992, 1462, 1473,
      1463, 1479, 5745, 1462, 5749, 5752, 5756, 5770, 5775, 1476,
-     5784, 1485, 5788, 1521, 1535, 5791,13997,13997, 5809, 1548,
+     5784, 1485, 5788, 1521, 1535, 5791,13842,13842, 5809, 1548,
      5812, 1543, 1536, 5815, 1569, 1583, 1588, 1580, 1589, 5818,
 
-     5821, 1579, 1592, 1602, 5836, 5839, 5842, 1612, 5846,13997,
-    13997, 5857, 5861, 5869,13997,13997, 1621, 5878, 5883, 1635,
-     5891, 5896,13997,13997, 5906,13997,13997, 1635, 5914, 1651,
+     5821, 1579, 1592, 1602, 5836, 5839, 5842, 1612, 5846,13842,
+    13842, 5857, 5861, 5869,13842,13842, 1621, 5878, 5883, 1635,
+     5891, 5896,13842,13842, 5906,13842,13842, 1635, 5914, 1651,
      5917, 1653, 1652, 1663, 5920, 1656, 5923, 5926, 5929, 5944,
      1663, 5947, 5950, 1677, 1717, 5958, 1709, 5965, 5968, 5977,
-     5986, 1714, 5989, 5995,13997,13997, 1712, 1731, 6010,13997,
-    13997, 1729, 6019, 1822, 1786, 6022,13997, 1807,13997,13997,
+     5986, 1714, 5989, 5995,13842,13842, 1712, 1731, 6010,13842,
+    13842, 1729, 6019, 1822, 1786, 6022,13842, 1807,13842,13842,
      1787, 1778, 3516, 1794, 1787, 1785, 1800, 1802, 1809, 3586,
      1807, 1823, 3664, 1845, 1863, 3732, 3759, 1854, 1853, 3786,
      1861, 3799, 1868, 3999, 3923, 1888, 4002, 1898, 1908, 1905,
 
      1922, 1924, 4065, 1918, 1929, 4068, 4127, 4503, 1933, 6025,
      4132, 1926, 6028, 6031, 6042, 6045, 6048, 6051, 1955, 1958,
-     6054,13997,13997, 1969, 1967, 1962, 6066, 1979, 6075, 6078,
+     6054,13842,13842, 1969, 1967, 1962, 6066, 1979, 6075, 6078,
      6086, 1990, 1971, 6098, 6101, 6105, 6108, 6123, 6127, 6132,
      6135, 6138, 6150, 6156, 6159, 6168, 6175, 6178, 6190, 6181,
-     6186, 6204,13997,13997, 6212, 6215, 6218, 6221, 6224, 6242,
+     6186, 6204,13842,13842, 6212, 6215, 6218, 6221, 6224, 6242,
      6245, 6248, 6256, 6266, 6274, 6284, 6287, 1997, 1988, 6293,
-    13997,13997, 6306, 6309, 6315, 1998, 6329, 4135, 6332,13997,
-    13997, 6340, 6348,13997,13997, 6344, 2004, 1984, 2019, 2035,
-     6359, 2033, 6363, 6366, 6369, 6378, 6384,13997,13997, 2041,
+    13842,13842, 6306, 6309, 6315, 1998, 6329, 4135, 6332,13842,
+    13842, 6340, 6348,13842,13842, 6344, 2004, 1984, 2019, 2035,
+     6359, 2033, 6363, 6366, 6369, 6378, 6384,13842,13842, 2041,
 
      6393, 2045, 6397, 6400, 6415, 2035, 6418, 6421, 2044, 6429,
-     2037, 2039, 6438, 6441, 2048, 2037, 2047, 2050, 6444,13997,
-    13997, 2058, 2082, 2089, 6452, 6457, 6461, 6471, 2090, 6475,
-    13997,13997, 2102, 6483,13997,13997, 2093, 6492, 2099, 6495,
+     2037, 2039, 6438, 6441, 2048, 2037, 2047, 2050, 6444,13842,
+    13842, 2058, 2082, 2089, 6452, 6457, 6461, 6471, 2090, 6475,
+    13842,13842, 2102, 6483,13842,13842, 2093, 6492, 2099, 6495,
      2104, 6498, 6501, 6505, 6519, 6523, 2100, 6526, 6530, 6538,
-    13997,13997, 6551, 2121, 6555,13997,13997, 2114, 2133, 6563,
+    13842,13842, 6551, 2121, 6555,13842,13842, 2114, 2133, 6563,
      2115, 6566, 3303, 3609, 6574, 6578, 6586, 2145, 6592, 6595,
-     6600, 6605, 6618, 2262, 2196, 2254,13997, 6623, 2163, 6626,
+     6600, 6605, 6618, 2262, 2196, 2254,13842, 6623, 2163, 6626,
      2158, 2159, 2308, 2155, 2158, 6629, 2169, 2176, 2162, 2210,
      6632, 2212, 2212, 6641, 6644, 6647, 2229, 6650, 2233, 2218,
 
      2235, 2239, 2379, 2237, 2244, 2255, 2291, 6655, 6658, 2296,
      6661, 2299, 2283, 6664, 6667, 6675, 6678, 2298, 6686, 2288,
-     2296, 2298, 2300, 2313, 6689, 2310, 6693,13997,13997, 6708,
+     2296, 2298, 2300, 2313, 6689, 2310, 6693,13842,13842, 6708,
      2308, 6701, 6711, 6714, 6720, 6732, 6735, 6743, 6746, 6750,
-     6755, 6768, 6774, 6782, 6786, 6789, 6797, 6804,13997,13997,
-     6815, 6818, 6826, 6829,13997,13997, 6837, 6845, 2321, 2333,
-     2324, 6840, 6858, 6866, 2358, 2372, 6869,13997,13997, 6879,
+     6755, 6768, 6774, 6782, 6786, 6789, 6797, 6804,13842,13842,
+     6815, 6818, 6826, 6829,13842,13842, 6837, 6845, 2321, 2333,
+     2324, 6840, 6858, 6866, 2358, 2372, 6869,13842,13842, 6879,
      6884, 2355, 2350, 6892, 6897, 2369, 2378, 6900, 6904, 6912,
-    13997,13997, 2372, 6920,13997, 6923, 6927, 6930, 2362, 6933,
-     2392, 2385, 6939,13997, 2380, 6952, 6958,13997,13997, 6966,
-
-     2416, 6971, 2389, 6975,13997,13997, 6990, 6993, 2399, 7004,
-    13997,13997, 2392, 7014,13997, 2385, 7017, 7020, 7023, 7026,
-     2401, 7029, 2421, 2423, 2419, 2432, 7035, 7039,13997,13997,
-     7047,13997, 2428, 7050, 2435, 7054, 2437, 7057, 2446, 7060,
-     7068, 7079, 7087, 7090, 7093, 7108, 7111, 7115,13997,13997,
-     7129, 2445, 2460, 2493, 7135, 7138, 2515, 2517, 2545, 2524,
-     2540, 2528, 2598, 2528, 7141,13997,13997, 7149, 7159, 7163,
-    13997, 7168, 7171, 7186, 7190, 2523, 7198, 2605, 2669, 2565,
-     7204, 7207, 7217, 2515, 2551, 2582, 2562, 2565, 7222, 7225,
-     7228, 2571, 7231, 2572, 2578, 2586, 7234, 7237, 7240, 7243,
-
-     2591, 2587, 7246, 2619, 2654, 2630, 2632, 7249, 7252, 2634,
-     7255, 7261, 7264, 2635, 2631, 7267,13997,13997, 7275,13997,
-    13997, 2650, 7283, 2640, 7286, 7291, 7295, 7298, 7304,13997,
-     2647, 7316, 2661, 7319, 7323, 7331, 7337,13997,13997, 7346,
-    13997,13997, 7354, 7361, 7364,13997,13997, 7380,13997,13997,
-     7388, 7394,13997,13997, 7402, 7407, 7416,13997,13997, 7424,
-     7427,13997,13997, 2656, 2661, 2675, 7436,13997,13997, 7444,
-     7447, 2672, 2662, 7455,13997,13997, 2694, 7463, 7466, 7469,
-     2698, 2691, 7472,13997,13997, 2703, 7481, 7488, 2708, 7492,
-     7496, 2712, 2703, 2709, 2708, 7510, 7515, 2720, 7518,13997,
-
-     2713, 7522,13997,13997, 2718, 2728, 2728, 7541, 7544, 7552,
-     7555, 7559, 7562, 7565, 7571, 7574, 7583, 7579, 2725, 7592,
-     7601, 2743, 7610, 2743, 7613,13997, 2727, 7618, 7625,13997,
-    13997, 7633, 7640, 2729, 7651,13997,13997, 7659, 7662, 7665,
-     2746, 7673, 2763, 2773, 2788, 7680,13997, 7683, 7686, 2801,
-     2799, 2799, 2806, 2816, 2809, 2806, 2812, 2818, 2829, 7694,
-     7701, 7706, 7715,13997,13997, 7726,13997,13997, 2805, 7734,
-     7737, 2846, 2838, 7741, 5101, 7353, 7749, 7756, 7759, 2797,
-     2813, 2835, 7762, 7765, 2847, 7768, 7771, 2845, 7774, 7777,
-     7780, 2843, 2850, 2863, 7783, 7786, 2853, 2851, 2862, 7789,
-
-     7792, 2866, 7795, 7798, 2860, 2867, 2878, 2884, 7803, 7806,
-     7809, 7812, 7822, 7827, 7830, 7833, 7836, 7840, 7848,13997,
-    13997, 7858, 7862, 7865, 7868, 7871,13997,13997, 7887, 2895,
-     2900, 2913, 7890,13997,13997, 7900, 2895, 2903, 7906, 7911,
-     7919, 7924,13997, 2912, 2918, 2924, 7931, 7934, 7938, 7943,
-    13997,13997, 7956, 7959, 7962, 7965, 7968, 7987, 7993, 2921,
-     2931, 2933, 7996, 7999,13997,13997, 8007, 8015, 8018, 8026,
-     8022, 8036, 8040, 8043, 8046, 8058,13997,13997, 8049, 8054,
-    13997, 2938, 2941, 8068,13997, 8073,13997,13997, 2922, 8081,
-     8089,13997,13997, 2924, 8100, 2936, 2935,13997, 8103,13997,
-
-    13997, 2980, 2982, 3003, 3004, 3011, 3016, 3003, 3019, 3017,
-     3025, 8111, 8119, 8092, 8105, 3012, 8133, 8139, 3055, 3103,
-     3002, 3010, 3057, 3006, 3013, 3013, 3035, 3115, 3051, 3059,
-     8142, 8148, 3056, 3052, 3074, 8152, 8158, 3071, 8161, 3064,
-     3077, 8164, 8167, 3119, 3117, 3135, 8170, 3117, 3132, 8174,
-     3135, 8177,13997, 8180, 8183,13997,13997, 8191, 8197, 8205,
-     8209, 8212, 8215, 8218, 8223, 8236, 8239, 8242, 8245, 8248,
-    13997, 3155, 3143, 3139, 3179, 8251, 8269, 3183, 3197, 8277,
-     3232, 3363, 8285,13997, 3184, 3186, 8288, 8291, 8294,13997,
-     8297, 8315, 3201, 3202, 3203, 8323, 8326, 8329, 8300, 8337,
-
-     8344, 8350, 3201, 3205, 8358, 8362, 8365, 8369,13997,13997,
-     8377, 8380, 8388, 8391, 8395,13997, 8400, 8414, 3217, 3218,
-     3212, 3232, 8409,13997, 3248, 8422, 3252, 3248, 3280, 3276,
-     3295, 3284, 3318, 3302, 3298, 3313, 3328, 3354, 8429, 3326,
-     3333, 3362, 3334, 3342, 3369, 3378, 3387, 3373, 3383, 3391,
-     8432, 3433, 3444, 3644, 3388, 3402, 3399, 3420, 3432, 3432,
-     3438, 3451, 3447, 3460, 3464, 3458, 3460, 3478, 3495, 8435,
-     8441, 3501, 3513, 8444, 3499, 3524, 3541, 8451, 3518, 3531,
-     8454, 8457, 8460,13997,13997, 8468, 8471, 8479, 8491, 8486,
-    13997, 8499,13997,13997, 8507,13997, 8510, 8513, 8516, 3531,
-
-     3538, 8519, 3530, 8522,13997,13997, 3543, 3533, 3581, 3619,
-     3597, 3601, 3637, 3613, 3580, 8537, 8540, 8543, 8551, 8558,
-    13997,13997, 3611, 3633, 3647, 8573, 8577, 8585, 4251, 4291,
-     8593,13997, 8596, 8599,13997,13997, 3637, 8607, 8615, 8618,
-     8626,13997, 8629,13997,13997, 8637, 8641, 8649, 8656, 8667,
-     3692, 3829, 3648, 8675, 8678, 3660, 3661, 8681, 8684, 8687,
-     3702, 3716, 3731, 3745, 3765, 3742, 3755, 3768, 3771, 3787,
-     8696, 3728, 3740, 3784, 3789, 3792, 3786, 3790, 3802, 3801,
-     3807, 3822, 3820, 8700, 8705, 3947, 3916, 3960, 3827, 3836,
-     3840, 3857, 3866, 3871, 3865, 3875, 3894, 3927, 3935, 3941,
-
-     3931, 8708, 3965, 8711, 3978, 3985, 3969, 8718, 3989, 4008,
-     4021, 8724, 8727, 8735, 4102, 4138, 8743,13997,13997, 8754,
-     8758, 8761, 4035, 8764, 8767, 8773, 8785, 4048, 4061, 4097,
-     4084, 4103, 4119, 4146, 4129, 4149, 4134, 4138, 8788, 8791,
-     8799,13997,13997, 8807,13997, 4129, 8811, 4140, 8814,13997,
-    13997, 4157, 4160, 4167, 4169, 4171, 4171, 8829, 4188, 8832,
-     8835, 8844,13997,13997, 8852, 4282, 4312, 8860,13997,13997,
-     4200, 4214, 4329, 4217, 4223, 4396, 4197, 8868, 8871, 8879,
-     8882, 8890, 8893, 8897, 8900, 8903, 8912, 4239, 4237, 4239,
-     4245,13997, 4264, 4248, 4248, 4275,13997, 8921, 4251, 4268,
-
-     4259, 4275, 4285, 4293, 4279, 4303, 4303, 4317, 4335, 4348,
-     8924, 8927, 8935,13997, 4379, 4384, 8944, 4338, 4342, 4379,
-     4429, 4432, 4380, 4378, 4388, 4407, 4460, 4462, 4414, 4424,
-     8947, 4411, 8950, 4416, 4437, 8954, 4422, 8957, 4425, 8963,
-     4522, 4523, 4484, 4489, 4487, 4492, 8974, 8977, 8980, 4470,
-     8983, 8986, 9001,13997,13997, 9009, 9012, 4461, 4470, 4512,
-     4497, 4524, 4524, 4543, 4540, 4550, 4551, 4538, 9020,13997,
-    13997, 4546, 9028, 9031, 4529, 4574, 4583, 4619, 4585, 4595,
-     4629, 9046,13997, 4586, 9049,13997,13997, 4617, 4622, 4629,
-     4634, 4644, 4634, 4637, 4652, 4660, 4648, 4666, 4676, 9057,
-
-     9061, 4740, 4748, 9069,13997,13997, 9077, 9080, 9088, 9091,
-     9099, 9102,13997,13997, 4671, 4696, 4713, 4712, 4696, 4715,
-     4736, 4729, 9110, 4688, 4690, 4710, 4758, 4771, 4725, 4725,
-     4728, 4751, 4797, 4798, 4755, 9114, 4812, 4838, 4854, 9122,
-     9125, 9129, 4763, 4756, 4822,13997,13997, 4797, 4822, 4809,
-     4870,13997,13997, 4828, 9144, 4820, 9148, 9152, 9155, 4821,
-     9161, 9164, 4862, 4885, 4876, 4891, 4893, 4895, 4909, 4898,
-     9167, 9170,13997, 9173, 4880, 9176,13997,13997, 9192,13997,
-    13997, 9200, 4882, 4916, 4913, 4961, 4935, 4940, 4948, 4986,
-     4962, 4944, 9203, 9206,13997,13997, 9214, 4969, 4981,13997,
-
-     4973, 4987,13997, 4956, 4996, 4986, 5001, 4993, 4998, 5009,
-     5017, 5004, 5010, 5040, 5042, 5030, 9221, 9225, 5034, 5046,
-     5037, 5049, 9233,13997,13997, 9242,13997,13997, 9250, 5047,
-     5048,13997, 5049, 5065, 5070,13997, 5071, 9253, 5050, 5038,
-     5102,13997,13997, 5070, 5076, 5062, 5124,13997,13997, 5081,
-     5109, 5120, 5115, 5126, 5142, 9256, 9259, 9278, 9322, 9370,
-     5091, 5097,13997, 5112, 5104, 5116,13997, 5135, 9286, 5142,
-     9289, 9292, 5143, 9297, 5202, 5170, 5205, 5176, 5220, 5188,
-     5225, 5196, 9300, 9312, 5185, 9333, 9303, 9342, 5204, 5202,
-    13997, 5242, 5218, 5217,13997, 5247, 5197, 9345, 9351, 9364,
-
-     9390, 5253, 5255, 5253, 5261, 5216, 5273, 5240, 5274, 5244,
-     5261, 5281, 5299, 5266, 5291, 5309, 5323, 5302, 9398,13997,
-    13997, 5337, 5306, 5337, 5316, 9406,13997, 5351, 5330, 5331,
-     5372, 5350, 5351, 9409, 5324, 5327,13997, 5341, 5337, 5339,
-    13997, 5349, 5406, 5378, 5422, 5394, 5428, 9418, 5448, 5429,
-     9438, 9486, 5609, 5384, 5431, 6367, 5391, 5447, 9315, 9382,
-    13997, 5451,13997, 5456,13997, 5445,13997, 5455, 9412,13997,
-     9458, 5404, 9461, 5462, 5481, 9432, 9470, 5456, 5461,13997,
-     5471, 5474,13997, 5452, 9507,13997,13997, 9515, 5492, 5523,
-    13997,13997,13997,13997, 5455,13997, 5495,13997, 5500, 5512,
-
-    13997,13997, 5490, 5525,13997,13997, 5506,13997, 5542,13997,
-     5552,13997, 5558, 5581,13997, 5579, 5581, 9479,13997, 6510,
-     5541, 5587, 6849, 5544, 5590,13997, 5599,13997, 5598, 5623,
-     5670, 5625, 5602, 5719, 5607, 9523,13997, 5558, 5583, 5573,
-     5663,13997,13997, 5601, 5641, 5629, 5726,13997, 9450, 9498,
-    13997,13997, 5656, 5669, 9526, 9533, 5689, 5684, 5739, 5694,
-     9536,13997,13997, 5699, 5707, 5708, 5731, 9545, 5741, 5735,
-     5744, 5738, 9551, 5732, 5737, 5781, 5772, 5784, 5775,13997,
-    13997,13997,13997,13997,13997,13997, 5735, 5756, 5744, 5827,
-    13997,13997, 5759, 5779, 5767, 5844,13997,13997,13997, 9554,
-
-     5828, 5815, 5845, 9557, 5807, 5797, 5802,13997, 5824, 5827,
-     5814, 5823,13997, 5841, 5856, 5861, 9563,13997, 9569, 9576,
-     5863, 5871, 5884, 5873, 5881, 5914, 5894, 5935, 5898, 5946,
-     9587, 9590, 5917, 5925, 5941, 5925, 5940, 5953, 9598, 9601,
-     5936, 5942, 5979, 5972, 5986, 5978, 5952, 5934, 5938,13997,
-     5957, 5958, 5946, 5950,13997, 5968, 9610, 6000, 5980, 5997,
-     5970, 5989, 6003, 6022, 5995, 6014, 6066, 6066, 9616, 6058,
-     6105, 6046, 6058, 6054, 6059, 6066, 6075, 6108,13997, 6107,
-    13997, 9625,13997,13997, 6080, 6086, 6084, 6086, 6112, 6109,
-     9633,13997,13997, 6144, 6147,13997, 6130,13997, 6132, 6111,
-
-     6133, 6104, 6134, 6142, 6161, 6132, 6152, 6210,13997, 6145,
-     6145, 6161, 6175, 6169, 6168, 6168, 6182,13997,13997, 6219,
-     6213, 6234, 6233, 6233, 6240, 6240, 6241, 6247, 6248,13997,
-    13997, 6250, 6256, 6257, 6254, 6267, 6268,13997,13997, 6294,
-     6292, 6239, 6238, 6238, 6257, 6251, 6253, 6254, 6266, 6317,
-     6263, 6273, 6323, 6285, 6277, 6301, 6349, 6305, 6334, 6355,
-     6344, 6369, 6368, 6367, 6385, 6374, 6374, 6401, 6391, 6388,
-     6410, 6399, 6397, 6426,13997,13997, 6389, 6403, 6460, 6414,
-     6406, 6417, 6471, 6428, 6470, 6428, 6434,13997, 6505, 6458,
-     6460,13997, 6508, 6482, 6493, 6509, 6510, 6525, 6523, 6556,
-
-     6537, 6542, 6576, 6560, 6554, 6586, 6574, 6568, 6601, 6556,
-     6559,13997, 6609, 6561, 6564,13997, 6614, 6681, 6576, 6633,
-    13997, 6580, 6646,13997, 6644, 6649, 6655, 6660, 6692, 6667,
-    13997, 6699, 6686,13997, 6715, 6692,13997, 6718, 6697,13997,
-     6671, 6734,13997, 6681, 6734,13997, 6740, 6682,13997, 6691,
-    13997, 6730, 6743, 6736, 6754,13997, 6755,13997, 6756,13997,
-     6768,13997, 6770, 6723,13997, 6729,13997, 9641, 6798, 6800,
-     6786, 6809, 6797, 6816, 6782, 6792, 6793, 6801, 6846, 6844,
-     9644,13997,13997, 6849,13997, 6848,13997, 6857, 6856, 6860,
-     6868,13997,13997, 6871, 6891,13997,13997,13997,13997,13997,
-
-    13997, 6889, 6918, 6929, 6931, 6900, 6924, 6960, 6985, 6872,
-     6885, 6951, 6991, 6946, 7055, 7015, 7046, 7024, 7045, 7078,
-     7100, 7058, 7059, 7088, 7128, 6937, 7048, 7148, 7171, 7102,
-     7156, 6992, 7080, 7197, 7240, 7263, 7292, 7159, 7255, 7262,
-     7333, 7184, 7382, 7164, 7289, 7134, 7252, 7308, 7334, 7311,
-     7365, 7026, 7322, 7404, 7421, 7397, 7442, 7387, 7440, 7423,
-     7467, 7276, 7435, 7457, 7512, 7489, 7490, 7460, 7484, 7521,
-     7551, 7581, 7612, 7161, 7571, 7517, 7577, 7468, 7572, 7636,
-     7653, 7586, 7588, 7603, 7660, 7658, 7681, 7797, 7800, 7638,
-     7702, 7589, 7722, 7703, 7833, 7529, 7807, 7863, 7877, 7973,
-
-     7271, 9652, 9655,13997,13997, 9675, 9684, 9693, 9702, 9711,
-     9720, 9729, 9738, 9747, 9756, 9765, 9774, 9783, 9792, 9801,
-     9810, 9819, 9828, 9837, 9846, 9855, 9864, 9873, 9882, 9891,
-     9900, 9909, 9918, 9927, 9936, 9945, 9954, 9963, 9972, 9981,
-     9990, 9999,10008,10017,10026,10035,10044,10053,10062,10071,
-    10080,10089,10098,10107,10116,10125,10134,10143,10152,10161,
-    10170,10179,10188,10197,10206,10215,10224,10233,10242,10251,
-    10260,10269,10278,10287,10294,10301,10308,10315,10322,10329,
-    10336,10343,10350,10357,10364,10371,10378,10385,10392,10399,
-    10406,10413,10420,10427,10434,10441,10448,10455,10462,10469,
-
-    10476,10483,10490,10497,10504,10513,10520,10525,10532,10537,
-    10544,10549,10556,10561,10568,10573,10580,10585,10592,10597,
-    10604,10609,10616,10621,10628,10633,10640,10645,10652,10657,
-    10664,10669,10676,10681,10688,10693,10700,10705,10712,10717,
-    10724,10729,10736,10741,10748,10753,10760,10765,10772,10777,
-    10784,10789,10796,10801,10808,10813,10820,10825,10832,10837,
-    10844,10849,10856,10861,10868,10873,10880,10885,10894,10900,
-    10907,10915,10923,10931,10938,10946,10953,10961,10968,10976,
-    10984,10992,11000,11008,11016,11024,11032,11040,11047,11055,
-    11063,11070,11078,11085,11093,11100,11108,11115,11123,11130,
-
-    11138,11145,11153,11160,11168,11175,11183,11190,11198,11205,
-    11213,11220,11228,11235,11243,11251,11259,11266,11274,11281,
-    11289,11296,11304,11311,11319,11326,11334,11341,11349,11357,
-    11365,11374,11380,11387,11395,11402,11410,11417,11425,11432,
-    11440,11447,11455,11462,11470,11478,11485,11493,11500,11508,
-    11515,11523,11531,11538,11546,11554,11562,11570,11578,11585,
-    11593,11600,11608,11615,11623,11631,11639,11646,11654,11661,
-    11669,11676,11684,11691,11699,11706,11714,11721,11729,11736,
-    11744,11751,11759,11766,11774,11782,11790,11797,11805,11812,
-    11820,11827,11835,11844,11853,11860,11867,11875,11882,11890,
-
-    11898,11906,11913,11921,11928,11936,11944,11951,11959,11966,
-    11974,11982,11990,11998,12005,12013,12021,12029,12036,12044,
-    12051,12059,12067,12075,12082,12090,12097,12105,12112,12120,
-    12127,12135,12143,12151,12158,12166,12173,12181,12188,12196,
-    12203,12211,12218,12226,12233,12241,12248,12256,12263,12271,
-    12278,12286,12295,12304,12311,12319,12327,12334,12342,12350,
-    12357,12365,12373,12381,12389,12397,12405,12413,12421,12429,
-    12437,12445,12452,12460,12468,12476,12483,12491,12498,12506,
-    12514,12521,12529,12536,12544,12551,12559,12566,12574,12582,
-    12589,12597,12604,12612,12619,12627,12635,12643,12650,12658,
-
-    12665,12673,12680,12688,12695,12703,12711,12719,12728,12737,
-    12745,12752,12760,12767,12775,12783,12790,12798,12806,12814,
-    12822,12830,12838,12845,12853,12861,12868,12876,12884,12891,
-    12898,12906,12914,12921,12929,12936,12944,12952,12959,12967,
-    12974,12982,12989,12997,13004,13012,13020,13028,13036,13044,
-    13051,13059,13067,13075,13083,13090,13098,13107,13116,13123,
-    13131,13139,13147,13154,13162,13170,13178,13186,13194,13201,
-    13209,13217,13224,13232,13240,13247,13254,13262,13270,13277,
-    13284,13292,13300,13308,13315,13323,13330,13337,13345,13352,
-    13360,13367,13375,13382,13390,13397,13405,13414,13423,13430,
-
-    13438,13446,13454,13462,13470,13478,13486,13494,13502,13509,
-    13517,13524,13532,13540,13548,13556,13564,13572,13580,13587,
-    13595,13603,13611,13619,13626,13633,13640,13648,13655,13663,
-    13670,13678,13685,13693,13702,13711,13718,13726,13734,13742,
-    13750,13758,13766,13773,13780,13788,13795,13803,13811,13818,
-    13826,13834,13841,13848,13855,13862,13869,13877,13884,13892,
-    13899,13907,13916,13925,13933,13942,13951,13960,13969,13978,
-    13987
+    13842,13842, 2372, 6920,13842, 6923, 6927, 6930, 2362, 6933,
+     2392, 2385, 6939,13842, 2380, 6952, 6958,13842,13842, 6966,
+
+     2416, 6971, 2389, 6975,13842,13842, 6990, 6993, 2399, 7004,
+    13842,13842, 2392, 7014,13842, 2385, 7017, 7020, 7023, 7026,
+     2401, 7029, 2421, 2423, 2419, 2432, 7035, 7039,13842,13842,
+     7047,13842, 2428, 7050, 2435, 7054, 2437, 7057, 2446, 7060,
+     7068, 7079, 7087, 7090, 7093, 7108, 7111, 7115,13842,13842,
+     7129, 2445, 2460, 2493, 7132, 7135, 2515, 2517, 2545, 2524,
+     2540, 2528, 2598, 2528, 7138,13842,13842, 7153, 7156, 7159,
+    13842, 7163, 7168, 7184, 7187, 2523, 7195, 2605, 2669, 2565,
+     7202, 7205, 7214, 2515, 2551, 2582, 2562, 2565, 7220, 7223,
+     7226, 2571, 7229, 2572, 2578, 2586, 7232, 7235, 7238, 7241,
+
+     2591, 2587, 7244, 2619, 2654, 2630, 2632, 7247, 7250, 2634,
+     7253, 7258, 7261, 2635, 2631, 7264,13842,13842, 7272,13842,
+    13842, 2650, 7280, 2640, 7283, 7289, 7292, 7295, 7301,13842,
+     2647, 7313, 2661, 7316, 7320, 7328, 7335,13842,13842, 7343,
+    13842,13842, 7351, 7358, 7361,13842,13842, 7377,13842,13842,
+     7385, 7391,13842,13842, 7399, 7404, 7413,13842,13842, 7421,
+     7424,13842,13842, 2656, 2661, 2675, 7433,13842,13842, 7441,
+     7444, 2672, 2662, 7452,13842,13842, 2694, 7460, 7463, 7466,
+     2698, 2691, 7469,13842,13842, 2703, 7478, 7485, 2708, 7489,
+     7493, 2712, 2703, 2709, 2708, 7507, 7512, 2720, 7515,13842,
+
+     2713, 7519,13842,13842, 2718, 2728, 2728, 7538, 7541, 7549,
+     7552, 7556, 7559, 7562, 7568, 7571, 7580, 7576, 2725, 7589,
+     7598, 2743, 7607, 2743, 7610,13842, 2727, 7615, 7622,13842,
+    13842, 7630, 7637, 7648,13842,13842, 7656, 7659, 7662, 7670,
+     2731, 2757, 2783, 7677,13842, 7680, 7683, 2796, 2796, 2796,
+     2803, 2813, 2806, 2803, 2804, 2810, 2826, 7691, 7698, 7703,
+     7712,13842,13842, 7723,13842,13842, 2801, 7731, 7734, 2846,
+     2838, 7738, 5101, 7350, 7746, 7753, 7756, 2788, 2787, 2801,
+     7759, 7762, 2823, 7765, 7768, 2834, 7771, 7774, 7777, 2838,
+     2846, 2858, 7780, 7783, 2846, 2847, 2857, 7786, 7789, 2861,
+
+     7792, 7795, 2856, 2863, 2875, 2880, 7800, 7803, 7806, 7809,
+     7819, 7824, 7827, 7830, 7833, 7837, 7845,13842,13842, 7855,
+     7859, 7862, 7865, 7868,13842,13842, 7884, 2876, 2876, 2913,
+     7887,13842,13842, 7897, 2887, 2896, 7903, 7908, 7916, 7921,
+    13842, 2901, 2911, 2916, 7928, 7931, 7935, 7940,13842,13842,
+     7953, 7956, 7959, 7962, 7965, 7984, 7990, 2914, 2924, 2925,
+     7993, 7996,13842,13842, 8004, 8012, 8015, 8023, 8019, 8033,
+     8037, 8040, 8043, 8055,13842,13842, 8046, 8051,13842, 2935,
+     2933, 8065,13842, 8070,13842,13842, 8078, 8086,13842,13842,
+     8097, 2924, 2926,13842, 8100,13842,13842, 2971, 2958, 2974,
+
+     2972, 2979, 2997, 2989, 3010, 3005, 3015, 8108, 8116, 8089,
+     8102, 2993, 8130, 8136, 3055, 3103, 2984, 2991, 3001, 2987,
+     3005, 3007, 3012, 3057, 3010, 3035, 8139, 8145, 3051, 3048,
+     3066, 8149, 8155, 3056, 8158, 3054, 3073, 8161, 8164, 3074,
+     3071, 3122, 8167, 3109, 3122, 8171, 3125, 8174,13842, 8177,
+     8180,13842,13842, 8188, 8194, 8202, 8206, 8209, 8212, 8215,
+     8220, 8233, 8236, 8239, 8242, 8245,13842, 3140, 3128, 3123,
+     3146, 8248, 8266, 3143, 3152, 8274, 3232, 3363, 8282,13842,
+     3142, 3161, 8285, 8288, 8291,13842, 8294, 8312, 3189, 3190,
+     3192, 8320, 8323, 8326, 8297, 8334, 8341, 8347, 3185, 3188,
+
+     8355, 8359, 8362, 8366,13842,13842, 8374, 8377, 8385, 8388,
+     8392,13842, 8397, 8411, 3205, 3203, 3202, 8406,13842, 8419,
+     3208, 3201, 3236, 3231, 3262, 3264, 3292, 3279, 3274, 3290,
+     3281, 3308, 8426, 3282, 3287, 3330, 3283, 3290, 3316, 3321,
+     3362, 3323, 3340, 3369, 8429, 3433, 3437, 3417, 3366, 3382,
+     3384, 3391, 3395, 3390, 3393, 3405, 3438, 3442, 3445, 3439,
+     3441, 3467, 3489, 8432, 8438, 3464, 3476, 8441, 3462, 3479,
+     3528, 8448, 3502, 3515, 8451, 8454, 8457,13842,13842, 8465,
+     8468, 8476, 8488, 8483,13842, 8496,13842,13842, 8504,13842,
+     8507, 8510, 8513, 3513, 3519, 8516, 3514, 8519,13842,13842,
+
+     3527, 3527, 3560, 3619, 3563, 3563, 3637, 3566, 3545, 8534,
+     8537, 8540, 8548, 8555,13842,13842, 3575, 3585, 3591, 8570,
+     8574, 8582, 4251, 4291, 8590,13842, 8593, 8596,13842,13842,
+     3580, 8604, 8612, 8615, 8623,13842, 8626,13842,13842, 8634,
+     8638, 8646, 8653, 8664, 3692, 3829, 3600, 8672, 8675, 8678,
+     8681, 8684, 3639, 3665, 3681, 3686, 3705, 3682, 3692, 3691,
+     3710, 3729, 8693, 3685, 3708, 3707, 3711, 3714, 3721, 3723,
+     3737, 3734, 3738, 3785, 3779, 8697, 8702, 3835, 3916, 3960,
+     3789, 3800, 3787, 3804, 3814, 3841, 3827, 3836, 3840, 3857,
+     3866, 3871, 3864, 8705, 3871, 8708, 3913, 3916, 3919, 8715,
+
+     3925, 3937, 3945, 8721, 8724, 8732, 4102, 4138, 8740,13842,
+    13842, 8751, 8755, 8758, 3936, 8761, 8764, 8770, 8782, 3977,
+     3978, 4015, 3998, 4031, 4024, 4051, 4059, 4078, 4077, 4070,
+     8785, 8788, 8796,13842,13842, 8804,13842, 4063, 8808, 4073,
+     8811,13842,13842, 4121, 4132, 4132, 4135, 4136, 4150, 8826,
+     4141, 8829, 8832, 8841,13842,13842, 8849, 4167, 4212, 8857,
+    13842,13842, 4155, 4160, 4285, 4166, 4171, 4315, 4145, 8865,
+     8868, 8876, 8879, 8887, 8890, 8894, 8897, 4213, 4213, 4214,
+     4218,13842, 4239, 4237, 4239, 4245,13842, 8906, 4221, 4230,
+     4219, 4256, 4265, 4278, 4265, 4276, 4265, 4282, 4293, 4301,
+
+     8912, 8915, 8925,13842, 4369, 4343, 8930, 4295, 4309, 4325,
+     4392, 4398, 4346, 4341, 4350, 4378, 4423, 4426, 4379, 4387,
+     8933, 4377, 8936, 4379, 4402, 8939, 4390, 8944, 4400, 8952,
+     4436, 4440, 4448, 4465, 4462, 4468, 8960, 8963, 8966, 4453,
+     8969, 8972, 8987,13842,13842, 8995, 8998, 4441, 4450, 4490,
+     4482, 4495, 4496, 4512, 4497, 4517, 4517, 4509, 9006,13842,
+    13842, 4511, 9014, 9017, 4493, 4525, 4536, 4583, 4547, 4557,
+     4584, 9032,13842, 4545, 9035,13842,13842, 4573, 4591, 4588,
+     4599, 4606, 4595, 4603, 4613, 4625, 4613, 4624, 4632, 9043,
+     9047, 4637, 4666, 9055,13842,13842, 9063, 9066,13842,13842,
+
+     4626, 4647, 4674, 4661, 4664, 4696, 4710, 4712, 9074, 4667,
+     4669, 4692, 4745, 4751, 4697, 4694, 4696, 4722, 4768, 4774,
+     4724, 9078, 4751, 4759, 4773, 9086, 9089, 9093, 4752, 4738,
+     4810,13842,13842, 4764, 4771, 4778, 4841,13842,13842, 4804,
+     9108, 4804, 9112, 9116, 9119, 4805, 9125, 9128, 4840, 4852,
+     4843, 4855, 4857, 4850, 4864, 4859, 9131, 9134,13842, 9137,
+     4851, 9140,13842,13842, 9156,13842,13842, 9164, 4843, 4876,
+     4877, 4913, 4895, 4899, 4897, 4929, 4911, 4894, 9167, 9170,
+    13842,13842, 9178, 4918, 4941,13842, 4939, 4950,13842, 4930,
+     4969, 4962, 4976, 4965, 4972, 4982, 4988, 4975, 4987, 4999,
+
+     5002, 4993, 9185, 9189, 4997, 5009, 5006, 5017, 9197, 5016,
+     5036,13842, 5037, 5040, 5040,13842, 5042, 9206, 5019, 5006,
+     5070,13842,13842, 5025, 5025, 5025, 5091,13842,13842, 5048,
+     5068, 5081, 5072, 5097, 5132, 9209, 9212, 9221, 9275, 9323,
+     5063, 5064,13842, 5075, 5067, 5078,13842, 5088, 9231, 5097,
+     9234, 9240, 5104, 9243, 5156, 5125, 5161, 5132, 5177, 5153,
+     5188, 5166, 9246, 9249, 5156, 9252, 9255, 9270, 5174, 5176,
+    13842, 5209, 5191, 5190,13842, 5225, 5175, 9295, 9298, 9317,
+     9306, 5231, 5233, 5231, 5239, 5192, 5249, 5216, 5249, 5219,
+     5236, 5256, 5264, 5237, 5254, 5271, 5274, 5244, 9343,13842,
+
+    13842, 5280, 5248, 5296, 5267, 9335,13842, 5310, 5285, 5299,
+     5333, 5310, 5312, 9354, 5279, 5288,13842, 5299, 5296, 5297,
+    13842, 5323, 5377, 5345, 5382, 5355, 5387, 9357, 5411, 5428,
+     9377, 9425, 5609, 5349, 5398, 6367, 5356, 5403, 9365, 9388,
+    13842, 5427,13842, 5425,13842, 5416,13842, 5419, 9397,13842,
+     9400, 5375, 9403, 5429, 5438, 9419, 9446, 5430, 5441,13842,
+     5451, 5457,13842, 5433, 9454,13842,13842, 9462, 5462, 5481,
+    13842,13842,13842,13842, 5441,13842, 5476,13842, 5478, 5492,
+    13842,13842, 5471, 5503,13842,13842, 5481,13842, 5516,13842,
+     5517,13842, 5522, 5525,13842, 5530, 5535, 9472,13842, 6510,
+
+     5498, 5544, 6849, 5511, 5553,13842, 5558,13842, 5578, 5571,
+     5587, 5625, 5582, 5585, 5581, 9475,13842, 5532, 5558, 5552,
+     5619,13842,13842, 5570, 5618, 5605, 5667,13842, 9411, 9437,
+    13842,13842, 5647, 5649, 9478, 9481, 5672, 5661, 5689, 5664,
+     9484,13842,13842, 5674, 5697, 5695, 5706, 9499, 5739, 5704,
+     5741, 5706, 9502, 5701, 5703, 5735, 5731, 5749, 5740,13842,
+    13842,13842,13842,13842,13842,13842, 5700, 5720, 5711, 5802,
+    13842,13842, 5718, 5746, 5734, 5827,13842,13842,13842, 9505,
+     5793, 5780, 5793, 9508, 5756, 5760, 5764,13842, 5783, 5784,
+     5784, 5787,13842, 5807, 5826, 5828, 9511,13842, 9520, 9531,
+
+     5829, 5841, 5855, 5843, 5857, 5869, 5851, 5895, 5858, 5895,
+     9539, 9542, 5866, 5880, 5892, 5896, 5906, 5919, 9550, 9557,
+     5903, 5915, 5951, 5936, 5954, 5943, 5923, 5906, 5909,13842,
+     5932, 5935, 5925, 5928,13842, 5950, 9553, 5982, 5947, 5965,
+     5937, 5956, 5959, 5977, 5948, 5968, 6030, 6028, 9568, 6058,
+     6105, 6003, 6008, 6021, 6025, 6032, 6028, 6066,13842, 6066,
+    13842, 9576,13842,13842, 6046, 6058, 6054, 6059, 6066, 6075,
+     9584,13842,13842, 6108, 6107,13842, 6083,13842, 6085, 6066,
+     6083, 6075, 6095, 6094, 6116, 6094, 6114, 6153,13842, 6103,
+     6107, 6118, 6144, 6138, 6137, 6141, 6155,13842,13842, 6207,
+
+     6201, 6210, 6204, 6205, 6211, 6213, 6211, 6217, 6229,13842,
+    13842, 6226, 6237, 6237, 6235, 6241, 6245,13842,13842, 6266,
+     6265, 6216, 6214, 6215, 6227, 6228, 6227, 6232, 6244, 6283,
+     6242, 6252, 6308, 6261, 6257, 6269, 6317, 6273, 6289, 6315,
+     6299, 6318, 6318, 6315, 6333, 6322, 6333, 6352, 6347, 6350,
+     6380, 6371, 6369, 6386,13842,13842, 6352, 6372, 6422, 6375,
+     6372, 6382, 6429, 6397, 6448, 6397, 6403,13842, 6460, 6414,
+     6417,13842, 6471, 6445, 6445, 6453, 6472, 6485, 6476, 6508,
+     6491, 6482, 6522, 6520, 6511, 6545, 6534, 6525, 6554, 6524,
+     6531,13842, 6580, 6536, 6538,13842, 6591, 6585, 6549, 6607,
+
+    13842, 6554, 6607,13842, 6588, 6597, 6607, 6613, 6635, 6622,
+    13842, 6665, 6642,13842, 6679, 6653,13842, 6689, 6667,13842,
+     6640, 6701,13842, 6647, 6710,13842, 6722, 6647,13842, 6651,
+    13842, 6690, 6705, 6695, 6715,13842, 6717,13842, 6734,13842,
+     6739,13842, 6741, 6694,13842, 6699,13842, 9592, 6768, 6770,
+     6755, 6776, 6768, 6787, 6753, 6759, 6760, 6765, 6806, 6806,
+     9595,13842,13842, 6817,13842, 6816,13842, 6820, 6827, 6831,
+     6836,13842,13842, 6835, 6871,13842,13842,13842,13842,13842,
+    13842, 6889, 6918, 6929, 6931, 6832, 6846, 6837, 6928, 6945,
+     6951, 6991, 7053, 6946, 7055, 7046, 7085, 6843, 6985, 6864,
+
+     6956, 7058, 7059, 7087, 7088, 7015, 7100, 6969, 7158, 7066,
+     7128, 7251, 7252, 7130, 7131, 7109, 7260, 7163, 7257, 7330,
+     7336, 7181, 7268, 7200, 7308, 6981, 7249, 7269, 7305, 7362,
+     7391, 7026, 7160, 7331, 7401, 7349, 7379, 7409, 7418, 7289,
+     7420, 7389, 7432, 7454, 7509, 7439, 7464, 7457, 7529, 7528,
+     7548, 7578, 7609, 7484, 7568, 7526, 7574, 7569, 7577, 7633,
+     7650, 7585, 7586, 7600, 7657, 7655, 7678, 7794, 7797, 7635,
+     7699, 7483, 7513, 7700, 7830, 7804, 7825, 7860, 7875, 6859,
+     7511, 9603, 9606,13842,13842, 9626, 9635, 9644, 9653, 9662,
+     9671, 9680, 9689, 9698, 9707, 9716, 9725, 9734, 9743, 9752,
+
+     9761, 9770, 9779, 9788, 9797, 9806, 9815, 9824, 9833, 9842,
+     9851, 9860, 9869, 9878, 9887, 9896, 9905, 9914, 9923, 9932,
+     9941, 9950, 9959, 9968, 9977, 9986, 9995,10004,10013,10022,
+    10031,10040,10049,10058,10067,10076,10085,10094,10103,10112,
+    10121,10130,10139,10148,10157,10166,10175,10184,10193,10202,
+    10211,10220,10229,10238,10245,10252,10259,10266,10273,10280,
+    10287,10294,10301,10308,10315,10322,10329,10336,10343,10350,
+    10357,10364,10371,10378,10385,10392,10399,10406,10413,10420,
+    10427,10434,10441,10448,10455,10464,10471,10476,10483,10488,
+    10495,10500,10507,10512,10519,10524,10531,10536,10543,10548,
+
+    10555,10560,10567,10572,10579,10584,10591,10596,10603,10608,
+    10615,10620,10627,10632,10639,10644,10651,10656,10663,10668,
+    10675,10680,10687,10692,10699,10704,10711,10716,10723,10728,
+    10735,10740,10747,10752,10759,10764,10771,10776,10783,10788,
+    10795,10800,10807,10812,10819,10824,10831,10836,10845,10851,
+    10858,10866,10874,10882,10889,10897,10904,10912,10919,10927,
+    10935,10943,10951,10959,10967,10975,10983,10991,10998,11006,
+    11014,11021,11029,11036,11044,11051,11059,11066,11074,11081,
+    11089,11096,11104,11111,11119,11126,11134,11141,11149,11156,
+    11164,11171,11179,11186,11194,11202,11210,11217,11225,11232,
+
+    11240,11247,11255,11262,11270,11277,11285,11292,11300,11308,
+    11316,11325,11331,11338,11346,11353,11361,11368,11376,11383,
+    11391,11398,11406,11413,11421,11429,11436,11444,11451,11459,
+    11466,11474,11482,11489,11497,11505,11513,11521,11529,11536,
+    11544,11551,11559,11566,11574,11582,11590,11597,11605,11612,
+    11620,11627,11635,11642,11650,11657,11665,11672,11680,11687,
+    11695,11702,11710,11717,11725,11733,11741,11748,11756,11763,
+    11771,11778,11786,11795,11804,11811,11818,11826,11833,11841,
+    11849,11857,11864,11872,11879,11887,11895,11902,11910,11917,
+    11925,11933,11941,11949,11956,11964,11972,11980,11987,11995,
+
+    12002,12010,12018,12026,12033,12041,12048,12056,12063,12071,
+    12078,12086,12094,12102,12109,12117,12124,12132,12139,12147,
+    12154,12162,12169,12177,12184,12192,12199,12207,12214,12222,
+    12229,12237,12246,12255,12262,12270,12278,12285,12293,12301,
+    12308,12316,12324,12332,12340,12348,12356,12364,12372,12380,
+    12388,12396,12403,12411,12419,12427,12434,12442,12449,12457,
+    12465,12472,12480,12487,12495,12502,12510,12517,12525,12533,
+    12540,12548,12555,12563,12570,12578,12586,12594,12601,12609,
+    12616,12624,12631,12639,12646,12654,12662,12670,12679,12688,
+    12696,12703,12711,12718,12726,12734,12741,12749,12757,12765,
+
+    12773,12781,12789,12796,12804,12812,12819,12827,12835,12842,
+    12849,12857,12865,12872,12880,12887,12895,12903,12910,12918,
+    12925,12933,12940,12948,12955,12963,12971,12979,12987,12995,
+    13002,13010,13018,13026,13034,13041,13049,13058,13067,13074,
+    13082,13090,13098,13105,13113,13121,13129,13137,13145,13152,
+    13160,13168,13175,13183,13191,13198,13205,13213,13221,13228,
+    13235,13243,13251,13259,13266,13274,13281,13288,13296,13304,
+    13312,13319,13327,13334,13342,13351,13360,13367,13375,13383,
+    13391,13399,13407,13415,13423,13431,13439,13446,13454,13461,
+    13469,13477,13485,13493,13501,13509,13517,13524,13532,13540,
+
+    13548,13556,13563,13570,13578,13586,13593,13601,13608,13616,
+    13625,13634,13641,13649,13657,13665,13673,13681,13689,13696,
+    13703,13711,13718,13726,13734,13741,13749,13757,13764,13771,
+    13778,13787,13796,13805,13814,13823,13832
     } ;
 
-static yyconst flex_int16_t yy_def[4472] =
+static yyconst flex_int16_t yy_def[4438] =
     {   0,
-     3906, 3906, 3907, 3907, 3907, 3907, 3908, 3908, 3909, 3909,
-     3910, 3910, 3911, 3911, 3911, 3911, 3912, 3912, 3913, 3913,
-     3914, 3914, 3914, 3914, 3906, 3906, 3914, 3914, 3914, 3914,
-     3906, 3906, 3914, 3914, 3906, 3906, 3914, 3914, 3914, 3914,
-     3915, 3915, 3916, 3916, 3906, 3906, 3916, 3916, 3916, 3916,
-     3917, 3917, 3918, 3918, 3906, 3906, 3918, 3918, 3918, 3918,
-     3919, 3919, 3920, 3920, 3921, 3921, 3922, 3922, 3923, 3923,
-     3924, 3924, 3906, 3906, 3924, 3924, 3924, 3924, 3925, 3925,
-     3926, 3926, 3906, 3906, 3926, 3926, 3926, 3926, 3927, 3927,
-     3928, 3928, 3906, 3906, 3928, 3928, 3928, 3928, 3929, 3929,
-
-     3930, 3930, 3931, 3931, 3932, 3932, 3906, 3906, 3932, 3932,
-     3932, 3932, 3933, 3933, 3934, 3934, 3906, 3906, 3934, 3934,
-     3934, 3934, 3935, 3935, 3936, 3936, 3906, 3906, 3936, 3936,
-     3936, 3936, 3937, 3937, 3938, 3938, 3939, 3939, 3940, 3940,
-     3906, 3906, 3940, 3940, 3940, 3940, 3941, 3941, 3942, 3942,
-     3906, 3906, 3942, 3942, 3942, 3942, 3943, 3943, 3944, 3944,
-     3945, 3945, 3946, 3946, 3947, 3947, 3948, 3948, 3949, 3949,
-     3950, 3950, 3906, 3906, 3951, 3951, 3952, 3952, 3952, 3952,
-     3906, 3906, 3952, 3952, 3952, 3952, 3906, 3906, 3952, 3952,
-     3906, 3906, 3952, 3952, 3952, 3952, 3953, 3953, 3954, 3954,
-
-     3906, 3906, 3954, 3954, 3954, 3954, 3955, 3955, 3956, 3956,
-     3957, 3957, 3958, 3958, 3959, 3959, 3960, 3960, 3906, 3906,
-     3960, 3960, 3960, 3960, 3961, 3961, 3962, 3962, 3963, 3963,
-     3964, 3964, 3906, 3906, 3964, 3964, 3964, 3964, 3965, 3965,
-     3966, 3966, 3906, 3906, 3966, 3966, 3966, 3966, 3967, 3967,
-     3968, 3968, 3969, 3969, 3970, 3970, 3971, 3971, 3972, 3972,
-     3972, 3972, 3906, 3906, 3972, 3972, 3972, 3972, 3906, 3906,
-     3972, 3972, 3906, 3906, 3972, 3972, 3972, 3972, 3973, 3973,
-     3974, 3974, 3906, 3906, 3974, 3974, 3974, 3974, 3906, 3906,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3975, 3905, 3905, 3975, 3975, 3905, 3905, 3905,  328, 3905,
-      330,  328,  331,  330, 3905, 3905, 3905, 3976, 3905, 3905,
-     3976, 3976, 3976, 3905, 3905,  330,  330,  330, 3905, 3905,
-     3905, 3977, 3905, 3905, 3977, 3977, 3977, 3977, 3977, 3905,
-     3905,  330,  330,  330, 3905, 3905, 3905, 3978, 3905, 3905,
-     3978, 3905, 3905, 3905, 3905, 3905, 3905, 3979, 3905, 3905,
-     3979, 3979, 3979, 3905, 3905, 3905, 3905, 3905, 3905, 3980,
-     3905, 3905, 3980, 3980, 3980, 3905, 3905,  330,  330, 3905,
-
-     3905, 3905, 3981, 3905, 3905, 3981, 3981, 3905, 3905,  330,
-      330, 3905, 3905, 3905, 3982, 3905, 3905, 3982, 3982, 3982,
-     3905, 3905,  330,  330, 3905, 3905, 3905, 3983, 3905, 3905,
-     3983, 3983, 3983, 3983, 3983, 3983, 3905, 3905, 3905, 3905,
-     3905, 3905, 3984, 3905, 3905, 3984, 3984, 3984, 3984, 3984,
-     3984, 3984, 3984, 3905, 3905,  330,  330, 3905, 3905, 3905,
-     3985, 3905, 3905, 3985, 3905, 3905,  330,  330, 3905, 3905,
-     3905, 3986, 3905, 3905, 3986, 3986, 3986, 3986, 3986, 3905,
-     3905,  330,  330,  330, 3905, 3905, 3905, 3987, 3905, 3905,
-     3987, 3987, 3987, 3905, 3905, 3905, 3905, 3905, 3905, 3988,
-
-     3905, 3905, 3988, 3905, 3905,  330,  506,  330, 3905, 3905,
-     3905, 3989, 3905, 3905, 3989, 3989, 3989, 3989, 3905, 3905,
-      330,  330, 3905, 3905, 3905, 3990, 3905, 3905, 3990, 3990,
-     3905, 3905, 3905, 3905, 3905, 3905, 3991, 3905, 3905, 3991,
-     3991, 3905, 3905, 3905, 3905, 3905, 3905, 3992, 3905, 3905,
-     3992, 3992, 3905, 3905, 3905, 3905, 3905, 3905, 3993, 3905,
-     3905, 3993, 3993, 3993, 3993, 3993, 3993, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3994, 3905, 3905, 3994, 3905, 3905,
-      506,  581,  330,  330,  330,  330, 3905, 3905, 3905, 3995,
-     3905, 3905, 3995, 3995, 3995, 3995, 3995, 3905, 3905,  330,
-
-      330, 3905, 3905, 3905, 3996, 3905, 3905, 3996, 3996, 3905,
-     3905, 3905, 3905, 3905, 3905, 3997, 3905, 3905, 3997, 3997,
-     3997, 3997, 3997, 3905, 3905, 3905, 3905, 3905, 3905, 3998,
-     3905, 3905, 3998, 3998, 3905, 3905,  330,  330, 3905, 3905,
-     3905, 3999, 3905, 3905, 3999, 3999, 3905, 3905, 3905, 3905,
-     3905, 3905, 4000, 3905, 3905, 4000, 4000, 4000, 4000, 3905,
-     3905,  330,  330, 3905, 3905, 3905, 4001, 3905, 3905, 4001,
-     4001, 4001, 4001, 3905, 3905,  330,  330,  330, 3905, 3905,
-     3905, 4002, 3905, 3905, 4002, 4002, 4002, 3905, 3905, 3905,
-     3905, 3905, 4003, 3905, 3905, 4003, 4003, 4003, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 4004, 3905, 3905, 4004, 4004, 3905,
-     3905, 3905,  712,  330,  330, 3905, 3905, 3905, 4005, 3905,
-     3905, 4005, 4005, 4005, 3905, 3905,  330,  330, 3905, 4006,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 4007, 4007, 4007, 4008, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 4009, 4009, 4009, 4009, 4009, 4010, 3905, 3905, 4011,
-     4011, 4011, 4011, 4011, 4011, 4012, 3905, 3905, 4013, 4013,
-
-     4014, 3905, 4015, 4015, 4015, 4015, 4016, 3905, 4017, 4017,
-     4017, 4017, 4018, 3905, 4019, 4019, 4019, 4020, 3905, 4021,
-     4021, 4021, 4021, 4022, 3905, 4023, 4023, 4023, 4023, 4023,
-     4023, 4023, 4023, 4024, 3905, 4025, 4025, 4025, 4025, 4025,
-     4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025, 4025,
-     4026, 3905, 4027, 4027, 4028, 3905, 4029, 4029, 4029, 4029,
-     4029, 4029, 4029, 4030, 3905, 3905, 4031, 4031, 4031, 4031,
-     4032, 3905, 4033, 4033, 4034, 3905, 3905, 3905, 4035, 4035,
-     4035, 4035, 4035, 4035, 4036, 3905, 4037, 4037, 4037, 4038,
-     3905, 4039, 4039, 4039, 4040, 3905, 4041, 4041, 4041, 4042,
-
-     3905, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4043, 4044,
-     3905, 3905, 4045, 4045, 4046, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 4047, 4047, 4047, 4047, 4047, 4047, 4048, 3905,
-     4049, 4049, 4049, 4050, 3905, 4051, 4051, 4051, 4051, 4051,
-     4051, 4051, 4051, 4051, 4052, 3905, 4053, 4053, 4053, 4053,
-     4054, 3905, 4055, 4055, 4055, 4056, 3905, 4057, 4057, 4057,
-     4057, 4057, 4058, 3905, 4059, 4059, 4059, 4059, 4059, 4060,
-     3905, 3905, 4061, 4061, 4061, 4061, 3905, 4062, 3905, 3905,
-     4063, 4063, 4063, 4063, 4064, 3905, 4065, 4065, 4065, 4066,
-     3905, 4067, 4067, 4067, 4067, 4067, 4068, 4069, 3905, 4069,
-
-     3905, 3905, 3905, 4070, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 4071, 4072, 4072, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 4073, 4073, 4073, 4073, 4074, 4074, 3905,
-     4075, 4075, 4075, 4075, 4075, 4076, 4076, 3905, 4077, 4078,
-     4078, 4079, 3905, 3905, 4079, 4080, 4080, 4081, 4081, 4081,
-     4082, 4082, 4083, 4083, 4084, 4084, 4085, 4085, 4085, 4086,
-     4086, 3905, 3905, 3905, 3905, 4087, 4087, 4087, 4087, 4087,
-
-     4088, 4088, 4089, 3905, 3905, 4089, 3905, 3905, 4089, 4089,
-     4089, 4089, 4089, 4089, 4089, 4089, 4089, 4089, 4090, 4090,
-     3905, 3905, 4091, 4091, 4092, 4092, 4092, 3905, 3905, 4092,
-     4092, 4092, 4093, 4093, 3905, 4094, 3905, 3905, 3905, 3905,
-     4095, 4095, 4096, 4097, 4097, 3905, 3905, 4098, 3905, 3905,
-     4098, 4098, 4098, 4099, 4099, 4100, 3905, 3905, 4101, 4101,
-     3905, 3905, 4102, 4103, 4103, 4104, 4104, 4105, 4105, 4106,
-     4106, 4106, 3905, 3905, 4106, 4106, 4106, 4107, 4107, 3905,
-     4108, 4109, 4109, 3905, 3905, 3905, 3905, 4110, 4110, 4110,
-     4110, 4110, 4111, 4111, 3905, 3905, 4112, 4113, 4113, 4114,
-
-     3905, 3905, 4114, 4114, 4114, 4114, 4114, 4114, 4115, 4115,
-     4116, 4116, 4116, 4117, 4117, 4118, 3905, 3905, 4119, 4119,
-     4120, 4120, 3905, 3905, 4120, 4121, 4121, 4122, 3905, 3905,
-     4122, 4122, 4123, 4123, 3905, 4124, 3905, 3905, 4124, 3905,
-     4125, 4125, 3905, 4126, 4126, 4126, 4127, 4127, 3905, 3905,
-     4128, 4129, 4129, 4130, 4130, 4130, 4130, 4131, 4131, 4132,
-     3905, 3905, 4132, 3905, 3905, 4133, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 4134, 3905, 4135, 3905, 4135, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 4136, 4136, 3905, 3905, 4136, 3905, 4137, 3905, 4137,
-     3905, 4138, 4138, 4138, 4138, 4138, 3905, 4139, 3905, 4139,
-     3905, 4140, 3905, 4141, 3905, 4141, 4142, 3905, 3905, 3905,
-     4142, 3905, 4143, 3905, 4143, 3905, 3905, 4144, 4144, 3905,
-     3905, 3905, 4145, 3905, 4145, 3905, 3905, 3905, 3905, 3905,
-     4146, 3905, 4146, 3905, 3905, 4147, 4147, 3905, 3905, 3905,
-     4148, 3905, 4148, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 4149, 4149, 4149, 4149, 3905, 4150, 3905, 4150, 4151,
-
-     4151, 4151, 3905, 3905, 3905, 4151, 3905, 3905, 3905, 3905,
-     3905, 4151, 4151, 4151, 4151, 4151, 4151, 4151, 4151, 4151,
-     3905, 4152, 3905, 4152, 3905, 3905, 3905, 3905, 4153, 3905,
-     4153, 4154, 4154, 4154, 3905, 3905, 3905, 4154, 4154, 4154,
-     3905, 4155, 3905, 4155, 3905, 4156, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 4157, 3905, 4157, 4158, 3905, 4159, 3905,
-     4159, 3905, 4160, 3905, 3905, 3905, 4160, 4160, 4160, 3905,
-     4161, 3905, 4161, 4162, 3905, 3905, 3905, 3905, 4163, 3905,
-     4163, 3905, 3905, 3905, 4164, 3905, 4165, 3905, 4165, 4166,
-     4166, 3905, 4167, 3905, 4167, 4168, 4168, 4168, 4168, 3905,
-
-     3905, 3905, 3905, 3905, 4168, 4168, 3905, 4169, 3905, 4169,
-     3905, 4170, 3905, 4171, 3905, 4171, 3905, 3905, 3905, 3905,
-     4172, 4172, 4172, 4172, 4172, 3905, 4173, 3905, 4173, 3905,
-     3905, 3905, 4174, 3905, 4175, 3905, 4175, 4176, 3905, 3905,
-     3905, 3905, 3905, 4176, 3905, 3905, 4176, 4176, 4176, 3905,
-     4177, 3905, 4177, 3905, 3905, 3905, 3905, 4178, 3905, 4179,
-     3905, 4179, 4180, 3905, 3905, 3905, 3905, 4181, 3905, 4181,
-     4182, 4182, 3905, 3905, 3905, 4182, 3905, 4183, 3905, 4183,
-     4184, 3905, 3905, 3905, 4184, 4184, 3905, 4185, 3905, 4185,
-     3905, 4186, 3905, 3905, 3905, 4186, 3905, 3905, 4187, 3905,
-
-     4187, 4188, 4188, 4188, 3905, 4189, 3905, 4189, 3905, 3905,
-     3905, 4190, 3905, 4191, 3905, 4191, 3905, 3905, 4192, 4192,
-     3905, 3905, 4192, 3905, 4193, 3905, 4193, 4194, 4195, 3905,
-     3905, 3905, 3905, 4196, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4197, 4197,
-     3905, 3905, 3905, 4197, 4198, 3905, 4199, 3905, 3905, 4199,
-     4199, 4199, 4200, 3905, 4201, 4202, 4203, 4203, 4204, 3905,
-
-     3905, 3905, 4205, 4205, 3905, 3905, 3905, 4206, 3905, 3905,
-     3905, 3905, 3905, 3905, 4207, 3905, 3905, 3905, 4208, 4208,
-     3905, 3905, 3905, 4209, 3905, 3905, 3905, 4210, 4210, 4210,
-     4210, 4211, 4212, 4212, 4212, 3905, 3905, 3905, 3905, 3905,
-     4212, 4212, 4212, 4212, 4212, 4212, 4212, 4212, 4212, 4212,
-     4213, 4214, 4215, 4215, 3905, 3905, 4215, 4215, 4215, 4216,
-     3905, 3905, 3905, 4217, 3905, 3905, 4218, 3905, 4219, 4219,
-     4219, 4219, 4220, 4221, 4222, 4223, 4224, 3905, 3905, 4225,
-     4226, 4227, 4227, 4227, 4227, 3905, 3905, 3905, 4227, 4227,
-     4228, 3905, 4229, 4230, 3905, 3905, 3905, 3905, 4231, 3905,
-
-     3905, 4231, 4231, 4231, 4232, 4233, 4234, 4235, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 4235, 3905, 3905, 4235,
-     4236, 3905, 3905, 3905, 3905, 3905, 3905, 4237, 4238, 4239,
-     4240, 4241, 4241, 4241, 4242, 4243, 4243, 3905, 3905, 4244,
-     3905, 3905, 3905, 4245, 3905, 4246, 4247, 3905, 3905, 4247,
-     4248, 4249, 4250, 3905, 3905, 3905, 4251, 4251, 3905, 3905,
-     3905, 4251, 4252, 4253, 4254, 4254, 3905, 4254, 3905, 3905,
-     4255, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 4256, 4256, 4256, 4257, 3905, 4258,
-     3905, 3905, 3905, 4258, 4258, 4258, 4259, 3905, 3905, 3905,
-     4260, 4261, 4261, 4262, 4263, 4263, 4264, 4265, 4266, 4266,
-     4267, 4268, 4268, 3905, 3905, 4268, 4269, 3905, 3905, 4270,
-     4270, 3905, 3905, 3905, 4270, 4270, 4270, 4270, 4270, 4270,
-     3905, 3905, 4270, 4270, 4270, 4271, 4272, 4273, 4273, 3905,
-     3905, 3905, 4273, 3905, 3905, 4273, 4274, 3905, 3905, 3905,
-     3905, 4275, 3905, 3905, 3905, 4276, 4277, 4277, 4277, 4277,
-     4278, 4279, 4280, 3905, 3905, 4281, 3905, 3905, 3905, 4282,
-
-     4283, 4284, 3905, 3905, 4284, 4284, 3905, 3905, 4284, 4285,
-     3905, 4286, 4287, 3905, 3905, 3905, 3905, 4288, 3905, 3905,
-     3905, 4288, 4288, 4288, 4289, 3905, 3905, 4290, 4291, 3905,
-     3905, 3905, 4291, 3905, 3905, 3905, 4291, 4292, 4293, 4294,
-     4295, 4296, 4297, 4297, 4297, 4298, 4299, 3905, 3905, 3905,
-     3905, 3905, 4300, 3905, 3905, 3905, 3905, 4301, 3905, 4302,
-     4303, 3905, 3905, 3905, 3905, 3905, 4304, 4305, 4306, 4307,
-     4307, 4307, 4308, 4309, 4310, 4310, 3905, 4311, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4312, 4313, 3905,
-     4314, 4314, 4314, 4314, 4315, 3905, 3905, 3905, 3905, 4316,
-     4317, 4317, 4318, 3905, 3905, 3905, 3905, 4319, 4320, 3905,
-     3905, 3905, 3905, 4321, 3905, 3905, 4322, 3905, 3905, 3905,
-     3905, 3905, 4323, 3905, 3905, 3905, 3905, 3905, 4324, 4324,
-     4324, 3905, 3905, 4324, 4324, 4324, 3905, 3905, 3905, 3905,
-     3905, 4324, 4324, 4325, 4326, 4327, 4327, 3905, 3905, 3905,
-     3905, 3905, 4327, 3905, 3905, 3905, 4328, 4329, 4330, 4330,
-     4330, 4330, 3905, 3905, 4331, 4332, 3905, 3905, 3905, 4333,
-
-     4334, 4335, 4336, 3905, 3905, 3905, 3905, 3905, 4336, 3905,
-     3905, 3905, 4336, 3905, 3905, 3905, 4337, 4338, 3905, 3905,
-     3905, 3905, 4339, 4339, 4339, 4339, 4340, 3905, 3905, 3905,
-     3905, 3905, 4341, 4341, 4341, 4342, 4343, 4344, 4345, 4346,
-     3905, 3905, 4347, 3905, 3905, 4348, 4349, 3905, 3905, 3905,
-     4350, 3905, 4351, 3905, 4352, 4353, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4354, 4355, 3905,
-     3905, 3905, 3905, 3905, 3905, 4356, 4357, 4358, 4359, 4359,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 4360, 4361, 3905, 4362, 4362, 4362, 4362, 3905, 3905,
-     3905, 4363, 4364, 3905, 3905, 4365, 3905, 3905, 3905, 3905,
-     3905, 3905, 4366, 4367, 3905, 3905, 3905, 3905, 3905, 3905,
-     4368, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4369,
-     3905, 3905, 3905, 4370, 4370, 4370, 3905, 3905, 3905, 3905,
-     3905, 4370, 4370, 3905, 3905, 3905, 4370, 4370, 4371, 4372,
-     4373, 4373, 3905, 3905, 3905, 4373, 4374, 4375, 4376, 3905,
-     3905, 4376, 4376, 4376, 4377, 4378, 4379, 4380, 3905, 3905,
-
-     4381, 3905, 3905, 3905, 4381, 4381, 3905, 3905, 3905, 4382,
-     3905, 3905, 3905, 4383, 4383, 4383, 4383, 4384, 4385, 3905,
-     3905, 4385, 4386, 4387, 3905, 3905, 4388, 4389, 3905, 3905,
-     3905, 3905, 3905, 4390, 3905, 3905, 3905, 4391, 3905, 3905,
-     4392, 4393, 3905, 4394, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4395,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4396, 4397,
-     4398, 4399, 4399, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4400, 4401, 3905,
-     3905, 3905, 4402, 4402, 4402, 3905, 4403, 4404, 3905, 3905,
-     3905, 4405, 4406, 4407, 4408, 3905, 3905, 3905, 4409, 4410,
-     4410, 4410, 3905, 3905, 3905, 4410, 4410, 4410, 3905, 3905,
-     4411, 3905, 3905, 4412, 4412, 4412, 4413, 4414, 4415, 3905,
-     3905, 3905, 4415, 4415, 4415, 4416, 4417, 4418, 4419, 4420,
-     4420, 4420, 3905, 3905, 3905, 3905, 4421, 3905, 3905, 3905,
-     4422, 4422, 4422, 4423, 4424, 3905, 3905, 3905, 4424, 3905,
-     3905, 4425, 4426, 3905, 3905, 3905, 3905, 3905, 4427, 4428,
-     3905, 3905, 3905, 4429, 4430, 3905, 4431, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 4432, 3905, 3905, 3905, 4433, 4434, 4435, 4436, 4436,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     4437, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4438,
-     4438, 3905, 4439, 3905, 3905, 4440, 4441, 4442, 4443, 3905,
-     3905, 4444, 4444, 4444, 4444, 3905, 3905, 4444, 4444, 3905,
-     3905, 3905, 3905, 3905, 4445, 4445, 4445, 4446, 3905, 3905,
-     3905, 3905, 4447, 4447, 4447, 4447, 3905, 3905, 4448, 4449,
-
-     3905, 3905, 4450, 4450, 4450, 3905, 4451, 3905, 3905, 3905,
-     3905, 3905, 4452, 4452, 3905, 3905, 3905, 3905, 4453, 4454,
-     4455, 4456, 3905, 3905, 4457, 4458, 3905, 4459, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4460, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4461,
-     4462, 4463, 4464, 4464, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 4465, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 4441, 4442, 4443, 4444,
-
-     4444, 4444, 4444, 3905, 3905, 3905, 4444, 4444, 3905, 3905,
-     3905, 3905, 3905, 3905, 4445, 4445, 3905, 3905, 4446, 3905,
-     3905, 3905, 4447, 4447, 4447, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 4449, 3905, 3905, 3905, 4450, 4450, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 4453, 4454, 4455, 4456, 4457, 4458, 3905, 4459,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     4460, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 4461, 4462, 4463, 4464, 4464, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4441,
-     4442, 4443, 4444, 4444, 3905, 3905, 4444, 4444, 4444, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4445, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 4447, 4447, 4447, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4449, 4450, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 4453, 3905, 3905, 3905,
-     3905, 4456, 4457, 4458, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4460, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 4463, 4464, 4464, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 4441, 4442, 4443, 4444,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4444, 4444, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4445, 3905, 3905,
-     3905, 4447, 3905, 3905, 4447, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 4450, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4453,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     4458, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 4460, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4463, 4464,
-     4464, 4464, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     4441, 3905, 3905, 4443, 4444, 3905, 3905, 3905, 3905, 3905,
-     3905, 4444, 4444, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 4445, 4447, 3905, 3905, 3905, 4447, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 4450, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4458, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4460, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 4463, 4464, 4464, 4464, 4466, 4467,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 4441, 4443, 4444, 3905, 3905, 4444, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 4445, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 4450, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 4460, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 4463, 4464, 4468, 4469,
-     4466, 4467, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     4443, 4444, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 4445, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 4450, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4463,
-     4468, 4464, 4470, 4469, 4471, 4464, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 4443, 4444, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4445, 3905, 3905,
-     3905, 3905, 4450, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4463,
-
-     4470, 3905, 4471, 4464, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 4463, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4463, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 4463,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 4463, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4463, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 4463, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 4463, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     4463, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 4463, 4463, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463, 4463,
-
-     4463, 4463, 4463, 3905,    0, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905
+     3886, 3886, 3887, 3887, 3887, 3887, 3888, 3888, 3889, 3889,
+     3890, 3890, 3891, 3891, 3891, 3891, 3892, 3892, 3893, 3893,
+     3894, 3894, 3894, 3894, 3886, 3886, 3894, 3894, 3894, 3894,
+     3886, 3886, 3894, 3894, 3886, 3886, 3894, 3894, 3894, 3894,
+     3895, 3895, 3896, 3896, 3886, 3886, 3896, 3896, 3896, 3896,
+     3897, 3897, 3898, 3898, 3886, 3886, 3898, 3898, 3898, 3898,
+     3899, 3899, 3900, 3900, 3901, 3901, 3902, 3902, 3903, 3903,
+     3904, 3904, 3886, 3886, 3904, 3904, 3904, 3904, 3905, 3905,
+     3906, 3906, 3886, 3886, 3906, 3906, 3906, 3906, 3907, 3907,
+     3908, 3908, 3886, 3886, 3908, 3908, 3908, 3908, 3909, 3909,
+
+     3910, 3910, 3911, 3911, 3912, 3912, 3886, 3886, 3912, 3912,
+     3912, 3912, 3913, 3913, 3914, 3914, 3886, 3886, 3914, 3914,
+     3914, 3914, 3915, 3915, 3916, 3916, 3886, 3886, 3916, 3916,
+     3916, 3916, 3917, 3917, 3918, 3918, 3919, 3919, 3920, 3920,
+     3886, 3886, 3920, 3920, 3920, 3920, 3921, 3921, 3922, 3922,
+     3886, 3886, 3922, 3922, 3922, 3922, 3923, 3923, 3924, 3924,
+     3925, 3925, 3926, 3926, 3927, 3927, 3928, 3928, 3929, 3929,
+     3930, 3930, 3886, 3886, 3931, 3931, 3932, 3932, 3932, 3932,
+     3886, 3886, 3932, 3932, 3932, 3932, 3886, 3886, 3932, 3932,
+     3886, 3886, 3932, 3932, 3932, 3932, 3933, 3933, 3934, 3934,
+
+     3886, 3886, 3934, 3934, 3934, 3934, 3935, 3935, 3936, 3936,
+     3937, 3937, 3938, 3938, 3939, 3939, 3940, 3940, 3886, 3886,
+     3940, 3940, 3940, 3940, 3941, 3941, 3942, 3942, 3943, 3943,
+     3944, 3944, 3886, 3886, 3944, 3944, 3944, 3944, 3945, 3945,
+     3946, 3946, 3886, 3886, 3946, 3946, 3946, 3946, 3947, 3947,
+     3948, 3948, 3949, 3949, 3950, 3950, 3951, 3951, 3952, 3952,
+     3952, 3952, 3886, 3886, 3952, 3952, 3952, 3952, 3886, 3886,
+     3952, 3952, 3886, 3886, 3952, 3952, 3952, 3952, 3953, 3953,
+     3954, 3954, 3886, 3886, 3954, 3954, 3954, 3954, 3886, 3886,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3955, 3885, 3885, 3955, 3955, 3885, 3885, 3885,  328, 3885,
+      330,  328,  331,  330, 3885, 3885, 3885, 3956, 3885, 3885,
+     3956, 3956, 3956, 3885, 3885,  330,  330,  330, 3885, 3885,
+     3885, 3957, 3885, 3885, 3957, 3957, 3957, 3957, 3957, 3885,
+     3885,  330,  330,  330, 3885, 3885, 3885, 3958, 3885, 3885,
+     3958, 3885, 3885, 3885, 3885, 3885, 3885, 3959, 3885, 3885,
+     3959, 3959, 3959, 3885, 3885, 3885, 3885, 3885, 3885, 3960,
+     3885, 3885, 3960, 3960, 3960, 3885, 3885,  330,  330, 3885,
+
+     3885, 3885, 3961, 3885, 3885, 3961, 3961, 3885, 3885,  330,
+      330, 3885, 3885, 3885, 3962, 3885, 3885, 3962, 3962, 3962,
+     3885, 3885,  330,  330, 3885, 3885, 3885, 3963, 3885, 3885,
+     3963, 3963, 3963, 3963, 3963, 3963, 3885, 3885, 3885, 3885,
+     3885, 3885, 3964, 3885, 3885, 3964, 3964, 3964, 3964, 3964,
+     3964, 3964, 3964, 3885, 3885,  330,  330, 3885, 3885, 3885,
+     3965, 3885, 3885, 3965, 3885, 3885,  330,  330, 3885, 3885,
+     3885, 3966, 3885, 3885, 3966, 3966, 3966, 3966, 3966, 3885,
+     3885,  330,  330,  330, 3885, 3885, 3885, 3967, 3885, 3885,
+     3967, 3967, 3967, 3885, 3885, 3885, 3885, 3885, 3885, 3968,
+
+     3885, 3885, 3968, 3885, 3885,  330,  506,  330, 3885, 3885,
+     3885, 3969, 3885, 3885, 3969, 3969, 3969, 3969, 3885, 3885,
+      330,  330, 3885, 3885, 3885, 3970, 3885, 3885, 3970, 3970,
+     3885, 3885, 3885, 3885, 3885, 3885, 3971, 3885, 3885, 3971,
+     3971, 3885, 3885, 3885, 3885, 3885, 3885, 3972, 3885, 3885,
+     3972, 3972, 3885, 3885, 3885, 3885, 3885, 3885, 3973, 3885,
+     3885, 3973, 3973, 3973, 3973, 3973, 3973, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3974, 3885, 3885, 3974, 3885, 3885,
+      506,  581,  330,  330,  330,  330, 3885, 3885, 3885, 3975,
+     3885, 3885, 3975, 3975, 3975, 3975, 3975, 3885, 3885,  330,
+
+      330, 3885, 3885, 3885, 3976, 3885, 3885, 3976, 3976, 3885,
+     3885, 3885, 3885, 3885, 3885, 3977, 3885, 3885, 3977, 3977,
+     3977, 3977, 3977, 3885, 3885, 3885, 3885, 3885, 3885, 3978,
+     3885, 3885, 3978, 3978, 3885, 3885,  330,  330, 3885, 3885,
+     3885, 3979, 3885, 3885, 3979, 3979, 3885, 3885, 3885, 3885,
+     3885, 3885, 3980, 3885, 3885, 3980, 3980, 3980, 3980, 3885,
+     3885,  330,  330, 3885, 3885, 3885, 3981, 3885, 3885, 3981,
+     3981, 3981, 3981, 3885, 3885,  330,  330,  330, 3885, 3885,
+     3885, 3982, 3885, 3885, 3982, 3982, 3982, 3885, 3885, 3885,
+     3885, 3885, 3983, 3885, 3885, 3983, 3983, 3983, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3984, 3885, 3885, 3984, 3984, 3885,
+     3885, 3885,  712,  330,  330, 3885, 3885, 3885, 3985, 3885,
+     3885, 3985, 3985, 3985, 3885, 3885,  330,  330, 3885, 3986,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3987, 3987, 3987, 3988, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3989, 3989, 3989, 3989, 3989, 3990, 3885, 3885, 3991,
+     3991, 3991, 3991, 3991, 3991, 3992, 3885, 3885, 3993, 3993,
+
+     3994, 3885, 3995, 3995, 3995, 3995, 3996, 3885, 3997, 3997,
+     3997, 3997, 3998, 3885, 3999, 3999, 3999, 4000, 3885, 4001,
+     4001, 4001, 4001, 4002, 3885, 4003, 4003, 4003, 4003, 4003,
+     4003, 4003, 4003, 4004, 3885, 4005, 4005, 4005, 4005, 4005,
+     4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005, 4005,
+     4006, 3885, 4007, 4007, 4008, 3885, 4009, 4009, 4009, 4009,
+     4009, 4009, 4009, 4010, 3885, 3885, 4011, 4011, 4011, 4011,
+     4012, 3885, 4013, 4013, 4014, 3885, 3885, 3885, 4015, 4015,
+     4015, 4015, 4015, 4015, 4016, 3885, 4017, 4017, 4017, 4018,
+     3885, 4019, 4019, 4019, 4020, 3885, 4021, 4021, 4021, 4022,
+
+     3885, 4023, 4023, 4023, 4023, 4023, 4023, 4023, 4023, 4024,
+     3885, 3885, 4025, 4025, 4026, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 4027, 4027, 4027, 4027, 4027, 4027, 4028, 3885,
+     4029, 4029, 4029, 4030, 3885, 4031, 4031, 4031, 4031, 4031,
+     4031, 4031, 4031, 4031, 4032, 3885, 4033, 4033, 4033, 4033,
+     4034, 3885, 4035, 4035, 4035, 4036, 3885, 4037, 4037, 4037,
+     4037, 4037, 4038, 3885, 4039, 4039, 4039, 4039, 4039, 4040,
+     3885, 3885, 4041, 4041, 4041, 4041, 3885, 4042, 3885, 3885,
+     4043, 4043, 4043, 4043, 4044, 3885, 4045, 4045, 4045, 4046,
+     3885, 4047, 4047, 4047, 4047, 4047, 4048, 4049, 3885, 4049,
+
+     3885, 3885, 3885, 4050, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 4051, 4052, 4052, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 4053, 4053, 4053, 4053, 4054, 4054, 3885,
+     4055, 4055, 4055, 4055, 4055, 4056, 4056, 3885, 4057, 4058,
+     4058, 4059, 3885, 3885, 4059, 4060, 4060, 4061, 4061, 4061,
+     4062, 4062, 4063, 4063, 4064, 4064, 4065, 4065, 4065, 4066,
+     4066, 3885, 3885, 3885, 3885, 4067, 4067, 4067, 4067, 4067,
+
+     4068, 4068, 4069, 3885, 3885, 4069, 3885, 3885, 4069, 4069,
+     4069, 4069, 4069, 4069, 4069, 4069, 4069, 4069, 4070, 4070,
+     3885, 3885, 4071, 4071, 4072, 4072, 4072, 3885, 3885, 4072,
+     4072, 4072, 4073, 4073, 3885, 4074, 3885, 3885, 3885, 3885,
+     4075, 4075, 4076, 4077, 4077, 3885, 3885, 4078, 3885, 3885,
+     4078, 4078, 4078, 4079, 4079, 4080, 3885, 3885, 4081, 4081,
+     3885, 3885, 4082, 4083, 4083, 4084, 4084, 4085, 4085, 4086,
+     4086, 4086, 3885, 3885, 4086, 4086, 4086, 4087, 4087, 3885,
+     4088, 4089, 4089, 3885, 3885, 3885, 3885, 4090, 4090, 4090,
+     4090, 4090, 4091, 4091, 3885, 3885, 4092, 4093, 4093, 4094,
+
+     3885, 3885, 4094, 4094, 4094, 4094, 4094, 4094, 4095, 4095,
+     4096, 4096, 4096, 4097, 4097, 4098, 3885, 3885, 4099, 4099,
+     4100, 4100, 3885, 3885, 4100, 4101, 4101, 4102, 3885, 3885,
+     4102, 4102, 4103, 4103, 3885, 4104, 3885, 3885, 4104, 3885,
+     4105, 4105, 3885, 4106, 4106, 4106, 4107, 4107, 3885, 3885,
+     4108, 4109, 4109, 4110, 4110, 4110, 4110, 4111, 4111, 4112,
+     3885, 3885, 4112, 3885, 3885, 4113, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 4114, 3885, 4115, 3885, 4115, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 4116, 4116, 3885, 3885, 4116, 3885, 4117, 3885, 4117,
+     3885, 4118, 4118, 4118, 4118, 4118, 3885, 4119, 3885, 4119,
+     3885, 4120, 3885, 4121, 3885, 4121, 4122, 3885, 3885, 3885,
+     4122, 3885, 4123, 3885, 4123, 3885, 3885, 4124, 4124, 3885,
+     3885, 3885, 4125, 3885, 4125, 3885, 3885, 3885, 3885, 3885,
+     4126, 3885, 4126, 3885, 3885, 4127, 4127, 3885, 3885, 3885,
+     4128, 3885, 4128, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 4129, 4129, 4129, 4129, 3885, 4130, 3885, 4130, 4131,
+
+     4131, 4131, 3885, 3885, 3885, 4131, 3885, 3885, 3885, 3885,
+     3885, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131, 4131,
+     3885, 4132, 3885, 4132, 3885, 3885, 3885, 3885, 4133, 3885,
+     4133, 4134, 4134, 4134, 3885, 3885, 3885, 4134, 4134, 4134,
+     3885, 4135, 3885, 4135, 3885, 4136, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 4137, 3885, 4137, 4138, 3885, 4139, 3885,
+     4139, 3885, 4140, 3885, 3885, 3885, 4140, 4140, 4140, 3885,
+     4141, 3885, 4141, 4142, 3885, 3885, 3885, 3885, 4143, 3885,
+     4143, 3885, 3885, 3885, 4144, 3885, 4145, 3885, 4145, 4146,
+     4146, 3885, 4147, 3885, 4147, 4148, 4148, 4148, 4148, 3885,
+
+     3885, 3885, 3885, 3885, 4148, 4148, 3885, 4149, 3885, 4149,
+     3885, 4150, 3885, 4151, 3885, 4151, 3885, 3885, 3885, 3885,
+     4152, 4152, 4152, 4152, 4152, 3885, 4153, 3885, 4153, 3885,
+     3885, 3885, 4154, 3885, 4155, 3885, 4155, 4156, 3885, 3885,
+     3885, 3885, 3885, 4156, 3885, 3885, 4156, 4156, 4156, 3885,
+     4157, 3885, 4157, 3885, 3885, 3885, 3885, 4158, 3885, 4159,
+     3885, 4159, 4160, 3885, 3885, 3885, 3885, 4161, 3885, 4161,
+     4162, 4162, 3885, 3885, 3885, 4162, 3885, 4163, 3885, 4163,
+     4164, 3885, 3885, 3885, 4164, 4164, 3885, 4165, 3885, 4165,
+     3885, 4166, 3885, 3885, 3885, 4166, 3885, 3885, 4167, 3885,
+
+     4167, 4168, 4168, 4168, 3885, 4169, 3885, 4169, 3885, 3885,
+     3885, 4170, 3885, 4171, 3885, 4171, 3885, 3885, 4172, 4172,
+     3885, 3885, 4172, 3885, 4173, 3885, 4173, 4174, 4175, 3885,
+     3885, 3885, 3885, 4176, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4177, 4177,
+     3885, 3885, 3885, 4177, 4178, 3885, 4179, 3885, 3885, 4179,
+     4179, 4179, 4180, 3885, 4181, 4182, 4183, 4183, 4184, 3885,
+
+     3885, 3885, 4185, 4185, 3885, 3885, 3885, 4186, 3885, 3885,
+     3885, 3885, 3885, 3885, 4187, 3885, 3885, 3885, 4188, 4188,
+     3885, 3885, 3885, 4189, 3885, 3885, 3885, 4190, 4190, 4190,
+     4190, 4191, 4192, 4192, 4192, 3885, 3885, 3885, 3885, 3885,
+     4192, 4192, 4192, 4192, 4192, 4192, 4192, 4192, 4192, 4192,
+     4193, 4194, 4195, 4195, 3885, 3885, 4195, 4195, 4195, 4196,
+     3885, 3885, 3885, 4197, 3885, 3885, 4198, 3885, 4199, 4199,
+     4199, 4199, 4200, 4201, 4202, 4203, 4204, 3885, 3885, 4205,
+     4206, 4207, 4207, 4207, 4207, 3885, 3885, 3885, 4207, 4207,
+     4208, 3885, 4209, 4210, 3885, 3885, 3885, 3885, 4211, 3885,
+
+     3885, 4211, 4211, 4211, 4212, 4213, 4214, 4215, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4215, 3885, 3885, 4215,
+     4216, 3885, 3885, 3885, 3885, 3885, 3885, 4217, 4218, 4219,
+     4220, 4221, 4221, 4221, 4222, 4223, 4223, 3885, 3885, 4224,
+     3885, 3885, 3885, 4225, 3885, 4226, 4227, 3885, 3885, 4227,
+     4228, 4229, 4230, 3885, 3885, 3885, 4231, 4231, 3885, 3885,
+     3885, 4231, 4232, 4233, 4234, 4234, 3885, 4234, 3885, 3885,
+     4235, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 4236, 4236, 4236, 4237, 3885, 4238,
+     3885, 3885, 3885, 4238, 4238, 4238, 4239, 3885, 3885, 3885,
+     4240, 4241, 4241, 4242, 4243, 4243, 4244, 4245, 4246, 4246,
+     4247, 4248, 4248, 3885, 3885, 4248, 4249, 3885, 3885, 4250,
+     4250, 3885, 3885, 3885, 4250, 4250, 4250, 4250, 4250, 4250,
+     3885, 3885, 4250, 4250, 4250, 4251, 4252, 4253, 4253, 3885,
+     3885, 3885, 4253, 3885, 3885, 4253, 4254, 3885, 3885, 3885,
+     3885, 4255, 3885, 3885, 3885, 4256, 4257, 4257, 4257, 4257,
+     4258, 4259, 4260, 3885, 3885, 4261, 3885, 3885, 3885, 4262,
+
+     4263, 4264, 3885, 3885, 4264, 4264, 3885, 3885, 4264, 4265,
+     3885, 4266, 4267, 3885, 3885, 3885, 3885, 4268, 3885, 3885,
+     3885, 4268, 4268, 4268, 4269, 3885, 3885, 4270, 4271, 3885,
+     3885, 3885, 4271, 3885, 3885, 3885, 4271, 4272, 4273, 4274,
+     4275, 4276, 4277, 4277, 4277, 4278, 4279, 3885, 3885, 3885,
+     3885, 3885, 4280, 3885, 3885, 3885, 3885, 4281, 3885, 4282,
+     4283, 3885, 3885, 3885, 3885, 3885, 4284, 4285, 4286, 4287,
+     4287, 4287, 4288, 4289, 4290, 4290, 3885, 4291, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4292, 4293, 3885,
+     4294, 4294, 4294, 4294, 4295, 3885, 3885, 3885, 3885, 4296,
+     4297, 4297, 4298, 3885, 3885, 3885, 3885, 4299, 4300, 3885,
+     3885, 3885, 3885, 4301, 3885, 3885, 4302, 3885, 3885, 3885,
+     3885, 3885, 4303, 3885, 3885, 3885, 3885, 3885, 4304, 4304,
+     4304, 3885, 3885, 4304, 4304, 4304, 3885, 3885, 3885, 3885,
+     3885, 4304, 4304, 4305, 4306, 4307, 4307, 3885, 3885, 3885,
+     3885, 3885, 4307, 3885, 3885, 3885, 4308, 4309, 4310, 4310,
+     4310, 4310, 3885, 3885, 4311, 4312, 3885, 3885, 3885, 4313,
+
+     4314, 4315, 4316, 3885, 3885, 3885, 3885, 3885, 4316, 3885,
+     3885, 3885, 4316, 3885, 3885, 3885, 4317, 4318, 3885, 3885,
+     3885, 3885, 4319, 4319, 4319, 4319, 4320, 3885, 3885, 3885,
+     3885, 3885, 4321, 4321, 4321, 4322, 4323, 4324, 4325, 4326,
+     3885, 3885, 4327, 3885, 3885, 4328, 4329, 3885, 3885, 3885,
+     4330, 3885, 4331, 3885, 4332, 4333, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4334, 4335, 3885,
+     3885, 3885, 3885, 3885, 3885, 4336, 4337, 4338, 4339, 4339,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 4340, 4341, 3885, 4342, 4342, 4342, 4342, 3885, 3885,
+     3885, 4343, 4344, 3885, 3885, 4345, 3885, 3885, 3885, 3885,
+     3885, 3885, 4346, 4347, 3885, 3885, 3885, 3885, 3885, 3885,
+     4348, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4349,
+     3885, 3885, 3885, 4350, 4350, 4350, 3885, 3885, 3885, 3885,
+     3885, 4350, 4350, 3885, 3885, 3885, 4350, 4350, 4351, 4352,
+     4353, 4353, 3885, 3885, 3885, 4353, 4354, 4355, 4356, 3885,
+     3885, 4356, 4356, 4356, 4357, 4358, 4359, 4360, 3885, 3885,
+
+     4361, 3885, 3885, 3885, 4361, 4361, 3885, 3885, 3885, 4362,
+     3885, 3885, 3885, 4363, 4363, 4363, 4363, 4364, 4365, 3885,
+     3885, 4365, 4366, 4367, 3885, 3885, 4368, 4369, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4370, 3885, 3885, 4371,
+     3885, 4372, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4373, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4374, 4375, 4376, 4377,
+     4377, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 4378, 4379, 3885, 3885, 3885,
+     4380, 4380, 4380, 3885, 4381, 4382, 3885, 3885, 3885, 4383,
+     4384, 4385, 4386, 3885, 3885, 3885, 4387, 4388, 4388, 4388,
+     3885, 3885, 3885, 4388, 4388, 4388, 3885, 3885, 4389, 3885,
+     3885, 4390, 4390, 4390, 4391, 4392, 4393, 3885, 3885, 3885,
+     4393, 4393, 4393, 4394, 4395, 4396, 4397, 4398, 4398, 4398,
+     3885, 3885, 3885, 3885, 4399, 3885, 3885, 3885, 4400, 4400,
+     4400, 4401, 4402, 3885, 3885, 3885, 4402, 3885, 3885, 4403,
+     4404, 3885, 3885, 3885, 3885, 3885, 4405, 3885, 3885, 3885,
+     4406, 3885, 4407, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4408, 3885, 3885,
+     3885, 4409, 4410, 4411, 4412, 4412, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4413, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 4414, 4414, 3885, 4415, 3885,
+     3885, 4416, 4417, 4418, 4419, 3885, 3885, 4420, 4420, 4420,
+     4420, 3885, 3885, 4420, 4420, 3885, 3885, 3885, 3885, 3885,
+     4421, 4421, 4421, 4422, 3885, 3885, 3885, 3885, 4423, 4423,
+     4423, 4423, 3885, 3885, 4424, 4425, 3885, 3885, 4426, 4426,
+
+     4426, 3885, 4427, 3885, 3885, 3885, 3885, 3885, 4428, 4428,
+     3885, 3885, 3885, 3885, 4429, 4430, 4431, 3885, 3885, 4406,
+     3885, 4407, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 4408, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 4409, 4410, 4411, 4412, 4412, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 4413, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     4417, 4418, 4419, 4420, 4420, 4420, 4420, 3885, 3885, 3885,
+
+     4420, 4420, 3885, 3885, 3885, 3885, 3885, 3885, 4421, 4421,
+     3885, 3885, 4422, 3885, 3885, 3885, 4423, 4423, 4423, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4425, 3885, 3885, 3885,
+     4426, 4426, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4429, 4430, 4431, 4406,
+     3885, 4407, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 4408, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 4409, 4410, 4411, 4412, 4412,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 4417, 4418, 4419, 4420, 4420, 3885, 3885, 4420, 4420,
+     4420, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4421,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4423, 4423, 4423,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4425,
+     4426, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4429, 3885,
+     3885, 3885, 3885, 4406, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4408, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 4411, 4412, 4412, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4417, 4418, 4419, 4420,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4420, 4420, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4421, 3885, 3885,
+     3885, 4423, 3885, 3885, 4423, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 4426, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4429,
+     3885, 3885, 3885, 3885, 3885, 3885, 4406, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4408, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 4411, 4412, 4412, 4412, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4417, 3885, 3885, 4419,
+     4420, 3885, 3885, 3885, 3885, 3885, 3885, 4420, 4420, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4421, 4423, 3885,
+     3885, 3885, 4423, 3885, 3885, 3885, 3885, 3885, 3885, 4426,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4406, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4408, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 4411, 4412, 4412, 4412, 4432, 4433,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 4417, 4419, 4420, 3885, 3885, 4420, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4421, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 4426, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 4408, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4411, 4412, 4434, 4435,
+     4432, 4433, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     4419, 4420, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 4421, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 4426, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4411,
+     4434, 4412, 4436, 4435, 4437, 4412, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 4419, 4420, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4421, 3885, 3885,
+     3885, 3885, 4426, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4411,
+     4436, 3885, 4437, 4412, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4411, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4411, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 4411,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 4411, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4411, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 4411, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 4411, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     4411, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 4411, 4411, 3885, 3885, 3885, 3885, 3885,
+     3885, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 3885,    0, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885
     } ;
 
-static yyconst flex_uint16_t yy_nxt[14073] =
+static yyconst flex_uint16_t yy_nxt[13918] =
     {   0,
-     3905,  294,  295,  294,  294,  295,  294,  294,  295,  294,
+     3885,  294,  295,  294,  294,  295,  294,  294,  295,  294,
       294,  295,  294,  299,  295,  299,  305,  296,  302,  305,
-      296,  302,  999,  297, 3905,  303,  297,  796,  303,  300,
+      296,  302,  999,  297, 3885,  303,  297,  796,  303,  300,
       299,  295,  299,  730,  306,  308,  309,  306,  308,  309,
       310,  311,  748,  310,  311,  730,  300,  315,  316,  731,
       312,  308,  309,  312,  313,  733,  310,  308,  309, 1240,
@@ -2013,7 +2002,7 @@ static yyconst flex_uint16_t yy_nxt[14073] =
       482,  733,  910,  412,  412,  484,  481,  295,  481,  418,
 
       963,  732,  419,  729,  729,  729,  970,  732,  729,  729,
-      729, 3905,  484, 1925,  420,  425,  426,  295,  426,  425,
+      729, 3885,  484, 1925,  420,  425,  426,  295,  426,  425,
       425,  425,  425,  425,  425,  425,  427,  425,  425,  425,
       733,  425,  429,  425,  430,  425,  495,  295,  495,  495,
       295,  495,  505,  295,  505,  990,  732,  505,  295,  505,
@@ -2155,1282 +2144,1265 @@ static yyconst flex_uint16_t yy_nxt[14073] =
       675,  295,  675, 2414, 2415,  700,  295,  700, 2416, 2417,
       676, 2419, 2422,  678, 2424, 2427,  678,  308,  309,  545,
 
-      545,  701,  310,  700,  295,  700, 1403, 1403, 1403, 2443,
-     1404, 2444,  688, 1405, 2445,  551, 1890, 1890, 1890,  701,
+      545,  701,  310,  700,  295,  700, 1403, 1403, 1403, 2441,
+     1404, 2442,  688, 1405, 2443,  551, 1890, 1890, 1890,  701,
       552,  556,  557,  295,  557,  556,  556,  556,  556,  556,
-      556,  556,  558,  556,  556,  556, 2450,  556,  560,  556,
+      556,  556,  558,  556,  556,  556, 2448,  556,  560,  556,
       561,  556,  689,  711,  295,  711,  711,  295,  711,  711,
-      295,  711, 2451,  711,  295,  711, 1011, 1011, 1011,  712,
-     2454, 2455,  712, 2456, 2459,  713, 2452,  556,  556,  713,
-      562,  563,  564, 1012, 2453, 1407, 1407, 1407,  565, 1408,
-     2469,  566, 1409, 2478, 1867, 1280, 1280, 1280,  567,  556,
+      295,  711, 2449,  711,  295,  711, 1011, 1011, 1011,  712,
+     2452, 2453,  712, 2454, 2457,  713, 2450,  556,  556,  713,
+      562,  563,  564, 1012, 2451, 1407, 1407, 1407,  565, 1408,
+     2467,  566, 1409, 2476, 1867, 1280, 1280, 1280,  567,  556,
       557,  295,  557,  556,  556,  556,  556,  556,  556,  556,
 
-      558,  556,  556,  556, 2479,  556,  560,  556,  561,  556,
-      295,  295,  295,  295,  295,  295,  711,  295,  711, 2457,
-     2480,  711,  295,  711, 1261, 2481,  330, 2458, 2482,  330,
-     2471, 2473,  712, 2485, 2487,  556,  556,  712,  562,  563,
-      564, 1425, 1425, 1425, 2488, 1426,  565, 2489, 1427,  566,
-     1304, 1895, 1895, 1895, 2493, 2494,  567,  572,  573,  295,
+      558,  556,  556,  556, 2477,  556,  560,  556,  561,  556,
+      295,  295,  295,  295,  295,  295,  711,  295,  711, 2455,
+     2478,  711,  295,  711, 1261, 2479,  330, 2456, 2480,  330,
+     2469, 2471,  712, 2483, 2485,  556,  556,  712,  562,  563,
+      564, 1425, 1425, 1425, 2486, 1426,  565, 2487, 1427,  566,
+     1304, 1895, 1895, 1895, 2491, 2492,  567,  572,  573,  295,
       573,  572,  572,  572,  572,  572,  572,  572,  574,  572,
-      572,  572, 2496,  572,  576,  572,  577,  572,  711,  295,
+      572,  572, 2494,  572,  576,  572,  577,  572,  711,  295,
       711,  711,  295,  711,  295,  295,  295, 1896, 1867,  295,
-      295,  295, 2497, 2498,  714, 2499, 2502,  714, 2506, 2507,
+      295,  295, 2495, 2496,  714, 2497, 2500,  714, 2504, 2505,
 
-      332, 2508, 2510,  572,  572,  332,  711,  295,  711,  711,
-      295,  711, 1435, 1435, 1435, 2516, 1436, 2518, 2530, 1437,
-     2472, 2531,  713, 2532, 2536,  713, 2537,  578,  572,  573,
+      332, 2506, 2508,  572,  572,  332,  711,  295,  711,  711,
+      295,  711, 1435, 1435, 1435, 2514, 1436, 2516, 2528, 1437,
+     2470, 2529,  713, 2530, 2534,  713, 2535,  578,  572,  573,
       295,  573,  572,  572,  572,  572,  572,  572,  572,  574,
-      572,  572,  572, 2538,  572,  576,  572,  577,  572,  295,
-      295,  295,  295,  295,  295,  711,  295,  711, 2544, 2545,
-      711,  295,  711, 2546, 2549,  333, 2553, 2554,  333, 2555,
-     2556,  714, 2559, 2560,  572,  572,  714,  711,  295,  711,
-      711,  295,  711, 1447, 1447, 1447, 2561, 1448, 2562, 2563,
-     1449, 2575, 2579,  715, 2582, 2583,  715, 2589,  578,  587,
+      572,  572,  572, 2536,  572,  576,  572,  577,  572,  295,
+      295,  295,  295,  295,  295,  711,  295,  711, 2542, 2543,
+      711,  295,  711, 2544, 2547,  333, 2551, 2552,  333, 2553,
+     2554,  714, 2557, 2558,  572,  572,  714,  711,  295,  711,
+      711,  295,  711, 1447, 1447, 1447, 2559, 1448, 2560, 2561,
+     1449, 2573, 2577,  715, 2580, 2581,  715, 2592,  578,  587,
 
       588,  295,  588,  587,  587,  587,  587,  587,  587,  587,
-      589,  587,  587,  587, 2594,  587,  591,  587,  592,  587,
-      726,  295,  726,  726,  295,  726,  295,  295,  295, 2596,
-     2597,  295,  295,  295, 2598, 2602,  727, 2603, 2604,  727,
-     2605, 2606,  347, 2607, 2608,  587,  587,  347,  726,  295,
-      726, 2609, 2610,  593, 2611,  594, 2616, 1867,  595, 1897,
-     1897, 1897,  596, 2633,  727, 1867,  597,  587,  588,  295,
+      589,  587,  587,  587, 2593,  587,  591,  587,  592,  587,
+      726,  295,  726,  726,  295,  726,  295,  295,  295, 2594,
+     2598,  295,  295,  295, 2599, 2600,  727, 2601, 2602,  727,
+     2603, 2604,  347, 2605, 2606,  587,  587,  347,  726,  295,
+      726, 2607, 2612,  593, 2629,  594, 2630, 1867,  595, 1897,
+     1897, 1897,  596, 2631,  727, 1867,  597,  587,  588,  295,
       588,  587,  587,  587,  587,  587,  587,  587,  589,  587,
-      587,  587, 2634,  587,  591,  587,  592,  587,  726,  295,
-      726,  726,  295,  726,  726,  295,  726, 2635, 1073, 1073,
+      587,  587, 2632,  587,  591,  587,  592,  587,  726,  295,
+      726,  726,  295,  726,  726,  295,  726, 2634, 1073, 1073,
 
-     1073, 1092, 1092, 1092,  727, 2620, 2636,  728, 2638, 2619,
-      728, 2640, 2641,  587,  587, 1074, 2642,  748, 1093, 2644,
-     2645,  593,  875,  594, 2646, 2647,  595,  774, 2648, 2649,
-      596, 2650,  876, 2651,  597,  602,  603,  295,  603,  602,
+     1073, 1092, 1092, 1092,  727, 2616, 2636,  728, 2637, 2615,
+      728, 2638, 2640,  587,  587, 1074, 2641,  748, 1093, 2642,
+     2643,  593,  875,  594, 2644, 2645,  595,  774, 2646, 2647,
+      596, 2668,  876, 2669,  597,  602,  603,  295,  603,  602,
       602,  602,  602,  602,  602,  602,  604,  602,  602,  602,
-     2672,  602,  606,  602,  607,  602,  775, 2673, 2678, 1094,
-     1094, 1094,  752, 2674, 2679, 1276, 1276, 1276,  754, 2685,
-      776, 2686,  777, 2675,  760,  762, 1095, 2687, 2703,  760,
-      778,  602,  602, 1278, 2704,  877, 2705, 2720,  990, 1450,
-     1450, 1450,  608, 1451, 2721, 2722, 1452, 2725,  774, 2727,
+     2674,  602,  606,  602,  607,  602,  775, 2675, 2681, 1094,
+     1094, 1094,  752, 2670, 2682, 1276, 1276, 1276,  754, 2683,
+      776, 2699,  777, 2671,  760,  762, 1095, 2700, 2701,  760,
+      778,  602,  602, 1278, 2716,  877, 2717, 2721,  990, 1450,
+     1450, 1450,  608, 1451, 2722, 2723, 1452, 2724,  774, 2725,
 
-     1903, 1903, 1903, 2728, 2729,  609,  602,  603,  295,  603,
+     1903, 1903, 1903, 2726, 2727,  609,  602,  603,  295,  603,
       602,  602,  602,  602,  602,  602,  602,  604,  602,  602,
-      602, 2730,  602,  606,  602,  607,  602,  775, 2731, 1104,
-     1104, 1104, 1107, 1107, 1107, 2732, 2733, 1121, 1121, 1121,
-     2734,  776, 2735,  777, 2736,  760, 1105, 1904, 2737, 1108,
-     2738,  778,  602,  602, 1122, 1128, 1128, 1128, 1137, 1137,
-     1137, 2750, 2755,  608, 1464, 1464, 1464, 2756, 1465, 2759,
-     2760, 1466, 1129, 2761, 1867, 1138,  609,  613,  614,  295,
+      602, 2728,  602,  606,  602,  607,  602,  775, 2729, 1104,
+     1104, 1104, 1107, 1107, 1107, 2730, 2731, 1121, 1121, 1121,
+     2732,  776, 2744,  777, 2749,  760, 1105, 1904, 2750, 1108,
+     2753,  778,  602,  602, 1122, 1128, 1128, 1128, 1137, 1137,
+     1137, 2751, 2754,  608, 1464, 1464, 1464, 2755, 1465, 2756,
+     2752, 1466, 1129, 2759, 1867, 1138,  609,  613,  614,  295,
       614,  613,  613,  613,  613,  613,  613,  613,  615,  613,
-      613,  613, 2762,  613,  617,  613,  618,  613, 1139, 1139,
+      613,  613, 2760,  613,  617,  613,  618,  613, 1139, 1139,
 
-     1139, 1149, 1149, 1149, 1157, 1157, 1157, 2753, 1161, 1161,
-     1161, 1173, 1173, 1173, 2765, 1140, 2766, 2757, 1150, 2767,
-     2768, 1158, 1867,  613,  613, 1162, 2758, 2769, 1174, 1475,
-     1475, 1475,  619, 1476,  620, 2771, 1477, 2772,  621, 2773,
+     1139, 1149, 1149, 1149, 1157, 1157, 1157, 2747, 1161, 1161,
+     1161, 1173, 1173, 1173, 2761, 1140, 2762, 2757, 1150, 2763,
+     2765, 1158, 1867,  613,  613, 1162, 2758, 2766, 1174, 1475,
+     1475, 1475,  619, 1476,  620, 2767, 1477, 2769,  621, 2770,
      1906, 1906, 1906,  622,  623,  613,  614,  295,  614,  613,
       613,  613,  613,  613,  613,  613,  615,  613,  613,  613,
-     2754,  613,  617,  613,  618,  613, 1195, 1195, 1195, 1201,
-     1201, 1201, 1217, 1217, 1217, 2763, 1223, 1223, 1223, 1229,
-     1229, 1229, 2775, 1196, 2764, 2776, 1202, 1884, 2777, 1218,
-     2779,  613,  613, 1224, 2780, 2782, 1230, 1482, 1482, 1482,
-
-      619, 1483,  620, 2800, 1484, 2801,  621, 1907, 1907, 1907,
-     2802,  622,  623,  627,  628,  295,  628,  627,  627,  627,
-      627,  627,  627,  627,  629,  627,  627,  627, 2803,  627,
+     2748,  613,  617,  613,  618,  613, 1195, 1195, 1195, 1201,
+     1201, 1201, 1217, 1217, 1217, 2771, 1223, 1223, 1223, 1229,
+     1229, 1229, 2773, 1196, 2774, 2776, 1202, 1884, 2794, 1218,
+     2795,  613,  613, 1224, 2796, 2797, 1230, 1482, 1482, 1482,
+
+      619, 1483,  620, 2801, 1484, 2802,  621, 1907, 1907, 1907,
+     2809,  622,  623,  627,  628,  295,  628,  627,  627,  627,
+      627,  627,  627,  627,  629,  627,  627,  627, 2810,  627,
       631,  627,  632,  627, 1237, 1237, 1237, 1249, 1249, 1249,
-     1011, 1011, 1011, 2807, 1320, 1320, 1320, 1324, 1324, 1324,
-     2808, 1238, 2815, 2816, 1250, 2823, 2809, 1012, 2810,  627,
-      627, 1321, 2824, 2825, 1325,  633, 1500, 1500, 1500, 2837,
-     1501, 2811, 2838, 1502, 2853, 1911, 1911, 1911, 2854, 2855,
+     1011, 1011, 1011, 2817, 1320, 1320, 1320, 1324, 1324, 1324,
+     2818, 1238, 2819, 2831, 1250, 2832, 2803, 1012, 2804,  627,
+      627, 1321, 2847, 2848, 1325,  633, 1500, 1500, 1500, 2849,
+     1501, 2805, 2851, 1502, 2852, 1911, 1911, 1911, 2853, 2854,
       634,  627,  628,  295,  628,  627,  627,  627,  627,  627,
-      627,  627,  629,  627,  627,  627, 2856,  627,  631,  627,
+      627,  627,  629,  627,  627,  627, 2855,  627,  631,  627,
 
       632,  627, 1276, 1276, 1276, 1327, 1327, 1327, 1327, 1327,
-     1327, 1912, 2857, 3905, 3905, 3905, 2859, 3905, 3905, 3905,
-     1278, 2860, 2861, 1329, 2862, 2257, 1329,  627,  627, 2863,
-     3905, 2258, 2864,  633, 3905, 2259, 1530, 1530, 1530, 1279,
-     1531, 2260, 2865, 1532, 2866, 1330, 2867, 2868,  634,  639,
+     1327, 1912, 2856, 3885, 3885, 3885, 2857, 3885, 3885, 3885,
+     1278, 2858, 2859, 1329, 2860, 2257, 1329,  627,  627, 2861,
+     3885, 2258, 2862,  633, 3885, 2259, 1530, 1530, 1530, 1279,
+     1531, 2260, 2864, 1532, 2865, 1330, 2868, 2869,  634,  639,
       640,  295,  640,  639,  639,  639,  639,  639,  639,  639,
       641,  639,  639,  639, 1322,  639,  643,  639,  644,  639,
-     1337, 1337, 1337, 1343, 1343, 1343, 2869, 1326, 2870, 1323,
-     1337, 1337, 1337, 1343, 1343, 1343, 2872, 2812, 1339, 2813,
-     2873, 1345, 1911, 1911, 1911,  639,  639, 2876, 1339, 2877,
+     1337, 1337, 1337, 1343, 1343, 1343, 2870, 1326, 2871, 1323,
+     1337, 1337, 1337, 1343, 1343, 1343, 2874, 2806, 1339, 2807,
+     2866, 1345, 1911, 1911, 1911,  639,  639, 2875, 1339, 2867,
 
-      645, 1345, 2814, 1906, 1906, 1906,  646,  639,  640,  295,
+      645, 1345, 2808, 1906, 1906, 1906,  646,  639,  640,  295,
       640,  639,  639,  639,  639,  639,  639,  639,  641,  639,
-      639,  639, 2874,  639,  643,  639,  644,  639, 1896, 2878,
-     1340, 2875, 1073, 1073, 1073, 2879, 2882, 1352, 1352, 1352,
-     2883, 1352, 1352, 1352, 1356, 1356, 1356, 2880, 1346, 1074,
-     1919, 2884, 1261,  639,  639, 1354, 2881, 2889,  645, 1354,
-     2890, 1357, 2891, 1867,  646,  650,  651,  295,  651,  650,
+      639,  639, 2872,  639,  643,  639,  644,  639, 1896, 2876,
+     1340, 2873, 1073, 1073, 1073, 2881, 1867, 1352, 1352, 1352,
+     2882, 1352, 1352, 1352, 1356, 1356, 1356, 2883, 1346, 1074,
+     1919, 2884, 1261,  639,  639, 1354, 1867, 2885,  645, 1354,
+     2886, 1357, 2887, 2888,  646,  650,  651,  295,  651,  650,
       650,  650,  650,  650,  650,  650,  652,  650,  650,  650,
-     2892,  650,  654,  650,  655,  650, 1360, 1360, 1360, 1355,
-     1362, 1362, 1362, 2886, 2893, 1362, 1362, 1362, 3905, 3905,
+     2880,  650,  654,  650,  655,  650, 1360, 1360, 1360, 1355,
+     1362, 1362, 1362, 2878, 2879, 1362, 1362, 1362, 3885, 3885,
 
-     3905, 2887, 2894, 1361, 1366, 1366, 1366, 2895, 1364, 2896,
-     2897,  650,  650, 1364,  656, 3905,  657, 2080, 2080, 2080,
-     2898, 1367,  658, 1539, 1539, 1539, 2899, 1540, 2900, 2901,
-     1541, 2902, 2903,  659,  650,  651,  295,  651,  650,  650,
+     3885, 2889, 2890, 1361, 1366, 1366, 1366, 2891, 1364, 2892,
+     2893,  650,  650, 1364,  656, 3885,  657, 2080, 2080, 2080,
+     2894, 1367,  658, 1539, 1539, 1539, 2895, 1540, 2897, 2898,
+     1541, 2899, 2900,  659,  650,  651,  295,  651,  650,  650,
       650,  650,  650,  650,  650,  652,  650,  650,  650, 1358,
       650,  654,  650,  655,  650, 1368, 1368, 1368, 1370, 1370,
-     1370, 1370, 1370, 1370, 1359, 2905, 2906, 1365, 2907, 1374,
-     1374, 1374, 1369, 3905, 3905, 3905, 1372, 2908, 2909, 1372,
-      650,  650, 2910,  656, 2911,  657, 1375, 1880, 1880, 1880,
-     3905,  658, 1564, 1564, 1564, 2923, 1565, 2924, 2927, 1566,
+     1370, 1370, 1370, 1370, 1359, 2901, 2902, 1365, 2903, 1374,
+     1374, 1374, 1369, 3885, 3885, 3885, 1372, 2915, 2916, 1372,
+      650,  650, 2919,  656, 2920,  657, 1375, 1880, 1880, 1880,
+     3885,  658, 1564, 1564, 1564, 2921, 1565, 2922, 2925, 1566,
 
-     2928, 2929,  659,  664,  665,  295,  665,  664,  664,  664,
+     2926, 2929,  659,  664,  665,  295,  665,  664,  664,  664,
       664,  664,  664,  664,  666,  664,  664,  664, 2930,  664,
       668,  664,  669,  664, 1376, 1378, 1378, 1378, 1380, 1380,
-     1380, 2261, 2933, 1373, 1380, 1380, 1380, 2262, 2934, 1377,
-     2931, 2263, 1379, 1396, 1396, 1396, 1382, 2264, 2937,  664,
-      664, 2932, 1382, 2938,  670, 1573, 1573, 1573, 2935, 1574,
-      671, 1398, 1575, 1867,  672, 1883, 1883, 1883, 2946, 2936,
+     1380, 2261, 2938, 1373, 1380, 1380, 1380, 2262, 2939, 1377,
+     2923, 2263, 1379, 1396, 1396, 1396, 1382, 2264, 2940,  664,
+      664, 2924, 1382, 2951,  670, 1573, 1573, 1573, 2927, 1574,
+      671, 1398, 1575, 2969,  672, 1883, 1883, 1883, 2978, 2928,
       673,  664,  665,  295,  665,  664,  664,  664,  664,  664,
-      664,  664,  666,  664,  664,  664, 2947,  664,  668,  664,
+      664,  664,  666,  664,  664,  664, 2979,  664,  668,  664,
       669,  664, 1092, 1092, 1092, 1094, 1094, 1094, 1390, 1390,
 
-     1390, 1582, 1582, 1582, 2948, 1583, 1383, 2888, 1584, 1093,
-     2959, 2977, 1095, 2982, 2983, 1391, 2971,  664,  664, 3905,
-     3905, 3905,  670, 1593, 1593, 1593, 2972, 1594,  671, 2973,
-     1595, 2988,  672, 2091, 2091, 2091, 3905, 2989,  673,  679,
+     1390, 1582, 1582, 1582, 2980, 1583, 1383, 2981, 1584, 1093,
+     2982, 2983, 1095, 2984, 2985, 1391, 2963,  664,  664, 3885,
+     3885, 3885,  670, 1593, 1593, 1593, 2964, 1594,  671, 2965,
+     1595, 2986,  672, 2091, 2091, 2091, 3885, 2987,  673,  679,
       680,  295,  680,  679,  679,  679,  679,  679,  679,  679,
-      681,  679,  679,  679, 2990,  679,  683,  679,  684,  679,
-     1887, 1887, 1887, 3905, 3905, 3905, 2991, 1104, 1104, 1104,
-     2992, 2993, 1392, 3905, 3905, 3905, 2994, 3905, 3905, 3905,
-     3905, 1396, 1396, 1396, 1105,  679,  679, 1890, 1890, 1890,
-     3905, 2995, 2996,  685, 3905, 2997,  686, 2999, 3000, 1398,
+      681,  679,  679,  679, 2989,  679,  683,  679,  684,  679,
+     1887, 1887, 1887, 3885, 3885, 3885, 2990, 1104, 1104, 1104,
+     2991, 2992, 1392, 3885, 3885, 3885, 2993, 3885, 3885, 3885,
+     3885, 1396, 1396, 1396, 1105,  679,  679, 1890, 1890, 1890,
+     3885, 2994, 2995,  685, 3885, 2996,  686, 2997, 2998, 1398,
 
      2095, 2095, 2095,  687,  679,  680,  295,  680,  679,  679,
       679,  679,  679,  679,  679,  681,  679,  679,  679, 1393,
       679,  683,  679,  684,  679, 1394, 1107, 1107, 1107, 1399,
      1395, 1410, 1410, 1410, 1421, 1421, 1421, 1421, 1421, 1421,
-     1121, 1121, 1121, 1108, 1428, 1428, 1428, 3001, 1411, 3002,
-      679,  679, 1423, 2974, 3003, 1423, 3004, 1122,  685, 3005,
-     3006,  686, 1430, 2975, 3007, 2096, 2976, 3008,  687,  690,
+     1121, 1121, 1121, 1108, 1428, 1428, 1428, 2999, 1411, 3000,
+      679,  679, 1423, 2966, 1261, 1423, 3008, 1122,  685, 3009,
+     3010,  686, 1430, 2967, 3011, 2096, 2968, 3012,  687,  690,
       691,  295,  691,  690,  690,  690,  690,  690,  690,  690,
-      692,  690,  690,  690, 3009,  690,  694,  690,  695,  690,
-     3010, 1428, 1428, 1428, 3018, 3019, 1424, 1128, 1128, 1128,
+      692,  690,  690,  690, 3005,  690,  694,  690,  695,  690,
+     3013, 1428, 1428, 1428, 3014, 3015, 1424, 1128, 1128, 1128,
 
      1441, 1441, 1441, 1441, 1441, 1441, 1137, 1137, 1137, 1430,
-     1139, 1139, 1139, 3020, 1129,  690,  690, 3021, 1443, 3022,
-     3023, 1443,  696, 1138, 1895, 1895, 1895, 1140,  697, 1609,
-     1609, 1609, 3024, 1610, 3025, 1867, 1611,  698,  690,  691,
+     1139, 1139, 1139, 3016, 1129,  690,  690, 3017, 1443, 3018,
+     3019, 1443,  696, 1138, 1895, 1895, 1895, 1140,  697, 1609,
+     1609, 1609, 3020, 1610, 3022, 1867, 1611,  698,  690,  691,
       295,  691,  690,  690,  690,  690,  690,  690,  690,  692,
       690,  690,  690, 1431,  690,  694,  690,  695,  690, 1453,
-     1453, 1453, 1458, 1458, 1458, 1444, 1261, 3026, 1453, 1453,
-     1453, 1458, 1458, 1458, 1470, 1470, 1470, 1455, 3016, 1867,
-     1460, 1149, 1149, 1149,  690,  690, 1455, 3027, 3028, 1460,
-     3029,  696, 1472, 1895, 1895, 1895, 3015,  697, 1150, 3030,
+     1453, 1453, 1458, 1458, 1458, 1444, 3023, 3024, 1453, 1453,
+     1453, 1458, 1458, 1458, 1470, 1470, 1470, 1455, 3006, 1867,
+     1460, 1149, 1149, 1149,  690,  690, 1455, 3025, 3027, 1460,
+     3028,  696, 1472, 1895, 1895, 1895, 3029,  697, 1150, 3040,
 
      2098, 2098, 2098, 1897, 1897, 1897,  698,  702,  703,  295,
       703,  702,  702,  702,  702,  702,  702,  702,  704,  702,
-      702,  702, 3017,  702,  706,  702,  707,  702, 3032, 1912,
-     1456, 3033, 1461, 1470, 1470, 1470, 3034, 3035, 1157, 1157,
+      702,  702, 3007,  702,  706,  702,  707,  702, 3048, 1912,
+     1456, 3049, 1461, 1470, 1470, 1470, 3050, 3051, 1157, 1157,
      1157, 1478, 1478, 1478, 1478, 1478, 1478, 2099, 1161, 1161,
-     1161, 1472, 3037,  702,  702, 1158, 1272, 1272, 1272, 1480,
-     1273, 3038, 1480, 1274,  708, 1162, 1903, 1903, 1903, 1906,
-     1906, 1906, 3039,  709,  702,  703,  295,  703,  702,  702,
+     1161, 1472, 3052,  702,  702, 1158, 1272, 1272, 1272, 1480,
+     1273, 3053, 1480, 1274,  708, 1162, 1903, 1903, 1903, 1906,
+     1906, 1906, 3054,  709,  702,  703,  295,  703,  702,  702,
       702,  702,  702,  702,  702,  704,  702,  702,  702, 1473,
-      702,  706,  702,  707,  702, 1486, 1486, 1486, 3050, 3058,
+      702,  706,  702,  707,  702, 1486, 1486, 1486, 3055, 3056,
 
      1481, 1486, 1486, 1486, 1492, 1492, 1492, 1492, 1492, 1492,
-     1173, 1173, 1173, 1488, 3059, 1503, 1503, 1503, 3060, 1488,
-      702,  702, 1494, 3061, 3062, 1494, 3043, 1174, 1907, 1907,
-     1907,  708, 1504, 1911, 1911, 1911, 2186, 2186, 2186, 3044,
+     1173, 1173, 1173, 1488, 3057, 1503, 1503, 1503, 3058, 1488,
+      702,  702, 1494, 3062, 3065, 1494, 3033, 1174, 1907, 1907,
+     1907,  708, 1504, 1911, 1911, 1911, 2186, 2186, 2186, 3034,
       709,  716,  717,  295,  717,  716,  716,  716,  716,  716,
-      716,  716,  718,  716,  716,  716, 3063,  716,  720,  716,
-      721,  716, 3045, 1489, 1507, 1507, 1507, 3064, 3065, 1495,
-     3066, 3067, 1507, 1507, 1507, 3046, 1513, 1513, 1513, 1513,
-     1513, 1513, 1509, 1526, 1526, 1526, 3068,  716,  716, 3072,
-     1509, 3075, 3076,  722, 1515, 3077,  723, 1515, 1676, 1676,
+      716,  716,  718,  716,  716,  716, 3066,  716,  720,  716,
+      721,  716, 3035, 1489, 1507, 1507, 1507, 3067, 3068, 1495,
+     3069, 3070, 1507, 1507, 1507, 3036, 1513, 1513, 1513, 1513,
+     1513, 1513, 1509, 1526, 1526, 1526, 3071,  716,  716, 3074,
+     1509, 3078, 3082,  722, 1515, 3083,  723, 1515, 1676, 1676,
 
-     1676, 1528, 1677, 3078, 3079, 1678, 3080, 3081,  724,  716,
+     1676, 1528, 1677, 3086, 3079, 1678, 3087, 3090,  724,  716,
       717,  295,  717,  716,  716,  716,  716,  716,  716,  716,
       718,  716,  716,  716, 1510,  716,  720,  716,  721,  716,
-     1526, 1526, 1526, 1195, 1195, 1195, 3084, 3092, 1516, 1534,
-     1534, 1534, 1534, 1534, 1534, 1201, 1201, 1201, 1528, 3093,
-     1196, 1542, 1542, 1542, 3096,  716,  716, 1536, 3097, 3100,
-     1536,  722, 1202, 3115,  723, 1545, 1545, 1545, 1543, 1550,
-     1550, 1550, 1550, 1550, 1550, 2952,  724,  733, 3116, 1554,
-     1554, 1554, 1546, 3117,  748, 2953, 3118, 1552, 3119, 3120,
-     1552, 2954, 3121,  732,  749, 1529, 1555, 1556, 1556, 1556,
-
-     3905, 3905, 3905, 1559, 1559, 1559, 3088, 1537, 1559, 1559,
-     1559, 1217, 1217, 1217, 1557, 2955, 3122, 3905, 3124, 3089,
-     1553, 1561,  750,  751,  752, 2956, 1561, 3125, 1218,  753,
-      754, 2957, 3126,  755,  756, 3127, 3090,  757, 3128,  758,
-      759,  760, 3129, 1567, 1567, 1567, 3130,  761,  733, 3091,
-     3094, 1567, 1567, 1567, 1223, 1223, 1223, 1577, 1577, 1577,
-     1558, 1569, 3131, 3095,  732,  763, 1577, 1577, 1577, 1569,
-     1562, 1224, 1229, 1229, 1229, 1579, 3132, 3133, 1587, 1587,
-     1587, 1587, 1587, 1587, 1579, 1237, 1237, 1237, 3134, 1230,
-     1249, 1249, 1249,  750,  764,  765, 1589, 3135, 1261, 1589,
-
-      766,  767, 1238, 1867,  768,  756, 3143, 1250,  769, 3144,
-      770,  771,  772, 1570, 1598, 1598, 1598, 3098,  773,  733,
+     1526, 1526, 1526, 1195, 1195, 1195, 3080, 3101, 1516, 1534,
+     1534, 1534, 1534, 1534, 1534, 1201, 1201, 1201, 1528, 3081,
+     1196, 1542, 1542, 1542, 3102,  716,  716, 1536, 3103, 3104,
+     1536,  722, 1202, 3105,  723, 1545, 1545, 1545, 1543, 1550,
+     1550, 1550, 1550, 1550, 1550, 2944,  724,  733, 3106, 1554,
+     1554, 1554, 1546, 3107,  748, 2945, 3108, 1552, 3110, 3111,
+     1552, 2946, 3112,  732,  749, 1529, 1555, 1556, 1556, 1556,
+
+     3885, 3885, 3885, 1559, 1559, 1559, 3084, 1537, 1559, 1559,
+     1559, 1217, 1217, 1217, 1557, 2947, 3113, 3885, 3114, 3085,
+     1553, 1561,  750,  751,  752, 2948, 1561, 3115, 1218,  753,
+      754, 2949, 3116,  755,  756, 3117, 3088,  757, 3118,  758,
+      759,  760, 3119, 1567, 1567, 1567, 3120,  761,  733, 3089,
+     3121, 1567, 1567, 1567, 1223, 1223, 1223, 1577, 1577, 1577,
+     1558, 1569, 1867, 3129,  732,  763, 1577, 1577, 1577, 1569,
+     1562, 1224, 1229, 1229, 1229, 1579, 3130, 3131, 1587, 1587,
+     1587, 1587, 1587, 1587, 1579, 1237, 1237, 1237, 1261, 1230,
+     1249, 1249, 1249,  750,  764,  765, 1589, 3132, 3126, 1589,
+
+      766,  767, 1238, 3133,  768,  756, 3134, 1250,  769, 3135,
+      770,  771,  772, 1570, 1598, 1598, 1598, 3136,  773,  733,
      1598, 1598, 1598, 1605, 1605, 1605,  990, 1605, 1605, 1605,
-     3099, 3145, 1600, 1580, 3146,  732,  749, 3147, 1600, 3140,
-     3148, 1607, 1613, 1613, 1613, 1607, 3149, 3139, 1590, 1613,
-     1613, 1613, 1617, 1617, 1617, 3150, 3905, 3905, 3905, 3151,
-     1615, 1621, 1621, 1621,  750,  751,  752, 1615, 3152, 1618,
-     3153,  753,  754, 3905, 3154,  755,  756, 3155, 1622,  757,
-     3156,  758,  759,  760, 3158, 1601, 3905, 3905, 3905,  761,
-     3159, 3160, 1608, 3162, 1624, 1624, 1624, 1624, 1624, 1624,
-
-     1276, 1276, 1276, 3905, 2108, 2108, 2108, 1619, 1276, 1276,
-     1276, 1616, 1626, 3167, 3168, 1626, 3169, 3170, 1278, 1635,
+     3137, 3138, 1600, 1580, 3139,  732,  749, 3125, 1600, 3140,
+     3141, 1607, 1613, 1613, 1613, 1607, 3142, 3144, 1590, 1613,
+     1613, 1613, 1617, 1617, 1617, 3145, 3885, 3885, 3885, 3146,
+     1615, 1621, 1621, 1621,  750,  751,  752, 1615, 3148, 1618,
+     3149,  753,  754, 3885, 3151,  755,  756, 3153, 1622,  757,
+     3150,  758,  759,  760, 3152, 1601, 3885, 3885, 3885,  761,
+     3154, 3155, 1608, 3156, 1624, 1624, 1624, 1624, 1624, 1624,
+
+     1276, 1276, 1276, 3885, 2108, 2108, 2108, 1619, 1276, 1276,
+     1276, 1616, 1626, 3161, 3168, 1626, 3169, 3170, 1278, 1635,
      1635, 1635, 1620, 1320, 1320, 1320, 1278, 1324, 1324, 1324,
-     3175, 1681, 1681, 1681, 3182, 1682, 3183, 1636, 1683, 3184,
-     1321, 1688, 1688, 1688, 1325, 3185, 1623, 1327, 1327, 1327,
-     1327, 1327, 1327, 1327, 1327, 1327, 3163, 3165, 1689, 1627,
-     1337, 1337, 1337, 3186, 3187, 1329, 3164, 3166, 1329, 2109,
-     3188, 1329, 1337, 1337, 1337, 1337, 1337, 1337, 1339, 1343,
-     1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 3189, 3190,
-     1339, 3191, 3192, 1339, 1348, 1348, 1348, 1345, 1349, 3193,
-
-     1345, 1350, 3197, 1345, 1352, 1352, 1352, 1352, 1352, 1352,
-     1352, 1352, 1352, 1356, 1356, 1356, 3198, 3199, 1685, 1700,
-     1700, 1700, 1354, 1701, 3200, 1354, 1702, 3201, 1354, 3202,
-     1357, 1360, 1360, 1360, 1705, 1705, 1705, 3203, 1706, 1696,
-     3204, 1707, 1693, 1362, 1362, 1362, 3205, 3206, 1361, 1362,
-     1362, 1362, 1362, 1362, 1362, 1366, 1366, 1366, 3207, 3208,
-     1699, 1364, 1709, 1709, 1709, 3209, 1710, 1364, 3210, 1711,
-     1364, 3211, 1367, 1368, 1368, 1368, 1712, 1712, 1712, 3212,
-     1713, 3213, 3214, 1714, 1370, 1370, 1370, 1370, 1370, 1370,
+     3171, 1681, 1681, 1681, 3172, 1682, 3173, 1636, 1683, 3174,
+     1321, 1688, 1688, 1688, 1325, 3175, 1623, 1327, 1327, 1327,
+     1327, 1327, 1327, 1327, 1327, 1327, 3176, 3177, 1689, 1627,
+     1337, 1337, 1337, 3178, 3179, 1329, 3183, 3184, 1329, 2109,
+     3185, 1329, 1337, 1337, 1337, 1337, 1337, 1337, 1339, 1343,
+     1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 3186, 3187,
+     1339, 3188, 3189, 1339, 1348, 1348, 1348, 1345, 1349, 3190,
+
+     1345, 1350, 3191, 1345, 1352, 1352, 1352, 1352, 1352, 1352,
+     1352, 1352, 1352, 1356, 1356, 1356, 3192, 3193, 1685, 1700,
+     1700, 1700, 1354, 1701, 3194, 1354, 1702, 3195, 1354, 3196,
+     1357, 1360, 1360, 1360, 1705, 1705, 1705, 3197, 1706, 1696,
+     3198, 1707, 1693, 1362, 1362, 1362, 3199, 3200, 1361, 1362,
+     1362, 1362, 1362, 1362, 1362, 1366, 1366, 1366, 3201, 3202,
+     1699, 1364, 1709, 1709, 1709, 3210, 1710, 1364, 3211, 1711,
+     1364, 3205, 1367, 1368, 1368, 1368, 1712, 1712, 1712, 3212,
+     1713, 3206, 3213, 1714, 1370, 1370, 1370, 1370, 1370, 1370,
      1369, 1370, 1370, 1370, 1374, 1374, 1374, 1716, 1716, 1716,
 
-     3215, 1717, 1372, 3216, 1718, 1372, 1378, 1378, 1378, 1372,
-     3230, 1375, 1721, 1721, 1721, 1708, 1722, 3231, 3232, 1723,
+     3207, 1717, 1372, 3214, 1718, 1372, 1378, 1378, 1378, 1372,
+     3208, 1375, 1721, 1721, 1721, 1708, 1722, 3215, 3216, 1723,
      1380, 1380, 1380, 1379, 1380, 1380, 1380, 1380, 1380, 1380,
-     1384, 1384, 1384, 3233, 1385, 3234, 3235, 1386, 1382, 1387,
-     1387, 1387, 1382, 1388, 3236, 1382, 1389, 1390, 1390, 1390,
-     3237, 1725, 1725, 1725, 1715, 1726, 3239, 3240, 1727, 1396,
-     1396, 1396, 3241, 3242, 1391, 1396, 1396, 1396, 1396, 1396,
-     1396, 1403, 1403, 1403, 3219, 1404, 3243, 1398, 1405, 1736,
-     1736, 1736, 3221, 1398, 3220, 3244, 1398, 1407, 1407, 1407,
-     1724, 1408, 3222, 3245, 1409, 3246, 1737, 1410, 1410, 1410,
-
-     1738, 1738, 1738, 3247, 1739, 3248, 3249, 1740, 1421, 1421,
-     1421, 1421, 1421, 1421, 1411, 3250, 3261, 1732, 1421, 1421,
-     1421, 1425, 1425, 1425, 3262, 1426, 1423, 3263, 1427, 1423,
+     1384, 1384, 1384, 3217, 1385, 3219, 3220, 1386, 1382, 1387,
+     1387, 1387, 1382, 1388, 3221, 1382, 1389, 1390, 1390, 1390,
+     3222, 1725, 1725, 1725, 1715, 1726, 3223, 3224, 1727, 1396,
+     1396, 1396, 3225, 3226, 1391, 1396, 1396, 1396, 1396, 1396,
+     1396, 1403, 1403, 1403, 3227, 1404, 3228, 1398, 1405, 1736,
+     1736, 1736, 3229, 1398, 3230, 3231, 1398, 1407, 1407, 1407,
+     1724, 1408, 1261, 3233, 1409, 3232, 1737, 1410, 1410, 1410,
+
+     1738, 1738, 1738, 3234, 1739, 3241, 3242, 1740, 1421, 1421,
+     1421, 1421, 1421, 1421, 1411, 3243, 3244, 1732, 1421, 1421,
+     1421, 1425, 1425, 1425, 3245, 1426, 1423, 3235, 1427, 1423,
      1428, 1428, 1428, 1428, 1428, 1428, 1423, 1428, 1428, 1428,
-     1755, 1755, 1755, 1435, 1435, 1435, 3251, 1436, 1430, 3264,
-     1437, 1430, 1441, 1441, 1441, 1430, 3252, 1756, 1441, 1441,
+     1755, 1755, 1755, 1435, 1435, 1435, 3246, 1436, 1430, 3247,
+     1437, 1430, 1441, 1441, 1441, 1430, 3248, 1756, 1441, 1441,
      1441, 1441, 1441, 1441, 1762, 1762, 1762, 1447, 1447, 1447,
-     1443, 1448, 3253, 1261, 1449, 3265, 1443, 3266, 3267, 1443,
-     3268, 1763, 3254, 1450, 1450, 1450, 1751, 1451, 3270, 3273,
-     1452, 1453, 1453, 1453, 1453, 1453, 1453, 3275, 1752, 1453,
+     1443, 1448, 3250, 3253, 1449, 3255, 1443, 3256, 3257, 1443,
+     3258, 1763, 3259, 1450, 1450, 1450, 1751, 1451, 3260, 3261,
+     1452, 1453, 1453, 1453, 1453, 1453, 1453, 3262, 1752, 1453,
 
-     1453, 1453, 1765, 1765, 1765, 1458, 1458, 1458, 3255, 1455,
-     3276, 3277, 1455, 1458, 1458, 1458, 3278, 1455, 3279, 1766,
+     1453, 1453, 1765, 1765, 1765, 1458, 1458, 1458, 3265, 1455,
+     3268, 3269, 1455, 1458, 1458, 1458, 3270, 1455, 3271, 1766,
      1458, 1458, 1458, 1460, 1470, 1470, 1470, 1760, 1464, 1464,
-     1464, 1460, 1465, 3280, 3281, 1466, 3282, 3285, 1460, 1470,
-     1470, 1470, 1472, 1470, 1470, 1470, 1475, 1475, 1475, 3288,
-     1476, 3289, 3290, 1477, 1478, 1478, 1478, 1472, 1478, 1478,
-     1478, 1472, 1478, 1478, 1478, 1764, 3291, 1482, 1482, 1482,
-     1767, 1483, 1480, 3292, 1484, 3293, 1480, 1486, 1486, 1486,
-     1480, 1486, 1486, 1486, 1486, 1486, 1486, 3294, 1778, 1778,
-     1778, 3905, 3905, 3905, 3295, 1488, 1492, 1492, 1492, 1488,
-
-     3296, 3297, 1488, 3302, 1773, 1779, 3303, 3304, 3905, 1492,
-     1492, 1492, 3305, 3306, 1494, 1492, 1492, 1492, 1500, 1500,
-     1500, 3307, 1501, 1775, 3308, 1502, 3309, 1494, 1503, 1503,
-     1503, 3310, 3311, 1494, 3312, 1777, 1786, 1786, 1786, 1780,
-     1787, 3313, 3314, 1788, 3315, 1504, 1507, 1507, 1507, 1507,
+     1464, 1460, 1465, 3272, 3273, 1466, 3274, 3275, 1460, 1470,
+     1470, 1470, 1472, 1470, 1470, 1470, 1475, 1475, 1475, 3276,
+     1476, 3277, 3282, 1477, 1478, 1478, 1478, 1472, 1478, 1478,
+     1478, 1472, 1478, 1478, 1478, 1764, 3283, 1482, 1482, 1482,
+     1767, 1483, 1480, 3284, 1484, 3285, 1480, 1486, 1486, 1486,
+     1480, 1486, 1486, 1486, 1486, 1486, 1486, 3286, 1778, 1778,
+     1778, 3885, 3885, 3885, 3287, 1488, 1492, 1492, 1492, 1488,
+
+     3288, 3289, 1488, 3290, 1773, 1779, 3291, 3292, 3885, 1492,
+     1492, 1492, 3293, 3294, 1494, 1492, 1492, 1492, 1500, 1500,
+     1500, 3295, 1501, 1775, 3296, 1502, 3297, 1494, 1503, 1503,
+     1503, 3298, 3302, 1494, 3303, 1777, 1786, 1786, 1786, 1780,
+     1787, 3304, 3305, 1788, 3308, 1504, 1507, 1507, 1507, 1507,
      1507, 1507, 1507, 1507, 1507, 1513, 1513, 1513, 1513, 1513,
-     1513, 1513, 1513, 1513, 1509, 3316, 3317, 1509, 3318, 3322,
-     1509, 3323, 3324, 1515, 3325, 3328, 1515, 3329, 3330, 1515,
+     1513, 1513, 1513, 1513, 1509, 3309, 3310, 1509, 3311, 3312,
+     1509, 3313, 3315, 1515, 3316, 3317, 1515, 3318, 3319, 1515,
      1800, 1800, 1800, 1781, 1526, 1526, 1526, 1526, 1526, 1526,
-     1526, 1526, 1526, 3331, 1530, 1530, 1530, 1801, 1531, 3332,
+     1526, 1526, 1526, 3320, 1530, 1530, 1530, 1801, 1531, 3321,
 
-     3333, 1532, 1528, 3335, 1791, 1528, 3336, 3337, 1528, 1794,
+     3322, 1532, 1528, 3323, 1791, 1528, 3324, 3325, 1528, 1794,
      1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1534, 1539,
-     1539, 1539, 3338, 1540, 2621, 2622, 1541, 2623, 1536, 3339,
-     3340, 1536, 3341, 3342, 1536, 2624, 1542, 1542, 1542, 1809,
-     1809, 1809, 2625, 1810, 3343, 3344, 1811, 1812, 1812, 1812,
-     3345, 3346, 1805, 1543, 1545, 1545, 1545, 3353, 1814, 1814,
-     1814, 1261, 1815, 3354, 1813, 1816, 1818, 1818, 1818, 3355,
-     3356, 1546, 1550, 1550, 1550, 1550, 1550, 1550, 1807, 1550,
-     1550, 1550, 3357, 1819, 1554, 1554, 1554, 1822, 1822, 1822,
-     1552, 1823, 3358, 1552, 1824, 3359, 3360, 1552, 1556, 1556,
-
-     1556, 1555, 1825, 1825, 1825, 3347, 1826, 3361, 3362, 1827,
-     1559, 1559, 1559, 3363, 3364, 1557, 1559, 1559, 1559, 1559,
-     1559, 1559, 1564, 1564, 1564, 3365, 1565, 3366, 1561, 1566,
-     1567, 1567, 1567, 3367, 1561, 3368, 3372, 1561, 3378, 3379,
-     1821, 1567, 1567, 1567, 1567, 1567, 1567, 3380, 1569, 1573,
-     1573, 1573, 3381, 1574, 3382, 3383, 1575, 3384, 3391, 1569,
-     3392, 3393, 1569, 1577, 1577, 1577, 1577, 1577, 1577, 3394,
-     1577, 1577, 1577, 1582, 1582, 1582, 3395, 1583, 3396, 3397,
-     1584, 1579, 3398, 3399, 1579, 3400, 3401, 1829, 1579, 1838,
+     1539, 1539, 3326, 1540, 2617, 2618, 1541, 2619, 1536, 3333,
+     3334, 1536, 3335, 3336, 1536, 2620, 1542, 1542, 1542, 1809,
+     1809, 1809, 2621, 1810, 3337, 3338, 1811, 1812, 1812, 1812,
+     3339, 1261, 1805, 1543, 1545, 1545, 1545, 3340, 1814, 1814,
+     1814, 3341, 1815, 3342, 1813, 1816, 1818, 1818, 1818, 3343,
+     3344, 1546, 1550, 1550, 1550, 1550, 1550, 1550, 1807, 1550,
+     1550, 1550, 3345, 1819, 1554, 1554, 1554, 1822, 1822, 1822,
+     1552, 1823, 3346, 1552, 1824, 3327, 3347, 1552, 1556, 1556,
+
+     1556, 1555, 1825, 1825, 1825, 3348, 1826, 3352, 3358, 1827,
+     1559, 1559, 1559, 3359, 3360, 1557, 1559, 1559, 1559, 1559,
+     1559, 1559, 1564, 1564, 1564, 3361, 1565, 3362, 1561, 1566,
+     1567, 1567, 1567, 3363, 1561, 3364, 3371, 1561, 3372, 3373,
+     1821, 1567, 1567, 1567, 1567, 1567, 1567, 3374, 1569, 1573,
+     1573, 1573, 3375, 1574, 3376, 3377, 1575, 3378, 3379, 1569,
+     3380, 3381, 1569, 1577, 1577, 1577, 1577, 1577, 1577, 3382,
+     1577, 1577, 1577, 1582, 1582, 1582, 3383, 1583, 3384, 3385,
+     1584, 1579, 3386, 3387, 1579, 3388, 3389, 1829, 1579, 1838,
      1838, 1838, 1587, 1587, 1587, 1587, 1587, 1587, 1587, 1587,
 
-     1587, 1842, 1842, 1842, 3402, 3403, 1839, 1593, 1593, 1593,
-     1589, 1594, 1831, 1589, 1595, 3404, 1589, 3405, 1843, 3905,
-     3905, 3905, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
-     1598, 3406, 1835, 1848, 1848, 1848, 3905, 1605, 1605, 1605,
-     1600, 3407, 3408, 1600, 3409, 3410, 1600, 1605, 1605, 1605,
-     1849, 1605, 1605, 1605, 3411, 1607, 3412, 1609, 1609, 1609,
-     1840, 1610, 3413, 3414, 1611, 1607, 1613, 1613, 1613, 1607,
+     1587, 1842, 1842, 1842, 3390, 3391, 1839, 1593, 1593, 1593,
+     1589, 1594, 1831, 1589, 1595, 3392, 1589, 3393, 1843, 3885,
+     3885, 3885, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598,
+     1598, 3394, 1835, 1848, 1848, 1848, 3885, 1605, 1605, 1605,
+     1600, 3395, 3396, 1600, 3397, 3400, 1600, 1605, 1605, 1605,
+     1849, 1605, 1605, 1605, 3401, 1607, 3402, 1609, 1609, 1609,
+     1840, 1610, 3403, 3404, 1611, 1607, 1613, 1613, 1613, 1607,
      1613, 1613, 1613, 1613, 1613, 1613, 1846, 1617, 1617, 1617,
-     3415, 1844, 3416, 3417, 1615, 1854, 1854, 1854, 1615, 1855,
-     3420, 1615, 1856, 3421, 1618, 1621, 1621, 1621, 3422, 1851,
+     3405, 1844, 3406, 3407, 1615, 1854, 1854, 1854, 1615, 1855,
+     3408, 1615, 1856, 3409, 1618, 1621, 1621, 1621, 3421, 1851,
 
-     1859, 1859, 1859, 3423, 1860, 3424, 3425, 1861, 1624, 1624,
-     1624, 3426, 1622, 1624, 1624, 1624, 3427, 1624, 1624, 1624,
+     1859, 1859, 1859, 3422, 1860, 3427, 1261, 1861, 1624, 1624,
+     1624, 3428, 1622, 1624, 1624, 1624, 3412, 1624, 1624, 1624,
      1866, 1866, 1866, 1635, 1635, 1635, 1626, 1327, 1327, 1327,
-     3428, 1626, 3429, 3441, 1853, 1626, 3442, 3432, 1867, 1868,
-     3447, 1636, 1676, 1676, 1676, 1329, 1677, 1261, 3435, 1678,
-     1681, 1681, 1681, 3432, 1682, 3448, 3451, 1683, 1688, 1688,
-     1688, 1921, 1921, 1921, 3452, 1922, 3453, 3433, 1923, 1337,
-     1337, 1337, 1343, 1343, 1343, 1689, 3454, 3456, 1863, 1929,
-     1929, 1929, 3464, 1352, 1352, 1352, 3465, 1339, 3457, 1918,
-     1345, 1700, 1700, 1700, 3430, 1701, 1930, 3466, 1702, 3467,
-
-     3458, 1354, 1705, 1705, 1705, 3468, 1706, 3459, 3473, 1707,
-     1362, 1362, 1362, 1709, 1709, 1709, 3474, 1710, 3469, 3460,
-     1711, 3475, 1712, 1712, 1712, 3476, 1713, 3477, 1364, 1714,
-     3470, 1927, 1370, 1370, 1370, 1716, 1716, 1716, 3478, 1717,
-     1931, 1934, 1718, 3479, 1721, 1721, 1721, 3480, 1722, 3471,
+     3413, 1626, 3431, 3432, 1853, 1626, 3412, 3433, 1867, 1868,
+     3434, 1636, 1676, 1676, 1676, 1329, 1677, 3415, 3436, 1678,
+     1681, 1681, 1681, 3410, 1682, 3437, 3444, 1683, 1688, 1688,
+     1688, 1921, 1921, 1921, 3439, 1922, 3445, 3438, 1923, 1337,
+     1337, 1337, 1343, 1343, 1343, 1689, 3440, 3446, 1863, 1929,
+     1929, 1929, 3447, 1352, 1352, 1352, 3448, 1339, 3449, 1918,
+     1345, 1700, 1700, 1700, 3453, 1701, 1930, 3454, 1702, 3455,
+
+     3450, 1354, 1705, 1705, 1705, 3456, 1706, 3451, 3457, 1707,
+     1362, 1362, 1362, 1709, 1709, 1709, 3458, 1710, 3459, 3452,
+     1711, 3460, 1712, 1712, 1712, 3461, 1713, 3462, 1364, 1714,
+     3463, 1927, 1370, 1370, 1370, 1716, 1716, 1716, 3464, 1717,
+     1931, 1934, 1718, 3465, 1721, 1721, 1721, 3470, 1722, 3471,
      1372, 1723, 1380, 1380, 1380, 1725, 1725, 1725, 1937, 1726,
-     3481, 3472, 1727, 3482, 1944, 1944, 1944, 1396, 1396, 1396,
-     1382, 1948, 1948, 1948, 3905, 3905, 3905, 3905, 3905, 3905,
-     1938, 1945, 1736, 1736, 1736, 1398, 3483, 3484, 1949, 3485,
-     3490, 3905, 3491, 3496, 3905, 3905, 3905, 3905, 3497, 1737,
-
-     1941, 1952, 1952, 1952, 3498, 1953, 3499, 3502, 1954, 1738,
-     1738, 1738, 3905, 1739, 3437, 3502, 1740, 3905, 3905, 3905,
-     3905, 3905, 3905, 1947, 3505, 1951, 3905, 3905, 3905, 3905,
-     3905, 3905, 3506, 3438, 3905, 3439, 3507, 3905, 3905, 3905,
-     3905, 1950, 1261, 3905, 1867, 1868, 3905, 1955, 3440, 1961,
-     1961, 1961, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 1421, 1421, 1421, 1956, 1962, 3510, 3508, 3905,
-     1755, 1755, 1755, 3905, 1958, 3432, 3905, 1428, 1428, 1428,
-     1423, 1970, 1970, 1970, 3500, 1971, 3509, 1756, 1972, 3433,
-     3511, 1957, 3512, 3515, 1959, 1430, 1974, 1974, 1974, 1960,
-
-     1441, 1441, 1441, 1762, 1762, 1762, 3516, 1979, 1979, 1979,
-     3521, 1980, 3523, 1975, 1981, 1453, 1453, 1453, 1443, 1964,
-     1763, 1965, 3526, 1963, 1765, 1765, 1765, 3432, 1966, 3522,
-     1967, 3527, 3528, 1455, 3513, 1983, 1983, 1983, 3435, 1984,
-     3529, 1766, 1985, 1458, 1458, 1458, 1470, 1470, 1470, 3514,
-     1478, 1478, 1478, 1994, 1994, 1994, 3530, 1486, 1486, 1486,
-     3524, 1460, 3533, 3535, 1472, 3536, 3538, 1977, 1480, 3541,
-     1995, 1778, 1778, 1778, 3542, 1488, 1997, 1997, 1997, 3525,
-     1998, 3534, 1982, 1999, 3537, 1492, 1492, 1492, 1779, 2003,
-     2003, 2003, 1786, 1786, 1786, 3543, 1787, 3544, 3545, 1788,
-
-     3546, 3547, 1986, 1494, 1991, 3548, 2004, 3549, 1993, 1996,
+     3476, 3477, 1727, 3478, 1944, 1944, 1944, 1396, 1396, 1396,
+     1382, 1948, 1948, 1948, 3885, 3885, 3885, 3885, 3885, 3885,
+     1938, 1945, 1736, 1736, 1736, 1398, 3479, 3482, 1949, 3482,
+     1261, 3885, 3412, 3412, 3885, 3885, 3885, 3885, 3485, 1737,
+
+     1941, 1952, 1952, 1952, 3415, 1953, 3413, 3486, 1954, 1738,
+     1738, 1738, 3885, 1739, 3417, 3487, 1740, 3885, 3885, 3885,
+     3885, 3885, 3885, 1947, 3488, 1951, 3885, 3885, 3885, 3885,
+     3885, 3885, 3480, 3418, 3885, 3419, 3490, 3885, 3885, 3885,
+     3885, 1950, 3489, 3885, 1867, 1868, 3885, 1955, 3420, 1961,
+     1961, 1961, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 1421, 1421, 1421, 1956, 1962, 3491, 3492, 3885,
+     1755, 1755, 1755, 3885, 1958, 3493, 3885, 1428, 1428, 1428,
+     1423, 1970, 1970, 1970, 3495, 1971, 3496, 1756, 1972, 3503,
+     3494, 1957, 3506, 3501, 1959, 1430, 1974, 1974, 1974, 1960,
+
+     1441, 1441, 1441, 1762, 1762, 1762, 3507, 1979, 1979, 1979,
+     3504, 1980, 3502, 1975, 1981, 1453, 1453, 1453, 1443, 1964,
+     1763, 1965, 3508, 1963, 1765, 1765, 1765, 3509, 1966, 3505,
+     1967, 3510, 3515, 1455, 3518, 1983, 1983, 1983, 3521, 1984,
+     3522, 1766, 1985, 1458, 1458, 1458, 1470, 1470, 1470, 3523,
+     1478, 1478, 1478, 1994, 1994, 1994, 3524, 1486, 1486, 1486,
+     3513, 1460, 3516, 3525, 1472, 3526, 3527, 1977, 1480, 3528,
+     1995, 1778, 1778, 1778, 3529, 1488, 1997, 1997, 1997, 3514,
+     1998, 3517, 1982, 1999, 3532, 1492, 1492, 1492, 1779, 2003,
+     2003, 2003, 1786, 1786, 1786, 3533, 1787, 3534, 3482, 1788,
+
+     3538, 3482, 1986, 1494, 1991, 3539, 2004, 3530, 1993, 1996,
      2007, 2007, 2007, 1507, 1507, 1507, 1513, 1513, 1513, 1800,
-     1800, 1800, 2019, 2019, 2019, 3552, 2020, 2008, 3553, 2021,
-     3554, 1509, 3550, 3502, 1515, 3558, 1801, 1526, 1526, 1526,
+     1800, 1800, 2019, 2019, 2019, 3531, 2020, 2008, 3540, 2021,
+     3541, 1509, 3542, 3543, 1515, 3535, 1801, 1526, 1526, 1526,
      2026, 2026, 2026, 1534, 1534, 1534, 2001, 1809, 1809, 1809,
-     3551, 1810, 3555, 3502, 1811, 1528, 3559, 2027, 1812, 1812,
-     1812, 1536, 2030, 2030, 2030, 3560, 2031, 3556, 3561, 2032,
-     1814, 1814, 1814, 3562, 1815, 1813, 3563, 1816, 2010, 1818,
-     1818, 1818, 3564, 2013, 2034, 2034, 2034, 2025, 2035, 3565,
-     3566, 2036, 1550, 1550, 1550, 3567, 1819, 1822, 1822, 1822,
-
-     3568, 1823, 3572, 3573, 1824, 3574, 2028, 1825, 1825, 1825,
-     1552, 1826, 3575, 3576, 1827, 1559, 1559, 1559, 1567, 1567,
+     3536, 1810, 3544, 3545, 1811, 1528, 3546, 2027, 1812, 1812,
+     1812, 1536, 2030, 2030, 2030, 3547, 2031, 3548, 3552, 2032,
+     1814, 1814, 1814, 3553, 1815, 1813, 3554, 1816, 2010, 1818,
+     1818, 1818, 3555, 2013, 2034, 2034, 2034, 2025, 2035, 3556,
+     3557, 2036, 1550, 1550, 1550, 3558, 1819, 1822, 1822, 1822,
+
+     3559, 1823, 3560, 3561, 1824, 3565, 2028, 1825, 1825, 1825,
+     1552, 1826, 3566, 3567, 1827, 1559, 1559, 1559, 1567, 1567,
      1567, 1577, 1577, 1577, 2048, 2048, 2048, 1838, 1838, 1838,
-     2050, 2050, 2050, 1561, 2051, 3577, 1569, 2052, 3578, 1579,
-     3579, 2049, 3580, 2038, 1839, 1587, 1587, 1587, 1842, 1842,
-     1842, 2055, 2055, 2055, 3581, 2056, 3585, 3586, 2057, 1598,
-     1598, 1598, 3587, 1589, 3588, 1843, 1848, 1848, 1848, 2062,
-     2062, 2062, 3589, 2063, 3590, 3594, 2064, 1600, 2065, 2065,
-     2065, 3595, 2040, 1849, 3596, 2042, 2046, 1605, 1605, 1605,
-     1613, 1613, 1613, 3597, 3598, 2066, 1854, 1854, 1854, 3599,
-
-     1855, 3600, 3601, 1856, 3602, 1607, 3603, 3604, 1615, 2060,
-     2053, 1859, 1859, 1859, 3605, 1860, 3606, 3607, 1861, 3609,
+     2050, 2050, 2050, 1561, 2051, 3568, 1569, 2052, 3569, 1579,
+     3570, 2049, 3574, 2038, 1839, 1587, 1587, 1587, 1842, 1842,
+     1842, 2055, 2055, 2055, 3575, 2056, 3576, 3577, 2057, 1598,
+     1598, 1598, 3578, 1589, 3579, 1843, 1848, 1848, 1848, 2062,
+     2062, 2062, 3580, 2063, 3581, 3582, 2064, 1600, 2065, 2065,
+     2065, 3583, 2040, 1849, 3584, 2042, 2046, 1605, 1605, 1605,
+     1613, 1613, 1613, 3585, 3586, 2066, 1854, 1854, 1854, 3587,
+
+     1855, 3589, 3590, 1856, 3591, 1607, 3592, 3593, 1615, 2060,
+     2053, 1859, 1859, 1859, 3594, 1860, 3595, 3596, 1861, 3597,
      1624, 1624, 1624, 1866, 1866, 1866, 2111, 2111, 2111, 2095,
-     2095, 2095, 2108, 2108, 2108, 3610, 3611, 2067, 1626, 3612,
-     3613, 1867, 2069, 2114, 2114, 2114, 2116, 2116, 2116, 3905,
-     3905, 3905, 1327, 1327, 1327, 1921, 1921, 1921, 3614, 1922,
-     2115, 3615, 1923, 2117, 3616, 3617, 3905, 1337, 1337, 1337,
-     1329, 3618, 2073, 2112, 3619, 2075, 1929, 1929, 1929, 2127,
-     2127, 2127, 3624, 2128, 3620, 1339, 2129, 1343, 1343, 1343,
-     3625, 3626, 2076, 1930, 2109, 3627, 3621, 2096, 3628, 1352,
+     2095, 2095, 2108, 2108, 2108, 3598, 3599, 2067, 1626, 3604,
+     3605, 1867, 2069, 2114, 2114, 2114, 2116, 2116, 2116, 3885,
+     3885, 3885, 1327, 1327, 1327, 1921, 1921, 1921, 3606, 1922,
+     2115, 3607, 1923, 2117, 3608, 3609, 3885, 1337, 1337, 1337,
+     1329, 3610, 2073, 2112, 3611, 2075, 1929, 1929, 1929, 2127,
+     2127, 2127, 3612, 2128, 3600, 1339, 2129, 1343, 1343, 1343,
+     3613, 3614, 2076, 1930, 2109, 3615, 3601, 2096, 3616, 1352,
 
      1352, 1352, 2134, 2134, 2134, 1345, 2136, 2136, 2136, 1362,
-     1362, 1362, 3629, 3630, 2118, 3631, 3632, 1354, 3633, 2135,
-     2119, 3634, 3635, 2137, 1370, 1370, 1370, 1364, 2140, 2140,
-     2140, 3622, 2125, 2142, 2142, 2142, 1380, 1380, 1380, 2145,
-     2145, 2145, 1372, 3623, 3636, 2141, 3637, 2130, 2133, 3638,
-     2143, 3905, 3905, 3905, 1382, 3639, 2146, 1944, 1944, 1944,
-     2148, 2148, 2148, 3640, 2149, 3641, 3642, 2150, 3905, 2151,
-     2151, 2151, 3643, 3644, 1945, 2138, 1396, 1396, 1396, 1948,
-     1948, 1948, 2157, 2157, 2157, 3645, 2152, 3905, 3905, 3905,
-     2139, 2154, 2154, 2154, 1398, 2155, 1949, 3646, 2156, 2158,
-
-     3647, 3648, 2144, 3649, 3905, 1952, 1952, 1952, 3651, 1953,
-     2147, 3652, 1954, 3905, 3905, 3905, 3905, 3905, 3905, 2162,
-     2162, 2162, 3905, 3905, 3905, 3905, 3905, 3905, 3653, 1261,
-     3905, 3654, 3655, 3905, 3656, 3657, 2163, 2153, 3658, 3905,
-     3659, 3660, 3905, 3905, 3905, 3905, 1961, 1961, 1961, 2167,
-     2167, 2167, 2159, 2168, 3650, 3661, 2169, 2170, 2170, 2170,
-     3905, 3662, 3663, 1962, 3664, 3665, 2161, 3905, 3905, 3905,
-     3666, 3667, 2165, 3668, 2171, 3905, 3905, 3905, 2160, 3669,
-     3670, 2164, 3671, 3672, 3905, 1421, 1421, 1421, 1428, 1428,
-     1428, 3673, 3905, 3674, 1970, 1970, 1970, 2166, 1971, 3675,
-
-     3676, 1972, 3677, 1423, 3678, 3679, 1430, 2178, 2178, 2178,
-     1974, 1974, 1974, 3680, 3681, 2172, 2180, 2180, 2180, 3682,
-     2181, 3683, 3684, 2182, 2179, 3686, 3687, 1975, 3688, 2173,
-     2184, 2184, 2184, 1979, 1979, 1979, 1261, 1980, 3689, 3690,
+     1362, 1362, 3617, 3618, 2118, 3619, 3620, 1354, 3621, 2135,
+     2119, 3622, 3623, 2137, 1370, 1370, 1370, 1364, 2140, 2140,
+     2140, 3602, 2125, 2142, 2142, 2142, 1380, 1380, 1380, 2145,
+     2145, 2145, 1372, 3603, 3624, 2141, 3625, 2130, 2133, 3626,
+     2143, 3885, 3885, 3885, 1382, 3627, 2146, 1944, 1944, 1944,
+     2148, 2148, 2148, 3628, 2149, 3629, 3631, 2150, 3885, 2151,
+     2151, 2151, 1261, 3632, 1945, 2138, 1396, 1396, 1396, 1948,
+     1948, 1948, 2157, 2157, 2157, 3633, 2152, 3885, 3885, 3885,
+     2139, 2154, 2154, 2154, 1398, 2155, 1949, 3630, 2156, 2158,
+
+     3634, 3635, 2144, 3636, 3885, 1952, 1952, 1952, 3637, 1953,
+     2147, 3638, 1954, 3885, 3885, 3885, 3885, 3885, 3885, 2162,
+     2162, 2162, 3885, 3885, 3885, 3885, 3885, 3885, 3639, 3640,
+     3885, 3641, 3642, 3885, 3643, 3644, 2163, 2153, 3645, 3885,
+     3646, 3647, 3885, 3885, 3885, 3885, 1961, 1961, 1961, 2167,
+     2167, 2167, 2159, 2168, 3648, 3649, 2169, 2170, 2170, 2170,
+     3885, 3650, 3651, 1962, 3652, 3653, 2161, 3885, 3885, 3885,
+     3654, 3655, 2165, 3656, 2171, 3885, 3885, 3885, 2160, 3657,
+     3658, 2164, 3659, 3660, 3885, 1421, 1421, 1421, 1428, 1428,
+     1428, 3661, 3885, 3662, 1970, 1970, 1970, 2166, 1971, 3663,
+
+     3664, 1972, 1261, 1423, 3666, 3667, 1430, 2178, 2178, 2178,
+     1974, 1974, 1974, 3668, 3669, 2172, 2180, 2180, 2180, 3670,
+     2181, 3665, 3671, 2182, 2179, 3672, 3673, 1975, 3674, 2173,
+     2184, 2184, 2184, 1979, 1979, 1979, 3675, 1980, 3676, 3677,
      1981, 1453, 1453, 1453, 2175, 1458, 1458, 1458, 2185, 1983,
-     1983, 1983, 2174, 1984, 3691, 3685, 1985, 3692, 3693, 1455,
+     1983, 1983, 2174, 1984, 3678, 3679, 1985, 3680, 3681, 1455,
      2193, 2193, 2193, 1460, 1478, 1478, 1478, 1994, 1994, 1994,
-     2197, 2197, 2197, 3694, 2198, 3443, 3695, 2199, 2194, 1486,
-     1486, 1486, 1480, 3696, 1995, 1997, 1997, 1997, 2187, 1998,
-     3697, 3444, 1999, 3445, 1492, 1492, 1492, 1488, 2003, 2003,
-
-     2003, 2204, 2204, 2204, 3698, 2205, 3446, 3699, 2206, 3700,
-     3701, 2196, 1494, 2188, 3702, 2004, 2207, 2207, 2207, 2007,
-     2007, 2007, 2210, 2210, 2210, 3703, 2211, 3704, 3705, 2212,
-     2214, 2214, 2214, 2208, 3706, 3707, 2008, 3708, 2200, 1513,
+     2197, 2197, 2197, 3682, 2198, 3423, 3683, 2199, 2194, 1486,
+     1486, 1486, 1480, 3684, 1995, 1997, 1997, 1997, 2187, 1998,
+     3685, 3424, 1999, 3425, 1492, 1492, 1492, 1488, 2003, 2003,
+
+     2003, 2204, 2204, 2204, 3686, 2205, 3426, 3687, 2206, 3688,
+     3689, 2196, 1494, 2188, 3690, 2004, 2207, 2207, 2207, 2007,
+     2007, 2007, 2210, 2210, 2210, 3691, 2211, 3692, 3693, 2212,
+     2214, 2214, 2214, 2208, 3694, 3695, 2008, 3696, 2200, 1513,
      1513, 1513, 2219, 2219, 2219, 2019, 2019, 2019, 2215, 2020,
-     3709, 3710, 2021, 1526, 1526, 1526, 3711, 1515, 2026, 2026,
-     2026, 2202, 2228, 2228, 2228, 3712, 2229, 3713, 3714, 2230,
-     3715, 1528, 2231, 2231, 2231, 2027, 2030, 2030, 2030, 3716,
-     2031, 3717, 3719, 2032, 2034, 2034, 2034, 3720, 2035, 1261,
+     3697, 3699, 2021, 1526, 1526, 1526, 3700, 1515, 2026, 2026,
+     2026, 2202, 2228, 2228, 2228, 3701, 2229, 1261, 3702, 2230,
+     3703, 1528, 2231, 2231, 2231, 2027, 2030, 2030, 2030, 3704,
+     2031, 3705, 3706, 2032, 2034, 2034, 2034, 3698, 2035, 3707,
      2232, 2036, 2218, 1550, 1550, 1550, 1559, 1559, 1559, 1567,
 
-     1567, 1567, 2241, 2241, 2241, 2227, 3905, 3905, 3905, 3718,
-     3721, 1552, 3722, 3723, 1561, 3486, 3724, 1569, 3725, 2242,
-     2244, 2244, 2244, 3905, 1577, 1577, 1577, 2048, 2048, 2048,
-     3726, 2248, 2248, 2248, 3487, 2249, 3488, 2245, 2250, 2050,
-     2050, 2050, 1579, 2051, 2049, 3727, 2052, 3728, 2238, 3489,
-     3729, 2240, 1587, 1587, 1587, 2236, 2055, 2055, 2055, 3730,
-     2056, 3731, 3732, 2057, 1598, 1598, 1598, 2062, 2062, 2062,
-     1589, 2063, 2246, 2243, 2064, 2065, 2065, 2065, 3733, 2265,
-     2265, 2265, 1600, 2266, 3734, 3735, 2267, 1605, 1605, 1605,
-     3736, 3737, 2066, 2270, 2270, 2270, 2272, 2272, 2272, 3738,
-
-     2251, 2274, 2274, 2274, 3739, 1607, 3905, 3905, 3905, 3740,
-     3741, 2271, 3742, 2273, 3743, 3744, 2255, 3745, 2275, 1624,
-     1624, 1624, 3746, 3905, 2281, 2281, 2281, 2080, 2080, 2080,
-     2291, 2291, 2291, 2091, 2091, 2091, 3748, 1626, 3749, 2268,
-     3750, 2282, 2298, 2298, 2298, 2095, 2095, 2095, 2299, 2299,
-     2299, 2098, 2098, 2098, 3751, 2277, 2108, 2108, 2108, 2312,
+     1567, 1567, 2241, 2241, 2241, 2227, 3885, 3885, 3885, 3708,
+     3709, 1552, 3710, 3711, 1561, 3466, 3712, 1569, 3713, 2242,
+     2244, 2244, 2244, 3885, 1577, 1577, 1577, 2048, 2048, 2048,
+     3714, 2248, 2248, 2248, 3467, 2249, 3468, 2245, 2250, 2050,
+     2050, 2050, 1579, 2051, 2049, 3715, 2052, 3716, 2238, 3469,
+     3717, 2240, 1587, 1587, 1587, 2236, 2055, 2055, 2055, 3718,
+     2056, 3719, 3720, 2057, 1598, 1598, 1598, 2062, 2062, 2062,
+     1589, 2063, 2246, 2243, 2064, 2065, 2065, 2065, 3721, 2265,
+     2265, 2265, 1600, 2266, 3722, 3723, 2267, 1605, 1605, 1605,
+     3724, 3725, 2066, 2270, 2270, 2270, 2272, 2272, 2272, 3726,
+
+     2251, 2274, 2274, 2274, 1261, 1607, 3885, 3885, 3885, 3728,
+     3727, 2271, 3729, 2273, 3730, 3731, 2255, 3732, 2275, 1624,
+     1624, 1624, 3733, 3885, 2281, 2281, 2281, 2080, 2080, 2080,
+     2291, 2291, 2291, 2091, 2091, 2091, 3734, 1626, 3735, 2268,
+     3736, 2282, 2298, 2298, 2298, 2095, 2095, 2095, 2299, 2299,
+     2299, 2098, 2098, 2098, 3737, 2277, 2108, 2108, 2108, 2312,
      2312, 2312, 2111, 2111, 2111, 2114, 2114, 2114, 2316, 2316,
-     2316, 2276, 2317, 3752, 3753, 2318, 2116, 2116, 2116, 2319,
-     2319, 2319, 2115, 2320, 3754, 3755, 2321, 1327, 1327, 1327,
-     2329, 2329, 2329, 2117, 2127, 2127, 2127, 3756, 2128, 3757,
-
-     1261, 2129, 2334, 2334, 2334, 1329, 3747, 3758, 2330, 1343,
-     1343, 1343, 1352, 1352, 1352, 2134, 2134, 2134, 3759, 2335,
-     3760, 2337, 2337, 2337, 3761, 2338, 3762, 1345, 2339, 3763,
-     1354, 3764, 2135, 2136, 2136, 2136, 2340, 2340, 2340, 3765,
-     2341, 3766, 3767, 2342, 1362, 1362, 1362, 1370, 1370, 1370,
-     2137, 2140, 2140, 2140, 2323, 3769, 2345, 2345, 2345, 1261,
-     2346, 2332, 1364, 2347, 3770, 1372, 3771, 3772, 2141, 2142,
-     2142, 2142, 3773, 3768, 2336, 2348, 2348, 2348, 3774, 2349,
-     3775, 3776, 2350, 1380, 1380, 1380, 2143, 2145, 2145, 2145,
-     2352, 2352, 2352, 3777, 2353, 3778, 3779, 2354, 2355, 2355,
-
-     2355, 1382, 3780, 3782, 2146, 2148, 2148, 2148, 3783, 2149,
-     2343, 3784, 2150, 2344, 3785, 2356, 2151, 2151, 2151, 2357,
-     2357, 2357, 3786, 2358, 3787, 3788, 2359, 1396, 1396, 1396,
-     2154, 2154, 2154, 2152, 2155, 3789, 3790, 2156, 2157, 2157,
-     2157, 2162, 2162, 2162, 3791, 1398, 2361, 2361, 2361, 2351,
-     2362, 3792, 3793, 2363, 3796, 2158, 3797, 3492, 2163, 2367,
-     2367, 2367, 3798, 2368, 3799, 3800, 2369, 2370, 2370, 2370,
-     2167, 2167, 2167, 3493, 2168, 3494, 3801, 2169, 1792, 2360,
-     2170, 2170, 2170, 3812, 2371, 2374, 2374, 2374, 3495, 2375,
-     1261, 1261, 2376, 1421, 1421, 1421, 3813, 2171, 1428, 1428,
-
-     1428, 2178, 2178, 2178, 1261, 2383, 2383, 2383, 1261, 2384,
-     1261, 1423, 2385, 2180, 2180, 2180, 1430, 2181, 2179, 1261,
-     2182, 2184, 2184, 2184, 2186, 2186, 2186, 3802, 1453, 1453,
+     2316, 2276, 2317, 3738, 3739, 2318, 2116, 2116, 2116, 2319,
+     2319, 2319, 2115, 2320, 3740, 3741, 2321, 1327, 1327, 1327,
+     2329, 2329, 2329, 2117, 2127, 2127, 2127, 3742, 2128, 3743,
+
+     3744, 2129, 2334, 2334, 2334, 1329, 3745, 3746, 2330, 1343,
+     1343, 1343, 1352, 1352, 1352, 2134, 2134, 2134, 3747, 2335,
+     3749, 2337, 2337, 2337, 3750, 2338, 3751, 1345, 2339, 3752,
+     1354, 3753, 2135, 2136, 2136, 2136, 2340, 2340, 2340, 3754,
+     2341, 1261, 3755, 2342, 1362, 1362, 1362, 1370, 1370, 1370,
+     2137, 2140, 2140, 2140, 2323, 3748, 2345, 2345, 2345, 3756,
+     2346, 2332, 1364, 2347, 3757, 1372, 3758, 3759, 2141, 2142,
+     2142, 2142, 3760, 3762, 2336, 2348, 2348, 2348, 3763, 2349,
+     3764, 3765, 2350, 1380, 1380, 1380, 2143, 2145, 2145, 2145,
+     2352, 2352, 2352, 3766, 2353, 3767, 3768, 2354, 2355, 2355,
+
+     2355, 1382, 3769, 3770, 2146, 2148, 2148, 2148, 3771, 2149,
+     2343, 3772, 2150, 2344, 3773, 2356, 2151, 2151, 2151, 2357,
+     2357, 2357, 3776, 2358, 3777, 3778, 2359, 1396, 1396, 1396,
+     2154, 2154, 2154, 2152, 2155, 3779, 3780, 2156, 2157, 2157,
+     2157, 2162, 2162, 2162, 3781, 1398, 2361, 2361, 2361, 2351,
+     2362, 1261, 3790, 2363, 1261, 2158, 1261, 3472, 2163, 2367,
+     2367, 2367, 1261, 2368, 3882, 1261, 2369, 2370, 2370, 2370,
+     2167, 2167, 2167, 3473, 2168, 3474, 1792, 2169, 1261, 2360,
+     2170, 2170, 2170, 1261, 2371, 2374, 2374, 2374, 3475, 2375,
+     1261, 3782, 2376, 1421, 1421, 1421, 3788, 2171, 1428, 1428,
+
+     1428, 2178, 2178, 2178, 3800, 2383, 2383, 2383, 1261, 2384,
+     3789, 1423, 2385, 2180, 2180, 2180, 1430, 2181, 2179, 3802,
+     2182, 2184, 2184, 2184, 2186, 2186, 2186, 3783, 1453, 1453,
      1453, 1458, 1458, 1458, 2390, 2390, 2390, 1261, 1790, 2185,
-     2193, 2193, 2193, 1261, 1789, 2379, 1455, 3803, 1261, 1460,
-     1261, 2391, 2380, 1478, 1478, 1478, 1261, 3804, 2194, 2197,
-     2197, 2197, 3814, 2198, 3808, 1261, 2199, 1486, 1486, 1486,
-     1261, 1480, 2399, 2399, 2399, 3810, 2204, 2204, 2204, 1261,
-     2205, 2392, 2388, 2206, 1785, 1488, 3805, 2387, 3809, 3828,
-     2400, 2207, 2207, 2207, 2402, 2402, 2402, 3806, 2403, 3807,
-
-     3811, 2404, 3815, 2396, 1261, 2210, 2210, 2210, 2208, 2211,
-     1261, 1261, 2212, 3816, 2397, 2214, 2214, 2214, 2408, 2408,
+     2193, 2193, 2193, 3791, 1789, 2379, 1455, 1261, 1261, 1460,
+     1261, 2391, 2380, 1478, 1478, 1478, 3792, 3784, 2194, 2197,
+     2197, 2197, 3793, 2198, 1261, 1261, 2199, 1486, 1486, 1486,
+     1261, 1480, 2399, 2399, 2399, 1261, 2204, 2204, 2204, 3810,
+     2205, 2392, 2388, 2206, 1785, 1488, 3785, 2387, 1261, 1784,
+     2400, 2207, 2207, 2207, 2402, 2402, 2402, 3786, 2403, 3787,
+
+     1261, 2404, 3794, 2396, 1261, 2210, 2210, 2210, 2208, 2211,
+     1261, 3803, 2212, 3796, 2397, 2214, 2214, 2214, 2408, 2408,
      2408, 1513, 1513, 1513, 2219, 2219, 2219, 2411, 2411, 2411,
      2413, 2413, 2413, 2215, 1261, 2409, 1526, 1526, 1526, 1515,
-     2228, 2228, 2228, 1261, 2229, 1261, 3834, 2230, 2231, 2231,
+     2228, 2228, 2228, 3828, 2229, 1261, 3801, 2230, 2231, 2231,
      2231, 2420, 2420, 2420, 1528, 1550, 1550, 1550, 2425, 2425,
-     2425, 1567, 1567, 1567, 1261, 1261, 2232, 1261, 2421, 2241,
-     2241, 2241, 3818, 1552, 1261, 3854, 2426, 1261, 1261, 1569,
-     2429, 2429, 2429, 2410, 2430, 3820, 2242, 2431, 2432, 2432,
-     2432, 2244, 2244, 2244, 2435, 2435, 2435, 1261, 2436, 1261,
-
-     3829, 2437, 2418, 3819, 1784, 2433, 3821, 1261, 2245, 1577,
-     1577, 1577, 2439, 2439, 2439, 2423, 2248, 2248, 2248, 1261,
-     2249, 1261, 3817, 2250, 3824, 3825, 2428, 1579, 1783, 2440,
-     1587, 1587, 1587, 3822, 3835, 2434, 2446, 2446, 2446, 2448,
-     2448, 2448, 2265, 2265, 2265, 3826, 2266, 1261, 1589, 2267,
-     1605, 1605, 1605, 1261, 2447, 3823, 2449, 3832, 3830, 2441,
-     2461, 2461, 2461, 2438, 2270, 2270, 2270, 1261, 1607, 2272,
-     2272, 2272, 2463, 2463, 2463, 1261, 2464, 2462, 1261, 2465,
-     1261, 3831, 2271, 1261, 2442, 3827, 2273, 2274, 2274, 2274,
-     1261, 2466, 2466, 2466, 3844, 2467, 3848, 2460, 2468, 1624,
-
-     1624, 1624, 1782, 1261, 2275, 2281, 2281, 2281, 2474, 2474,
-     2474, 3833, 2475, 3876, 3840, 2476, 1261, 1626, 2477, 2477,
-     2477, 3846, 2282, 2483, 2483, 2483, 2484, 2484, 2484, 2291,
-     2291, 2291, 2486, 2486, 2486, 2490, 2490, 2490, 2298, 2298,
-     2298, 2299, 2299, 2299, 2491, 2491, 2491, 2495, 2495, 2495,
-     2500, 2500, 2500, 2501, 2501, 2501, 2503, 2503, 2503, 1261,
-     3836, 2470, 2312, 2312, 2312, 2504, 2504, 2504, 2316, 2316,
-     2316, 1261, 2317, 1776, 1261, 2318, 2319, 2319, 2319, 3902,
-     2320, 1261, 1261, 2321, 1327, 1327, 1327, 2511, 2511, 2511,
-     1261, 2492, 3905, 3905, 3905, 1261, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 1329, 3837, 2512, 2329, 2329, 2329, 1261, 3905,
-     3841, 1261, 2505, 3905, 3849, 3842, 3905, 1343, 1343, 1343,
-     2334, 2334, 2334, 2330, 2519, 2519, 2519, 1261, 2520, 3838,
-     1261, 2521, 1352, 1352, 1352, 1345, 2509, 2335, 2337, 2337,
-     2337, 1261, 2338, 3864, 2513, 2339, 3847, 2340, 2340, 2340,
-     1354, 2341, 1261, 1261, 2342, 1362, 1362, 1362, 3839, 2515,
-     1774, 2514, 1370, 1370, 1370, 2345, 2345, 2345, 3852, 2346,
-     1772, 3855, 2347, 1364, 3850, 2523, 2626, 2627, 2517, 2628,
-     1372, 2348, 2348, 2348, 1261, 2349, 3843, 2629, 2350, 1380,
-     1380, 1380, 3845, 2522, 2630, 2352, 2352, 2352, 2524, 2353,
-
-     3851, 1261, 2354, 2355, 2355, 2355, 1261, 1382, 2526, 2526,
-     2526, 1771, 2527, 1770, 3856, 2528, 1261, 2357, 2357, 2357,
-     2356, 2358, 3853, 1261, 2359, 1396, 1396, 1396, 2361, 2361,
-     2361, 3857, 2362, 2525, 3862, 2363, 1769, 2367, 2367, 2367,
-     1261, 2368, 1261, 1398, 2369, 2370, 2370, 2370, 2533, 2533,
-     2533, 3858, 2534, 3860, 1261, 2535, 2374, 2374, 2374, 1261,
-     2375, 1261, 2371, 2376, 2539, 2539, 2539, 1421, 1421, 1421,
-     2542, 2542, 2542, 2383, 2383, 2383, 1261, 2384, 3863, 1261,
-     2385, 2540, 1453, 1453, 1453, 1423, 1261, 1261, 2543, 1458,
-     1458, 1458, 2529, 2390, 2390, 2390, 3859, 2550, 2550, 2550,
-
-     1455, 2551, 3865, 1261, 2552, 1768, 3861, 1460, 1261, 1261,
-     2391, 1478, 1478, 1478, 3866, 3870, 1486, 1486, 1486, 2399,
-     2399, 2399, 1761, 2402, 2402, 2402, 1759, 2403, 3878, 1480,
-     2404, 1261, 2541, 1758, 1488, 3880, 1261, 2400, 2547, 3871,
-     1261, 2548, 2408, 2408, 2408, 2564, 2564, 2564, 1261, 2565,
-     3868, 3869, 2566, 1513, 1513, 1513, 2411, 2411, 2411, 2409,
-     2568, 2568, 2568, 2413, 2413, 2413, 2569, 2569, 2569, 3867,
-     1261, 1515, 3905, 3905, 3905, 3905, 3905, 3905, 2557, 2558,
-     1526, 1526, 1526, 2570, 3905, 3905, 3905, 3872, 3879, 3905,
-     1261, 1261, 3905, 2420, 2420, 2420, 1261, 3898, 1528, 3894,
-
-     1261, 3905, 2576, 2576, 2576, 1261, 2577, 1261, 1261, 2578,
-     2421, 2580, 2580, 2580, 2425, 2425, 2425, 3873, 2567, 2584,
-     2584, 2584, 1261, 3877, 2571, 1757, 2429, 2429, 2429, 2581,
-     2430, 1261, 2426, 2431, 2432, 2432, 2432, 2585, 3874, 3881,
-     2572, 2586, 2586, 2586, 2573, 2587, 2574, 3884, 2588, 3885,
-     1754, 2433, 2435, 2435, 2435, 1261, 2436, 1261, 3886, 2437,
-     1577, 1577, 1577, 2439, 2439, 2439, 2591, 2591, 2591, 3875,
-     2592, 1753, 1261, 2593, 1587, 1587, 1587, 1261, 1579, 1261,
-     2440, 2446, 2446, 2446, 2448, 2448, 2448, 2599, 2599, 2599,
-     3892, 2600, 1589, 3882, 2601, 1605, 1605, 1605, 1748, 2447,
-
-     1261, 2449, 2461, 2461, 2461, 1747, 1746, 2613, 2613, 2613,
-     3883, 2614, 2590, 1607, 2615, 3887, 2463, 2463, 2463, 2462,
-     2464, 1261, 1261, 2465, 3888, 1745, 2595, 2466, 2466, 2466,
-     1744, 2467, 3895, 1743, 2468, 1624, 1624, 1624, 2618, 2618,
-     2618, 1261, 2474, 2474, 2474, 2612, 2475, 3889, 1742, 2476,
-     2477, 2477, 2477, 1626, 3893, 3896, 1261, 2631, 2631, 2631,
-     2632, 2632, 2632, 2483, 2483, 2483, 2484, 2484, 2484, 2486,
-     2486, 2486, 2637, 2637, 2637, 2639, 2639, 2639, 2490, 2490,
-     2490, 2491, 2491, 2491, 2495, 2495, 2495, 2643, 2643, 2643,
-     2500, 2500, 2500, 2501, 2501, 2501, 2503, 2503, 2503, 2504,
-
-     2504, 2504, 1741, 2617, 2652, 2652, 2652, 2654, 2654, 2654,
-     2511, 2511, 2511, 2655, 2655, 2655, 1261, 2656, 1735, 1261,
-     2657, 1734, 2653, 2658, 2658, 2658, 1261, 2512, 3905, 3905,
-     3905, 3905, 3905, 3905, 2662, 2662, 2662, 1343, 1343, 1343,
-     2659, 2664, 2664, 2664, 1733, 3905, 1731, 1730, 3905, 2519,
-     2519, 2519, 1261, 2520, 3890, 1345, 2521, 3891, 2665, 1352,
-     1352, 1352, 1729, 1362, 1362, 1362, 1370, 1370, 1370, 1380,
-     1380, 1380, 2526, 2526, 2526, 3899, 2527, 1354, 1728, 2528,
-     2660, 1364, 1261, 2661, 1372, 3897, 1720, 1382, 2670, 2670,
-     2670, 2533, 2533, 2533, 1719, 2534, 1261, 1704, 2535, 1703,
-
-     2667, 2676, 2676, 2676, 2663, 1698, 2671, 2539, 2539, 2539,
-     1697, 2666, 2680, 2680, 2680, 3900, 2681, 1695, 2677, 2682,
-     2683, 2683, 2683, 1694, 2540, 2542, 2542, 2542, 2668, 3901,
-     1692, 2669, 1453, 1453, 1453, 2689, 2689, 2689, 2684, 2691,
-     2691, 2691, 1691, 2543, 2550, 2550, 2550, 1690, 2551, 1687,
-     1455, 2552, 1686, 2690, 1684, 1680, 2692, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 2697, 2697, 2697, 1478,
-     1478, 1478, 1679, 1675, 3905, 1674, 1673, 3905, 3902, 1672,
-     3905, 1671, 1670, 2698, 1669, 1668, 2693, 1480, 1486, 1486,
-     1486, 1667, 1261, 2688, 2701, 2701, 2701, 2706, 2706, 2706,
-
-     2564, 2564, 2564, 1666, 2565, 1665, 1488, 2566, 1513, 1513,
-     1513, 2702, 1664, 2694, 1663, 2696, 2568, 2568, 2568, 2569,
-     2569, 2569, 2695, 2711, 2711, 2711, 1515, 2708, 2708, 2708,
-     2699, 2709, 1662, 1661, 2710, 1660, 2570, 3905, 3905, 3905,
-     2712, 3905, 3905, 3905, 2715, 2715, 2715, 2717, 2717, 2717,
-     3905, 3905, 3905, 2700, 3905, 2580, 2580, 2580, 3905, 2576,
-     2576, 2576, 2716, 2577, 2718, 1658, 2578, 3905, 2707, 2584,
-     2584, 2584, 1657, 2581, 2586, 2586, 2586, 1656, 2587, 1655,
-     1654, 2588, 2723, 2723, 2723, 1651, 1650, 2585, 1649, 2713,
-     2591, 2591, 2591, 2714, 2592, 1648, 1647, 2593, 1646, 1645,
-
-     2724, 1587, 1587, 1587, 2599, 2599, 2599, 1644, 2600, 1643,
-     1642, 2601, 1605, 1605, 1605, 2740, 2741, 2719, 2742, 1589,
-     2613, 2613, 2613, 1641, 2614, 1640, 2743, 2615, 2745, 2746,
-     1607, 2747, 1639, 2744, 1624, 1624, 1624, 1638, 1637, 2748,
-     2618, 2618, 2618, 2631, 2631, 2631, 2749, 1634, 2726, 2632,
-     2632, 2632, 1626, 2770, 2770, 2770, 1633, 1632, 1261, 2637,
-     2637, 2637, 2639, 2639, 2639, 2774, 2774, 2774, 2643, 2643,
-     2643, 2778, 2778, 2778, 2739, 2781, 2781, 2781, 2652, 2652,
-     2652, 2654, 2654, 2654, 2655, 2655, 2655, 1631, 2656, 1630,
-     1629, 2657, 2658, 2658, 2658, 1261, 2653, 1612, 2783, 2783,
-
-     2783, 2751, 2784, 2752, 1604, 2785, 2786, 2786, 2786, 2659,
-     2788, 2788, 2788, 2662, 2662, 2662, 2790, 2790, 2790, 2664,
-     2664, 2664, 1603, 2787, 2792, 2792, 2792, 2789, 2793, 1602,
-     1597, 2794, 1596, 1592, 2791, 1586, 2665, 2795, 2795, 2795,
-     1362, 1362, 1362, 1370, 1370, 1370, 1380, 1380, 1380, 2670,
-     2670, 2670, 2676, 2676, 2676, 2796, 1585, 1581, 1364, 1576,
-     1572, 1372, 1571, 1563, 1382, 1549, 1548, 2671, 1547, 2677,
-     2804, 2804, 2804, 1544, 2805, 1538, 1533, 2806, 2680, 2680,
-     2680, 1525, 2681, 1524, 1523, 2682, 2683, 2683, 2683, 2817,
-     2817, 2817, 1453, 1453, 1453, 2689, 2689, 2689, 2691, 2691,
-
-     2691, 2831, 2831, 2831, 2684, 2797, 2818, 2799, 1522, 1521,
-     1455, 2798, 1520, 2690, 1519, 2692, 2820, 2820, 2820, 2832,
-     2821, 1518, 1517, 2822, 2826, 2826, 2826, 2697, 2697, 2697,
-     2828, 2828, 2828, 1512, 2829, 1511, 1506, 2830, 1486, 1486,
-     1486, 2827, 1505, 1499, 2698, 2701, 2701, 2701, 1496, 1491,
-     2819, 2834, 2834, 2834, 1490, 2835, 1488, 1485, 2836, 2839,
-     2839, 2839, 2702, 2706, 2706, 2706, 2841, 2841, 2841, 1474,
-     2708, 2708, 2708, 1469, 2709, 1468, 2840, 2710, 2711, 2711,
-     2711, 2843, 2843, 2843, 2842, 2844, 1467, 1463, 2845, 2846,
-     2846, 2846, 2848, 2848, 2848, 2712, 2715, 2715, 2715, 1462,
-
-     2833, 2717, 2717, 2717, 1457, 1446, 2847, 1440, 1439, 2849,
-     2723, 2723, 2723, 1438, 2716, 2850, 2850, 2850, 2718, 2851,
-     1434, 1433, 2852, 1587, 1587, 1587, 1432, 1420, 2724, 1419,
-     1605, 1605, 1605, 1624, 1624, 1624, 2770, 2770, 2770, 1418,
-     1417, 1589, 2904, 2904, 2904, 2774, 2774, 2774, 1607, 1416,
-     1415, 1626, 2778, 2778, 2778, 2781, 2781, 2781, 2912, 2912,
-     2912, 2783, 2783, 2783, 1414, 2784, 1413, 1412, 2785, 2786,
-     2786, 2786, 2914, 2914, 2914, 2913, 2915, 1406, 1351, 2916,
-     2788, 2788, 2788, 1347, 1342, 2885, 2787, 2790, 2790, 2790,
-     2858, 2871, 2917, 2917, 2917, 1341, 2918, 2789, 1336, 2919,
-
-     2792, 2792, 2792, 1335, 2793, 2791, 1334, 2794, 2795, 2795,
-     2795, 1362, 1362, 1362, 1370, 1370, 1370, 1380, 1380, 1380,
-     2925, 2925, 2925, 2804, 2804, 2804, 2796, 2805, 1333, 1364,
-     2806, 1332, 1372, 1331, 1319, 1382, 1318, 2926, 2939, 2939,
-     2939, 2817, 2817, 2817, 2941, 2941, 2941, 1317, 2942, 1316,
-     1315, 2943, 2944, 2944, 2944, 2940, 1314, 1313, 2818, 2820,
-     2820, 2820, 1312, 2821, 1311, 1310, 2822, 1309, 1308, 2922,
-     2945, 1307, 1306, 2920, 2826, 2826, 2826, 1305, 2949, 2949,
-     2949, 2921, 2950, 1302, 1301, 2951, 2828, 2828, 2828, 1300,
-     2829, 2827, 1299, 2830, 2831, 2831, 2831, 1486, 1486, 1486,
-
-     2834, 2834, 2834, 1298, 2835, 1297, 1296, 2836, 2960, 2960,
-     2960, 1295, 2832, 1294, 1291, 1488, 2839, 2839, 2839, 2962,
-     2962, 2962, 1290, 2963, 1289, 2961, 2964, 2841, 2841, 2841,
-     2843, 2843, 2843, 2840, 2844, 1288, 1287, 2845, 2846, 2846,
-     2846, 1286, 2965, 2965, 2965, 2842, 2966, 1285, 1284, 2967,
-     2848, 2848, 2848, 1283, 1282, 2847, 1275, 2968, 2968, 2968,
-     2958, 2969, 1271, 1270, 2970, 1269, 1268, 2849, 2850, 2850,
-     2850, 1267, 2851, 1264, 1262, 2852, 2978, 2978, 2978, 2980,
-     2980, 2980, 1587, 1587, 1587, 2985, 2985, 2985, 2986, 2986,
-     2986, 1261, 1259, 2979, 1257, 1256, 2981, 1605, 1605, 1605,
-
-     1589, 3011, 3011, 3011, 1255, 2987, 3013, 3013, 3013, 3031,
-     3031, 3031, 2904, 2904, 2904, 1607, 1254, 1253, 3012, 3036,
-     3036, 3036, 1251, 1248, 3014, 2912, 2912, 2912, 3040, 3040,
-     3040, 1246, 3041, 1245, 1244, 3042, 2914, 2914, 2914, 1243,
-     2915, 1242, 2913, 2916, 2917, 2917, 2917, 1239, 2918, 1236,
-     1235, 2919, 1234, 1232, 2984, 1362, 1362, 1362, 2998, 1370,
-     1370, 1370, 1380, 1380, 1380, 3051, 3051, 3051, 2925, 2925,
-     2925, 1231, 1228, 1364, 3053, 3053, 3053, 1372, 3054, 1227,
-     1382, 3055, 3052, 1225, 1222, 2926, 3056, 3056, 3056, 2939,
-     2939, 2939, 3069, 3069, 3069, 1221, 3070, 1220, 3049, 3071,
-
-     2941, 2941, 2941, 3057, 2942, 1216, 2940, 2943, 2944, 2944,
-     2944, 3048, 3073, 3073, 3073, 2949, 2949, 2949, 1215, 2950,
-     1213, 1212, 2951, 3047, 1211, 1210, 2945, 1208, 1207, 3074,
-     3082, 3082, 3082, 2960, 2960, 2960, 3085, 3085, 3085, 1206,
-     3086, 1205, 1204, 3087, 1203, 2962, 2962, 2962, 3083, 2963,
-     2961, 1200, 2964, 2965, 2965, 2965, 1199, 2966, 1197, 1194,
-     2967, 2968, 2968, 2968, 1192, 2969, 1191, 1190, 2970, 2978,
-     2978, 2978, 3101, 3101, 3101, 1189, 3102, 1188, 1183, 3103,
-     2980, 2980, 2980, 3104, 3104, 3104, 2979, 3105, 1181, 1180,
-     3106, 3107, 3107, 3107, 3109, 3109, 3109, 2981, 1587, 1587,
-
-     1587, 2985, 2985, 2985, 2986, 2986, 2986, 1179, 3108, 1177,
-     1176, 3110, 1175, 3112, 3112, 3112, 1589, 3113, 1172, 1171,
-     3114, 2987, 1605, 1605, 1605, 3011, 3011, 3011, 3136, 3136,
-     3136, 1170, 3137, 1169, 1167, 3138, 3013, 3013, 3013, 1166,
-     1607, 1165, 3012, 1163, 1160, 3141, 3141, 3141, 3031, 3031,
-     3031, 3157, 3157, 3157, 3014, 3036, 3036, 3036, 3161, 3161,
-     3161, 3111, 3142, 1867, 3040, 3040, 3040, 1156, 3041, 1155,
-     1153, 3042, 1152, 1151, 3123, 1362, 1362, 1362, 3172, 3172,
-     3172, 1380, 1380, 1380, 3051, 3051, 3051, 3176, 3176, 3176,
-     1148, 3177, 1147, 1364, 3178, 1146, 3173, 1145, 1143, 1382,
-
-     1142, 3052, 3053, 3053, 3053, 1136, 3054, 1135, 1134, 3055,
-     3056, 3056, 3056, 3179, 3179, 3179, 1132, 3180, 1131, 1130,
-     3181, 3069, 3069, 3069, 1125, 3070, 1124, 3057, 3071, 3073,
-     3073, 3073, 3194, 3194, 3194, 1120, 3195, 1118, 1117, 3196,
-     1116, 1115, 3171, 3174, 1114, 1113, 3074, 3082, 3082, 3082,
-     3085, 3085, 3085, 1112, 3086, 1111, 1110, 3087, 3217, 3217,
-     3217, 1109, 3101, 3101, 3101, 3083, 3102, 1106, 1103, 3103,
-     3104, 3104, 3104, 1102, 3105, 3218, 1100, 3106, 3107, 3107,
-     3107, 3223, 3223, 3223, 1099, 3224, 1098, 1097, 3225, 3109,
-     3109, 3109, 3226, 3226, 3226, 3108, 3227, 1096, 1091, 3228,
-
-     1587, 1587, 1587, 3112, 3112, 3112, 3110, 3113, 1089, 1088,
-     3114, 1605, 1605, 1605, 1087, 3136, 3136, 3136, 1589, 3137,
-     1086, 1084, 3138, 3256, 3256, 3256, 3141, 3141, 3141, 1607,
-     3258, 3258, 3258, 1083, 3259, 1082, 1080, 3260, 1079, 1078,
-     3257, 1867, 1077, 3142, 1867, 3269, 3269, 3269, 1867, 3157,
-     3157, 3157, 3229, 3271, 3271, 3271, 3272, 3272, 3272, 1075,
-     1072, 3238, 3161, 3161, 3161, 3274, 3274, 3274, 1362, 1362,
-     1362, 3172, 3172, 3172, 1380, 1380, 1380, 3176, 3176, 3176,
-     1071, 3177, 1069, 1067, 3178, 1065, 1364, 1064, 1063, 3173,
-     1062, 1061, 1382, 3179, 3179, 3179, 1060, 3180, 1059, 1057,
-
-     3181, 3286, 3286, 3286, 3298, 3298, 3298, 3194, 3194, 3194,
-     1056, 3195, 1055, 1054, 3196, 3300, 3300, 3300, 3287, 1052,
-     3283, 3299, 3217, 3217, 3217, 1050, 3319, 3319, 3319, 1049,
-     3320, 1048, 3301, 3321, 3223, 3223, 3223, 1047, 3224, 3218,
-     1044, 3225, 3284, 3226, 3226, 3226, 1043, 3227, 1042, 1037,
-     3228, 3326, 3326, 3326, 1605, 1605, 1605, 3256, 3256, 3256,
-     3348, 3348, 3348, 1035, 3349, 1034, 1033, 3350, 1027, 3327,
-     1026, 1025, 1607, 1024, 3257, 1867, 1016, 1015, 1867, 3258,
-     3258, 3258, 1013, 3259, 1010, 1009, 3260, 3269, 3269, 3269,
-     3271, 3271, 3271, 3272, 3272, 3272, 1008, 1867, 3274, 3274,
-
-     3274, 3369, 3369, 3369, 3373, 3373, 3373, 1007, 3374, 1002,
-      999, 3375, 1001, 1380, 1380, 1380, 3449, 3449, 3449, 3370,
-      994, 3334, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
-     1865, 1382,  993, 1865, 3286, 3286, 3286,  991, 1865, 1865,
-     1865, 1867, 1865, 3376, 3376, 3376, 3298, 3298, 3298,  762,
-      989, 3287, 3385, 3385, 3385,  988, 3386,  986,  984, 3387,
-     3377,  983,  982, 3299,  980, 3300, 3300, 3300, 1865, 1865,
-     1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,  979,
-     3371, 1865, 3301, 3450, 3450, 3450, 1865, 1865, 1865, 1867,
-     1865, 3388, 3388, 3388,  976, 3389,  975,  974, 3390, 3319,
-
-     3319, 3319,  972, 3320,  971,  969, 3321, 3326, 3326, 3326,
-     3418, 3418, 3418, 3369, 3369, 3369, 1865, 1865,  968, 3348,
-     3348, 3348,  967, 3349,  966, 3327, 3350,  964, 3419,  963,
-      962, 3370,  961, 3376, 3376, 3376,  960, 1867, 1865, 1865,
-     1865, 1865, 1865, 3436, 1865, 1865, 1865,  959,  957, 1865,
-     3377, 3449, 3449, 3449, 1865, 1865, 1865, 1867, 1865, 1380,
-     1380, 1380, 3373, 3373, 3373,  955, 3374,  954,  952, 3375,
-      948, 3461, 3461, 3461,  946, 3462,  942, 1382, 3463,  938,
-     3418, 3418, 3418,  937, 1865, 1865, 1865, 1865, 1865, 1865,
-     1865, 1865, 1865, 1865, 3436,  935,  933, 1865, 3419, 3450,
-
-     3450, 3450, 1865, 1865, 1865, 1867, 1865,  932, 3385, 3385,
-     3385, 3455, 3386,  930,  928, 3387, 3388, 3388, 3388,  927,
-     3389,  926,  925, 3390, 3504, 3504, 3504, 3517, 3517, 3517,
-      924,  922, 1865, 1865, 3519, 3519, 3519, 3461, 3461, 3461,
-      914, 3462, 1867, 1868, 3463, 3518, 3531, 3531, 3531,  912,
-      907, 3520, 3539, 3539, 3539, 3557, 3557, 3557, 3504, 3504,
-     3504,  906,  905, 3532, 3517, 3517, 3517,  904,  903, 3540,
-     3519, 3519, 3519, 1261,  901,  899, 1867, 3569, 3569, 3569,
-      898, 3570, 3518,  896, 3571,  894,  893, 3520, 3531, 3531,
-     3531, 3582, 3582, 3582,  891, 3583,  889,  888, 3584, 3539,
-
-     3539, 3539, 3591, 3591, 3591, 3532, 3592,  886,  885, 3593,
-     2075, 3557, 3557, 3557,  882,  881, 3540, 3569, 3569, 3569,
-      880, 3570,  878, 3905, 3571,  874, 3582, 3582, 3582, 1261,
-     3583,  872,  870, 3584, 3591, 3591, 3591,  869, 3592,  868,
-      866, 3593, 3781, 3781, 3781, 3781, 3781, 3781, 3608, 3794,
-      865,  861, 3795, 3903, 3903, 3903, 3903, 3903, 3903,  860,
-     1261,  859,  858, 1261,  856,  855,  854,  852,  851,  850,
-      844, 3904,  840,  839, 3904,  292,  292,  292,  292,  292,
-      292,  292,  292,  292,  293,  293,  293,  293,  293,  293,
-      293,  293,  293,  298,  298,  298,  298,  298,  298,  298,
-
-      298,  298,  301,  301,  301,  301,  301,  301,  301,  301,
-      301,  304,  304,  304,  304,  304,  304,  304,  304,  304,
-      307,  307,  307,  307,  307,  307,  307,  307,  307,  314,
-      314,  314,  314,  314,  314,  314,  314,  314,  321,  321,
-      321,  321,  321,  321,  321,  321,  321,  326,  326,  326,
-      326,  326,  326,  326,  326,  326,  338,  338,  338,  338,
-      338,  338,  338,  338,  338,  344,  344,  344,  344,  344,
-      344,  344,  344,  344,  352,  352,  352,  352,  352,  352,
-      352,  352,  352,  360,  360,  360,  360,  360,  360,  360,
-      360,  360,  368,  368,  368,  368,  368,  368,  368,  368,
-
-      368,  372,  372,  372,  372,  372,  372,  372,  372,  372,
-      378,  378,  378,  378,  378,  378,  378,  378,  378,  384,
-      384,  384,  384,  384,  384,  384,  384,  384,  390,  390,
-      390,  390,  390,  390,  390,  390,  390,  396,  396,  396,
-      396,  396,  396,  396,  396,  396,  403,  403,  403,  403,
-      403,  403,  403,  403,  403,  408,  408,  408,  408,  408,
-      408,  408,  408,  408,  415,  415,  415,  415,  415,  415,
-      415,  415,  415,  421,  421,  421,  421,  421,  421,  421,
-      421,  421,  428,  428,  428,  428,  428,  428,  428,  428,
-      428,  437,  437,  437,  437,  437,  437,  437,  437,  437,
-
-      443,  443,  443,  443,  443,  443,  443,  443,  443,  454,
-      454,  454,  454,  454,  454,  454,  454,  454,  461,  461,
-      461,  461,  461,  461,  461,  461,  461,  465,  465,  465,
-      465,  465,  465,  465,  465,  465,  472,  472,  472,  472,
-      472,  472,  472,  472,  472,  480,  480,  480,  480,  480,
-      480,  480,  480,  480,  488,  488,  488,  488,  488,  488,
-      488,  488,  488,  494,  494,  494,  494,  494,  494,  494,
-      494,  494,  500,  500,  500,  500,  500,  500,  500,  500,
-      500,  504,  504,  504,  504,  504,  504,  504,  504,  504,
-      512,  512,  512,  512,  512,  512,  512,  512,  512,  519,
-
-      519,  519,  519,  519,  519,  519,  519,  519,  526,  526,
-      526,  526,  526,  526,  526,  526,  526,  531,  531,  531,
-      531,  531,  531,  531,  531,  531,  537,  537,  537,  537,
-      537,  537,  537,  537,  537,  542,  542,  542,  542,  542,
-      542,  542,  542,  542,  548,  548,  548,  548,  548,  548,
-      548,  548,  548,  553,  553,  553,  553,  553,  553,  553,
-      553,  553,  559,  559,  559,  559,  559,  559,  559,  559,
-      559,  568,  568,  568,  568,  568,  568,  568,  568,  568,
-      575,  575,  575,  575,  575,  575,  575,  575,  575,  579,
-      579,  579,  579,  579,  579,  579,  579,  579,  590,  590,
-
-      590,  590,  590,  590,  590,  590,  590,  598,  598,  598,
-      598,  598,  598,  598,  598,  598,  605,  605,  605,  605,
-      605,  605,  605,  605,  605,  610,  610,  610,  610,  610,
-      610,  610,  610,  610,  616,  616,  616,  616,  616,  616,
-      616,  616,  616,  624,  624,  624,  624,  624,  624,  624,
-      624,  624,  630,  630,  630,  630,  630,  630,  630,  630,
-      630,  635,  635,  635,  635,  635,  635,  635,  635,  635,
-      642,  642,  642,  642,  642,  642,  642,  642,  642,  647,
-      647,  647,  647,  647,  647,  647,  647,  647,  653,  653,
-      653,  653,  653,  653,  653,  653,  653,  660,  660,  660,
-
-      660,  660,  660,  660,  660,  660,  667,  667,  667,  667,
-      667,  667,  667,  667,  667,  674,  674,  674,  674,  674,
-      674,  674,  674,  674,  682,  682,  682,  682,  682,  682,
-      682,  682,  682,  307,  307,  307,  307,  307,  307,  307,
-      307,  307,  693,  693,  693,  693,  693,  693,  693,  693,
-      693,  699,  699,  699,  699,  699,  699,  699,  699,  699,
-      705,  705,  705,  705,  705,  705,  705,  705,  705,  710,
-      710,  710,  710,  710,  710,  710,  710,  710,  719,  719,
-      719,  719,  719,  719,  719,  719,  719,  725,  725,  725,
-      725,  725,  725,  725,  725,  725,  745,  745,  745,  835,
-
-      831,  830,  745,  782,  782,  782,  829,  828,  827,  782,
-      790,  790,  790,  825,  823,  822,  790,  799,  799,  799,
-      821,  819,  817,  799,  803,  803,  803,  816,  814,  812,
-      803,  809,  809,  809,  811,  810,  808,  809,  815,  815,
-      815,  806,  805,  804,  815,  820,  820,  820,  802,  800,
-      798,  820,  826,  826,  826,  797,  795,  794,  826,  836,
-      836,  836,  793,  792,  791,  836,  853,  853,  853,  789,
-      784,  783,  853,  857,  857,  857,  781, 3905,  762,  857,
-      867,  867,  867,  747,  746,  744,  867,  873,  873,  873,
-      743,  737,  736,  873,  879,  879,  879,  737,  736,  735,
-
-      879,  887,  887,  887,  734, 3905, 3905,  887,  892,  892,
-      892, 3905, 3905, 3905,  892,  897,  897,  897, 3905, 3905,
-     3905,  897,  902,  902,  902, 3905, 3905, 3905,  902,  913,
-      913,  913, 3905, 3905, 3905,  913,  923,  923,  923, 3905,
-     3905, 3905,  923,  931,  931,  931, 3905, 3905, 3905,  931,
-      936,  936,  936, 3905, 3905, 3905,  936,  947,  947,  947,
-     3905, 3905, 3905,  947,  953,  953,  953, 3905, 3905, 3905,
-      953,  958,  958,  958, 3905, 3905, 3905,  958,  965,  965,
-      965, 3905, 3905, 3905,  965,  973,  973,  973, 3905, 3905,
-     3905,  973,  981,  981,  981, 3905, 3905, 3905,  981,  987,
-
-      987,  987, 3905, 3905, 3905,  987,  992,  992,  992, 3905,
-     3905, 3905,  992,  998,  998,  998,  998,  998,  998,  998,
-     3905,  998,  745,  745,  745, 3905, 3905, 3905,  745, 1014,
-     3905, 3905, 3905, 1014,  782,  782,  782, 3905, 3905, 3905,
-      782, 1058, 3905, 3905, 3905, 1058,  790,  790,  790, 3905,
-     3905, 3905,  790, 1066, 3905, 3905, 3905, 1066,  799,  799,
-      799, 3905, 3905, 3905,  799, 1070, 3905, 3905, 3905, 1070,
-      803,  803,  803, 3905, 3905, 3905,  803, 1076, 3905, 3905,
-     3905, 1076,  809,  809,  809, 3905, 3905, 3905,  809, 1081,
-     3905, 3905, 3905, 1081,  815,  815,  815, 3905, 3905, 3905,
-
-      815, 1085, 3905, 3905, 3905, 1085,  820,  820,  820, 3905,
-     3905, 3905,  820, 1090, 3905, 3905, 3905, 1090,  826,  826,
-      826, 3905, 3905, 3905,  826, 1101, 3905, 3905, 3905, 1101,
-      836,  836,  836, 3905, 3905, 3905,  836, 1119, 3905, 3905,
-     3905, 1119,  853,  853,  853, 3905, 3905, 3905,  853, 1123,
-     3905, 3905, 3905, 1123,  857,  857,  857, 3905, 3905, 3905,
-      857, 1133, 3905, 3905, 3905, 1133,  867,  867,  867, 3905,
-     3905, 3905,  867, 1141, 3905, 3905, 3905, 1141,  873,  873,
-      873, 3905, 3905, 3905,  873, 1144, 3905, 3905, 3905, 1144,
-      879,  879,  879, 3905, 3905, 3905,  879, 1154, 3905, 3905,
-
-     3905, 1154,  887,  887,  887, 3905, 3905, 3905,  887, 1159,
-     3905, 3905, 3905, 1159,  892,  892,  892, 3905, 3905, 3905,
-      892, 1164, 3905, 3905, 3905, 1164,  897,  897,  897, 3905,
-     3905, 3905,  897, 1168, 3905, 3905, 3905, 1168,  902,  902,
-      902, 3905, 3905, 3905,  902, 1178, 3905, 3905, 3905, 1178,
-      913,  913,  913, 3905, 3905, 3905,  913, 1182, 3905, 3905,
-     3905, 1182,  923,  923,  923, 3905, 3905, 3905,  923, 1193,
-     3905, 3905, 3905, 1193,  931,  931,  931, 3905, 3905, 3905,
-      931, 1198, 3905, 3905, 3905, 1198,  936,  936,  936, 3905,
-     3905, 3905,  936, 1209, 3905, 3905, 3905, 1209,  947,  947,
-
-      947, 3905, 3905, 3905,  947, 1214, 3905, 3905, 3905, 1214,
-      953,  953,  953, 3905, 3905, 3905,  953, 1219, 3905, 3905,
-     3905, 1219,  958,  958,  958, 3905, 3905, 3905,  958, 1226,
-     3905, 3905, 3905, 1226,  965,  965,  965, 3905, 3905, 3905,
-      965, 1233, 3905, 3905, 3905, 1233,  973,  973,  973, 3905,
-     3905, 3905,  973, 1241, 3905, 3905, 3905, 1241,  981,  981,
-      981, 3905, 3905, 3905,  981, 1247, 3905, 3905, 3905, 1247,
-      987,  987,  987, 3905, 3905, 3905,  987, 1252, 3905, 3905,
-     3905, 1252,  992,  992,  992, 3905, 3905, 3905,  992, 1258,
-     3905, 3905, 3905, 1258, 1260, 1260, 1260, 1260, 1260, 1260,
-
-     1260, 1260, 1260, 1266, 3905, 3905, 3905, 3905, 1266,  745,
-      745,  745, 3905, 3905, 3905,  745, 1277, 1277, 1277, 1277,
-     3905, 3905, 1277, 1277,  782,  782,  782,  782, 3905,  782,
-     3905,  782, 1328, 1328, 1328, 1328, 3905, 3905, 1328, 1328,
-      790,  790,  790, 3905, 3905, 3905,  790, 1338, 1338, 1338,
-     1338, 3905, 3905, 1338, 1338,  799,  799,  799, 3905, 3905,
-     3905,  799, 1344, 1344, 1344, 1344, 3905, 3905, 1344, 1344,
-      803,  803,  803, 3905, 3905, 3905,  803, 1353, 1353, 1353,
-     1353, 3905, 3905, 1353, 1353,  809,  809,  809,  809, 3905,
-      809, 3905,  809, 1363, 1363, 1363, 1363, 3905, 3905, 1363,
-
-     1363,  815,  815,  815,  815, 3905,  815, 3905,  815, 1371,
-     1371, 1371, 1371, 3905, 3905, 1371, 1371,  820,  820,  820,
-      820, 3905,  820, 3905,  820, 1381, 1381, 1381, 1381, 3905,
-     3905, 1381, 1381,  826,  826,  826,  826, 3905,  826, 3905,
-      826, 1397, 1397, 1397, 1397, 3905, 3905, 1397, 1397,  836,
-      836,  836, 3905, 3905, 3905,  836, 1422, 1422, 1422, 1422,
-     3905, 3905, 1422, 1422, 1429, 1429, 1429, 1429, 3905, 3905,
-     1429, 1429,  857,  857,  857, 3905, 3905, 3905,  857, 1442,
-     1442, 1442, 1442, 3905, 3905, 1442, 1442,  867,  867,  867,
-     3905, 3905, 3905,  867, 1454, 1454, 1454, 1454, 3905, 3905,
-
-     1454, 1454,  873,  873,  873, 3905, 3905, 3905,  873, 1459,
-     1459, 1459, 1459, 3905, 3905, 1459, 1459,  879,  879,  879,
-     3905, 3905, 3905,  879, 1471, 1471, 1471, 1471, 3905, 3905,
-     1471, 1471,  887,  887,  887, 3905, 3905, 3905,  887, 1479,
-     1479, 1479, 1479, 3905, 3905, 1479, 1479,  892,  892,  892,
-     3905, 3905, 3905,  892, 1487, 1487, 1487, 1487, 3905, 3905,
-     1487, 1487,  897,  897,  897, 3905, 3905, 3905,  897, 1493,
-     1493, 1493, 1493, 3905, 3905, 1493, 1493,  902,  902,  902,
-     3905, 3905, 3905,  902, 1508, 1508, 1508, 1508, 3905, 3905,
-     1508, 1508,  913,  913,  913, 3905, 3905, 3905,  913, 1514,
-
-     1514, 1514, 1514, 3905, 3905, 1514, 1514,  923,  923,  923,
-     3905, 3905, 3905,  923, 1527, 1527, 1527, 1527, 3905, 3905,
-     1527, 1527,  931,  931,  931, 3905, 3905, 3905,  931, 1535,
-     1535, 1535, 1535, 3905, 3905, 1535, 1535,  936,  936,  936,
-     3905, 3905, 3905,  936, 1551, 1551, 1551, 1551, 3905, 3905,
-     1551, 1551,  947,  947,  947,  947, 3905,  947, 3905,  947,
-     1560, 1560, 1560, 1560, 3905, 3905, 1560, 1560,  953,  953,
-      953, 3905, 3905, 3905,  953, 1568, 1568, 1568, 1568, 3905,
-     3905, 1568, 1568,  958,  958,  958, 3905, 3905, 3905,  958,
-     1578, 1578, 1578, 1578, 3905, 3905, 1578, 1578,  965,  965,
-
-      965, 3905, 3905, 3905,  965, 1588, 1588, 1588, 1588, 3905,
-     3905, 1588, 1588,  973,  973,  973, 3905, 3905, 3905,  973,
-     1599, 1599, 1599, 1599, 3905, 3905, 1599, 1599,  981,  981,
-      981, 3905, 3905, 3905,  981, 1606, 1606, 1606, 1606, 3905,
-     3905, 1606, 1606,  987,  987,  987, 3905, 3905, 3905,  987,
-     1614, 1614, 1614, 1614, 3905, 3905, 1614, 1614,  992,  992,
-      992,  992, 3905,  992, 3905,  992, 1625, 1625, 1625, 1625,
-     3905, 3905, 1625, 1625, 1260, 1260, 1260, 1260, 1260, 1260,
-     1260, 1260, 1260, 1266, 3905, 1266, 3905, 3905, 1266,  745,
-      745,  745, 3905, 3905, 3905,  745, 1277, 1277, 1277, 1277,
-
-     3905, 3905, 1277, 1277,  782,  782,  782, 3905, 3905, 3905,
-      782, 1328, 1328, 1328, 1328, 3905, 3905, 1328, 1328,  790,
-      790,  790, 3905, 3905, 3905,  790, 1338, 1338, 1338, 1338,
-     3905, 3905, 1338, 1338,  799,  799,  799, 3905, 3905, 3905,
-      799, 1344, 1344, 1344, 1344, 3905, 3905, 1344, 1344,  803,
-      803,  803, 3905, 3905, 3905,  803, 1353, 1353, 1353, 1353,
-     3905, 3905, 1353, 1353,  809,  809,  809, 3905, 3905, 3905,
-      809, 1363, 1363, 1363, 1363, 3905, 3905, 1363, 1363, 1371,
-     1371, 1371, 1371, 3905, 3905, 1371, 1371,  820,  820,  820,
-     3905, 3905, 3905,  820, 1381, 1381, 1381, 1381, 3905, 3905,
-
-     1381, 1381,  826,  826,  826, 3905, 3905, 3905,  826, 1397,
-     1397, 1397, 1397, 3905, 3905, 1397, 1397,  836,  836,  836,
-     3905, 3905, 3905,  836, 1422, 1422, 1422, 1422, 3905, 3905,
-     1422, 1422, 1429, 1429, 1429, 1429, 3905, 3905, 1429, 1429,
-      857,  857,  857, 3905, 3905, 3905,  857, 1442, 1442, 1442,
-     1442, 3905, 3905, 1442, 1442,  867,  867,  867,  867, 3905,
-      867, 3905,  867, 1454, 1454, 1454, 1454, 3905, 3905, 1454,
-     1454,  873,  873,  873,  873, 3905,  873, 3905,  873, 1459,
-     1459, 1459, 1459, 3905, 3905, 1459, 1459,  879,  879,  879,
-     3905, 3905, 3905,  879, 1471, 1471, 1471, 1471, 3905, 3905,
-
-     1471, 1471,  887,  887,  887, 3905, 3905, 3905,  887, 1479,
-     1479, 1479, 1479, 3905, 3905, 1479, 1479,  892,  892,  892,
-     3905, 3905, 3905,  892, 1487, 1487, 1487, 1487, 3905, 3905,
-     1487, 1487,  897,  897,  897,  897, 3905,  897, 3905,  897,
-     1493, 1493, 1493, 1493, 3905, 3905, 1493, 1493,  902,  902,
-      902, 3905, 3905, 3905,  902, 1508, 1508, 1508, 1508, 3905,
-     3905, 1508, 1508,  913,  913,  913, 3905, 3905, 3905,  913,
-     1514, 1514, 1514, 1514, 3905, 3905, 1514, 1514,  923,  923,
-      923, 3905, 3905, 3905,  923, 1527, 1527, 1527, 1527, 3905,
-     3905, 1527, 1527,  931,  931,  931, 3905, 3905, 3905,  931,
-
-     1535, 1535, 1535, 1535, 3905, 3905, 1535, 1535,  936,  936,
-      936, 3905, 3905, 3905,  936, 1551, 1551, 1551, 1551, 3905,
-     3905, 1551, 1551,  947,  947,  947, 3905, 3905, 3905,  947,
-     1560, 1560, 1560, 1560, 3905, 3905, 1560, 1560,  953,  953,
-      953, 3905, 3905, 3905,  953, 1568, 1568, 1568, 1568, 3905,
-     3905, 1568, 1568,  958,  958,  958, 3905, 3905, 3905,  958,
-     1578, 1578, 1578, 1578, 3905, 3905, 1578, 1578,  965,  965,
-      965, 3905, 3905, 3905,  965, 1588, 1588, 1588, 1588, 3905,
-     3905, 1588, 1588,  973,  973,  973,  973, 3905,  973, 3905,
-      973, 1599, 1599, 1599, 1599, 3905, 3905, 1599, 1599,  981,
-
-      981,  981, 3905, 3905, 3905,  981, 1606, 1606, 1606, 1606,
-     3905, 3905, 1606, 1606,  987,  987,  987, 3905, 3905, 3905,
-      987, 1614, 1614, 1614, 1614, 3905, 3905, 1614, 1614,  992,
-      992,  992, 3905, 3905, 3905,  992, 1625, 1625, 1625, 1625,
-     3905, 3905, 1625, 1625, 1260, 1260, 1260, 1260, 1260, 1260,
-     1260, 1260, 1260, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
-     1865, 1865,  745,  745,  745, 3905, 3905, 3905,  745,  782,
-      782,  782, 3905, 3905, 3905,  782, 1328, 1328, 1328, 1328,
-     3905, 3905, 1328, 1328,  790,  790,  790, 3905, 3905, 3905,
-      790, 1338, 1338, 1338, 1338, 3905, 3905, 1338, 1338,  799,
-
-      799,  799,  799, 3905,  799, 3905,  799, 1344, 1344, 1344,
-     1344, 3905, 3905, 1344, 1344,  803,  803,  803, 3905, 3905,
-     3905,  803, 1353, 1353, 1353, 1353, 3905, 3905, 1353, 1353,
-      809,  809,  809, 3905, 3905, 3905,  809, 1363, 1363, 1363,
-     1363, 3905, 3905, 1363, 1363, 1371, 1371, 1371, 1371, 3905,
-     3905, 1371, 1371,  820,  820,  820, 3905, 3905, 3905,  820,
-     1381, 1381, 1381, 1381, 3905, 3905, 1381, 1381,  826,  826,
-      826, 3905, 3905, 3905,  826, 1397, 1397, 1397, 1397, 3905,
-     3905, 1397, 1397,  836,  836,  836,  836, 3905,  836, 3905,
-      836, 1422, 1422, 1422, 1422, 3905, 3905, 1422, 1422, 1429,
-
-     1429, 1429, 1429, 3905, 3905, 1429, 1429,  857,  857,  857,
-     3905, 3905, 3905,  857, 1442, 1442, 1442, 1442, 3905, 3905,
-     1442, 1442, 1454, 1454, 1454, 1454, 3905, 3905, 1454, 1454,
-     1459, 1459, 1459, 1459, 3905, 3905, 1459, 1459,  879,  879,
-      879, 3905, 3905, 3905,  879, 1471, 1471, 1471, 1471, 3905,
-     3905, 1471, 1471,  887,  887,  887, 3905, 3905, 3905,  887,
-     1479, 1479, 1479, 1479, 3905, 3905, 1479, 1479,  892,  892,
-      892,  892, 3905,  892, 3905,  892, 1487, 1487, 1487, 1487,
-     3905, 3905, 1487, 1487,  897,  897,  897, 3905, 3905, 3905,
-      897, 1493, 1493, 1493, 1493, 3905, 3905, 1493, 1493,  902,
-
-      902,  902, 3905, 3905, 3905,  902, 1508, 1508, 1508, 1508,
-     3905, 3905, 1508, 1508,  913,  913,  913, 3905, 3905, 3905,
-      913, 1514, 1514, 1514, 1514, 3905, 3905, 1514, 1514,  923,
-      923,  923, 3905, 3905, 3905,  923, 1527, 1527, 1527, 1527,
-     3905, 3905, 1527, 1527,  931,  931,  931,  931, 3905,  931,
-     3905,  931, 1535, 1535, 1535, 1535, 3905, 3905, 1535, 1535,
-      936,  936,  936, 3905, 3905, 3905,  936, 1551, 1551, 1551,
-     1551, 3905, 3905, 1551, 1551,  947,  947,  947, 3905, 3905,
-     3905,  947, 1560, 1560, 1560, 1560, 3905, 3905, 1560, 1560,
-      953,  953,  953, 3905, 3905, 3905,  953, 1568, 1568, 1568,
-
-     1568, 3905, 3905, 1568, 1568,  958,  958,  958, 3905, 3905,
-     3905,  958, 1578, 1578, 1578, 1578, 3905, 3905, 1578, 1578,
-      965,  965,  965, 3905, 3905, 3905,  965, 1588, 1588, 1588,
-     1588, 3905, 3905, 1588, 1588,  973,  973,  973, 3905, 3905,
-     3905,  973, 1599, 1599, 1599, 1599, 3905, 3905, 1599, 1599,
-      981,  981,  981, 3905, 3905, 3905,  981, 1606, 1606, 1606,
-     1606, 3905, 3905, 1606, 1606,  987,  987,  987, 3905, 3905,
-     3905,  987, 1614, 1614, 1614, 1614, 3905, 3905, 1614, 1614,
-      992,  992,  992, 3905, 3905, 3905,  992, 1625, 1625, 1625,
-     1625, 3905, 3905, 1625, 1625, 1260, 1260, 1260, 1260, 1260,
+     2425, 1567, 1567, 1567, 3795, 1261, 2232, 3808, 2421, 2241,
+     2241, 2241, 1261, 1552, 1261, 3834, 2426, 1261, 1261, 1569,
+     2429, 2429, 2429, 2410, 2430, 1261, 2242, 2431, 2432, 2432,
+     2432, 2244, 2244, 2244, 2434, 2434, 2434, 1783, 2435, 1782,
+
+     1776, 2436, 2418, 3798, 1261, 2433, 1261, 1261, 2245, 1577,
+     1577, 1577, 2438, 2438, 2438, 2423, 2248, 2248, 2248, 1261,
+     2249, 3812, 3797, 2250, 3804, 3805, 2428, 1579, 1261, 2439,
+     1587, 1587, 1587, 2444, 2444, 2444, 2446, 2446, 2446, 2265,
+     2265, 2265, 3799, 2266, 3806, 3807, 2267, 1261, 1589, 1261,
+     1261, 2445, 3809, 2447, 1605, 1605, 1605, 2459, 2459, 2459,
+     2270, 2270, 2270, 2437, 2272, 2272, 2272, 1774, 3811, 2461,
+     2461, 2461, 1607, 2462, 2460, 3818, 2463, 1261, 2271, 1261,
+     1772, 2273, 1261, 3813, 2440, 2274, 2274, 2274, 2464, 2464,
+     2464, 3824, 2465, 3816, 3817, 2466, 1624, 1624, 1624, 1771,
+
+     1261, 2458, 2275, 2281, 2281, 2281, 2472, 2472, 2472, 3835,
+     2473, 1770, 1769, 2474, 1626, 2475, 2475, 2475, 3820, 1261,
+     2282, 2481, 2481, 2481, 2482, 2482, 2482, 2291, 2291, 2291,
+     2484, 2484, 2484, 2488, 2488, 2488, 2298, 2298, 2298, 2299,
+     2299, 2299, 2489, 2489, 2489, 2493, 2493, 2493, 2498, 2498,
+     2498, 2499, 2499, 2499, 2501, 2501, 2501, 3826, 2468, 2312,
+     2312, 2312, 2502, 2502, 2502, 2316, 2316, 2316, 1261, 2317,
+     1261, 1261, 2318, 2319, 2319, 2319, 1261, 2320, 3825, 1261,
+     2321, 1327, 1327, 1327, 2509, 2509, 2509, 1261, 1261, 2490,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 1329,
+
+     3842, 2510, 2329, 2329, 2329, 3814, 3815, 3885, 1261, 2503,
+     3885, 3829, 3821, 3885, 1343, 1343, 1343, 2334, 2334, 2334,
+     2330, 2517, 2517, 2517, 1261, 2518, 3819, 1261, 2519, 1352,
+     1352, 1352, 1345, 2507, 2335, 3830, 2337, 2337, 2337, 1768,
+     2338, 3836, 2511, 2339, 2340, 2340, 2340, 1354, 2341, 1261,
+     1261, 2342, 1362, 1362, 1362, 1261, 2513, 1761, 2512, 1370,
+     1370, 1370, 2345, 2345, 2345, 3827, 2346, 1759, 1261, 2347,
+     1364, 3831, 2521, 2622, 2623, 2515, 2624, 1372, 2348, 2348,
+     2348, 1261, 2349, 3822, 2625, 2350, 1380, 1380, 1380, 3823,
+     2520, 2626, 2352, 2352, 2352, 2522, 2353, 1758, 1261, 2354,
+
+     2355, 2355, 2355, 3838, 1382, 2524, 2524, 2524, 1261, 2525,
+     1261, 3837, 2526, 1757, 2357, 2357, 2357, 2356, 2358, 3832,
+     1261, 2359, 1396, 1396, 1396, 2361, 2361, 2361, 1261, 2362,
+     2523, 3843, 2363, 3839, 2367, 2367, 2367, 1261, 2368, 1261,
+     1398, 2369, 2370, 2370, 2370, 2531, 2531, 2531, 3833, 2532,
+     1754, 1261, 2533, 2374, 2374, 2374, 3844, 2375, 1261, 2371,
+     2376, 2537, 2537, 2537, 1421, 1421, 1421, 2540, 2540, 2540,
+     2383, 2383, 2383, 1261, 2384, 3840, 1261, 2385, 2538, 1453,
+     1453, 1453, 1423, 1261, 3841, 2541, 1458, 1458, 1458, 2527,
+     2390, 2390, 2390, 3874, 2548, 2548, 2548, 1455, 2549, 3845,
+
+     3848, 2550, 1261, 1261, 1460, 1753, 1748, 2391, 1478, 1478,
+     1478, 3846, 3850, 1486, 1486, 1486, 2399, 2399, 2399, 3882,
+     2402, 2402, 2402, 3875, 2403, 3849, 1480, 2404, 1261, 2539,
+     1261, 1488, 1261, 1747, 2400, 2545, 3856, 3858, 2546, 2408,
+     2408, 2408, 2562, 2562, 2562, 1261, 2563, 1261, 1261, 2564,
+     1513, 1513, 1513, 2411, 2411, 2411, 2409, 2566, 2566, 2566,
+     2413, 2413, 2413, 2567, 2567, 2567, 3847, 1261, 1515, 3885,
+     3885, 3885, 3885, 3885, 3885, 2555, 2556, 1526, 1526, 1526,
+     2568, 3885, 3885, 3885, 3851, 3859, 3885, 1261, 1261, 3885,
+     2420, 2420, 2420, 1261, 3852, 1528, 1261, 1261, 3885, 2574,
+
+     2574, 2574, 1746, 2575, 1261, 1261, 2576, 2421, 2578, 2578,
+     2578, 2425, 2425, 2425, 3853, 2565, 2582, 2582, 2582, 1261,
+     3857, 2569, 1745, 2429, 2429, 2429, 2579, 2430, 1261, 2426,
+     2431, 2432, 2432, 2432, 2583, 3854, 3860, 2570, 2584, 2584,
+     2584, 2571, 2585, 2572, 3861, 2586, 3864, 3865, 2433, 2434,
+     2434, 2434, 1261, 2435, 1261, 3866, 2436, 1577, 1577, 1577,
+     2438, 2438, 2438, 2588, 2588, 2588, 3855, 2589, 1744, 1261,
+     2590, 1587, 1587, 1587, 1261, 1579, 1261, 2439, 2444, 2444,
+     2444, 2446, 2446, 2446, 2595, 2595, 2595, 3872, 2596, 1589,
+     3862, 2597, 1605, 1605, 1605, 1743, 2445, 1261, 2447, 2459,
+
+     2459, 2459, 1742, 1741, 2609, 2609, 2609, 3863, 2610, 2587,
+     1607, 2611, 3867, 2461, 2461, 2461, 2460, 2462, 1261, 1261,
+     2463, 3868, 1735, 2591, 2464, 2464, 2464, 1734, 2465, 1733,
+     1731, 2466, 1624, 1624, 1624, 2614, 2614, 2614, 1730, 2472,
+     2472, 2472, 2608, 2473, 3869, 1729, 2474, 2475, 2475, 2475,
+     1626, 3873, 3876, 1261, 2627, 2627, 2627, 2628, 2628, 2628,
+     2481, 2481, 2481, 2482, 2482, 2482, 2484, 2484, 2484, 2633,
+     2633, 2633, 2635, 2635, 2635, 2488, 2488, 2488, 2489, 2489,
+     2489, 2493, 2493, 2493, 2639, 2639, 2639, 2498, 2498, 2498,
+     2499, 2499, 2499, 2501, 2501, 2501, 2502, 2502, 2502, 1728,
+
+     2613, 2648, 2648, 2648, 2650, 2650, 2650, 2509, 2509, 2509,
+     2651, 2651, 2651, 1261, 2652, 1720, 1261, 2653, 1719, 2649,
+     2654, 2654, 2654, 1261, 2510, 3885, 3885, 3885, 3885, 3885,
+     3885, 2658, 2658, 2658, 1343, 1343, 1343, 2655, 2660, 2660,
+     2660, 1704, 3885, 1703, 1261, 3885, 2517, 2517, 2517, 1261,
+     2518, 3870, 1345, 2519, 3871, 2661, 1352, 1352, 1352, 1698,
+     1362, 1362, 1362, 1370, 1370, 1370, 1380, 1380, 1380, 2524,
+     2524, 2524, 3878, 2525, 1354, 1697, 2526, 2656, 1364, 1261,
+     2657, 1372, 3877, 1695, 1382, 2666, 2666, 2666, 2531, 2531,
+     2531, 1694, 2532, 3879, 1261, 2533, 1692, 2663, 2672, 2672,
+
+     2672, 2659, 1691, 2667, 2537, 2537, 2537, 1690, 2662, 2676,
+     2676, 2676, 3880, 2677, 1687, 2673, 2678, 2679, 2679, 2679,
+     1686, 2538, 2540, 2540, 2540, 2664, 1684, 3881, 2665, 1453,
+     1453, 1453, 2685, 2685, 2685, 2680, 2687, 2687, 2687, 1680,
+     2541, 2548, 2548, 2548, 1679, 2549, 1675, 1455, 2550, 1674,
+     2686, 1673, 1672, 2688, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 2693, 2693, 2693, 1478, 1478, 1478, 1671,
+     1670, 3885, 1669, 1668, 3885, 1667, 1666, 3885, 1665, 1664,
+     2694, 1663, 1662, 2689, 1480, 1486, 1486, 1486, 1661, 1660,
+     2684, 2697, 2697, 2697, 2702, 2702, 2702, 2562, 2562, 2562,
+
+     1658, 2563, 1657, 1488, 2564, 1513, 1513, 1513, 2698, 1656,
+     2690, 1655, 2692, 2566, 2566, 2566, 2567, 2567, 2567, 2691,
+     2707, 2707, 2707, 1515, 2704, 2704, 2704, 2695, 2705, 1654,
+     1651, 2706, 1650, 2568, 3885, 3885, 3885, 2708, 3885, 3885,
+     3885, 2711, 2711, 2711, 2713, 2713, 2713, 3885, 3885, 3885,
+     2696, 3885, 2578, 2578, 2578, 3885, 2574, 2574, 2574, 2712,
+     2575, 2714, 1649, 2576, 3885, 2703, 2582, 2582, 2582, 1648,
+     2579, 2584, 2584, 2584, 1647, 2585, 1646, 1645, 2586, 2718,
+     2718, 2718, 1644, 1643, 2583, 1642, 2709, 2588, 2588, 2588,
+     2710, 2589, 1641, 1640, 2590, 1639, 1638, 2719, 1587, 1587,
+
+     1587, 2595, 2595, 2595, 1637, 2596, 1634, 1633, 2597, 1605,
+     1605, 1605, 2734, 2735, 2715, 2736, 1589, 2609, 2609, 2609,
+     1632, 2610, 1631, 2737, 2611, 2739, 2740, 1607, 2741, 1630,
+     2738, 1624, 1624, 1624, 1629, 1261, 2742, 2614, 2614, 2614,
+     2627, 2627, 2627, 2743, 1612, 2720, 2628, 2628, 2628, 1626,
+     2764, 2764, 2764, 1604, 1603, 1261, 2633, 2633, 2633, 2635,
+     2635, 2635, 2768, 2768, 2768, 2639, 2639, 2639, 2772, 2772,
+     2772, 2733, 2775, 2775, 2775, 2648, 2648, 2648, 2650, 2650,
+     2650, 2651, 2651, 2651, 1602, 2652, 1597, 1596, 2653, 2654,
+     2654, 2654, 1592, 2649, 1586, 2777, 2777, 2777, 2745, 2778,
+
+     2746, 1585, 2779, 2780, 2780, 2780, 2655, 2782, 2782, 2782,
+     2658, 2658, 2658, 2784, 2784, 2784, 2660, 2660, 2660, 1581,
+     2781, 2786, 2786, 2786, 2783, 2787, 1576, 1572, 2788, 1571,
+     1563, 2785, 1549, 2661, 2789, 2789, 2789, 1362, 1362, 1362,
+     1370, 1370, 1370, 1380, 1380, 1380, 2666, 2666, 2666, 2672,
+     2672, 2672, 2790, 1548, 1547, 1364, 1544, 1538, 1372, 1533,
+     1525, 1382, 1524, 1523, 2667, 1522, 2673, 2798, 2798, 2798,
+     1521, 2799, 1520, 1519, 2800, 2676, 2676, 2676, 1518, 2677,
+     1517, 1512, 2678, 2679, 2679, 2679, 2811, 2811, 2811, 1453,
+     1453, 1453, 2685, 2685, 2685, 2687, 2687, 2687, 2825, 2825,
+
+     2825, 2680, 2791, 2812, 2793, 1511, 1506, 1455, 2792, 1505,
+     2686, 1499, 2688, 2814, 2814, 2814, 2826, 2815, 1496, 1491,
+     2816, 2820, 2820, 2820, 2693, 2693, 2693, 2822, 2822, 2822,
+     1490, 2823, 1485, 1474, 2824, 1486, 1486, 1486, 2821, 1469,
+     1468, 2694, 2697, 2697, 2697, 1467, 1463, 2813, 2828, 2828,
+     2828, 1462, 2829, 1488, 1457, 2830, 2833, 2833, 2833, 2698,
+     2702, 2702, 2702, 2835, 2835, 2835, 1446, 2704, 2704, 2704,
+     1440, 2705, 1439, 2834, 2706, 2707, 2707, 2707, 2837, 2837,
+     2837, 2836, 2838, 1438, 1434, 2839, 2840, 2840, 2840, 2842,
+     2842, 2842, 2708, 2711, 2711, 2711, 1433, 2827, 2713, 2713,
+
+     2713, 1432, 1420, 2841, 1419, 1418, 2843, 2718, 2718, 2718,
+     1417, 2712, 2844, 2844, 2844, 2714, 2845, 1416, 1415, 2846,
+     1587, 1587, 1587, 1414, 1413, 2719, 1412, 1605, 1605, 1605,
+     1624, 1624, 1624, 2764, 2764, 2764, 1406, 1351, 1589, 2896,
+     2896, 2896, 2768, 2768, 2768, 1607, 1347, 1342, 1626, 2772,
+     2772, 2772, 2775, 2775, 2775, 2904, 2904, 2904, 2777, 2777,
+     2777, 1341, 2778, 1336, 1335, 2779, 2780, 2780, 2780, 2906,
+     2906, 2906, 2905, 2907, 1334, 1333, 2908, 2782, 2782, 2782,
+     1332, 1331, 2877, 2781, 2784, 2784, 2784, 2850, 2863, 2909,
+     2909, 2909, 1319, 2910, 2783, 1318, 2911, 2786, 2786, 2786,
+
+     1317, 2787, 2785, 1316, 2788, 2789, 2789, 2789, 1362, 1362,
+     1362, 1370, 1370, 1370, 1380, 1380, 1380, 2917, 2917, 2917,
+     2798, 2798, 2798, 2790, 2799, 1315, 1364, 2800, 1314, 1372,
+     1313, 1312, 1382, 1311, 2918, 2931, 2931, 2931, 2811, 2811,
+     2811, 2933, 2933, 2933, 1310, 2934, 1309, 1308, 2935, 2936,
+     2936, 2936, 2932, 1307, 1306, 2812, 2814, 2814, 2814, 1305,
+     2815, 1302, 1301, 2816, 1300, 1299, 2914, 2937, 1298, 1297,
+     2912, 2820, 2820, 2820, 1296, 2941, 2941, 2941, 2913, 2942,
+     1295, 1294, 2943, 2822, 2822, 2822, 1291, 2823, 2821, 1290,
+     2824, 2825, 2825, 2825, 1486, 1486, 1486, 2828, 2828, 2828,
+
+     1289, 2829, 1288, 1287, 2830, 2952, 2952, 2952, 1286, 2826,
+     1285, 1284, 1488, 2833, 2833, 2833, 2954, 2954, 2954, 1283,
+     2955, 1282, 2953, 2956, 2835, 2835, 2835, 2837, 2837, 2837,
+     2834, 2838, 1275, 1271, 2839, 2840, 2840, 2840, 1270, 2957,
+     2957, 2957, 2836, 2958, 1269, 1268, 2959, 2842, 2842, 2842,
+     1267, 1264, 2841, 1262, 2960, 2960, 2960, 2950, 2961, 1261,
+     1259, 2962, 1257, 1256, 2843, 2844, 2844, 2844, 1255, 2845,
+     1254, 1253, 2846, 2970, 2970, 2970, 2972, 2972, 2972, 1587,
+     1587, 1587, 2975, 2975, 2975, 2976, 2976, 2976, 1251, 1248,
+     2971, 1246, 1245, 2973, 1605, 1605, 1605, 1589, 3001, 3001,
+
+     3001, 1244, 2977, 3003, 3003, 3003, 3021, 3021, 3021, 2896,
+     2896, 2896, 1607, 1243, 1242, 3002, 3026, 3026, 3026, 1239,
+     1236, 3004, 2904, 2904, 2904, 3030, 3030, 3030, 1235, 3031,
+     1234, 1232, 3032, 2906, 2906, 2906, 1231, 2907, 1228, 2905,
+     2908, 2909, 2909, 2909, 1227, 2910, 1225, 1222, 2911, 1221,
+     1220, 2974, 1362, 1362, 1362, 2988, 1370, 1370, 1370, 1380,
+     1380, 1380, 3041, 3041, 3041, 2917, 2917, 2917, 1216, 1215,
+     1364, 3043, 3043, 3043, 1372, 3044, 1213, 1382, 3045, 3042,
+     1212, 1211, 2918, 3046, 3046, 3046, 2931, 2931, 2931, 3059,
+     3059, 3059, 1210, 3060, 1208, 3039, 3061, 2933, 2933, 2933,
+
+     3047, 2934, 1207, 2932, 2935, 2936, 2936, 2936, 3038, 3063,
+     3063, 3063, 2941, 2941, 2941, 1206, 2942, 1205, 1204, 2943,
+     3037, 1203, 1200, 2937, 1199, 1197, 3064, 3072, 3072, 3072,
+     2952, 2952, 2952, 3075, 3075, 3075, 1194, 3076, 1192, 1191,
+     3077, 1190, 2954, 2954, 2954, 3073, 2955, 2953, 1189, 2956,
+     2957, 2957, 2957, 1188, 2958, 1183, 1181, 2959, 2960, 2960,
+     2960, 1180, 2961, 1179, 1177, 2962, 2970, 2970, 2970, 3091,
+     3091, 3091, 1176, 3092, 1175, 1172, 3093, 2972, 2972, 2972,
+     3094, 3094, 3094, 2971, 3095, 1171, 1170, 3096, 1587, 1587,
+     1587, 2975, 2975, 2975, 2973, 2976, 2976, 2976, 3098, 3098,
+
+     3098, 1169, 3099, 1167, 1166, 3100, 1589, 1605, 1605, 1605,
+     1165, 1163, 2977, 3001, 3001, 3001, 3122, 3122, 3122, 1160,
+     3123, 1156, 1155, 3124, 1153, 1607, 3003, 3003, 3003, 1152,
+     3002, 3127, 3127, 3127, 3021, 3021, 3021, 3143, 3143, 3143,
+     3026, 3026, 3026, 1151, 3004, 3147, 3147, 3147, 3128, 1867,
+     1148, 3097, 1147, 3030, 3030, 3030, 1146, 3031, 1145, 3109,
+     3032, 1362, 1362, 1362, 3158, 3158, 3158, 1380, 1380, 1380,
+     3041, 3041, 3041, 3162, 3162, 3162, 1143, 3163, 1142, 1364,
+     3164, 1136, 3159, 1135, 1134, 1382, 1132, 3042, 3043, 3043,
+     3043, 1131, 3044, 1130, 1125, 3045, 3046, 3046, 3046, 3165,
+
+     3165, 3165, 1124, 3166, 1120, 1118, 3167, 3059, 3059, 3059,
+     1117, 3060, 1116, 3047, 3061, 3063, 3063, 3063, 3180, 3180,
+     3180, 1115, 3181, 1114, 1113, 3182, 1112, 1111, 3157, 3160,
+     1110, 1109, 3064, 3072, 3072, 3072, 3075, 3075, 3075, 1106,
+     3076, 1103, 1102, 3077, 3203, 3203, 3203, 1100, 3091, 3091,
+     3091, 3073, 3092, 1099, 1098, 3093, 3094, 3094, 3094, 1097,
+     3095, 3204, 1096, 3096, 1587, 1587, 1587, 3098, 3098, 3098,
+     1091, 3099, 1089, 1088, 3100, 1605, 1605, 1605, 1087, 3122,
+     3122, 3122, 1589, 3123, 1086, 1084, 3124, 3236, 3236, 3236,
+     3127, 3127, 3127, 1607, 3238, 3238, 3238, 1083, 3239, 1082,
+
+     1080, 3240, 1079, 1078, 3237, 1867, 1077, 3128, 1867, 3249,
+     3249, 3249, 1867, 3143, 3143, 3143, 3209, 3251, 3251, 3251,
+     3252, 3252, 3252, 1075, 1072, 3218, 3147, 3147, 3147, 3254,
+     3254, 3254, 1362, 1362, 1362, 3158, 3158, 3158, 1380, 1380,
+     1380, 3162, 3162, 3162, 1071, 3163, 1069, 1067, 3164, 1065,
+     1364, 1064, 1063, 3159, 1062, 1061, 1382, 3165, 3165, 3165,
+     1060, 3166, 1059, 1057, 3167, 3266, 3266, 3266, 3278, 3278,
+     3278, 3180, 3180, 3180, 1056, 3181, 1055, 1054, 3182, 3280,
+     3280, 3280, 3267, 1052, 3263, 3279, 3203, 3203, 3203, 1050,
+     3299, 3299, 3299, 1049, 3300, 1048, 3281, 3301, 3306, 3306,
+
+     3306, 1047, 1044, 3204, 1043, 1042, 3264, 1605, 1605, 1605,
+     3236, 3236, 3236, 3328, 3328, 3328, 3307, 3329, 1037, 1035,
+     3330, 1034, 3238, 3238, 3238, 1607, 3239, 3237, 1867, 3240,
+     1033, 1867, 3249, 3249, 3249, 3251, 3251, 3251, 1027, 1026,
+     1867, 3252, 3252, 3252, 3254, 3254, 3254, 3349, 3349, 3349,
+     1380, 1380, 1380, 3266, 3266, 3266, 3353, 3353, 3353, 1025,
+     3354, 1024, 1016, 3355, 1015, 3350, 1013, 1010, 1382, 1009,
+     3267, 3356, 3356, 3356, 3314, 1865, 1865, 1865, 1865, 1865,
+     1865, 1865, 1865, 1865, 1008, 1007, 1865, 1002, 3357,  999,
+     1001, 1865, 1865, 1865, 1867, 1865, 3278, 3278, 3278, 3365,
+
+     3365, 3365,  994, 3366,  993,  991, 3367, 3368, 3368, 3368,
+      762, 3369,  989, 3279, 3370,  988,  986, 3351, 3280, 3280,
+     3280, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
+     1865, 1865,  984,  983, 1865, 3281, 3306, 3306, 3306, 1865,
+     1865, 1865, 1867, 1865, 3299, 3299, 3299,  982, 3300,  980,
+      979, 3301,  976,  975, 3307, 3398, 3398, 3398, 3328, 3328,
+     3328,  974, 3329,  972,  971, 3330, 3429, 3429, 3429, 1865,
+     1865,  969,  968, 3399,  967,  966, 1867, 1865, 1865, 1865,
+     1865, 1865, 3416, 1865, 1865, 1865,  964,  963, 1865, 3430,
+     3430, 3430,  962, 1865, 1865, 1865, 1867, 1865, 3349, 3349,
+
+     3349, 1380, 1380, 1380, 3353, 3353, 3353,  961, 3354,  960,
+      959, 3355, 3429, 3429, 3429,  957, 3350,  955,  954, 1382,
+     3356, 3356, 3356, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
+     1865, 1865, 1865, 3416,  952,  948, 1865, 3357, 3430, 3430,
+     3430, 1865, 1865, 1865, 1867, 1865,  946, 3441, 3441, 3441,
+      942, 3442,  938, 3435, 3443, 3365, 3365, 3365,  937, 3366,
+      935,  933, 3367, 3368, 3368, 3368,  932, 3369,  930,  928,
+     3370, 1865, 1865, 3398, 3398, 3398, 3484, 3484, 3484, 3497,
+     3497, 3497, 3499, 3499, 3499, 3441, 3441, 3441,  927, 3442,
+      926, 3399, 3443,  925, 1867, 1868,  924, 3498,  922, 3500,
+
+     3511, 3511, 3511, 3519, 3519, 3519, 3537, 3537, 3537, 3484,
+     3484, 3484, 3497, 3497, 3497,  914,  912, 3512,  907,  906,
+     3520, 3499, 3499, 3499, 1261,  905,  904, 1867,  903,  901,
+     3498,  899, 3549, 3549, 3549,  898, 3550,  896, 3500, 3551,
+     3511, 3511, 3511, 3562, 3562, 3562,  894, 3563,  893,  891,
+     3564, 3519, 3519, 3519, 3537, 3537, 3537, 3512, 3571, 3571,
+     3571, 2075, 3572,  889,  888, 3573,  886,  885, 3520, 3549,
+     3549, 3549, 1261, 3550,  882,  881, 3551, 3562, 3562, 3562,
+      880, 3563,  878, 3885, 3564, 3571, 3571, 3571,  874, 3572,
+      872, 3588, 3573, 3761, 3761, 3761, 3761, 3761, 3761,  870,
+
+     3774,  869,  868, 3775, 3883, 3883, 3883, 3883, 3883, 3883,
+      866, 1261,  865,  861, 1261,  860,  859,  858,  856,  855,
+      854,  852, 3884,  851,  850, 3884,  292,  292,  292,  292,
+      292,  292,  292,  292,  292,  293,  293,  293,  293,  293,
+      293,  293,  293,  293,  298,  298,  298,  298,  298,  298,
+      298,  298,  298,  301,  301,  301,  301,  301,  301,  301,
+      301,  301,  304,  304,  304,  304,  304,  304,  304,  304,
+      304,  307,  307,  307,  307,  307,  307,  307,  307,  307,
+      314,  314,  314,  314,  314,  314,  314,  314,  314,  321,
+      321,  321,  321,  321,  321,  321,  321,  321,  326,  326,
+
+      326,  326,  326,  326,  326,  326,  326,  338,  338,  338,
+      338,  338,  338,  338,  338,  338,  344,  344,  344,  344,
+      344,  344,  344,  344,  344,  352,  352,  352,  352,  352,
+      352,  352,  352,  352,  360,  360,  360,  360,  360,  360,
+      360,  360,  360,  368,  368,  368,  368,  368,  368,  368,
+      368,  368,  372,  372,  372,  372,  372,  372,  372,  372,
+      372,  378,  378,  378,  378,  378,  378,  378,  378,  378,
+      384,  384,  384,  384,  384,  384,  384,  384,  384,  390,
+      390,  390,  390,  390,  390,  390,  390,  390,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  403,  403,  403,
+
+      403,  403,  403,  403,  403,  403,  408,  408,  408,  408,
+      408,  408,  408,  408,  408,  415,  415,  415,  415,  415,
+      415,  415,  415,  415,  421,  421,  421,  421,  421,  421,
+      421,  421,  421,  428,  428,  428,  428,  428,  428,  428,
+      428,  428,  437,  437,  437,  437,  437,  437,  437,  437,
+      437,  443,  443,  443,  443,  443,  443,  443,  443,  443,
+      454,  454,  454,  454,  454,  454,  454,  454,  454,  461,
+      461,  461,  461,  461,  461,  461,  461,  461,  465,  465,
+      465,  465,  465,  465,  465,  465,  465,  472,  472,  472,
+      472,  472,  472,  472,  472,  472,  480,  480,  480,  480,
+
+      480,  480,  480,  480,  480,  488,  488,  488,  488,  488,
+      488,  488,  488,  488,  494,  494,  494,  494,  494,  494,
+      494,  494,  494,  500,  500,  500,  500,  500,  500,  500,
+      500,  500,  504,  504,  504,  504,  504,  504,  504,  504,
+      504,  512,  512,  512,  512,  512,  512,  512,  512,  512,
+      519,  519,  519,  519,  519,  519,  519,  519,  519,  526,
+      526,  526,  526,  526,  526,  526,  526,  526,  531,  531,
+      531,  531,  531,  531,  531,  531,  531,  537,  537,  537,
+      537,  537,  537,  537,  537,  537,  542,  542,  542,  542,
+      542,  542,  542,  542,  542,  548,  548,  548,  548,  548,
+
+      548,  548,  548,  548,  553,  553,  553,  553,  553,  553,
+      553,  553,  553,  559,  559,  559,  559,  559,  559,  559,
+      559,  559,  568,  568,  568,  568,  568,  568,  568,  568,
+      568,  575,  575,  575,  575,  575,  575,  575,  575,  575,
+      579,  579,  579,  579,  579,  579,  579,  579,  579,  590,
+      590,  590,  590,  590,  590,  590,  590,  590,  598,  598,
+      598,  598,  598,  598,  598,  598,  598,  605,  605,  605,
+      605,  605,  605,  605,  605,  605,  610,  610,  610,  610,
+      610,  610,  610,  610,  610,  616,  616,  616,  616,  616,
+      616,  616,  616,  616,  624,  624,  624,  624,  624,  624,
+
+      624,  624,  624,  630,  630,  630,  630,  630,  630,  630,
+      630,  630,  635,  635,  635,  635,  635,  635,  635,  635,
+      635,  642,  642,  642,  642,  642,  642,  642,  642,  642,
+      647,  647,  647,  647,  647,  647,  647,  647,  647,  653,
+      653,  653,  653,  653,  653,  653,  653,  653,  660,  660,
+      660,  660,  660,  660,  660,  660,  660,  667,  667,  667,
+      667,  667,  667,  667,  667,  667,  674,  674,  674,  674,
+      674,  674,  674,  674,  674,  682,  682,  682,  682,  682,
+      682,  682,  682,  682,  307,  307,  307,  307,  307,  307,
+      307,  307,  307,  693,  693,  693,  693,  693,  693,  693,
+
+      693,  693,  699,  699,  699,  699,  699,  699,  699,  699,
+      699,  705,  705,  705,  705,  705,  705,  705,  705,  705,
+      710,  710,  710,  710,  710,  710,  710,  710,  710,  719,
+      719,  719,  719,  719,  719,  719,  719,  719,  725,  725,
+      725,  725,  725,  725,  725,  725,  725,  745,  745,  745,
+      844,  840,  839,  745,  782,  782,  782,  835,  831,  830,
+      782,  790,  790,  790,  829,  828,  827,  790,  799,  799,
+      799,  825,  823,  822,  799,  803,  803,  803,  821,  819,
+      817,  803,  809,  809,  809,  816,  814,  812,  809,  815,
+      815,  815,  811,  810,  808,  815,  820,  820,  820,  806,
+
+      805,  804,  820,  826,  826,  826,  802,  800,  798,  826,
+      836,  836,  836,  797,  795,  794,  836,  853,  853,  853,
+      793,  792,  791,  853,  857,  857,  857,  789,  784,  783,
+      857,  867,  867,  867,  781, 3885,  762,  867,  873,  873,
+      873,  747,  746,  744,  873,  879,  879,  879,  743,  737,
+      736,  879,  887,  887,  887,  737,  736,  735,  887,  892,
+      892,  892,  734, 3885, 3885,  892,  897,  897,  897, 3885,
+     3885, 3885,  897,  902,  902,  902, 3885, 3885, 3885,  902,
+      913,  913,  913, 3885, 3885, 3885,  913,  923,  923,  923,
+     3885, 3885, 3885,  923,  931,  931,  931, 3885, 3885, 3885,
+
+      931,  936,  936,  936, 3885, 3885, 3885,  936,  947,  947,
+      947, 3885, 3885, 3885,  947,  953,  953,  953, 3885, 3885,
+     3885,  953,  958,  958,  958, 3885, 3885, 3885,  958,  965,
+      965,  965, 3885, 3885, 3885,  965,  973,  973,  973, 3885,
+     3885, 3885,  973,  981,  981,  981, 3885, 3885, 3885,  981,
+      987,  987,  987, 3885, 3885, 3885,  987,  992,  992,  992,
+     3885, 3885, 3885,  992,  998,  998,  998,  998,  998,  998,
+      998, 3885,  998,  745,  745,  745, 3885, 3885, 3885,  745,
+     1014, 3885, 3885, 3885, 1014,  782,  782,  782, 3885, 3885,
+     3885,  782, 1058, 3885, 3885, 3885, 1058,  790,  790,  790,
+
+     3885, 3885, 3885,  790, 1066, 3885, 3885, 3885, 1066,  799,
+      799,  799, 3885, 3885, 3885,  799, 1070, 3885, 3885, 3885,
+     1070,  803,  803,  803, 3885, 3885, 3885,  803, 1076, 3885,
+     3885, 3885, 1076,  809,  809,  809, 3885, 3885, 3885,  809,
+     1081, 3885, 3885, 3885, 1081,  815,  815,  815, 3885, 3885,
+     3885,  815, 1085, 3885, 3885, 3885, 1085,  820,  820,  820,
+     3885, 3885, 3885,  820, 1090, 3885, 3885, 3885, 1090,  826,
+      826,  826, 3885, 3885, 3885,  826, 1101, 3885, 3885, 3885,
+     1101,  836,  836,  836, 3885, 3885, 3885,  836, 1119, 3885,
+     3885, 3885, 1119,  853,  853,  853, 3885, 3885, 3885,  853,
+
+     1123, 3885, 3885, 3885, 1123,  857,  857,  857, 3885, 3885,
+     3885,  857, 1133, 3885, 3885, 3885, 1133,  867,  867,  867,
+     3885, 3885, 3885,  867, 1141, 3885, 3885, 3885, 1141,  873,
+      873,  873, 3885, 3885, 3885,  873, 1144, 3885, 3885, 3885,
+     1144,  879,  879,  879, 3885, 3885, 3885,  879, 1154, 3885,
+     3885, 3885, 1154,  887,  887,  887, 3885, 3885, 3885,  887,
+     1159, 3885, 3885, 3885, 1159,  892,  892,  892, 3885, 3885,
+     3885,  892, 1164, 3885, 3885, 3885, 1164,  897,  897,  897,
+     3885, 3885, 3885,  897, 1168, 3885, 3885, 3885, 1168,  902,
+      902,  902, 3885, 3885, 3885,  902, 1178, 3885, 3885, 3885,
+
+     1178,  913,  913,  913, 3885, 3885, 3885,  913, 1182, 3885,
+     3885, 3885, 1182,  923,  923,  923, 3885, 3885, 3885,  923,
+     1193, 3885, 3885, 3885, 1193,  931,  931,  931, 3885, 3885,
+     3885,  931, 1198, 3885, 3885, 3885, 1198,  936,  936,  936,
+     3885, 3885, 3885,  936, 1209, 3885, 3885, 3885, 1209,  947,
+      947,  947, 3885, 3885, 3885,  947, 1214, 3885, 3885, 3885,
+     1214,  953,  953,  953, 3885, 3885, 3885,  953, 1219, 3885,
+     3885, 3885, 1219,  958,  958,  958, 3885, 3885, 3885,  958,
+     1226, 3885, 3885, 3885, 1226,  965,  965,  965, 3885, 3885,
+     3885,  965, 1233, 3885, 3885, 3885, 1233,  973,  973,  973,
+
+     3885, 3885, 3885,  973, 1241, 3885, 3885, 3885, 1241,  981,
+      981,  981, 3885, 3885, 3885,  981, 1247, 3885, 3885, 3885,
+     1247,  987,  987,  987, 3885, 3885, 3885,  987, 1252, 3885,
+     3885, 3885, 1252,  992,  992,  992, 3885, 3885, 3885,  992,
+     1258, 3885, 3885, 3885, 1258, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1266, 3885, 3885, 3885, 3885, 1266,
+      745,  745,  745, 3885, 3885, 3885,  745, 1277, 1277, 1277,
+     1277, 3885, 3885, 1277, 1277,  782,  782,  782,  782, 3885,
+      782, 3885,  782, 1328, 1328, 1328, 1328, 3885, 3885, 1328,
+     1328,  790,  790,  790, 3885, 3885, 3885,  790, 1338, 1338,
+
+     1338, 1338, 3885, 3885, 1338, 1338,  799,  799,  799, 3885,
+     3885, 3885,  799, 1344, 1344, 1344, 1344, 3885, 3885, 1344,
+     1344,  803,  803,  803, 3885, 3885, 3885,  803, 1353, 1353,
+     1353, 1353, 3885, 3885, 1353, 1353,  809,  809,  809,  809,
+     3885,  809, 3885,  809, 1363, 1363, 1363, 1363, 3885, 3885,
+     1363, 1363,  815,  815,  815,  815, 3885,  815, 3885,  815,
+     1371, 1371, 1371, 1371, 3885, 3885, 1371, 1371,  820,  820,
+      820,  820, 3885,  820, 3885,  820, 1381, 1381, 1381, 1381,
+     3885, 3885, 1381, 1381,  826,  826,  826,  826, 3885,  826,
+     3885,  826, 1397, 1397, 1397, 1397, 3885, 3885, 1397, 1397,
+
+      836,  836,  836, 3885, 3885, 3885,  836, 1422, 1422, 1422,
+     1422, 3885, 3885, 1422, 1422, 1429, 1429, 1429, 1429, 3885,
+     3885, 1429, 1429,  857,  857,  857, 3885, 3885, 3885,  857,
+     1442, 1442, 1442, 1442, 3885, 3885, 1442, 1442,  867,  867,
+      867, 3885, 3885, 3885,  867, 1454, 1454, 1454, 1454, 3885,
+     3885, 1454, 1454,  873,  873,  873, 3885, 3885, 3885,  873,
+     1459, 1459, 1459, 1459, 3885, 3885, 1459, 1459,  879,  879,
+      879, 3885, 3885, 3885,  879, 1471, 1471, 1471, 1471, 3885,
+     3885, 1471, 1471,  887,  887,  887, 3885, 3885, 3885,  887,
+     1479, 1479, 1479, 1479, 3885, 3885, 1479, 1479,  892,  892,
+
+      892, 3885, 3885, 3885,  892, 1487, 1487, 1487, 1487, 3885,
+     3885, 1487, 1487,  897,  897,  897, 3885, 3885, 3885,  897,
+     1493, 1493, 1493, 1493, 3885, 3885, 1493, 1493,  902,  902,
+      902, 3885, 3885, 3885,  902, 1508, 1508, 1508, 1508, 3885,
+     3885, 1508, 1508,  913,  913,  913, 3885, 3885, 3885,  913,
+     1514, 1514, 1514, 1514, 3885, 3885, 1514, 1514,  923,  923,
+      923, 3885, 3885, 3885,  923, 1527, 1527, 1527, 1527, 3885,
+     3885, 1527, 1527,  931,  931,  931, 3885, 3885, 3885,  931,
+     1535, 1535, 1535, 1535, 3885, 3885, 1535, 1535,  936,  936,
+      936, 3885, 3885, 3885,  936, 1551, 1551, 1551, 1551, 3885,
+
+     3885, 1551, 1551,  947,  947,  947,  947, 3885,  947, 3885,
+      947, 1560, 1560, 1560, 1560, 3885, 3885, 1560, 1560,  953,
+      953,  953, 3885, 3885, 3885,  953, 1568, 1568, 1568, 1568,
+     3885, 3885, 1568, 1568,  958,  958,  958, 3885, 3885, 3885,
+      958, 1578, 1578, 1578, 1578, 3885, 3885, 1578, 1578,  965,
+      965,  965, 3885, 3885, 3885,  965, 1588, 1588, 1588, 1588,
+     3885, 3885, 1588, 1588,  973,  973,  973, 3885, 3885, 3885,
+      973, 1599, 1599, 1599, 1599, 3885, 3885, 1599, 1599,  981,
+      981,  981, 3885, 3885, 3885,  981, 1606, 1606, 1606, 1606,
+     3885, 3885, 1606, 1606,  987,  987,  987, 3885, 3885, 3885,
+
+      987, 1614, 1614, 1614, 1614, 3885, 3885, 1614, 1614,  992,
+      992,  992,  992, 3885,  992, 3885,  992, 1625, 1625, 1625,
+     1625, 3885, 3885, 1625, 1625, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1266, 3885, 1266, 3885, 3885, 1266,
+      745,  745,  745, 3885, 3885, 3885,  745, 1277, 1277, 1277,
+     1277, 3885, 3885, 1277, 1277,  782,  782,  782, 3885, 3885,
+     3885,  782, 1328, 1328, 1328, 1328, 3885, 3885, 1328, 1328,
+      790,  790,  790, 3885, 3885, 3885,  790, 1338, 1338, 1338,
+     1338, 3885, 3885, 1338, 1338,  799,  799,  799, 3885, 3885,
+     3885,  799, 1344, 1344, 1344, 1344, 3885, 3885, 1344, 1344,
+
+      803,  803,  803, 3885, 3885, 3885,  803, 1353, 1353, 1353,
+     1353, 3885, 3885, 1353, 1353,  809,  809,  809, 3885, 3885,
+     3885,  809, 1363, 1363, 1363, 1363, 3885, 3885, 1363, 1363,
+     1371, 1371, 1371, 1371, 3885, 3885, 1371, 1371,  820,  820,
+      820, 3885, 3885, 3885,  820, 1381, 1381, 1381, 1381, 3885,
+     3885, 1381, 1381,  826,  826,  826, 3885, 3885, 3885,  826,
+     1397, 1397, 1397, 1397, 3885, 3885, 1397, 1397,  836,  836,
+      836, 3885, 3885, 3885,  836, 1422, 1422, 1422, 1422, 3885,
+     3885, 1422, 1422, 1429, 1429, 1429, 1429, 3885, 3885, 1429,
+     1429,  857,  857,  857, 3885, 3885, 3885,  857, 1442, 1442,
+
+     1442, 1442, 3885, 3885, 1442, 1442,  867,  867,  867,  867,
+     3885,  867, 3885,  867, 1454, 1454, 1454, 1454, 3885, 3885,
+     1454, 1454,  873,  873,  873,  873, 3885,  873, 3885,  873,
+     1459, 1459, 1459, 1459, 3885, 3885, 1459, 1459,  879,  879,
+      879, 3885, 3885, 3885,  879, 1471, 1471, 1471, 1471, 3885,
+     3885, 1471, 1471,  887,  887,  887, 3885, 3885, 3885,  887,
+     1479, 1479, 1479, 1479, 3885, 3885, 1479, 1479,  892,  892,
+      892, 3885, 3885, 3885,  892, 1487, 1487, 1487, 1487, 3885,
+     3885, 1487, 1487,  897,  897,  897,  897, 3885,  897, 3885,
+      897, 1493, 1493, 1493, 1493, 3885, 3885, 1493, 1493,  902,
+
+      902,  902, 3885, 3885, 3885,  902, 1508, 1508, 1508, 1508,
+     3885, 3885, 1508, 1508,  913,  913,  913, 3885, 3885, 3885,
+      913, 1514, 1514, 1514, 1514, 3885, 3885, 1514, 1514,  923,
+      923,  923, 3885, 3885, 3885,  923, 1527, 1527, 1527, 1527,
+     3885, 3885, 1527, 1527,  931,  931,  931, 3885, 3885, 3885,
+      931, 1535, 1535, 1535, 1535, 3885, 3885, 1535, 1535,  936,
+      936,  936, 3885, 3885, 3885,  936, 1551, 1551, 1551, 1551,
+     3885, 3885, 1551, 1551,  947,  947,  947, 3885, 3885, 3885,
+      947, 1560, 1560, 1560, 1560, 3885, 3885, 1560, 1560,  953,
+      953,  953, 3885, 3885, 3885,  953, 1568, 1568, 1568, 1568,
+
+     3885, 3885, 1568, 1568,  958,  958,  958, 3885, 3885, 3885,
+      958, 1578, 1578, 1578, 1578, 3885, 3885, 1578, 1578,  965,
+      965,  965, 3885, 3885, 3885,  965, 1588, 1588, 1588, 1588,
+     3885, 3885, 1588, 1588,  973,  973,  973,  973, 3885,  973,
+     3885,  973, 1599, 1599, 1599, 1599, 3885, 3885, 1599, 1599,
+      981,  981,  981, 3885, 3885, 3885,  981, 1606, 1606, 1606,
+     1606, 3885, 3885, 1606, 1606,  987,  987,  987, 3885, 3885,
+     3885,  987, 1614, 1614, 1614, 1614, 3885, 3885, 1614, 1614,
+      992,  992,  992, 3885, 3885, 3885,  992, 1625, 1625, 1625,
+     1625, 3885, 3885, 1625, 1625, 1260, 1260, 1260, 1260, 1260,
 
      1260, 1260, 1260, 1260, 1865, 1865, 1865, 1865, 1865, 1865,
-     1865, 1865, 1865,  745,  745,  745, 3905, 3905, 3905,  745,
-      782,  782,  782,  782, 3905,  782, 3905,  782, 1328, 1328,
-     1328, 1328, 3905, 3905, 1328, 1328,  790,  790,  790, 3905,
-     3905, 3905,  790, 1338, 1338, 1338, 1338, 3905, 3905, 1338,
-     1338, 1344, 1344, 1344, 1344, 3905, 3905, 1344, 1344,  803,
-      803,  803, 3905, 3905, 3905,  803, 1353, 1353, 1353, 1353,
-     3905, 3905, 1353, 1353,  809,  809,  809,  809, 3905,  809,
-     3905,  809, 1363, 1363, 1363, 1363, 3905, 3905, 1363, 1363,
-     1371, 1371, 1371, 1371, 3905, 3905, 1371, 1371,  820,  820,
-
-      820,  820, 3905,  820, 3905,  820, 1381, 1381, 1381, 1381,
-     3905, 3905, 1381, 1381,  826,  826,  826,  826, 3905,  826,
-     3905,  826, 1397, 1397, 1397, 1397, 3905, 3905, 1397, 1397,
-      836,  836,  836,  836, 3905,  836, 3905,  836, 1422, 1422,
-     1422, 1422, 3905, 3905, 1422, 1422, 1429, 1429, 1429, 1429,
-     3905, 3905, 1429, 1429,  857,  857,  857, 3905, 3905, 3905,
-      857, 1442, 1442, 1442, 1442, 3905, 3905, 1442, 1442, 1454,
-     1454, 1454, 1454, 3905, 3905, 1454, 1454, 1459, 1459, 1459,
-     1459, 3905, 3905, 1459, 1459,  879,  879,  879, 3905, 3905,
-     3905,  879, 1471, 1471, 1471, 1471, 3905, 3905, 1471, 1471,
-
-      887,  887,  887, 3905, 3905, 3905,  887, 1479, 1479, 1479,
-     1479, 3905, 3905, 1479, 1479, 1487, 1487, 1487, 1487, 3905,
-     3905, 1487, 1487,  897,  897,  897, 3905, 3905, 3905,  897,
-     1493, 1493, 1493, 1493, 3905, 3905, 1493, 1493,  902,  902,
-      902, 3905, 3905, 3905,  902, 1508, 1508, 1508, 1508, 3905,
-     3905, 1508, 1508,  913,  913,  913, 3905, 3905, 3905,  913,
-     1514, 1514, 1514, 1514, 3905, 3905, 1514, 1514,  923,  923,
-      923, 3905, 3905, 3905,  923, 1527, 1527, 1527, 1527, 3905,
-     3905, 1527, 1527, 1535, 1535, 1535, 1535, 3905, 3905, 1535,
-     1535,  936,  936,  936, 3905, 3905, 3905,  936, 1551, 1551,
-
-     1551, 1551, 3905, 3905, 1551, 1551,  947,  947,  947, 3905,
-     3905, 3905,  947, 1560, 1560, 1560, 1560, 3905, 3905, 1560,
-     1560,  953,  953,  953, 3905, 3905, 3905,  953, 1568, 1568,
-     1568, 1568, 3905, 3905, 1568, 1568,  958,  958,  958,  958,
-     3905,  958, 3905,  958, 1578, 1578, 1578, 1578, 3905, 3905,
-     1578, 1578,  965,  965,  965, 3905, 3905, 3905,  965, 1588,
-     1588, 1588, 1588, 3905, 3905, 1588, 1588,  973,  973,  973,
-     3905, 3905, 3905,  973, 1599, 1599, 1599, 1599, 3905, 3905,
-     1599, 1599,  981,  981,  981, 3905, 3905, 3905,  981, 1606,
-     1606, 1606, 1606, 3905, 3905, 1606, 1606,  987,  987,  987,
-
-     3905, 3905, 3905,  987, 1614, 1614, 1614, 1614, 3905, 3905,
-     1614, 1614,  992,  992,  992,  992, 3905,  992, 3905,  992,
-     1625, 1625, 1625, 1625, 3905, 3905, 1625, 1625, 1260, 1260,
-     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1865, 1865, 1865,
-     1865, 1865, 1865, 1865, 1865, 1865,  745,  745,  745,  745,
-     3905,  745, 3905,  745,  782,  782,  782, 3905, 3905, 3905,
-      782, 1328, 1328, 1328, 1328, 3905, 3905, 1328, 1328,  790,
-      790,  790, 3905, 3905, 3905,  790, 1338, 1338, 1338, 1338,
-     3905, 3905, 1338, 1338, 1344, 1344, 1344, 1344, 3905, 3905,
-     1344, 1344,  803,  803,  803, 3905, 3905, 3905,  803, 1353,
-
-     1353, 1353, 1353, 3905, 3905, 1353, 1353, 1363, 1363, 1363,
-     1363, 3905, 3905, 1363, 1363, 1371, 1371, 1371, 1371, 3905,
-     3905, 1371, 1371, 1381, 1381, 1381, 1381, 3905, 3905, 1381,
-     1381,  826,  826,  826,  826, 3905,  826, 3905,  826, 1397,
-     1397, 1397, 1397, 3905, 3905, 1397, 1397,  836,  836,  836,
-     3905, 3905, 3905,  836, 1422, 1422, 1422, 1422, 3905, 3905,
-     1422, 1422, 1429, 1429, 1429, 1429, 3905, 3905, 1429, 1429,
-      857,  857,  857, 3905, 3905, 3905,  857, 1454, 1454, 1454,
-     1454, 3905, 3905, 1454, 1454, 1459, 1459, 1459, 1459, 3905,
-     3905, 1459, 1459,  879,  879,  879, 3905, 3905, 3905,  879,
-
-      887,  887,  887, 3905, 3905, 3905,  887, 1479, 1479, 1479,
-     1479, 3905, 3905, 1479, 1479, 1487, 1487, 1487, 1487, 3905,
-     3905, 1487, 1487,  897,  897,  897, 3905, 3905, 3905,  897,
-     1493, 1493, 1493, 1493, 3905, 3905, 1493, 1493,  902,  902,
-      902, 3905, 3905, 3905,  902,  913,  913,  913,  913, 3905,
-      913, 3905,  913, 1514, 1514, 1514, 1514, 3905, 3905, 1514,
-     1514,  923,  923,  923, 3905, 3905, 3905,  923, 1527, 1527,
-     1527, 1527, 3905, 3905, 1527, 1527,  936,  936,  936, 3905,
-     3905, 3905,  936, 1551, 1551, 1551, 1551, 3905, 3905, 1551,
-     1551,  947,  947,  947, 3905, 3905, 3905,  947, 1560, 1560,
-
-     1560, 1560, 3905, 3905, 1560, 1560,  953,  953,  953, 3905,
-     3905, 3905,  953, 1568, 1568, 1568, 1568, 3905, 3905, 1568,
-     1568,  958,  958,  958,  958, 3905,  958, 3905,  958, 1578,
-     1578, 1578, 1578, 3905, 3905, 1578, 1578,  965,  965,  965,
-      965, 3905,  965, 3905,  965, 1588, 1588, 1588, 1588, 3905,
-     3905, 1588, 1588,  973,  973,  973, 3905, 3905, 3905,  973,
-     1599, 1599, 1599, 1599, 3905, 3905, 1599, 1599,  981,  981,
-      981,  981, 3905,  981, 3905,  981, 1606, 1606, 1606, 1606,
-     3905, 3905, 1606, 1606,  987,  987,  987,  987, 3905,  987,
-     3905,  987,  992,  992,  992, 3905, 3905, 3905,  992, 1625,
-
-     1625, 1625, 1625, 3905, 3905, 1625, 1625, 1260, 1260, 1260,
-     1260, 1260, 1260, 1260, 1260, 1260, 1865, 1865, 1865, 1865,
-     1865, 1865, 1865, 1865, 1865,  782,  782,  782, 3905, 3905,
-     3905,  782, 1328, 1328, 1328, 1328, 3905, 3905, 1328, 1328,
-      790,  790,  790,  790, 3905,  790, 3905,  790, 1344, 1344,
-     1344, 1344, 3905, 3905, 1344, 1344,  803,  803,  803, 3905,
-     3905, 3905,  803, 1353, 1353, 1353, 1353, 3905, 3905, 1353,
-     1353, 1363, 1363, 1363, 1363, 3905, 3905, 1363, 1363, 1371,
-     1371, 1371, 1371, 3905, 3905, 1371, 1371, 1381, 1381, 1381,
-     1381, 3905, 3905, 1381, 1381, 1397, 1397, 1397, 1397, 3905,
-
-     3905, 1397, 1397,  836,  836,  836, 3905, 3905, 3905,  836,
-     1422, 1422, 1422, 1422, 3905, 3905, 1422, 1422, 1429, 1429,
-     1429, 1429, 3905, 3905, 1429, 1429,  857,  857,  857, 3905,
-     3905, 3905,  857, 1454, 1454, 1454, 1454, 3905, 3905, 1454,
-     1454, 1459, 1459, 1459, 1459, 3905, 3905, 1459, 1459,  879,
-      879,  879, 3905, 3905, 3905,  879,  887,  887,  887, 3905,
-     3905, 3905,  887, 1479, 1479, 1479, 1479, 3905, 3905, 1479,
-     1479, 1487, 1487, 1487, 1487, 3905, 3905, 1487, 1487,  897,
-      897,  897, 3905, 3905, 3905,  897,  902,  902,  902, 3905,
-     3905, 3905,  902, 1514, 1514, 1514, 1514, 3905, 3905, 1514,
-
-     1514,  923,  923,  923,  923, 3905,  923, 3905,  923, 1527,
-     1527, 1527, 1527, 3905, 3905, 1527, 1527,  936,  936,  936,
-     3905, 3905, 3905,  936, 1551, 1551, 1551, 1551, 3905, 3905,
-     1551, 1551,  947,  947,  947, 3905, 3905, 3905,  947,  953,
-      953,  953, 3905, 3905, 3905,  953, 1568, 1568, 1568, 1568,
-     3905, 3905, 1568, 1568,  958,  958,  958, 3905, 3905, 3905,
-      958, 1578, 1578, 1578, 1578, 3905, 3905, 1578, 1578,  965,
-      965,  965, 3905, 3905, 3905,  965, 1588, 1588, 1588, 1588,
-     3905, 3905, 1588, 1588,  973,  973,  973, 3905, 3905, 3905,
-      973, 1606, 1606, 1606, 1606, 3905, 3905, 1606, 1606,  992,
-
-      992,  992, 3905, 3905, 3905,  992, 1625, 1625, 1625, 1625,
-     3905, 3905, 1625, 1625, 1260, 1260, 1260, 1260, 1260, 1260,
-     1260, 1260, 1260, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
-     1865, 1865,  782,  782,  782, 3905, 3905, 3905,  782, 1328,
-     1328, 1328, 1328, 3905, 3905, 1328, 1328,  790,  790,  790,
-      790, 3905,  790, 3905,  790, 1344, 1344, 1344, 1344, 3905,
-     3905, 1344, 1344,  803,  803,  803,  803, 3905,  803, 3905,
-      803, 1353, 1353, 1353, 1353, 3905, 3905, 1353, 1353, 1363,
-     1363, 1363, 1363, 3905, 3905, 1363, 1363, 1371, 1371, 1371,
-     1371, 3905, 3905, 1371, 1371, 1381, 1381, 1381, 1381, 3905,
-
-     3905, 1381, 1381, 1397, 1397, 1397, 1397, 3905, 3905, 1397,
-     1397,  836,  836,  836, 3905, 3905, 3905,  836, 1422, 1422,
-     1422, 1422, 3905, 3905, 1422, 1422,  857,  857,  857, 3905,
-     3905, 3905,  857, 1454, 1454, 1454, 1454, 3905, 3905, 1454,
-     1454, 1459, 1459, 1459, 1459, 3905, 3905, 1459, 1459,  879,
-      879,  879,  879, 3905,  879, 3905,  879,  887,  887,  887,
-      887, 3905,  887, 3905,  887, 1479, 1479, 1479, 1479, 3905,
-     3905, 1479, 1479, 1487, 1487, 1487, 1487, 3905, 3905, 1487,
-     1487,  897,  897,  897,  897, 3905,  897, 3905,  897,  902,
-      902,  902, 3905, 3905, 3905,  902, 1514, 1514, 1514, 1514,
-
-     3905, 3905, 1514, 1514,  923,  923,  923,  923, 3905,  923,
-     3905,  923, 1527, 1527, 1527, 1527, 3905, 3905, 1527, 1527,
-      936,  936,  936,  936, 3905,  936, 3905,  936,  947,  947,
-      947, 3905, 3905, 3905,  947,  953,  953,  953, 3905, 3905,
-     3905,  953,  958,  958,  958, 3905, 3905, 3905,  958, 1578,
-     1578, 1578, 1578, 3905, 3905, 1578, 1578,  965,  965,  965,
-     3905, 3905, 3905,  965, 1588, 1588, 1588, 1588, 3905, 3905,
-     1588, 1588,  973,  973,  973, 3905, 3905, 3905,  973, 1606,
-     1606, 1606, 1606, 3905, 3905, 1606, 1606,  992,  992,  992,
-     3905, 3905, 3905,  992, 1625, 1625, 1625, 1625, 3905, 3905,
-
-     1625, 1625, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
-     1260, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,
-      782,  782,  782, 3905, 3905, 3905,  782,  790,  790,  790,
-      790, 3905,  790, 3905,  790, 1344, 1344, 1344, 1344, 3905,
-     3905, 1344, 1344, 1353, 1353, 1353, 1353, 3905, 3905, 1353,
-     1353, 1363, 1363, 1363, 1363, 3905, 3905, 1363, 1363, 1371,
-     1371, 1371, 1371, 3905, 3905, 1371, 1371, 1381, 1381, 1381,
-     1381, 3905, 3905, 1381, 1381,  836,  836,  836, 3905, 3905,
-     3905,  836,  857,  857,  857, 3905, 3905, 3905,  857, 1454,
-     1454, 1454, 1454, 3905, 3905, 1454, 1454,  879,  879,  879,
-
-     3905, 3905, 3905,  879, 1479, 1479, 1479, 1479, 3905, 3905,
-     1479, 1479, 1487, 1487, 1487, 1487, 3905, 3905, 1487, 1487,
-      902,  902,  902, 3905, 3905, 3905,  902, 1514, 1514, 1514,
-     1514, 3905, 3905, 1514, 1514,  923,  923,  923,  923, 3905,
-      923, 3905,  923,  936,  936,  936, 3905, 3905, 3905,  936,
-      947,  947,  947, 3905, 3905, 3905,  947,  953,  953,  953,
-     3905, 3905, 3905,  953,  958,  958,  958, 3905, 3905, 3905,
-      958,  965,  965,  965, 3905, 3905, 3905,  965, 1588, 1588,
-     1588, 1588, 3905, 3905, 1588, 1588,  973,  973,  973, 3905,
-     3905, 3905,  973, 1606, 1606, 1606, 1606, 3905, 3905, 1606,
-
-     1606,  992,  992,  992, 3905, 3905, 3905,  992, 1625, 1625,
-     1625, 1625, 3905, 3905, 1625, 1625, 1260, 1260, 1260, 1260,
+     1865, 1865, 1865,  745,  745,  745, 3885, 3885, 3885,  745,
+      782,  782,  782, 3885, 3885, 3885,  782, 1328, 1328, 1328,
+     1328, 3885, 3885, 1328, 1328,  790,  790,  790, 3885, 3885,
+     3885,  790, 1338, 1338, 1338, 1338, 3885, 3885, 1338, 1338,
+      799,  799,  799,  799, 3885,  799, 3885,  799, 1344, 1344,
+     1344, 1344, 3885, 3885, 1344, 1344,  803,  803,  803, 3885,
+     3885, 3885,  803, 1353, 1353, 1353, 1353, 3885, 3885, 1353,
+     1353,  809,  809,  809, 3885, 3885, 3885,  809, 1363, 1363,
+     1363, 1363, 3885, 3885, 1363, 1363, 1371, 1371, 1371, 1371,
+
+     3885, 3885, 1371, 1371,  820,  820,  820, 3885, 3885, 3885,
+      820, 1381, 1381, 1381, 1381, 3885, 3885, 1381, 1381,  826,
+      826,  826, 3885, 3885, 3885,  826, 1397, 1397, 1397, 1397,
+     3885, 3885, 1397, 1397,  836,  836,  836,  836, 3885,  836,
+     3885,  836, 1422, 1422, 1422, 1422, 3885, 3885, 1422, 1422,
+     1429, 1429, 1429, 1429, 3885, 3885, 1429, 1429,  857,  857,
+      857, 3885, 3885, 3885,  857, 1442, 1442, 1442, 1442, 3885,
+     3885, 1442, 1442, 1454, 1454, 1454, 1454, 3885, 3885, 1454,
+     1454, 1459, 1459, 1459, 1459, 3885, 3885, 1459, 1459,  879,
+      879,  879, 3885, 3885, 3885,  879, 1471, 1471, 1471, 1471,
+
+     3885, 3885, 1471, 1471,  887,  887,  887, 3885, 3885, 3885,
+      887, 1479, 1479, 1479, 1479, 3885, 3885, 1479, 1479,  892,
+      892,  892,  892, 3885,  892, 3885,  892, 1487, 1487, 1487,
+     1487, 3885, 3885, 1487, 1487,  897,  897,  897, 3885, 3885,
+     3885,  897, 1493, 1493, 1493, 1493, 3885, 3885, 1493, 1493,
+      902,  902,  902, 3885, 3885, 3885,  902, 1508, 1508, 1508,
+     1508, 3885, 3885, 1508, 1508,  913,  913,  913, 3885, 3885,
+     3885,  913, 1514, 1514, 1514, 1514, 3885, 3885, 1514, 1514,
+      923,  923,  923, 3885, 3885, 3885,  923, 1527, 1527, 1527,
+     1527, 3885, 3885, 1527, 1527,  931,  931,  931,  931, 3885,
+
+      931, 3885,  931, 1535, 1535, 1535, 1535, 3885, 3885, 1535,
+     1535,  936,  936,  936, 3885, 3885, 3885,  936, 1551, 1551,
+     1551, 1551, 3885, 3885, 1551, 1551,  947,  947,  947, 3885,
+     3885, 3885,  947, 1560, 1560, 1560, 1560, 3885, 3885, 1560,
+     1560,  953,  953,  953, 3885, 3885, 3885,  953, 1568, 1568,
+     1568, 1568, 3885, 3885, 1568, 1568,  958,  958,  958, 3885,
+     3885, 3885,  958, 1578, 1578, 1578, 1578, 3885, 3885, 1578,
+     1578,  965,  965,  965, 3885, 3885, 3885,  965, 1588, 1588,
+     1588, 1588, 3885, 3885, 1588, 1588,  973,  973,  973, 3885,
+     3885, 3885,  973, 1599, 1599, 1599, 1599, 3885, 3885, 1599,
+
+     1599,  981,  981,  981, 3885, 3885, 3885,  981, 1606, 1606,
+     1606, 1606, 3885, 3885, 1606, 1606,  987,  987,  987, 3885,
+     3885, 3885,  987, 1614, 1614, 1614, 1614, 3885, 3885, 1614,
+     1614,  992,  992,  992, 3885, 3885, 3885,  992, 1625, 1625,
+     1625, 1625, 3885, 3885, 1625, 1625, 1260, 1260, 1260, 1260,
      1260, 1260, 1260, 1260, 1260, 1865, 1865, 1865, 1865, 1865,
-     1865, 1865, 1865, 1865,  782,  782,  782,  782, 3905,  782,
-     3905,  782, 3351, 3351, 3351, 3351, 3351, 3351, 3351, 3351,
-     3351, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352, 3352,
-     3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3431, 3434,
-     3434, 3434, 3434, 3434, 3434, 3434, 3434, 3434, 3501, 3501,
-     3501, 3501, 3501, 3501, 3501, 3501, 3501, 3503, 3503, 3503,
-     3503, 3503, 3503, 3503, 3503, 3503,  291, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905
+     1865, 1865, 1865, 1865,  745,  745,  745, 3885, 3885, 3885,
+      745,  782,  782,  782,  782, 3885,  782, 3885,  782, 1328,
+     1328, 1328, 1328, 3885, 3885, 1328, 1328,  790,  790,  790,
+     3885, 3885, 3885,  790, 1338, 1338, 1338, 1338, 3885, 3885,
+
+     1338, 1338, 1344, 1344, 1344, 1344, 3885, 3885, 1344, 1344,
+      803,  803,  803, 3885, 3885, 3885,  803, 1353, 1353, 1353,
+     1353, 3885, 3885, 1353, 1353,  809,  809,  809,  809, 3885,
+      809, 3885,  809, 1363, 1363, 1363, 1363, 3885, 3885, 1363,
+     1363, 1371, 1371, 1371, 1371, 3885, 3885, 1371, 1371,  820,
+      820,  820,  820, 3885,  820, 3885,  820, 1381, 1381, 1381,
+     1381, 3885, 3885, 1381, 1381,  826,  826,  826,  826, 3885,
+      826, 3885,  826, 1397, 1397, 1397, 1397, 3885, 3885, 1397,
+     1397,  836,  836,  836,  836, 3885,  836, 3885,  836, 1422,
+     1422, 1422, 1422, 3885, 3885, 1422, 1422, 1429, 1429, 1429,
+
+     1429, 3885, 3885, 1429, 1429,  857,  857,  857, 3885, 3885,
+     3885,  857, 1442, 1442, 1442, 1442, 3885, 3885, 1442, 1442,
+     1454, 1454, 1454, 1454, 3885, 3885, 1454, 1454, 1459, 1459,
+     1459, 1459, 3885, 3885, 1459, 1459,  879,  879,  879, 3885,
+     3885, 3885,  879, 1471, 1471, 1471, 1471, 3885, 3885, 1471,
+     1471,  887,  887,  887, 3885, 3885, 3885,  887, 1479, 1479,
+     1479, 1479, 3885, 3885, 1479, 1479, 1487, 1487, 1487, 1487,
+     3885, 3885, 1487, 1487,  897,  897,  897, 3885, 3885, 3885,
+      897, 1493, 1493, 1493, 1493, 3885, 3885, 1493, 1493,  902,
+      902,  902, 3885, 3885, 3885,  902, 1508, 1508, 1508, 1508,
+
+     3885, 3885, 1508, 1508,  913,  913,  913, 3885, 3885, 3885,
+      913, 1514, 1514, 1514, 1514, 3885, 3885, 1514, 1514,  923,
+      923,  923, 3885, 3885, 3885,  923, 1527, 1527, 1527, 1527,
+     3885, 3885, 1527, 1527, 1535, 1535, 1535, 1535, 3885, 3885,
+     1535, 1535,  936,  936,  936, 3885, 3885, 3885,  936, 1551,
+     1551, 1551, 1551, 3885, 3885, 1551, 1551,  947,  947,  947,
+     3885, 3885, 3885,  947, 1560, 1560, 1560, 1560, 3885, 3885,
+     1560, 1560,  953,  953,  953, 3885, 3885, 3885,  953, 1568,
+     1568, 1568, 1568, 3885, 3885, 1568, 1568,  958,  958,  958,
+      958, 3885,  958, 3885,  958, 1578, 1578, 1578, 1578, 3885,
+
+     3885, 1578, 1578,  965,  965,  965, 3885, 3885, 3885,  965,
+     1588, 1588, 1588, 1588, 3885, 3885, 1588, 1588,  973,  973,
+      973, 3885, 3885, 3885,  973, 1599, 1599, 1599, 1599, 3885,
+     3885, 1599, 1599,  981,  981,  981, 3885, 3885, 3885,  981,
+     1606, 1606, 1606, 1606, 3885, 3885, 1606, 1606,  987,  987,
+      987, 3885, 3885, 3885,  987, 1614, 1614, 1614, 1614, 3885,
+     3885, 1614, 1614,  992,  992,  992,  992, 3885,  992, 3885,
+      992, 1625, 1625, 1625, 1625, 3885, 3885, 1625, 1625, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1865, 1865,
+     1865, 1865, 1865, 1865, 1865, 1865, 1865,  745,  745,  745,
+
+      745, 3885,  745, 3885,  745,  782,  782,  782, 3885, 3885,
+     3885,  782, 1328, 1328, 1328, 1328, 3885, 3885, 1328, 1328,
+      790,  790,  790, 3885, 3885, 3885,  790, 1338, 1338, 1338,
+     1338, 3885, 3885, 1338, 1338, 1344, 1344, 1344, 1344, 3885,
+     3885, 1344, 1344,  803,  803,  803, 3885, 3885, 3885,  803,
+     1353, 1353, 1353, 1353, 3885, 3885, 1353, 1353, 1363, 1363,
+     1363, 1363, 3885, 3885, 1363, 1363, 1371, 1371, 1371, 1371,
+     3885, 3885, 1371, 1371, 1381, 1381, 1381, 1381, 3885, 3885,
+     1381, 1381,  826,  826,  826,  826, 3885,  826, 3885,  826,
+     1397, 1397, 1397, 1397, 3885, 3885, 1397, 1397,  836,  836,
+
+      836, 3885, 3885, 3885,  836, 1422, 1422, 1422, 1422, 3885,
+     3885, 1422, 1422, 1429, 1429, 1429, 1429, 3885, 3885, 1429,
+     1429,  857,  857,  857, 3885, 3885, 3885,  857, 1454, 1454,
+     1454, 1454, 3885, 3885, 1454, 1454, 1459, 1459, 1459, 1459,
+     3885, 3885, 1459, 1459,  879,  879,  879, 3885, 3885, 3885,
+      879,  887,  887,  887, 3885, 3885, 3885,  887, 1479, 1479,
+     1479, 1479, 3885, 3885, 1479, 1479, 1487, 1487, 1487, 1487,
+     3885, 3885, 1487, 1487,  897,  897,  897, 3885, 3885, 3885,
+      897, 1493, 1493, 1493, 1493, 3885, 3885, 1493, 1493,  902,
+      902,  902, 3885, 3885, 3885,  902,  913,  913,  913,  913,
+
+     3885,  913, 3885,  913, 1514, 1514, 1514, 1514, 3885, 3885,
+     1514, 1514,  923,  923,  923, 3885, 3885, 3885,  923, 1527,
+     1527, 1527, 1527, 3885, 3885, 1527, 1527,  936,  936,  936,
+     3885, 3885, 3885,  936, 1551, 1551, 1551, 1551, 3885, 3885,
+     1551, 1551,  947,  947,  947, 3885, 3885, 3885,  947, 1560,
+     1560, 1560, 1560, 3885, 3885, 1560, 1560,  953,  953,  953,
+     3885, 3885, 3885,  953, 1568, 1568, 1568, 1568, 3885, 3885,
+     1568, 1568,  958,  958,  958,  958, 3885,  958, 3885,  958,
+     1578, 1578, 1578, 1578, 3885, 3885, 1578, 1578,  965,  965,
+      965,  965, 3885,  965, 3885,  965, 1588, 1588, 1588, 1588,
+
+     3885, 3885, 1588, 1588,  973,  973,  973, 3885, 3885, 3885,
+      973, 1599, 1599, 1599, 1599, 3885, 3885, 1599, 1599,  981,
+      981,  981,  981, 3885,  981, 3885,  981, 1606, 1606, 1606,
+     1606, 3885, 3885, 1606, 1606,  987,  987,  987,  987, 3885,
+      987, 3885,  987,  992,  992,  992, 3885, 3885, 3885,  992,
+     1625, 1625, 1625, 1625, 3885, 3885, 1625, 1625, 1260, 1260,
+     1260, 1260, 1260, 1260, 1260, 1260, 1260, 1865, 1865, 1865,
+     1865, 1865, 1865, 1865, 1865, 1865,  782,  782,  782, 3885,
+     3885, 3885,  782, 1328, 1328, 1328, 1328, 3885, 3885, 1328,
+     1328,  790,  790,  790,  790, 3885,  790, 3885,  790, 1344,
+
+     1344, 1344, 1344, 3885, 3885, 1344, 1344,  803,  803,  803,
+     3885, 3885, 3885,  803, 1353, 1353, 1353, 1353, 3885, 3885,
+     1353, 1353, 1363, 1363, 1363, 1363, 3885, 3885, 1363, 1363,
+     1371, 1371, 1371, 1371, 3885, 3885, 1371, 1371, 1381, 1381,
+     1381, 1381, 3885, 3885, 1381, 1381, 1397, 1397, 1397, 1397,
+     3885, 3885, 1397, 1397,  836,  836,  836, 3885, 3885, 3885,
+      836, 1422, 1422, 1422, 1422, 3885, 3885, 1422, 1422, 1429,
+     1429, 1429, 1429, 3885, 3885, 1429, 1429,  857,  857,  857,
+     3885, 3885, 3885,  857, 1454, 1454, 1454, 1454, 3885, 3885,
+     1454, 1454, 1459, 1459, 1459, 1459, 3885, 3885, 1459, 1459,
+
+      879,  879,  879, 3885, 3885, 3885,  879,  887,  887,  887,
+     3885, 3885, 3885,  887, 1479, 1479, 1479, 1479, 3885, 3885,
+     1479, 1479, 1487, 1487, 1487, 1487, 3885, 3885, 1487, 1487,
+      897,  897,  897, 3885, 3885, 3885,  897,  902,  902,  902,
+     3885, 3885, 3885,  902, 1514, 1514, 1514, 1514, 3885, 3885,
+     1514, 1514,  923,  923,  923,  923, 3885,  923, 3885,  923,
+     1527, 1527, 1527, 1527, 3885, 3885, 1527, 1527,  936,  936,
+      936, 3885, 3885, 3885,  936, 1551, 1551, 1551, 1551, 3885,
+     3885, 1551, 1551,  947,  947,  947, 3885, 3885, 3885,  947,
+      953,  953,  953, 3885, 3885, 3885,  953, 1568, 1568, 1568,
+
+     1568, 3885, 3885, 1568, 1568, 1578, 1578, 1578, 1578, 3885,
+     3885, 1578, 1578, 1588, 1588, 1588, 1588, 3885, 3885, 1588,
+     1588,  973,  973,  973, 3885, 3885, 3885,  973, 1606, 1606,
+     1606, 1606, 3885, 3885, 1606, 1606,  992,  992,  992, 3885,
+     3885, 3885,  992, 1625, 1625, 1625, 1625, 3885, 3885, 1625,
+     1625, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260, 1260,
+     1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865, 1865,  782,
+      782,  782, 3885, 3885, 3885,  782, 1328, 1328, 1328, 1328,
+     3885, 3885, 1328, 1328,  790,  790,  790,  790, 3885,  790,
+     3885,  790, 1344, 1344, 1344, 1344, 3885, 3885, 1344, 1344,
+
+      803,  803,  803,  803, 3885,  803, 3885,  803, 1353, 1353,
+     1353, 1353, 3885, 3885, 1353, 1353, 1363, 1363, 1363, 1363,
+     3885, 3885, 1363, 1363, 1371, 1371, 1371, 1371, 3885, 3885,
+     1371, 1371, 1381, 1381, 1381, 1381, 3885, 3885, 1381, 1381,
+     1397, 1397, 1397, 1397, 3885, 3885, 1397, 1397,  836,  836,
+      836, 3885, 3885, 3885,  836, 1422, 1422, 1422, 1422, 3885,
+     3885, 1422, 1422,  857,  857,  857, 3885, 3885, 3885,  857,
+     1454, 1454, 1454, 1454, 3885, 3885, 1454, 1454, 1459, 1459,
+     1459, 1459, 3885, 3885, 1459, 1459,  879,  879,  879,  879,
+     3885,  879, 3885,  879,  887,  887,  887,  887, 3885,  887,
+
+     3885,  887, 1479, 1479, 1479, 1479, 3885, 3885, 1479, 1479,
+     1487, 1487, 1487, 1487, 3885, 3885, 1487, 1487,  897,  897,
+      897,  897, 3885,  897, 3885,  897,  902,  902,  902, 3885,
+     3885, 3885,  902, 1514, 1514, 1514, 1514, 3885, 3885, 1514,
+     1514,  923,  923,  923,  923, 3885,  923, 3885,  923, 1527,
+     1527, 1527, 1527, 3885, 3885, 1527, 1527,  936,  936,  936,
+      936, 3885,  936, 3885,  936,  947,  947,  947, 3885, 3885,
+     3885,  947,  953,  953,  953, 3885, 3885, 3885,  953, 1578,
+     1578, 1578, 1578, 3885, 3885, 1578, 1578, 1588, 1588, 1588,
+     1588, 3885, 3885, 1588, 1588,  973,  973,  973, 3885, 3885,
+
+     3885,  973, 1606, 1606, 1606, 1606, 3885, 3885, 1606, 1606,
+      992,  992,  992, 3885, 3885, 3885,  992, 1625, 1625, 1625,
+     1625, 3885, 3885, 1625, 1625, 1260, 1260, 1260, 1260, 1260,
+     1260, 1260, 1260, 1260, 1865, 1865, 1865, 1865, 1865, 1865,
+     1865, 1865, 1865,  782,  782,  782, 3885, 3885, 3885,  782,
+      790,  790,  790,  790, 3885,  790, 3885,  790, 1344, 1344,
+     1344, 1344, 3885, 3885, 1344, 1344, 1353, 1353, 1353, 1353,
+     3885, 3885, 1353, 1353, 1363, 1363, 1363, 1363, 3885, 3885,
+     1363, 1363, 1371, 1371, 1371, 1371, 3885, 3885, 1371, 1371,
+     1381, 1381, 1381, 1381, 3885, 3885, 1381, 1381,  836,  836,
+
+      836, 3885, 3885, 3885,  836,  857,  857,  857, 3885, 3885,
+     3885,  857, 1454, 1454, 1454, 1454, 3885, 3885, 1454, 1454,
+      879,  879,  879, 3885, 3885, 3885,  879, 1479, 1479, 1479,
+     1479, 3885, 3885, 1479, 1479, 1487, 1487, 1487, 1487, 3885,
+     3885, 1487, 1487,  902,  902,  902, 3885, 3885, 3885,  902,
+     1514, 1514, 1514, 1514, 3885, 3885, 1514, 1514,  923,  923,
+      923,  923, 3885,  923, 3885,  923,  936,  936,  936, 3885,
+     3885, 3885,  936,  947,  947,  947, 3885, 3885, 3885,  947,
+      953,  953,  953, 3885, 3885, 3885,  953, 3331, 3331, 3331,
+     3331, 3331, 3331, 3331, 3331, 3331, 3332, 3332, 3332, 3332,
+
+     3332, 3332, 3332, 3332, 3332, 3411, 3411, 3411, 3411, 3411,
+     3411, 3411, 3411, 3411, 3414, 3414, 3414, 3414, 3414, 3414,
+     3414, 3414, 3414, 3481, 3481, 3481, 3481, 3481, 3481, 3481,
+     3481, 3481, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483,
+     3483,  291, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885
     } ;
 
-static yyconst flex_int16_t yy_chk[14073] =
+static yyconst flex_int16_t yy_chk[13918] =
     {   0,
         0,    3,    3,    3,    4,    4,    4,    5,    5,    5,
         6,    6,    6,    7,    7,    7,   11,    3,    9,   12,
@@ -3738,1252 +3710,1235 @@ static yyconst flex_int16_t yy_chk[14073] =
       276,  276,  276, 2386, 2389,  273, 2392, 2393,  274, 2394,
      2395,  275, 2398, 2401,  176,  176,  276,  277,  277,  277,
       278,  278,  278, 1138, 1138, 1138, 2405, 1138, 2406, 2407,
-     1138, 2419, 2422,  277, 2424, 2427,  278, 2434,  176,  197,
+     1138, 2419, 2422,  277, 2424, 2427,  278, 2441,  176,  197,
 
       197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
-      197,  197,  197,  197, 2441,  197,  197,  197,  197,  197,
+      197,  197,  197,  197, 2442,  197,  197,  197,  197,  197,
       281,  281,  281,  282,  282,  282,  283,  283,  283, 2443,
-     2444,  284,  284,  284, 2445, 2450,  281, 2451, 2452,  282,
+     2448,  284,  284,  284, 2449, 2450,  281, 2451, 2452,  282,
      2453, 2454,  283, 2455, 2456,  197,  197,  284,  285,  285,
-      285, 2457, 2458,  197, 2459,  197, 2469, 2473,  197, 1659,
-     1659, 1659,  197, 2480,  285, 2472,  197,  198,  198,  198,
+      285, 2457, 2467,  197, 2478,  197, 2479, 2471,  197, 1659,
+     1659, 1659,  197, 2480,  285, 2470,  197,  198,  198,  198,
       198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
-      198,  198, 2481,  198,  198,  198,  198,  198,  286,  286,
-      286,  287,  287,  287,  288,  288,  288, 2482,  805,  805,
+      198,  198, 2483,  198,  198,  198,  198,  198,  286,  286,
+      286,  287,  287,  287,  288,  288,  288, 2486,  805,  805,
 
-      805,  827,  827,  827,  286, 2473, 2485,  287, 2488, 2472,
-      288, 2492, 2493,  198,  198,  805, 2494,  331,  827, 2497,
-     2498,  198,  506,  198, 2499, 2502,  198,  331, 2505, 2506,
-      198, 2507,  506, 2508,  198,  207,  207,  207,  207,  207,
+      805,  827,  827,  827,  286, 2471, 2490,  287, 2491, 2470,
+      288, 2492, 2495,  198,  198,  805, 2496,  331,  827, 2497,
+     2500,  198,  506,  198, 2503, 2504,  198,  331, 2505, 2506,
+      198, 2528,  506, 2529,  198,  207,  207,  207,  207,  207,
       207,  207,  207,  207,  207,  207,  207,  207,  207,  207,
-     2530,  207,  207,  207,  207,  207,  331, 2531, 2537,  828,
-      828,  828,  506, 2532, 2538, 1014, 1014, 1014,  506, 2544,
-      331, 2545,  331, 2532,  331,  506,  828, 2546, 2560,  506,
-      331,  207,  207, 1014, 2561,  506, 2562, 2582,  714, 1140,
-     1140, 1140,  207, 1140, 2583, 2589, 1140, 2594,  714, 2596,
+     2535,  207,  207,  207,  207,  207,  331, 2536, 2542,  828,
+      828,  828,  506, 2530, 2543, 1014, 1014, 1014,  506, 2544,
+      331, 2558,  331, 2530,  331,  506,  828, 2559, 2560,  506,
+      331,  207,  207, 1014, 2580,  506, 2581, 2592,  714, 1140,
+     1140, 1140,  207, 1140, 2593, 2598, 1140, 2599,  714, 2600,
 
-     1665, 1665, 1665, 2597, 2602,  207,  208,  208,  208,  208,
+     1665, 1665, 1665, 2601, 2602,  207,  208,  208,  208,  208,
       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
       208, 2603,  208,  208,  208,  208,  208,  714, 2604,  838,
       838,  838,  840,  840,  840, 2605, 2606,  854,  854,  854,
-     2607,  714, 2608,  714, 2609,  714,  838, 1665, 2610,  840,
-     2611,  714,  208,  208,  854,  860,  860,  860,  869,  869,
-      869, 2616, 2621,  208, 1150, 1150, 1150, 2622, 1150, 2624,
-     2625, 1150,  860, 2626, 2619,  869,  208,  211,  211,  211,
+     2607,  714, 2612,  714, 2617,  714,  838, 1665, 2618,  840,
+     2620,  714,  208,  208,  854,  860,  860,  860,  869,  869,
+      869, 2619, 2621,  208, 1150, 1150, 1150, 2622, 1150, 2623,
+     2619, 1150,  860, 2625, 2615,  869,  208,  211,  211,  211,
       211,  211,  211,  211,  211,  211,  211,  211,  211,  211,
-      211,  211, 2627,  211,  211,  211,  211,  211,  870,  870,
+      211,  211, 2626,  211,  211,  211,  211,  211,  870,  870,
 
-      870,  881,  881,  881,  889,  889,  889, 2619,  893,  893,
-      893,  906,  906,  906, 2629,  870, 2630, 2623,  881, 2633,
-     2634,  889, 2620,  211,  211,  893, 2623, 2635,  906, 1158,
-     1158, 1158,  211, 1158,  211, 2638, 1158, 2640,  211, 2641,
+      870,  881,  881,  881,  889,  889,  889, 2615,  893,  893,
+      893,  906,  906,  906, 2629,  870, 2630, 2624,  881, 2631,
+     2634,  889, 2616,  211,  211,  893, 2624, 2636,  906, 1158,
+     1158, 1158,  211, 1158,  211, 2637, 1158, 2640,  211, 2641,
      1667, 1667, 1667,  211,  211,  212,  212,  212,  212,  212,
       212,  212,  212,  212,  212,  212,  212,  212,  212,  212,
-     2620,  212,  212,  212,  212,  212,  932,  932,  932,  938,
-      938,  938,  955,  955,  955, 2628,  961,  961,  961,  967,
-      967,  967, 2644,  932, 2628, 2645,  938, 1667, 2646,  955,
-     2648,  212,  212,  961, 2649, 2651,  967, 1162, 1162, 1162,
-
-      212, 1162,  212, 2672, 1162, 2673,  212, 1668, 1668, 1668,
-     2674,  212,  212,  215,  215,  215,  215,  215,  215,  215,
-      215,  215,  215,  215,  215,  215,  215,  215, 2675,  215,
+     2616,  212,  212,  212,  212,  212,  932,  932,  932,  938,
+      938,  938,  955,  955,  955, 2642,  961,  961,  961,  967,
+      967,  967, 2644,  932, 2645, 2647,  938, 1667, 2668,  955,
+     2669,  212,  212,  961, 2670, 2671,  967, 1162, 1162, 1162,
+
+      212, 1162,  212, 2674, 1162, 2675,  212, 1668, 1668, 1668,
+     2681,  212,  212,  215,  215,  215,  215,  215,  215,  215,
+      215,  215,  215,  215,  215,  215,  215,  215, 2682,  215,
       215,  215,  215,  215,  975,  975,  975,  988,  988,  988,
-     1011, 1011, 1011, 2678, 1054, 1054, 1054, 1056, 1056, 1056,
-     2679,  975, 2685, 2686,  988, 2693, 2681, 1011, 2681,  215,
-      215, 1054, 2694, 2695, 1056,  215, 1174, 1174, 1174, 2703,
-     1174, 2681, 2704, 1174, 2719, 1672, 1672, 1672, 2720, 2721,
+     1011, 1011, 1011, 2689, 1054, 1054, 1054, 1056, 1056, 1056,
+     2690,  975, 2691, 2699,  988, 2700, 2677, 1011, 2677,  215,
+      215, 1054, 2715, 2716, 1056,  215, 1174, 1174, 1174, 2717,
+     1174, 2677, 2721, 1174, 2722, 1672, 1672, 1672, 2723, 2724,
       215,  216,  216,  216,  216,  216,  216,  216,  216,  216,
-      216,  216,  216,  216,  216,  216, 2722,  216,  216,  216,
+      216,  216,  216,  216,  216,  216, 2725,  216,  216,  216,
 
       216,  216, 1015, 1015, 1015, 1058, 1058, 1058, 1059, 1059,
-     1059, 1672, 2725, 1055, 1055, 1055, 2727, 1057, 1057, 1057,
+     1059, 1672, 2726, 1055, 1055, 1055, 2727, 1057, 1057, 1057,
      1015, 2728, 2729, 1058, 2730, 2063, 1059,  216,  216, 2731,
      1055, 2063, 2732,  216, 1057, 2063, 1196, 1196, 1196, 1015,
-     1196, 2063, 2733, 1196, 2734, 1059, 2735, 2736,  216,  225,
+     1196, 2063, 2734, 1196, 2735, 1059, 2737, 2738,  216,  225,
       225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
       225,  225,  225,  225, 1055,  225,  225,  225,  225,  225,
-     1066, 1066, 1066, 1070, 1070, 1070, 2737, 1057, 2738, 1055,
-     1067, 1067, 1067, 1071, 1071, 1071, 2740, 2682, 1066, 2682,
-     2741, 1070, 1674, 1674, 1674,  225,  225, 2743, 1067, 2744,
+     1066, 1066, 1066, 1070, 1070, 1070, 2739, 1057, 2740, 1055,
+     1067, 1067, 1067, 1071, 1071, 1071, 2742, 2678, 1066, 2678,
+     2736, 1070, 1674, 1674, 1674,  225,  225, 2743, 1067, 2736,
 
-      225, 1071, 2682, 1686, 1686, 1686,  225,  226,  226,  226,
+      225, 1071, 2678, 1686, 1686, 1686,  225,  226,  226,  226,
       226,  226,  226,  226,  226,  226,  226,  226,  226,  226,
-      226,  226, 2742,  226,  226,  226,  226,  226, 1674, 2745,
-     1067, 2742, 1073, 1073, 1073, 2746, 2748, 1076, 1076, 1076,
-     2749, 1077, 1077, 1077, 1078, 1078, 1078, 2747, 1071, 1073,
-     1686, 2750, 2752,  226,  226, 1076, 2747, 2755,  226, 1077,
-     2756, 1078, 2757, 2753,  226,  229,  229,  229,  229,  229,
+      226,  226, 2741,  226,  226,  226,  226,  226, 1674, 2744,
+     1067, 2741, 1073, 1073, 1073, 2749, 2748, 1076, 1076, 1076,
+     2750, 1077, 1077, 1077, 1078, 1078, 1078, 2751, 1071, 1073,
+     1686, 2752, 2746,  226,  226, 1076, 2747, 2753,  226, 1077,
+     2754, 1078, 2755, 2756,  226,  229,  229,  229,  229,  229,
       229,  229,  229,  229,  229,  229,  229,  229,  229,  229,
-     2758,  229,  229,  229,  229,  229, 1080, 1080, 1080, 1077,
-     1081, 1081, 1081, 2752, 2759, 1082, 1082, 1082, 1079, 1079,
+     2748,  229,  229,  229,  229,  229, 1080, 1080, 1080, 1077,
+     1081, 1081, 1081, 2746, 2747, 1082, 1082, 1082, 1079, 1079,
 
-     1079, 2753, 2760, 1080, 1083, 1083, 1083, 2761, 1081, 2762,
-     2763,  229,  229, 1082,  229, 1079,  229, 1873, 1873, 1873,
-     2764, 1083,  229, 1202, 1202, 1202, 2765, 1202, 2766, 2767,
-     1202, 2768, 2769,  229,  230,  230,  230,  230,  230,  230,
+     1079, 2757, 2758, 1080, 1083, 1083, 1083, 2759, 1081, 2760,
+     2761,  229,  229, 1082,  229, 1079,  229, 1873, 1873, 1873,
+     2762, 1083,  229, 1202, 1202, 1202, 2763, 1202, 2766, 2767,
+     1202, 2769, 2770,  229,  230,  230,  230,  230,  230,  230,
       230,  230,  230,  230,  230,  230,  230,  230,  230, 1079,
       230,  230,  230,  230,  230, 1084, 1084, 1084, 1085, 1085,
-     1085, 1086, 1086, 1086, 1079, 2772, 2773, 1082, 2775, 1087,
-     1087, 1087, 1084, 1088, 1088, 1088, 1085, 2776, 2777, 1086,
-      230,  230, 2779,  230, 2780,  230, 1087, 1880, 1880, 1880,
-     1088,  230, 1218, 1218, 1218, 2800, 1218, 2801, 2803, 1218,
+     1085, 1086, 1086, 1086, 1079, 2771, 2773, 1082, 2774, 1087,
+     1087, 1087, 1084, 1088, 1088, 1088, 1085, 2794, 2795, 1086,
+      230,  230, 2797,  230, 2801,  230, 1087, 1880, 1880, 1880,
+     1088,  230, 1218, 1218, 1218, 2802, 1218, 2803, 2805, 1218,
 
-     2807, 2808,  230,  239,  239,  239,  239,  239,  239,  239,
+     2806, 2808,  230,  239,  239,  239,  239,  239,  239,  239,
       239,  239,  239,  239,  239,  239,  239,  239, 2809,  239,
       239,  239,  239,  239, 1088, 1089, 1089, 1089, 1090, 1090,
-     1090, 2064, 2811, 1086, 1091, 1091, 1091, 2064, 2812, 1088,
-     2810, 2064, 1089, 1101, 1101, 1101, 1090, 2064, 2814,  239,
-      239, 2810, 1091, 2815,  239, 1224, 1224, 1224, 2813, 1224,
-      239, 1101, 1224, 2754,  239, 1883, 1883, 1883, 2823, 2813,
+     1090, 2064, 2817, 1086, 1091, 1091, 1091, 2064, 2818, 1088,
+     2804, 2064, 1089, 1101, 1101, 1101, 1090, 2064, 2819,  239,
+      239, 2804, 1091, 2831,  239, 1224, 1224, 1224, 2807, 1224,
+      239, 1101, 1224, 2847,  239, 1883, 1883, 1883, 2853, 2807,
       239,  240,  240,  240,  240,  240,  240,  240,  240,  240,
-      240,  240,  240,  240,  240,  240, 2824,  240,  240,  240,
+      240,  240,  240,  240,  240,  240, 2854,  240,  240,  240,
       240,  240, 1092, 1092, 1092, 1094, 1094, 1094, 1096, 1096,
 
-     1096, 1230, 1230, 1230, 2825, 1230, 1091, 2754, 1230, 1092,
-     2837, 2853, 1094, 2856, 2857, 1096, 2851,  240,  240, 1097,
-     1097, 1097,  240, 1238, 1238, 1238, 2851, 1238,  240, 2851,
+     1096, 1230, 1230, 1230, 2855, 1230, 1091, 2856, 1230, 1092,
+     2857, 2858, 1094, 2859, 2860, 1096, 2845,  240,  240, 1097,
+     1097, 1097,  240, 1238, 1238, 1238, 2845, 1238,  240, 2845,
      1238, 2861,  240, 1886, 1886, 1886, 1097, 2862,  240,  249,
       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
-      249,  249,  249,  249, 2863,  249,  249,  249,  249,  249,
-     1887, 1887, 1887, 1098, 1098, 1098, 2864, 1104, 1104, 1104,
-     2865, 2866, 1097, 1099, 1099, 1099, 2867, 1100, 1100, 1100,
+      249,  249,  249,  249, 2864,  249,  249,  249,  249,  249,
+     1887, 1887, 1887, 1098, 1098, 1098, 2865, 1104, 1104, 1104,
+     2866, 2867, 1097, 1099, 1099, 1099, 2868, 1100, 1100, 1100,
      1098, 1102, 1102, 1102, 1104,  249,  249, 1890, 1890, 1890,
-     1099, 2868, 2869,  249, 1100, 2870,  249, 2872, 2873, 1102,
+     1099, 2869, 2870,  249, 1100, 2871,  249, 2872, 2873, 1102,
 
      1892, 1892, 1892,  249,  250,  250,  250,  250,  250,  250,
       250,  250,  250,  250,  250,  250,  250,  250,  250, 1098,
       250,  250,  250,  250,  250, 1099, 1107, 1107, 1107, 1102,
      1100, 1109, 1109, 1109, 1119, 1119, 1119, 1120, 1120, 1120,
      1121, 1121, 1121, 1107, 1123, 1123, 1123, 2874, 1109, 2875,
-      250,  250, 1119, 2852, 2876, 1120, 2877, 1121,  250, 2878,
-     2879,  250, 1123, 2852, 2880, 1892, 2852, 2881,  250,  253,
+      250,  250, 1119, 2846, 2878, 1120, 2881, 1121,  250, 2882,
+     2883,  250, 1123, 2846, 2884, 1892, 2846, 2885,  250,  253,
       253,  253,  253,  253,  253,  253,  253,  253,  253,  253,
-      253,  253,  253,  253, 2882,  253,  253,  253,  253,  253,
-     2883, 1124, 1124, 1124, 2889, 2890, 1120, 1128, 1128, 1128,
+      253,  253,  253,  253, 2878,  253,  253,  253,  253,  253,
+     2886, 1124, 1124, 1124, 2887, 2888, 1120, 1128, 1128, 1128,
 
      1133, 1133, 1133, 1134, 1134, 1134, 1137, 1137, 1137, 1124,
-     1139, 1139, 1139, 2891, 1128,  253,  253, 2892, 1133, 2893,
-     2894, 1134,  253, 1137, 1895, 1895, 1895, 1139,  253, 1250,
-     1250, 1250, 2895, 1250, 2896, 2887, 1250,  253,  254,  254,
+     1139, 1139, 1139, 2889, 1128,  253,  253, 2890, 1133, 2891,
+     2892, 1134,  253, 1137, 1895, 1895, 1895, 1139,  253, 1250,
+     1250, 1250, 2893, 1250, 2895, 2879, 1250,  253,  254,  254,
       254,  254,  254,  254,  254,  254,  254,  254,  254,  254,
       254,  254,  254, 1124,  254,  254,  254,  254,  254, 1141,
-     1141, 1141, 1144, 1144, 1144, 1134, 2886, 2897, 1142, 1142,
-     1142, 1145, 1145, 1145, 1154, 1154, 1154, 1141, 2887, 2888,
-     1144, 1149, 1149, 1149,  254,  254, 1142, 2898, 2899, 1145,
-     2900,  254, 1154, 1768, 1768, 1768, 2886,  254, 1149, 2901,
+     1141, 1141, 1144, 1144, 1144, 1134, 2897, 2898, 1142, 1142,
+     1142, 1145, 1145, 1145, 1154, 1154, 1154, 1141, 2879, 2880,
+     1144, 1149, 1149, 1149,  254,  254, 1142, 2899, 2901, 1145,
+     2902,  254, 1154, 1768, 1768, 1768, 2903,  254, 1149, 2915,
 
      1894, 1894, 1894, 1897, 1897, 1897,  254,  257,  257,  257,
       257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
-      257,  257, 2888,  257,  257,  257,  257,  257, 2903, 1768,
-     1142, 2905, 1145, 1155, 1155, 1155, 2906, 2907, 1157, 1157,
+      257,  257, 2880,  257,  257,  257,  257,  257, 2920, 1768,
+     1142, 2921, 1145, 1155, 1155, 1155, 2922, 2923, 1157, 1157,
      1157, 1159, 1159, 1159, 1160, 1160, 1160, 1894, 1161, 1161,
-     1161, 1155, 2909,  257,  257, 1157, 1272, 1272, 1272, 1159,
-     1272, 2910, 1160, 1272,  257, 1161, 1903, 1903, 1903, 1906,
-     1906, 1906, 2911,  257,  258,  258,  258,  258,  258,  258,
+     1161, 1155, 2924,  257,  257, 1157, 1272, 1272, 1272, 1159,
+     1272, 2925, 1160, 1272,  257, 1161, 1903, 1903, 1903, 1906,
+     1906, 1906, 2926,  257,  258,  258,  258,  258,  258,  258,
       258,  258,  258,  258,  258,  258,  258,  258,  258, 1155,
-      258,  258,  258,  258,  258, 1164, 1164, 1164, 2923, 2928,
+      258,  258,  258,  258,  258, 1164, 1164, 1164, 2927, 2928,
 
      1160, 1165, 1165, 1165, 1168, 1168, 1168, 1169, 1169, 1169,
      1173, 1173, 1173, 1164, 2929, 1175, 1175, 1175, 2930, 1165,
-      258,  258, 1168, 2931, 2932, 1169, 2915, 1173, 1907, 1907,
-     1907,  258, 1175, 1911, 1911, 1911, 1978, 1978, 1978, 2915,
+      258,  258, 1168, 2938, 2940, 1169, 2907, 1173, 1907, 1907,
+     1907,  258, 1175, 1911, 1911, 1911, 1978, 1978, 1978, 2907,
       258,  279,  279,  279,  279,  279,  279,  279,  279,  279,
-      279,  279,  279,  279,  279,  279, 2933,  279,  279,  279,
-      279,  279, 2916, 1165, 1178, 1178, 1178, 2934, 2935, 1169,
-     2936, 2937, 1179, 1179, 1179, 2916, 1182, 1182, 1182, 1183,
-     1183, 1183, 1178, 1193, 1193, 1193, 2938,  279,  279, 2946,
-     1179, 2948, 2952,  279, 1182, 2953,  279, 1183, 1321, 1321,
+      279,  279,  279,  279,  279,  279, 2944,  279,  279,  279,
+      279,  279, 2908, 1165, 1178, 1178, 1178, 2945, 2946, 1169,
+     2947, 2948, 1179, 1179, 1179, 2908, 1182, 1182, 1182, 1183,
+     1183, 1183, 1178, 1193, 1193, 1193, 2949,  279,  279, 2951,
+     1179, 2958, 2963,  279, 1182, 2964,  279, 1183, 1321, 1321,
 
-     1321, 1193, 1321, 2954, 2955, 1321, 2956, 2957,  279,  280,
+     1321, 1193, 1321, 2966, 2958, 1321, 2967, 2969,  279,  280,
       280,  280,  280,  280,  280,  280,  280,  280,  280,  280,
       280,  280,  280,  280, 1179,  280,  280,  280,  280,  280,
-     1194, 1194, 1194, 1195, 1195, 1195, 2959, 2971, 1183, 1198,
-     1198, 1198, 1199, 1199, 1199, 1201, 1201, 1201, 1194, 2972,
-     1195, 1203, 1203, 1203, 2974,  280,  280, 1198, 2975, 2977,
-     1199,  280, 1201, 2988,  280, 1205, 1205, 1205, 1203, 1209,
-     1209, 1209, 1210, 1210, 1210, 2829,  280,  328, 2989, 1211,
-     1211, 1211, 1205, 2990,  328, 2829, 2991, 1209, 2993, 2994,
-     1210, 2829, 2995,  328,  328, 1194, 1211, 1212, 1212, 1212,
-
-     1213, 1213, 1213, 1214, 1214, 1214, 2966, 1199, 1215, 1215,
-     1215, 1217, 1217, 1217, 1212, 2830, 2996, 1213, 2999, 2966,
-     1210, 1214,  328,  328,  328, 2830, 1215, 3000, 1217,  328,
-      328, 2830, 3001,  328,  328, 3002, 2967,  328, 3003,  328,
-      328,  328, 3004, 1219, 1219, 1219, 3005,  328,  330, 2967,
-     2973, 1220, 1220, 1220, 1223, 1223, 1223, 1226, 1226, 1226,
-     1213, 1219, 3006, 2973,  330,  330, 1227, 1227, 1227, 1220,
-     1215, 1223, 1229, 1229, 1229, 1226, 3007, 3008, 1233, 1233,
-     1233, 1234, 1234, 1234, 1227, 1237, 1237, 1237, 3009, 1229,
-     1249, 1249, 1249,  330,  330,  330, 1233, 3010, 3015, 1234,
-
-      330,  330, 1237, 3016,  330,  330, 3018, 1249,  330, 3019,
-      330,  330,  330, 1220, 1241, 1241, 1241, 2976,  330,  712,
+     1194, 1194, 1194, 1195, 1195, 1195, 2959, 2978, 1183, 1198,
+     1198, 1198, 1199, 1199, 1199, 1201, 1201, 1201, 1194, 2959,
+     1195, 1203, 1203, 1203, 2979,  280,  280, 1198, 2980, 2981,
+     1199,  280, 1201, 2983,  280, 1205, 1205, 1205, 1203, 1209,
+     1209, 1209, 1210, 1210, 1210, 2823,  280,  328, 2984, 1211,
+     1211, 1211, 1205, 2985,  328, 2823, 2986, 1209, 2989, 2990,
+     1210, 2823, 2991,  328,  328, 1194, 1211, 1212, 1212, 1212,
+
+     1213, 1213, 1213, 1214, 1214, 1214, 2965, 1199, 1215, 1215,
+     1215, 1217, 1217, 1217, 1212, 2824, 2992, 1213, 2993, 2965,
+     1210, 1214,  328,  328,  328, 2824, 1215, 2994, 1217,  328,
+      328, 2824, 2995,  328,  328, 2996, 2968,  328, 2997,  328,
+      328,  328, 2998, 1219, 1219, 1219, 2999,  328,  330, 2968,
+     3000, 1220, 1220, 1220, 1223, 1223, 1223, 1226, 1226, 1226,
+     1213, 1219, 3006, 3008,  330,  330, 1227, 1227, 1227, 1220,
+     1215, 1223, 1229, 1229, 1229, 1226, 3009, 3010, 1233, 1233,
+     1233, 1234, 1234, 1234, 1227, 1237, 1237, 1237, 3005, 1229,
+     1249, 1249, 1249,  330,  330,  330, 1233, 3011, 3006, 1234,
+
+      330,  330, 1237, 3012,  330,  330, 3013, 1249,  330, 3014,
+      330,  330,  330, 1220, 1241, 1241, 1241, 3015,  330,  712,
      1242, 1242, 1242, 1247, 1247, 1247,  712, 1248, 1248, 1248,
-     2976, 3020, 1241, 1227, 3021,  712,  712, 3022, 1242, 3016,
-     3023, 1247, 1252, 1252, 1252, 1248, 3024, 3015, 1234, 1253,
-     1253, 1253, 1254, 1254, 1254, 3025, 1255, 1255, 1255, 3026,
-     1252, 1256, 1256, 1256,  712,  712,  712, 1253, 3027, 1254,
-     3028,  712,  712, 1255, 3029,  712,  712, 3030, 1256,  712,
-     3032,  712,  712,  712, 3034, 1242, 1257, 1257, 1257,  712,
-     3035, 3037, 1248, 3039, 1258, 1258, 1258, 1259, 1259, 1259,
+     3016, 3017, 1241, 1227, 3018,  712,  712, 3005, 1242, 3019,
+     3020, 1247, 1252, 1252, 1252, 1248, 3022, 3024, 1234, 1253,
+     1253, 1253, 1254, 1254, 1254, 3025, 1255, 1255, 1255, 3027,
+     1252, 1256, 1256, 1256,  712,  712,  712, 1253, 3029, 1254,
+     3031,  712,  712, 1255, 3032,  712,  712, 3033, 1256,  712,
+     3031,  712,  712,  712, 3032, 1242, 1257, 1257, 1257,  712,
+     3034, 3035, 1248, 3036, 1258, 1258, 1258, 1259, 1259, 1259,
 
      1276, 1276, 1276, 1257, 1908, 1908, 1908, 1255, 1277, 1277,
-     1277, 1253, 1258, 3043, 3044, 1259, 3045, 3046, 1276, 1279,
+     1277, 1253, 1258, 3040, 3048, 1259, 3049, 3050, 1276, 1279,
      1279, 1279, 1255, 1320, 1320, 1320, 1277, 1324, 1324, 1324,
-     3050, 1325, 1325, 1325, 3058, 1325, 3059, 1279, 1325, 3060,
-     1320, 1333, 1333, 1333, 1324, 3061, 1257, 1327, 1327, 1327,
-     1328, 1328, 1328, 1330, 1330, 1330, 3041, 3042, 1333, 1259,
-     1337, 1337, 1337, 3062, 3063, 1327, 3041, 3042, 1328, 1908,
-     3064, 1330, 1338, 1338, 1338, 1340, 1340, 1340, 1337, 1343,
-     1343, 1343, 1344, 1344, 1344, 1346, 1346, 1346, 3065, 3066,
-     1338, 3067, 3068, 1340, 1348, 1348, 1348, 1343, 1348, 3072,
-
-     1344, 1348, 3075, 1346, 1352, 1352, 1352, 1353, 1353, 1353,
-     1355, 1355, 1355, 1356, 1356, 1356, 3076, 3077, 1330, 1357,
-     1357, 1357, 1352, 1357, 3078, 1353, 1357, 3079, 1355, 3080,
-     1356, 1360, 1360, 1360, 1361, 1361, 1361, 3081, 1361, 1346,
-     3084, 1361, 1340, 1362, 1362, 1362, 3088, 3089, 1360, 1363,
-     1363, 1363, 1365, 1365, 1365, 1366, 1366, 1366, 3090, 3091,
-     1355, 1362, 1367, 1367, 1367, 3092, 1367, 1363, 3093, 1367,
-     1365, 3094, 1366, 1368, 1368, 1368, 1369, 1369, 1369, 3095,
-     1369, 3096, 3097, 1369, 1370, 1370, 1370, 1371, 1371, 1371,
+     3051, 1325, 1325, 1325, 3052, 1325, 3053, 1279, 1325, 3054,
+     1320, 1333, 1333, 1333, 1324, 3055, 1257, 1327, 1327, 1327,
+     1328, 1328, 1328, 1330, 1330, 1330, 3056, 3057, 1333, 1259,
+     1337, 1337, 1337, 3058, 3062, 1327, 3065, 3066, 1328, 1908,
+     3067, 1330, 1338, 1338, 1338, 1340, 1340, 1340, 1337, 1343,
+     1343, 1343, 1344, 1344, 1344, 1346, 1346, 1346, 3068, 3069,
+     1338, 3070, 3071, 1340, 1348, 1348, 1348, 1343, 1348, 3074,
+
+     1344, 1348, 3078, 1346, 1352, 1352, 1352, 1353, 1353, 1353,
+     1355, 1355, 1355, 1356, 1356, 1356, 3079, 3080, 1330, 1357,
+     1357, 1357, 1352, 1357, 3081, 1353, 1357, 3082, 1355, 3083,
+     1356, 1360, 1360, 1360, 1361, 1361, 1361, 3084, 1361, 1346,
+     3085, 1361, 1340, 1362, 1362, 1362, 3086, 3087, 1360, 1363,
+     1363, 1363, 1365, 1365, 1365, 1366, 1366, 1366, 3088, 3089,
+     1355, 1362, 1367, 1367, 1367, 3101, 1367, 1363, 3102, 1367,
+     1365, 3092, 1366, 1368, 1368, 1368, 1369, 1369, 1369, 3103,
+     1369, 3092, 3104, 1369, 1370, 1370, 1370, 1371, 1371, 1371,
      1368, 1373, 1373, 1373, 1374, 1374, 1374, 1375, 1375, 1375,
 
-     3098, 1375, 1370, 3099, 1375, 1371, 1378, 1378, 1378, 1373,
-     3115, 1374, 1379, 1379, 1379, 1365, 1379, 3116, 3117, 1379,
+     3093, 1375, 1370, 3105, 1375, 1371, 1378, 1378, 1378, 1373,
+     3093, 1374, 1379, 1379, 1379, 1365, 1379, 3106, 3107, 1379,
      1380, 1380, 1380, 1378, 1381, 1381, 1381, 1383, 1383, 1383,
-     1384, 1384, 1384, 3118, 1384, 3119, 3120, 1384, 1380, 1387,
-     1387, 1387, 1381, 1387, 3121, 1383, 1387, 1390, 1390, 1390,
-     3122, 1391, 1391, 1391, 1373, 1391, 3124, 3125, 1391, 1396,
-     1396, 1396, 3126, 3127, 1390, 1397, 1397, 1397, 1399, 1399,
-     1399, 1403, 1403, 1403, 3102, 1403, 3128, 1396, 1403, 1406,
-     1406, 1406, 3103, 1397, 3102, 3129, 1399, 1407, 1407, 1407,
-     1383, 1407, 3103, 3130, 1407, 3131, 1406, 1410, 1410, 1410,
-
-     1411, 1411, 1411, 3132, 1411, 3133, 3134, 1411, 1421, 1421,
-     1421, 1422, 1422, 1422, 1410, 3135, 3143, 1399, 1424, 1424,
-     1424, 1425, 1425, 1425, 3144, 1425, 1421, 3145, 1425, 1422,
+     1384, 1384, 1384, 3108, 1384, 3110, 3111, 1384, 1380, 1387,
+     1387, 1387, 1381, 1387, 3112, 1383, 1387, 1390, 1390, 1390,
+     3113, 1391, 1391, 1391, 1373, 1391, 3114, 3115, 1391, 1396,
+     1396, 1396, 3116, 3117, 1390, 1397, 1397, 1397, 1399, 1399,
+     1399, 1403, 1403, 1403, 3118, 1403, 3119, 1396, 1403, 1406,
+     1406, 1406, 3120, 1397, 3121, 3123, 1399, 1407, 1407, 1407,
+     1383, 1407, 3125, 3124, 1407, 3123, 1406, 1410, 1410, 1410,
+
+     1411, 1411, 1411, 3124, 1411, 3129, 3130, 1411, 1421, 1421,
+     1421, 1422, 1422, 1422, 1410, 3131, 3134, 1399, 1424, 1424,
+     1424, 1425, 1425, 1425, 3135, 1425, 1421, 3125, 1425, 1422,
      1428, 1428, 1428, 1429, 1429, 1429, 1424, 1431, 1431, 1431,
-     1434, 1434, 1434, 1435, 1435, 1435, 3137, 1435, 1428, 3148,
-     1435, 1429, 1441, 1441, 1441, 1431, 3137, 1434, 1442, 1442,
+     1434, 1434, 1434, 1435, 1435, 1435, 3136, 1435, 1428, 3137,
+     1435, 1429, 1441, 1441, 1441, 1431, 3140, 1434, 1442, 1442,
      1442, 1444, 1444, 1444, 1446, 1446, 1446, 1447, 1447, 1447,
-     1441, 1447, 3138, 3139, 1447, 3149, 1442, 3150, 3151, 1444,
-     3154, 1446, 3138, 1450, 1450, 1450, 1424, 1450, 3156, 3160,
-     1450, 1453, 1453, 1453, 1454, 1454, 1454, 3163, 1431, 1456,
+     1441, 1447, 3142, 3146, 1447, 3149, 1442, 3150, 3151, 1444,
+     3152, 1446, 3153, 1450, 1450, 1450, 1424, 1450, 3154, 3155,
+     1450, 1453, 1453, 1453, 1454, 1454, 1454, 3156, 1431, 1456,
 
-     1456, 1456, 1457, 1457, 1457, 1458, 1458, 1458, 3139, 1453,
-     3164, 3165, 1454, 1459, 1459, 1459, 3166, 1456, 3167, 1457,
+     1456, 1456, 1457, 1457, 1457, 1458, 1458, 1458, 3161, 1453,
+     3169, 3170, 1454, 1459, 1459, 1459, 3171, 1456, 3172, 1457,
      1461, 1461, 1461, 1458, 1470, 1470, 1470, 1444, 1464, 1464,
-     1464, 1459, 1464, 3168, 3169, 1464, 3170, 3175, 1461, 1471,
-     1471, 1471, 1470, 1473, 1473, 1473, 1475, 1475, 1475, 3183,
-     1475, 3184, 3185, 1475, 1478, 1478, 1478, 1471, 1479, 1479,
-     1479, 1473, 1481, 1481, 1481, 1456, 3186, 1482, 1482, 1482,
+     1464, 1459, 1464, 3173, 3174, 1464, 3175, 3176, 1461, 1471,
+     1471, 1471, 1470, 1473, 1473, 1473, 1475, 1475, 1475, 3177,
+     1475, 3178, 3184, 1475, 1478, 1478, 1478, 1471, 1479, 1479,
+     1479, 1473, 1481, 1481, 1481, 1456, 3185, 1482, 1482, 1482,
      1461, 1482, 1478, 3187, 1482, 3188, 1479, 1486, 1486, 1486,
-     1481, 1487, 1487, 1487, 1489, 1489, 1489, 3189, 1490, 1490,
-     1490, 1491, 1491, 1491, 3190, 1486, 1492, 1492, 1492, 1487,
-
-     3191, 3192, 1489, 3198, 1473, 1490, 3199, 3201, 1491, 1493,
-     1493, 1493, 3202, 3204, 1492, 1495, 1495, 1495, 1500, 1500,
-     1500, 3205, 1500, 1481, 3206, 1500, 3207, 1493, 1503, 1503,
-     1503, 3208, 3209, 1495, 3210, 1489, 1504, 1504, 1504, 1491,
-     1504, 3211, 3212, 1504, 3213, 1503, 1507, 1507, 1507, 1508,
+     1481, 1487, 1487, 1487, 1489, 1489, 1489, 3190, 1490, 1490,
+     1490, 1491, 1491, 1491, 3191, 1486, 1492, 1492, 1492, 1487,
+
+     3192, 3193, 1489, 3194, 1473, 1490, 3195, 3196, 1491, 1493,
+     1493, 1493, 3197, 3198, 1492, 1495, 1495, 1495, 1500, 1500,
+     1500, 3199, 1500, 1481, 3200, 1500, 3201, 1493, 1503, 1503,
+     1503, 3202, 3205, 1495, 3206, 1489, 1504, 1504, 1504, 1491,
+     1504, 3207, 3208, 1504, 3210, 1503, 1507, 1507, 1507, 1508,
      1508, 1508, 1510, 1510, 1510, 1513, 1513, 1513, 1514, 1514,
-     1514, 1516, 1516, 1516, 1507, 3214, 3215, 1508, 3216, 3219,
-     1510, 3220, 3221, 1513, 3222, 3230, 1514, 3231, 3233, 1516,
+     1514, 1516, 1516, 1516, 1507, 3211, 3213, 1508, 3214, 3215,
+     1510, 3217, 3219, 1513, 3220, 3221, 1514, 3224, 3225, 1516,
      1522, 1522, 1522, 1495, 1526, 1526, 1526, 1527, 1527, 1527,
-     1529, 1529, 1529, 3234, 1530, 1530, 1530, 1522, 1530, 3235,
+     1529, 1529, 1529, 3226, 1530, 1530, 1530, 1522, 1530, 3227,
 
-     3237, 1530, 1526, 3239, 1510, 1527, 3240, 3241, 1529, 1516,
+     3230, 1530, 1526, 3231, 1510, 1527, 3232, 3233, 1529, 1516,
      1534, 1534, 1534, 1535, 1535, 1535, 1537, 1537, 1537, 1539,
-     1539, 1539, 3244, 1539, 2475, 2475, 1539, 2475, 1534, 3245,
-     3246, 1535, 3247, 3250, 1537, 2475, 1542, 1542, 1542, 1543,
-     1543, 1543, 2475, 1543, 3251, 3252, 1543, 1544, 1544, 1544,
-     3253, 3254, 1529, 1542, 1545, 1545, 1545, 3261, 1546, 1546,
-     1546, 3255, 1546, 3262, 1544, 1546, 1548, 1548, 1548, 3264,
-     3265, 1545, 1550, 1550, 1550, 1551, 1551, 1551, 1537, 1553,
-     1553, 1553, 3266, 1548, 1554, 1554, 1554, 1555, 1555, 1555,
-     1550, 1555, 3268, 1551, 1555, 3270, 3273, 1553, 1556, 1556,
-
-     1556, 1554, 1557, 1557, 1557, 3255, 1557, 3275, 3276, 1557,
-     1559, 1559, 1559, 3277, 3278, 1556, 1560, 1560, 1560, 1562,
-     1562, 1562, 1564, 1564, 1564, 3279, 1564, 3280, 1559, 1564,
-     1567, 1567, 1567, 3281, 1560, 3282, 3285, 1562, 3289, 3290,
-     1553, 1568, 1568, 1568, 1570, 1570, 1570, 3292, 1567, 1573,
-     1573, 1573, 3293, 1573, 3294, 3296, 1573, 3297, 3302, 1568,
-     3303, 3304, 1570, 1577, 1577, 1577, 1578, 1578, 1578, 3305,
-     1580, 1580, 1580, 1582, 1582, 1582, 3306, 1582, 3307, 3308,
-     1582, 1577, 3309, 3310, 1578, 3311, 3312, 1562, 1580, 1586,
+     1539, 1539, 3234, 1539, 2473, 2473, 1539, 2473, 1534, 3241,
+     3242, 1535, 3244, 3245, 1537, 2473, 1542, 1542, 1542, 1543,
+     1543, 1543, 2473, 1543, 3246, 3248, 1543, 1544, 1544, 1544,
+     3250, 3235, 1529, 1542, 1545, 1545, 1545, 3253, 1546, 1546,
+     1546, 3255, 1546, 3256, 1544, 1546, 1548, 1548, 1548, 3257,
+     3258, 1545, 1550, 1550, 1550, 1551, 1551, 1551, 1537, 1553,
+     1553, 1553, 3259, 1548, 1554, 1554, 1554, 1555, 1555, 1555,
+     1550, 1555, 3260, 1551, 1555, 3235, 3261, 1553, 1556, 1556,
+
+     1556, 1554, 1557, 1557, 1557, 3262, 1557, 3265, 3269, 1557,
+     1559, 1559, 1559, 3270, 3272, 1556, 1560, 1560, 1560, 1562,
+     1562, 1562, 1564, 1564, 1564, 3273, 1564, 3274, 1559, 1564,
+     1567, 1567, 1567, 3276, 1560, 3277, 3282, 1562, 3283, 3284,
+     1553, 1568, 1568, 1568, 1570, 1570, 1570, 3285, 1567, 1573,
+     1573, 1573, 3286, 1573, 3287, 3288, 1573, 3289, 3290, 1568,
+     3291, 3292, 1570, 1577, 1577, 1577, 1578, 1578, 1578, 3293,
+     1580, 1580, 1580, 1582, 1582, 1582, 3294, 1582, 3295, 3296,
+     1582, 1577, 3297, 3298, 1578, 3302, 3303, 1562, 1580, 1586,
      1586, 1586, 1587, 1587, 1587, 1588, 1588, 1588, 1590, 1590,
 
-     1590, 1592, 1592, 1592, 3313, 3314, 1586, 1593, 1593, 1593,
-     1587, 1593, 1570, 1588, 1593, 3315, 1590, 3316, 1592, 1596,
+     1590, 1592, 1592, 1592, 3304, 3305, 1586, 1593, 1593, 1593,
+     1587, 1593, 1570, 1588, 1593, 3308, 1590, 3309, 1592, 1596,
      1596, 1596, 1598, 1598, 1598, 1599, 1599, 1599, 1601, 1601,
-     1601, 3317, 1580, 1603, 1603, 1603, 1596, 1605, 1605, 1605,
-     1598, 3318, 3322, 1599, 3323, 3324, 1601, 1606, 1606, 1606,
-     1603, 1608, 1608, 1608, 3325, 1605, 3328, 1609, 1609, 1609,
-     1590, 1609, 3329, 3330, 1609, 1606, 1613, 1613, 1613, 1608,
+     1601, 3310, 1580, 1603, 1603, 1603, 1596, 1605, 1605, 1605,
+     1598, 3311, 3312, 1599, 3313, 3315, 1601, 1606, 1606, 1606,
+     1603, 1608, 1608, 1608, 3316, 1605, 3318, 1609, 1609, 1609,
+     1590, 1609, 3319, 3320, 1609, 1606, 1613, 1613, 1613, 1608,
      1614, 1614, 1614, 1616, 1616, 1616, 1601, 1617, 1617, 1617,
-     3331, 1596, 3332, 3333, 1613, 1618, 1618, 1618, 1614, 1618,
-     3335, 1616, 1618, 3336, 1617, 1621, 1621, 1621, 3338, 1608,
+     3322, 1596, 3323, 3324, 1613, 1618, 1618, 1618, 1614, 1618,
+     3325, 1616, 1618, 3326, 1617, 1621, 1621, 1621, 3334, 1608,
 
-     1622, 1622, 1622, 3339, 1622, 3340, 3342, 1622, 1624, 1624,
-     1624, 3343, 1621, 1625, 1625, 1625, 3344, 1627, 1627, 1627,
+     1622, 1622, 1622, 3335, 1622, 3337, 3327, 1622, 1624, 1624,
+     1624, 3338, 1621, 1625, 1625, 1625, 3329, 1627, 1627, 1627,
      1629, 1629, 1629, 1635, 1635, 1635, 1624, 1685, 1685, 1685,
-     3345, 1625, 3346, 3354, 1616, 1627, 3355, 3350, 1629, 1629,
-     3357, 1635, 1676, 1676, 1676, 1685, 1676, 3347, 3350, 1676,
-     1681, 1681, 1681, 3349, 1681, 3358, 3362, 1681, 1688, 1688,
-     1688, 1689, 1689, 1689, 3364, 1689, 3366, 3349, 1689, 1693,
-     1693, 1693, 1696, 1696, 1696, 1688, 3368, 3372, 1627, 1695,
-     1695, 1695, 3378, 1699, 1699, 1699, 3379, 1693, 3374, 1685,
-     1696, 1700, 1700, 1700, 3347, 1700, 1695, 3381, 1700, 3382,
-
-     3374, 1699, 1705, 1705, 1705, 3384, 1705, 3375, 3395, 1705,
-     1708, 1708, 1708, 1709, 1709, 1709, 3397, 1709, 3389, 3375,
-     1709, 3399, 1712, 1712, 1712, 3400, 1712, 3403, 1708, 1712,
-     3389, 1693, 1715, 1715, 1715, 1716, 1716, 1716, 3404, 1716,
-     1696, 1699, 1716, 3407, 1721, 1721, 1721, 3409, 1721, 3390,
+     3329, 1625, 3342, 3344, 1616, 1627, 3330, 3346, 1629, 1629,
+     3348, 1635, 1676, 1676, 1676, 1685, 1676, 3330, 3352, 1676,
+     1681, 1681, 1681, 3327, 1681, 3354, 3358, 1681, 1688, 1688,
+     1688, 1689, 1689, 1689, 3355, 1689, 3359, 3354, 1689, 1693,
+     1693, 1693, 1696, 1696, 1696, 1688, 3355, 3361, 1627, 1695,
+     1695, 1695, 3362, 1699, 1699, 1699, 3364, 1693, 3369, 1685,
+     1696, 1700, 1700, 1700, 3375, 1700, 1695, 3377, 1700, 3379,
+
+     3369, 1699, 1705, 1705, 1705, 3380, 1705, 3370, 3383, 1705,
+     1708, 1708, 1708, 1709, 1709, 1709, 3384, 1709, 3387, 3370,
+     1709, 3389, 1712, 1712, 1712, 3391, 1712, 3393, 1708, 1712,
+     3394, 1693, 1715, 1715, 1715, 1716, 1716, 1716, 3396, 1716,
+     1696, 1699, 1716, 3397, 1721, 1721, 1721, 3401, 1721, 3402,
      1715, 1721, 1724, 1724, 1724, 1725, 1725, 1725, 1708, 1725,
-     3411, 3390, 1725, 3413, 1730, 1730, 1730, 1732, 1732, 1732,
+     3404, 3405, 1725, 3407, 1730, 1730, 1730, 1732, 1732, 1732,
      1724, 1733, 1733, 1733, 1734, 1734, 1734, 1735, 1735, 1735,
-     1715, 1730, 1736, 1736, 1736, 1732, 3414, 3416, 1733, 3417,
-     3421, 1734, 3422, 3424, 1735, 1741, 1741, 1741, 3425, 1736,
-
-     1724, 1737, 1737, 1737, 3427, 1737, 3429, 3433, 1737, 1738,
-     1738, 1738, 1741, 1738, 3353, 3435, 1738, 1742, 1742, 1742,
-     1743, 1743, 1743, 1732, 3438, 1735, 1744, 1744, 1744, 1745,
-     1745, 1745, 3439, 3353, 1742, 3353, 3440, 1743, 1746, 1746,
-     1746, 1734, 3430, 1744, 3432, 3432, 1745, 1741, 3353, 1747,
+     1715, 1730, 1736, 1736, 1736, 1732, 3409, 3413, 1733, 3415,
+     3410, 1734, 3411, 3414, 1735, 1741, 1741, 1741, 3418, 1736,
+
+     1724, 1737, 1737, 1737, 3414, 1737, 3411, 3419, 1737, 1738,
+     1738, 1738, 1741, 1738, 3333, 3420, 1738, 1742, 1742, 1742,
+     1743, 1743, 1743, 1732, 3421, 1735, 1744, 1744, 1744, 1745,
+     1745, 1745, 3410, 3333, 1742, 3333, 3424, 1743, 1746, 1746,
+     1746, 1734, 3421, 1744, 3412, 3412, 1745, 1741, 3333, 1747,
      1747, 1747, 1748, 1748, 1748, 1746, 1749, 1749, 1749, 1750,
-     1750, 1750, 1751, 1751, 1751, 1742, 1747, 3444, 3441, 1748,
-     1755, 1755, 1755, 1749, 1744, 3431, 1750, 1752, 1752, 1752,
-     1751, 1756, 1756, 1756, 3430, 1756, 3441, 1755, 1756, 3431,
-     3445, 1743, 3446, 3453, 1745, 1752, 1758, 1758, 1758, 1746,
-
-     1760, 1760, 1760, 1762, 1762, 1762, 3454, 1763, 1763, 1763,
-     3457, 1763, 3458, 1758, 1763, 1764, 1764, 1764, 1760, 1749,
-     1762, 1750, 3460, 1748, 1765, 1765, 1765, 3434, 1751, 3457,
-     1752, 3464, 3465, 1764, 3447, 1766, 1766, 1766, 3434, 1766,
-     3466, 1765, 1766, 1767, 1767, 1767, 1773, 1773, 1773, 3447,
-     1775, 1775, 1775, 1776, 1776, 1776, 3467, 1777, 1777, 1777,
-     3459, 1767, 3469, 3470, 1773, 3471, 3472, 1760, 1775, 3474,
-     1776, 1778, 1778, 1778, 3475, 1777, 1779, 1779, 1779, 3459,
-     1779, 3469, 1764, 1779, 3471, 1781, 1781, 1781, 1778, 1783,
-     1783, 1783, 1786, 1786, 1786, 3476, 1786, 3477, 3478, 1786,
-
-     3479, 3487, 1767, 1781, 1773, 3488, 1783, 3489, 1775, 1777,
+     1750, 1750, 1751, 1751, 1751, 1742, 1747, 3425, 3426, 1748,
+     1755, 1755, 1755, 1749, 1744, 3427, 1750, 1752, 1752, 1752,
+     1751, 1756, 1756, 1756, 3433, 1756, 3434, 1755, 1756, 3438,
+     3427, 1743, 3440, 3437, 1745, 1752, 1758, 1758, 1758, 1746,
+
+     1760, 1760, 1760, 1762, 1762, 1762, 3444, 1763, 1763, 1763,
+     3439, 1763, 3437, 1758, 1763, 1764, 1764, 1764, 1760, 1749,
+     1762, 1750, 3445, 1748, 1765, 1765, 1765, 3446, 1751, 3439,
+     1752, 3447, 3450, 1764, 3452, 1766, 1766, 1766, 3454, 1766,
+     3455, 1765, 1766, 1767, 1767, 1767, 1773, 1773, 1773, 3456,
+     1775, 1775, 1775, 1776, 1776, 1776, 3457, 1777, 1777, 1777,
+     3449, 1767, 3451, 3458, 1773, 3459, 3467, 1760, 1775, 3468,
+     1776, 1778, 1778, 1778, 3469, 1777, 1779, 1779, 1779, 3449,
+     1779, 3451, 1764, 1779, 3473, 1781, 1781, 1781, 1778, 1783,
+     1783, 1783, 1786, 1786, 1786, 3474, 1786, 3475, 3481, 1786,
+
+     3482, 3483, 1767, 1781, 1773, 3485, 1783, 3470, 1775, 1777,
      1789, 1789, 1789, 1791, 1791, 1791, 1794, 1794, 1794, 1800,
-     1800, 1800, 1801, 1801, 1801, 3493, 1801, 1789, 3494, 1801,
-     3495, 1791, 3490, 3501, 1794, 3502, 1800, 1805, 1805, 1805,
+     1800, 1800, 1801, 1801, 1801, 3470, 1801, 1789, 3486, 1801,
+     3487, 1791, 3489, 3490, 1794, 3476, 1800, 1805, 1805, 1805,
      1806, 1806, 1806, 1807, 1807, 1807, 1781, 1809, 1809, 1809,
-     3490, 1809, 3496, 3503, 1809, 1805, 3505, 1806, 1812, 1812,
-     1812, 1807, 1813, 1813, 1813, 3506, 1813, 3496, 3507, 1813,
-     1814, 1814, 1814, 3509, 1814, 1812, 3510, 1814, 1791, 1818,
-     1818, 1818, 3511, 1794, 1819, 1819, 1819, 1805, 1819, 3512,
-     3514, 1819, 1821, 1821, 1821, 3515, 1818, 1822, 1822, 1822,
-
-     3516, 1822, 3521, 3522, 1822, 3523, 1807, 1825, 1825, 1825,
-     1821, 1825, 3524, 3525, 1825, 1829, 1829, 1829, 1831, 1831,
+     3476, 1809, 3491, 3492, 1809, 1805, 3494, 1806, 1812, 1812,
+     1812, 1807, 1813, 1813, 1813, 3495, 1813, 3496, 3501, 1813,
+     1814, 1814, 1814, 3502, 1814, 1812, 3503, 1814, 1791, 1818,
+     1818, 1818, 3504, 1794, 1819, 1819, 1819, 1805, 1819, 3505,
+     3506, 1819, 1821, 1821, 1821, 3507, 1818, 1822, 1822, 1822,
+
+     3508, 1822, 3509, 3510, 1822, 3513, 1807, 1825, 1825, 1825,
+     1821, 1825, 3514, 3515, 1825, 1829, 1829, 1829, 1831, 1831,
      1831, 1835, 1835, 1835, 1837, 1837, 1837, 1838, 1838, 1838,
-     1839, 1839, 1839, 1829, 1839, 3526, 1831, 1839, 3527, 1835,
-     3528, 1837, 3529, 1821, 1838, 1840, 1840, 1840, 1842, 1842,
-     1842, 1843, 1843, 1843, 3530, 1843, 3533, 3534, 1843, 1846,
-     1846, 1846, 3535, 1840, 3536, 1842, 1848, 1848, 1848, 1849,
-     1849, 1849, 3537, 1849, 3538, 3541, 1849, 1846, 1850, 1850,
-     1850, 3542, 1829, 1848, 3543, 1831, 1835, 1851, 1851, 1851,
-     1853, 1853, 1853, 3544, 3545, 1850, 1854, 1854, 1854, 3546,
-
-     1854, 3547, 3548, 1854, 3549, 1851, 3551, 3552, 1853, 1846,
-     1840, 1859, 1859, 1859, 3553, 1859, 3554, 3556, 1859, 3558,
+     1839, 1839, 1839, 1829, 1839, 3516, 1831, 1839, 3517, 1835,
+     3518, 1837, 3521, 1821, 1838, 1840, 1840, 1840, 1842, 1842,
+     1842, 1843, 1843, 1843, 3522, 1843, 3523, 3524, 1843, 1846,
+     1846, 1846, 3525, 1840, 3526, 1842, 1848, 1848, 1848, 1849,
+     1849, 1849, 3527, 1849, 3528, 3529, 1849, 1846, 1850, 1850,
+     1850, 3531, 1829, 1848, 3532, 1831, 1835, 1851, 1851, 1851,
+     1853, 1853, 1853, 3533, 3534, 1850, 1854, 1854, 1854, 3536,
+
+     1854, 3538, 3539, 1854, 3540, 1851, 3541, 3542, 1853, 1846,
+     1840, 1859, 1859, 1859, 3543, 1859, 3544, 3545, 1859, 3546,
      1863, 1863, 1863, 1866, 1866, 1866, 1910, 1910, 1910, 1913,
-     1913, 1913, 1914, 1914, 1914, 3559, 3560, 1851, 1863, 3561,
-     3562, 1866, 1853, 1915, 1915, 1915, 1916, 1916, 1916, 1917,
-     1917, 1917, 1918, 1918, 1918, 1921, 1921, 1921, 3563, 1921,
-     1915, 3564, 1921, 1916, 3565, 3566, 1917, 1927, 1927, 1927,
-     1918, 3567, 1863, 1910, 3568, 1866, 1929, 1929, 1929, 1930,
-     1930, 1930, 3572, 1930, 3570, 1927, 1930, 1931, 1931, 1931,
-     3573, 3574, 1866, 1929, 1913, 3575, 3570, 1914, 3576, 1934,
+     1913, 1913, 1914, 1914, 1914, 3547, 3548, 1851, 1863, 3552,
+     3553, 1866, 1853, 1915, 1915, 1915, 1916, 1916, 1916, 1917,
+     1917, 1917, 1918, 1918, 1918, 1921, 1921, 1921, 3554, 1921,
+     1915, 3555, 1921, 1916, 3556, 3557, 1917, 1927, 1927, 1927,
+     1918, 3558, 1863, 1910, 3560, 1866, 1929, 1929, 1929, 1930,
+     1930, 1930, 3565, 1930, 3550, 1927, 1930, 1931, 1931, 1931,
+     3566, 3567, 1866, 1929, 1913, 3568, 3550, 1914, 3569, 1934,
 
      1934, 1934, 1935, 1935, 1935, 1931, 1936, 1936, 1936, 1937,
-     1937, 1937, 3577, 3578, 1917, 3580, 3585, 1934, 3586, 1935,
-     1918, 3587, 3588, 1936, 1938, 1938, 1938, 1937, 1939, 1939,
-     1939, 3571, 1927, 1940, 1940, 1940, 1941, 1941, 1941, 1942,
-     1942, 1942, 1938, 3571, 3589, 1939, 3590, 1931, 1934, 3594,
-     1940, 1943, 1943, 1943, 1941, 3595, 1942, 1944, 1944, 1944,
-     1945, 1945, 1945, 3597, 1945, 3599, 3600, 1945, 1943, 1946,
-     1946, 1946, 3601, 3602, 1944, 1937, 1947, 1947, 1947, 1948,
-     1948, 1948, 1950, 1950, 1950, 3603, 1946, 1951, 1951, 1951,
-     1938, 1949, 1949, 1949, 1947, 1949, 1948, 3604, 1949, 1950,
-
-     3605, 3606, 1941, 3607, 1951, 1952, 1952, 1952, 3610, 1952,
-     1943, 3611, 1952, 1955, 1955, 1955, 1956, 1956, 1956, 1957,
-     1957, 1957, 1958, 1958, 1958, 1959, 1959, 1959, 3612, 3608,
-     1955, 3613, 3614, 1956, 3615, 3616, 1957, 1947, 3617, 1958,
-     3620, 3621, 1959, 1960, 1960, 1960, 1961, 1961, 1961, 1962,
-     1962, 1962, 1951, 1962, 3608, 3622, 1962, 1963, 1963, 1963,
-     1960, 3623, 3624, 1961, 3625, 3626, 1956, 1964, 1964, 1964,
-     3627, 3628, 1959, 3629, 1963, 1965, 1965, 1965, 1955, 3632,
-     3633, 1958, 3634, 3635, 1964, 1966, 1966, 1966, 1967, 1967,
-     1967, 3636, 1965, 3637, 1970, 1970, 1970, 1960, 1970, 3640,
-
-     3641, 1970, 3642, 1966, 3643, 3644, 1967, 1973, 1973, 1973,
-     1974, 1974, 1974, 3645, 3646, 1964, 1975, 1975, 1975, 3647,
-     1975, 3648, 3649, 1975, 1973, 3651, 3652, 1974, 3653, 1965,
-     1977, 1977, 1977, 1979, 1979, 1979, 3650, 1979, 3654, 3655,
+     1937, 1937, 3570, 3574, 1917, 3575, 3577, 1934, 3579, 1935,
+     1918, 3580, 3581, 1936, 1938, 1938, 1938, 1937, 1939, 1939,
+     1939, 3551, 1927, 1940, 1940, 1940, 1941, 1941, 1941, 1942,
+     1942, 1942, 1938, 3551, 3582, 1939, 3583, 1931, 1934, 3584,
+     1940, 1943, 1943, 1943, 1941, 3585, 1942, 1944, 1944, 1944,
+     1945, 1945, 1945, 3586, 1945, 3587, 3590, 1945, 1943, 1946,
+     1946, 1946, 3588, 3591, 1944, 1937, 1947, 1947, 1947, 1948,
+     1948, 1948, 1950, 1950, 1950, 3592, 1946, 1951, 1951, 1951,
+     1938, 1949, 1949, 1949, 1947, 1949, 1948, 3588, 1949, 1950,
+
+     3593, 3594, 1941, 3595, 1951, 1952, 1952, 1952, 3596, 1952,
+     1943, 3597, 1952, 1955, 1955, 1955, 1956, 1956, 1956, 1957,
+     1957, 1957, 1958, 1958, 1958, 1959, 1959, 1959, 3600, 3601,
+     1955, 3602, 3603, 1956, 3604, 3605, 1957, 1947, 3606, 1958,
+     3607, 3608, 1959, 1960, 1960, 1960, 1961, 1961, 1961, 1962,
+     1962, 1962, 1951, 1962, 3609, 3612, 1962, 1963, 1963, 1963,
+     1960, 3613, 3614, 1961, 3615, 3616, 1956, 1964, 1964, 1964,
+     3617, 3620, 1959, 3621, 1963, 1965, 1965, 1965, 1955, 3622,
+     3623, 1958, 3624, 3625, 1964, 1966, 1966, 1966, 1967, 1967,
+     1967, 3626, 1965, 3627, 1970, 1970, 1970, 1960, 1970, 3628,
+
+     3629, 1970, 3630, 1966, 3631, 3632, 1967, 1973, 1973, 1973,
+     1974, 1974, 1974, 3633, 3634, 1964, 1975, 1975, 1975, 3635,
+     1975, 3630, 3636, 1975, 1973, 3637, 3638, 1974, 3639, 1965,
+     1977, 1977, 1977, 1979, 1979, 1979, 3640, 1979, 3641, 3642,
      1979, 1982, 1982, 1982, 1967, 1986, 1986, 1986, 1977, 1983,
-     1983, 1983, 1966, 1983, 3656, 3650, 1983, 3657, 3658, 1982,
+     1983, 1983, 1966, 1983, 3643, 3644, 1983, 3645, 3646, 1982,
      1991, 1991, 1991, 1986, 1993, 1993, 1993, 1994, 1994, 1994,
-     1995, 1995, 1995, 3659, 1995, 3356, 3660, 1995, 1991, 1996,
-     1996, 1996, 1993, 3661, 1994, 1997, 1997, 1997, 1982, 1997,
-     3662, 3356, 1997, 3356, 2001, 2001, 2001, 1996, 2003, 2003,
-
-     2003, 2004, 2004, 2004, 3663, 2004, 3356, 3664, 2004, 3665,
-     3666, 1993, 2001, 1986, 3667, 2003, 2005, 2005, 2005, 2007,
-     2007, 2007, 2008, 2008, 2008, 3668, 2008, 3669, 3670, 2008,
-     2010, 2010, 2010, 2005, 3671, 3672, 2007, 3673, 1996, 2013,
+     1995, 1995, 1995, 3647, 1995, 3336, 3648, 1995, 1991, 1996,
+     1996, 1996, 1993, 3649, 1994, 1997, 1997, 1997, 1982, 1997,
+     3650, 3336, 1997, 3336, 2001, 2001, 2001, 1996, 2003, 2003,
+
+     2003, 2004, 2004, 2004, 3651, 2004, 3336, 3652, 2004, 3653,
+     3654, 1993, 2001, 1986, 3657, 2003, 2005, 2005, 2005, 2007,
+     2007, 2007, 2008, 2008, 2008, 3658, 2008, 3659, 3660, 2008,
+     2010, 2010, 2010, 2005, 3661, 3662, 2007, 3663, 1996, 2013,
      2013, 2013, 2014, 2014, 2014, 2019, 2019, 2019, 2010, 2019,
-     3674, 3677, 2019, 2025, 2025, 2025, 3678, 2013, 2026, 2026,
-     2026, 2001, 2027, 2027, 2027, 3679, 2027, 3680, 3681, 2027,
-     3682, 2025, 2028, 2028, 2028, 2026, 2030, 2030, 2030, 3683,
-     2030, 3684, 3686, 2030, 2034, 2034, 2034, 3687, 2034, 3685,
+     3664, 3666, 2019, 2025, 2025, 2025, 3667, 2013, 2026, 2026,
+     2026, 2001, 2027, 2027, 2027, 3669, 2027, 3665, 3670, 2027,
+     3671, 2025, 2028, 2028, 2028, 2026, 2030, 2030, 2030, 3673,
+     2030, 3674, 3675, 2030, 2034, 2034, 2034, 3665, 2034, 3676,
      2028, 2034, 2013, 2038, 2038, 2038, 2040, 2040, 2040, 2042,
 
-     2042, 2042, 2043, 2043, 2043, 2025, 2044, 2044, 2044, 3685,
-     3689, 2038, 3690, 3691, 2040, 3420, 3693, 2042, 3694, 2043,
+     2042, 2042, 2043, 2043, 2043, 2025, 2044, 2044, 2044, 3677,
+     3678, 2038, 3679, 3680, 2040, 3400, 3681, 2042, 3682, 2043,
      2045, 2045, 2045, 2044, 2046, 2046, 2046, 2048, 2048, 2048,
-     3695, 2049, 2049, 2049, 3420, 2049, 3420, 2045, 2049, 2050,
-     2050, 2050, 2046, 2050, 2048, 3696, 2050, 3697, 2040, 3420,
-     3698, 2042, 2053, 2053, 2053, 2038, 2055, 2055, 2055, 3699,
-     2055, 3700, 3701, 2055, 2060, 2060, 2060, 2062, 2062, 2062,
-     2053, 2062, 2046, 2044, 2062, 2065, 2065, 2065, 3702, 2066,
-     2066, 2066, 2060, 2066, 3703, 3704, 2066, 2067, 2067, 2067,
-     3705, 3706, 2065, 2069, 2069, 2069, 2070, 2070, 2070, 3707,
-
-     2053, 2071, 2071, 2071, 3708, 2067, 2072, 2072, 2072, 3709,
-     3710, 2069, 3711, 2070, 3713, 3714, 2060, 3715, 2071, 2073,
-     2073, 2073, 3717, 2072, 2078, 2078, 2078, 2080, 2080, 2080,
-     2086, 2086, 2086, 2091, 2091, 2091, 3719, 2073, 3720, 2067,
-     3722, 2078, 2094, 2094, 2094, 2095, 2095, 2095, 2096, 2096,
-     2096, 2098, 2098, 2098, 3723, 2073, 2108, 2108, 2108, 2109,
+     3683, 2049, 2049, 2049, 3400, 2049, 3400, 2045, 2049, 2050,
+     2050, 2050, 2046, 2050, 2048, 3684, 2050, 3685, 2040, 3400,
+     3686, 2042, 2053, 2053, 2053, 2038, 2055, 2055, 2055, 3687,
+     2055, 3688, 3689, 2055, 2060, 2060, 2060, 2062, 2062, 2062,
+     2053, 2062, 2046, 2044, 2062, 2065, 2065, 2065, 3690, 2066,
+     2066, 2066, 2060, 2066, 3691, 3693, 2066, 2067, 2067, 2067,
+     3694, 3695, 2065, 2069, 2069, 2069, 2070, 2070, 2070, 3697,
+
+     2053, 2071, 2071, 2071, 3698, 2067, 2072, 2072, 2072, 3699,
+     3698, 2069, 3700, 2070, 3702, 3703, 2060, 3705, 2071, 2073,
+     2073, 2073, 3706, 2072, 2078, 2078, 2078, 2080, 2080, 2080,
+     2086, 2086, 2086, 2091, 2091, 2091, 3707, 2073, 3708, 2067,
+     3709, 2078, 2094, 2094, 2094, 2095, 2095, 2095, 2096, 2096,
+     2096, 2098, 2098, 2098, 3710, 2073, 2108, 2108, 2108, 2109,
      2109, 2109, 2111, 2111, 2111, 2114, 2114, 2114, 2115, 2115,
-     2115, 2072, 2115, 3725, 3726, 2115, 2116, 2116, 2116, 2117,
-     2117, 2117, 2114, 2117, 3727, 3728, 2117, 2119, 2119, 2119,
-     2125, 2125, 2125, 2116, 2127, 2127, 2127, 3729, 2127, 3730,
-
-     3718, 2127, 2132, 2132, 2132, 2119, 3718, 3732, 2125, 2130,
-     2130, 2130, 2133, 2133, 2133, 2134, 2134, 2134, 3733, 2132,
-     3735, 2135, 2135, 2135, 3736, 2135, 3738, 2130, 2135, 3739,
-     2133, 3741, 2134, 2136, 2136, 2136, 2137, 2137, 2137, 3742,
-     2137, 3744, 3745, 2137, 2138, 2138, 2138, 2139, 2139, 2139,
-     2136, 2140, 2140, 2140, 2119, 3748, 2141, 2141, 2141, 3747,
-     2141, 2130, 2138, 2141, 3750, 2139, 3752, 3753, 2140, 2142,
-     2142, 2142, 3754, 3747, 2133, 2143, 2143, 2143, 3755, 2143,
-     3757, 3759, 2143, 2144, 2144, 2144, 2142, 2145, 2145, 2145,
-     2146, 2146, 2146, 3761, 2146, 3763, 3764, 2146, 2147, 2147,
-
-     2147, 2144, 3766, 3769, 2145, 2148, 2148, 2148, 3770, 2148,
-     2138, 3771, 2148, 2139, 3772, 2147, 2151, 2151, 2151, 2152,
-     2152, 2152, 3773, 2152, 3774, 3775, 2152, 2153, 2153, 2153,
-     2154, 2154, 2154, 2151, 2154, 3776, 3777, 2154, 2157, 2157,
-     2157, 2162, 2162, 2162, 3778, 2153, 2158, 2158, 2158, 2144,
-     2158, 3779, 3780, 2158, 3784, 2157, 3786, 3423, 2162, 2163,
-     2163, 2163, 3788, 2163, 3789, 3790, 2163, 2164, 2164, 2164,
-     2167, 2167, 2167, 3423, 2167, 3423, 3791, 2167, 1511, 2153,
-     2170, 2170, 2170, 3810, 2164, 2171, 2171, 2171, 3423, 2171,
-     3794, 3810, 2171, 2174, 2174, 2174, 3811, 2170, 2175, 2175,
-
-     2175, 2178, 2178, 2178, 3811, 2179, 2179, 2179, 3802, 2179,
-     3795, 2174, 2179, 2180, 2180, 2180, 2175, 2180, 2178, 3806,
-     2180, 2184, 2184, 2184, 2186, 2186, 2186, 3794, 2187, 2187,
-     2187, 2188, 2188, 2188, 2190, 2190, 2190, 3803, 1506, 2184,
-     2193, 2193, 2193, 3807, 1505, 2174, 2187, 3795, 3804, 2188,
-     3805, 2190, 2175, 2196, 2196, 2196, 3826, 3802, 2193, 2197,
-     2197, 2197, 3812, 2197, 3806, 3814, 2197, 2200, 2200, 2200,
-     3812, 2196, 2202, 2202, 2202, 3808, 2204, 2204, 2204, 3808,
-     2204, 2190, 2188, 2204, 1499, 2200, 3803, 2187, 3807, 3826,
-     2202, 2207, 2207, 2207, 2208, 2208, 2208, 3804, 2208, 3805,
-
-     3809, 2208, 3813, 2196, 3809, 2210, 2210, 2210, 2207, 2210,
-     3813, 3832, 2210, 3814, 2200, 2214, 2214, 2214, 2217, 2217,
+     2115, 2072, 2115, 3712, 3713, 2115, 2116, 2116, 2116, 2117,
+     2117, 2117, 2114, 2117, 3715, 3716, 2117, 2119, 2119, 2119,
+     2125, 2125, 2125, 2116, 2127, 2127, 2127, 3718, 2127, 3719,
+
+     3721, 2127, 2132, 2132, 2132, 2119, 3722, 3724, 2125, 2130,
+     2130, 2130, 2133, 2133, 2133, 2134, 2134, 2134, 3725, 2132,
+     3728, 2135, 2135, 2135, 3730, 2135, 3732, 2130, 2135, 3733,
+     2133, 3734, 2134, 2136, 2136, 2136, 2137, 2137, 2137, 3735,
+     2137, 3727, 3737, 2137, 2138, 2138, 2138, 2139, 2139, 2139,
+     2136, 2140, 2140, 2140, 2119, 3727, 2141, 2141, 2141, 3739,
+     2141, 2130, 2138, 2141, 3741, 2139, 3743, 3744, 2140, 2142,
+     2142, 2142, 3746, 3749, 2133, 2143, 2143, 2143, 3750, 2143,
+     3751, 3752, 2143, 2144, 2144, 2144, 2142, 2145, 2145, 2145,
+     2146, 2146, 2146, 3753, 2146, 3754, 3755, 2146, 2147, 2147,
+
+     2147, 2144, 3756, 3757, 2145, 2148, 2148, 2148, 3758, 2148,
+     2138, 3759, 2148, 2139, 3760, 2147, 2151, 2151, 2151, 2152,
+     2152, 2152, 3764, 2152, 3766, 3768, 2152, 2153, 2153, 2153,
+     2154, 2154, 2154, 2151, 2154, 3769, 3770, 2154, 2157, 2157,
+     2157, 2162, 2162, 2162, 3771, 2153, 2158, 2158, 2158, 2144,
+     2158, 3786, 3788, 2158, 3774, 2157, 3788, 3403, 2162, 2163,
+     2163, 2163, 3798, 2163, 3880, 3787, 2163, 2164, 2164, 2164,
+     2167, 2167, 2167, 3403, 2167, 3403, 1511, 2167, 3880, 2153,
+     2170, 2170, 2170, 3800, 2164, 2171, 2171, 2171, 3403, 2171,
+     3775, 3774, 2171, 2174, 2174, 2174, 3786, 2170, 2175, 2175,
+
+     2175, 2178, 2178, 2178, 3798, 2179, 2179, 2179, 3782, 2179,
+     3787, 2174, 2179, 2180, 2180, 2180, 2175, 2180, 2178, 3800,
+     2180, 2184, 2184, 2184, 2186, 2186, 2186, 3775, 2187, 2187,
+     2187, 2188, 2188, 2188, 2190, 2190, 2190, 3783, 1506, 2184,
+     2193, 2193, 2193, 3789, 1505, 2174, 2187, 3789, 3784, 2188,
+     3785, 2190, 2175, 2196, 2196, 2196, 3790, 3782, 2193, 2197,
+     2197, 2197, 3791, 2197, 3790, 3794, 2197, 2200, 2200, 2200,
+     3791, 2196, 2202, 2202, 2202, 3801, 2204, 2204, 2204, 3808,
+     2204, 2190, 2188, 2204, 1499, 2200, 3783, 2187, 3808, 1498,
+     2202, 2207, 2207, 2207, 2208, 2208, 2208, 3784, 2208, 3785,
+
+     3826, 2208, 3792, 2196, 3799, 2210, 2210, 2210, 2207, 2210,
+     3792, 3801, 2210, 3794, 2200, 2214, 2214, 2214, 2217, 2217,
      2217, 2218, 2218, 2218, 2219, 2219, 2219, 2220, 2220, 2220,
-     2222, 2222, 2222, 2214, 3816, 2217, 2227, 2227, 2227, 2218,
-     2228, 2228, 2228, 3818, 2228, 3852, 3832, 2228, 2231, 2231,
+     2222, 2222, 2222, 2214, 3806, 2217, 2227, 2227, 2227, 2218,
+     2228, 2228, 2228, 3826, 2228, 3832, 3799, 2228, 2231, 2231,
      2231, 2234, 2234, 2234, 2227, 2236, 2236, 2236, 2238, 2238,
-     2238, 2240, 2240, 2240, 3819, 3817, 2231, 3827, 2234, 2241,
-     2241, 2241, 3816, 2236, 3815, 3852, 2238, 3822, 3823, 2240,
-     2242, 2242, 2242, 2218, 2242, 3818, 2241, 2242, 2243, 2243,
-     2243, 2244, 2244, 2244, 2245, 2245, 2245, 3820, 2245, 3833,
-
-     3827, 2245, 2227, 3817, 1498, 2243, 3819, 3824, 2244, 2246,
-     2246, 2246, 2247, 2247, 2247, 2236, 2248, 2248, 2248, 3821,
-     2248, 3830, 3815, 2248, 3822, 3823, 2240, 2246, 1497, 2247,
-     2251, 2251, 2251, 3820, 3833, 2243, 2255, 2255, 2255, 2256,
-     2256, 2256, 2265, 2265, 2265, 3824, 2265, 3825, 2251, 2265,
-     2268, 2268, 2268, 3846, 2255, 3821, 2256, 3830, 3828, 2247,
-     2269, 2269, 2269, 2246, 2270, 2270, 2270, 3828, 2268, 2272,
-     2272, 2272, 2273, 2273, 2273, 3831, 2273, 2269, 3838, 2273,
-     3874, 3829, 2270, 3844, 2251, 3825, 2272, 2274, 2274, 2274,
-     3829, 2275, 2275, 2275, 3842, 2275, 3846, 2268, 2275, 2277,
-
-     2277, 2277, 1496, 3842, 2274, 2281, 2281, 2281, 2282, 2282,
-     2282, 3831, 2282, 3874, 3838, 2282, 3834, 2277, 2283, 2283,
-     2283, 3844, 2281, 2289, 2289, 2289, 2290, 2290, 2290, 2291,
-     2291, 2291, 2293, 2293, 2293, 2297, 2297, 2297, 2298, 2298,
-     2298, 2299, 2299, 2299, 2300, 2300, 2300, 2303, 2303, 2303,
-     2308, 2308, 2308, 2309, 2309, 2309, 2311, 2311, 2311, 3835,
-     3834, 2277, 2312, 2312, 2312, 2313, 2313, 2313, 2316, 2316,
-     2316, 3847, 2316, 1485, 3839, 2316, 2319, 2319, 2319, 3901,
-     2319, 3840, 3836, 2319, 2323, 2323, 2323, 2325, 2325, 2325,
-     3901, 2300, 2326, 2326, 2326, 3862, 2327, 2327, 2327, 2328,
-
-     2328, 2328, 2323, 3835, 2325, 2329, 2329, 2329, 3845, 2326,
-     3839, 3837, 2313, 2327, 3847, 3840, 2328, 2332, 2332, 2332,
-     2334, 2334, 2334, 2329, 2335, 2335, 2335, 3848, 2335, 3836,
-     3850, 2335, 2336, 2336, 2336, 2332, 2323, 2334, 2337, 2337,
-     2337, 3853, 2337, 3862, 2326, 2337, 3845, 2340, 2340, 2340,
-     2336, 2340, 3841, 3849, 2340, 2343, 2343, 2343, 3837, 2328,
-     1474, 2327, 2344, 2344, 2344, 2345, 2345, 2345, 3850, 2345,
-     1469, 3853, 2345, 2343, 3848, 2343, 2476, 2476, 2332, 2476,
-     2344, 2348, 2348, 2348, 3851, 2348, 3841, 2476, 2348, 2351,
-     2351, 2351, 3843, 2336, 2476, 2352, 2352, 2352, 2344, 2352,
-
-     3849, 3843, 2352, 2355, 2355, 2355, 3858, 2351, 2356, 2356,
-     2356, 1468, 2356, 1467, 3854, 2356, 3856, 2357, 2357, 2357,
-     2355, 2357, 3851, 3854, 2357, 2360, 2360, 2360, 2361, 2361,
-     2361, 3855, 2361, 2351, 3860, 2361, 1463, 2367, 2367, 2367,
-     3855, 2367, 3860, 2360, 2367, 2370, 2370, 2370, 2371, 2371,
-     2371, 3856, 2371, 3858, 3863, 2371, 2374, 2374, 2374, 3859,
-     2374, 3857, 2370, 2374, 2378, 2378, 2378, 2379, 2379, 2379,
-     2380, 2380, 2380, 2383, 2383, 2383, 3864, 2383, 3861, 3868,
-     2383, 2378, 2387, 2387, 2387, 2379, 3861, 3878, 2380, 2388,
-     2388, 2388, 2360, 2390, 2390, 2390, 3857, 2391, 2391, 2391,
-
-     2387, 2391, 3863, 3869, 2391, 1462, 3859, 2388, 3866, 3867,
-     2390, 2396, 2396, 2396, 3864, 3868, 2397, 2397, 2397, 2399,
-     2399, 2399, 1445, 2402, 2402, 2402, 1440, 2402, 3876, 2396,
-     2402, 3865, 2379, 1439, 2397, 3878, 3876, 2399, 2387, 3869,
-     3870, 2388, 2408, 2408, 2408, 2409, 2409, 2409, 3896, 2409,
-     3866, 3867, 2409, 2410, 2410, 2410, 2411, 2411, 2411, 2408,
-     2412, 2412, 2412, 2413, 2413, 2413, 2414, 2414, 2414, 3865,
-     3871, 2410, 2415, 2415, 2415, 2416, 2416, 2416, 2396, 2397,
-     2418, 2418, 2418, 2414, 2417, 2417, 2417, 3870, 3877, 2415,
-     3875, 3879, 2416, 2420, 2420, 2420, 3877, 3896, 2418, 3892,
-
-     3872, 2417, 2421, 2421, 2421, 3882, 2421, 3883, 3892, 2421,
-     2420, 2423, 2423, 2423, 2425, 2425, 2425, 3871, 2410, 2428,
-     2428, 2428, 3884, 3875, 2415, 1438, 2429, 2429, 2429, 2423,
-     2429, 3873, 2425, 2429, 2432, 2432, 2432, 2428, 3872, 3879,
-     2416, 2433, 2433, 2433, 2417, 2433, 2418, 3882, 2433, 3883,
-     1433, 2432, 2435, 2435, 2435, 3880, 2435, 3890, 3884, 2435,
-     2438, 2438, 2438, 2439, 2439, 2439, 2440, 2440, 2440, 3873,
-     2440, 1432, 3881, 2440, 2442, 2442, 2442, 3886, 2438, 3885,
-     2439, 2446, 2446, 2446, 2448, 2448, 2448, 2449, 2449, 2449,
-     3890, 2449, 2442, 3880, 2449, 2460, 2460, 2460, 1419, 2446,
-
-     3887, 2448, 2461, 2461, 2461, 1418, 1417, 2462, 2462, 2462,
-     3881, 2462, 2438, 2460, 2462, 3885, 2463, 2463, 2463, 2461,
-     2463, 3891, 3894, 2463, 3886, 1416, 2442, 2466, 2466, 2466,
-     1415, 2466, 3893, 1414, 2466, 2470, 2470, 2470, 2471, 2471,
-     2471, 3893, 2474, 2474, 2474, 2460, 2474, 3887, 1413, 2474,
-     2477, 2477, 2477, 2470, 3891, 3894, 2471, 2478, 2478, 2478,
-     2479, 2479, 2479, 2483, 2483, 2483, 2484, 2484, 2484, 2486,
-     2486, 2486, 2487, 2487, 2487, 2489, 2489, 2489, 2490, 2490,
-     2490, 2491, 2491, 2491, 2495, 2495, 2495, 2496, 2496, 2496,
-     2500, 2500, 2500, 2501, 2501, 2501, 2503, 2503, 2503, 2504,
-
-     2504, 2504, 1412, 2470, 2509, 2509, 2509, 2510, 2510, 2510,
-     2511, 2511, 2511, 2512, 2512, 2512, 3888, 2512, 1402, 3889,
-     2512, 1401, 2509, 2513, 2513, 2513, 3897, 2511, 2514, 2514,
-     2514, 2515, 2515, 2515, 2516, 2516, 2516, 2517, 2517, 2517,
-     2513, 2518, 2518, 2518, 1400, 2514, 1395, 1394, 2515, 2519,
-     2519, 2519, 3895, 2519, 3888, 2517, 2519, 3889, 2518, 2522,
-     2522, 2522, 1393, 2523, 2523, 2523, 2524, 2524, 2524, 2525,
-     2525, 2525, 2526, 2526, 2526, 3897, 2526, 2522, 1392, 2526,
-     2514, 2523, 3898, 2515, 2524, 3895, 1377, 2525, 2529, 2529,
-     2529, 2533, 2533, 2533, 1376, 2533, 3899, 1359, 2533, 1358,
-
-     2523, 2536, 2536, 2536, 2517, 1351, 2529, 2539, 2539, 2539,
-     1347, 2522, 2540, 2540, 2540, 3898, 2540, 1342, 2536, 2540,
-     2541, 2541, 2541, 1341, 2539, 2542, 2542, 2542, 2524, 3899,
-     1336, 2525, 2547, 2547, 2547, 2548, 2548, 2548, 2541, 2549,
-     2549, 2549, 1335, 2542, 2550, 2550, 2550, 1334, 2550, 1332,
-     2547, 2550, 1331, 2548, 1326, 1323, 2549, 2553, 2553, 2553,
-     2554, 2554, 2554, 2555, 2555, 2555, 2556, 2556, 2556, 2557,
-     2557, 2557, 1322, 1319, 2553, 1318, 1317, 2554, 3900, 1316,
-     2555, 1315, 1314, 2556, 1313, 1312, 2549, 2557, 2558, 2558,
-     2558, 1311, 3900, 2547, 2559, 2559, 2559, 2563, 2563, 2563,
-
-     2564, 2564, 2564, 1310, 2564, 1309, 2558, 2564, 2567, 2567,
-     2567, 2559, 1308, 2553, 1307, 2555, 2568, 2568, 2568, 2569,
-     2569, 2569, 2554, 2571, 2571, 2571, 2567, 2570, 2570, 2570,
-     2557, 2570, 1306, 1305, 2570, 1304, 2569, 2572, 2572, 2572,
-     2571, 2573, 2573, 2573, 2574, 2574, 2574, 2575, 2575, 2575,
-     2579, 2579, 2579, 2558, 2572, 2580, 2580, 2580, 2573, 2576,
-     2576, 2576, 2574, 2576, 2575, 1301, 2576, 2579, 2567, 2584,
-     2584, 2584, 1300, 2580, 2586, 2586, 2586, 1299, 2586, 1298,
-     1297, 2586, 2590, 2590, 2590, 1295, 1294, 2584, 1293, 2572,
-     2591, 2591, 2591, 2573, 2591, 1292, 1291, 2591, 1290, 1289,
-
-     2590, 2595, 2595, 2595, 2599, 2599, 2599, 1288, 2599, 1287,
-     1286, 2599, 2612, 2612, 2612, 2614, 2614, 2579, 2614, 2595,
-     2613, 2613, 2613, 1285, 2613, 1284, 2614, 2613, 2615, 2615,
-     2612, 2615, 1283, 2614, 2617, 2617, 2617, 1282, 1281, 2615,
-     2618, 2618, 2618, 2631, 2631, 2631, 2615, 1275, 2595, 2632,
-     2632, 2632, 2617, 2636, 2636, 2636, 1271, 1268, 2618, 2637,
-     2637, 2637, 2639, 2639, 2639, 2642, 2642, 2642, 2643, 2643,
-     2643, 2647, 2647, 2647, 2612, 2650, 2650, 2650, 2652, 2652,
-     2652, 2654, 2654, 2654, 2655, 2655, 2655, 1267, 2655, 1266,
-     1264, 2655, 2658, 2658, 2658, 1260, 2652, 1251, 2659, 2659,
-
-     2659, 2617, 2659, 2618, 1246, 2659, 2660, 2660, 2660, 2658,
-     2661, 2661, 2661, 2662, 2662, 2662, 2663, 2663, 2663, 2664,
-     2664, 2664, 1245, 2660, 2665, 2665, 2665, 2661, 2665, 1244,
-     1240, 2665, 1239, 1236, 2663, 1232, 2664, 2666, 2666, 2666,
-     2667, 2667, 2667, 2668, 2668, 2668, 2669, 2669, 2669, 2670,
-     2670, 2670, 2676, 2676, 2676, 2666, 1231, 1228, 2667, 1225,
-     1222, 2668, 1221, 1216, 2669, 1208, 1207, 2670, 1206, 2676,
-     2677, 2677, 2677, 1204, 2677, 1200, 1197, 2677, 2680, 2680,
-     2680, 1192, 2680, 1191, 1190, 2680, 2683, 2683, 2683, 2687,
-     2687, 2687, 2688, 2688, 2688, 2689, 2689, 2689, 2691, 2691,
-
-     2691, 2699, 2699, 2699, 2683, 2667, 2687, 2669, 1189, 1188,
-     2688, 2668, 1187, 2689, 1186, 2691, 2692, 2692, 2692, 2699,
-     2692, 1185, 1184, 2692, 2696, 2696, 2696, 2697, 2697, 2697,
-     2698, 2698, 2698, 1181, 2698, 1180, 1177, 2698, 2700, 2700,
-     2700, 2696, 1176, 1172, 2697, 2701, 2701, 2701, 1170, 1167,
-     2688, 2702, 2702, 2702, 1166, 2702, 2700, 1163, 2702, 2705,
-     2705, 2705, 2701, 2706, 2706, 2706, 2707, 2707, 2707, 1156,
-     2708, 2708, 2708, 1153, 2708, 1152, 2705, 2708, 2711, 2711,
-     2711, 2712, 2712, 2712, 2707, 2712, 1151, 1148, 2712, 2713,
-     2713, 2713, 2714, 2714, 2714, 2711, 2715, 2715, 2715, 1147,
-
-     2700, 2717, 2717, 2717, 1143, 1136, 2713, 1132, 1131, 2714,
-     2723, 2723, 2723, 1130, 2715, 2718, 2718, 2718, 2717, 2718,
-     1127, 1126, 2718, 2726, 2726, 2726, 1125, 1118, 2723, 1117,
-     2739, 2739, 2739, 2751, 2751, 2751, 2770, 2770, 2770, 1116,
-     1115, 2726, 2771, 2771, 2771, 2774, 2774, 2774, 2739, 1114,
-     1113, 2751, 2778, 2778, 2778, 2781, 2781, 2781, 2782, 2782,
-     2782, 2783, 2783, 2783, 1112, 2783, 1111, 1110, 2783, 2786,
-     2786, 2786, 2787, 2787, 2787, 2782, 2787, 1106, 1075, 2787,
-     2788, 2788, 2788, 1072, 1069, 2751, 2786, 2790, 2790, 2790,
-     2726, 2739, 2789, 2789, 2789, 1068, 2789, 2788, 1065, 2789,
-
-     2792, 2792, 2792, 1064, 2792, 2790, 1063, 2792, 2795, 2795,
-     2795, 2797, 2797, 2797, 2798, 2798, 2798, 2799, 2799, 2799,
-     2802, 2802, 2802, 2804, 2804, 2804, 2795, 2804, 1062, 2797,
-     2804, 1061, 2798, 1060, 1053, 2799, 1052, 2802, 2816, 2816,
-     2816, 2817, 2817, 2817, 2818, 2818, 2818, 1051, 2818, 1049,
-     1048, 2818, 2819, 2819, 2819, 2816, 1047, 1046, 2817, 2820,
-     2820, 2820, 1045, 2820, 1044, 1043, 2820, 1042, 1041, 2799,
-     2819, 1040, 1039, 2797, 2826, 2826, 2826, 1038, 2827, 2827,
-     2827, 2798, 2827, 1036, 1035, 2827, 2828, 2828, 2828, 1034,
-     2828, 2826, 1033, 2828, 2831, 2831, 2831, 2833, 2833, 2833,
-
-     2834, 2834, 2834, 1032, 2834, 1031, 1030, 2834, 2838, 2838,
-     2838, 1029, 2831, 1028, 1026, 2833, 2839, 2839, 2839, 2840,
-     2840, 2840, 1025, 2840, 1024, 2838, 2840, 2841, 2841, 2841,
-     2843, 2843, 2843, 2839, 2843, 1023, 1022, 2843, 2846, 2846,
-     2846, 1021, 2847, 2847, 2847, 2841, 2847, 1020, 1019, 2847,
-     2848, 2848, 2848, 1018, 1017, 2846, 1013, 2849, 2849, 2849,
-     2833, 2849, 1009, 1008, 2849, 1007, 1006, 2848, 2850, 2850,
-     2850, 1005, 2850, 1001,  999, 2850, 2854, 2854, 2854, 2855,
-     2855, 2855, 2858, 2858, 2858, 2859, 2859, 2859, 2860, 2860,
-     2860,  998,  997, 2854,  996,  995, 2855, 2871, 2871, 2871,
-
-     2858, 2884, 2884, 2884,  994, 2860, 2885, 2885, 2885, 2902,
-     2902, 2902, 2904, 2904, 2904, 2871,  993,  990, 2884, 2908,
-     2908, 2908,  989,  985, 2885, 2912, 2912, 2912, 2913, 2913,
-     2913,  984, 2913,  983,  982, 2913, 2914, 2914, 2914,  979,
-     2914,  978, 2912, 2914, 2917, 2917, 2917,  976, 2917,  974,
-      971, 2917,  970,  969, 2858, 2920, 2920, 2920, 2871, 2921,
-     2921, 2921, 2922, 2922, 2922, 2924, 2924, 2924, 2925, 2925,
-     2925,  968,  966, 2920, 2926, 2926, 2926, 2921, 2926,  963,
-     2922, 2926, 2924,  962,  960, 2925, 2927, 2927, 2927, 2939,
-     2939, 2939, 2940, 2940, 2940,  959, 2940,  956, 2922, 2940,
-
-     2941, 2941, 2941, 2927, 2941,  954, 2939, 2941, 2944, 2944,
-     2944, 2921, 2947, 2947, 2947, 2949, 2949, 2949,  951, 2949,
-      950,  949, 2949, 2920,  948,  945, 2944,  944,  943, 2947,
-     2958, 2958, 2958, 2960, 2960, 2960, 2961, 2961, 2961,  942,
-     2961,  941,  940, 2961,  939, 2962, 2962, 2962, 2958, 2962,
-     2960,  937, 2962, 2965, 2965, 2965,  934, 2965,  933,  929,
-     2965, 2968, 2968, 2968,  928, 2968,  927,  926, 2968, 2978,
-     2978, 2978, 2979, 2979, 2979,  925, 2979,  924,  915, 2979,
-     2980, 2980, 2980, 2981, 2981, 2981, 2978, 2981,  914,  911,
-     2981, 2982, 2982, 2982, 2983, 2983, 2983, 2980, 2984, 2984,
-
-     2984, 2985, 2985, 2985, 2986, 2986, 2986,  910, 2982,  909,
-      908, 2983,  907, 2987, 2987, 2987, 2984, 2987,  905,  904,
-     2987, 2986, 2998, 2998, 2998, 3011, 3011, 3011, 3012, 3012,
-     3012,  903, 3012,  900,  899, 3012, 3013, 3013, 3013,  898,
-     2998,  895, 3011,  894,  890, 3017, 3017, 3017, 3031, 3031,
-     3031, 3033, 3033, 3033, 3013, 3036, 3036, 3036, 3038, 3038,
-     3038, 2984, 3017, 3017, 3040, 3040, 3040,  888, 3040,  885,
-      884, 3040,  883,  882, 2998, 3047, 3047, 3047, 3048, 3048,
-     3048, 3049, 3049, 3049, 3051, 3051, 3051, 3052, 3052, 3052,
-      880, 3052,  877, 3047, 3052,  876, 3048,  875,  874, 3049,
-
-      871, 3051, 3053, 3053, 3053,  868, 3053,  865,  864, 3053,
-     3056, 3056, 3056, 3057, 3057, 3057,  863, 3057,  862,  861,
-     3057, 3069, 3069, 3069,  858, 3069,  855, 3056, 3069, 3073,
-     3073, 3073, 3074, 3074, 3074,  851, 3074,  850,  849, 3074,
-      848,  847, 3047, 3049,  846,  845, 3073, 3082, 3082, 3082,
-     3085, 3085, 3085,  844, 3085,  843,  842, 3085, 3100, 3100,
-     3100,  841, 3101, 3101, 3101, 3082, 3101,  839,  837, 3101,
-     3104, 3104, 3104,  834, 3104, 3100,  833, 3104, 3107, 3107,
-     3107, 3108, 3108, 3108,  832, 3108,  831,  830, 3108, 3109,
-     3109, 3109, 3110, 3110, 3110, 3107, 3110,  829,  824, 3110,
-
-     3111, 3111, 3111, 3112, 3112, 3112, 3109, 3112,  823,  822,
-     3112, 3123, 3123, 3123,  821, 3136, 3136, 3136, 3111, 3136,
-      818,  817, 3136, 3140, 3140, 3140, 3141, 3141, 3141, 3123,
-     3142, 3142, 3142,  816, 3142,  813,  812, 3142,  811,  810,
-     3140, 3140,  807, 3141, 3141, 3155, 3155, 3155, 3142, 3157,
-     3157, 3157, 3111, 3158, 3158, 3158, 3159, 3159, 3159,  806,
-      804, 3123, 3161, 3161, 3161, 3162, 3162, 3162, 3171, 3171,
-     3171, 3172, 3172, 3172, 3174, 3174, 3174, 3176, 3176, 3176,
-      801, 3176,  800,  796, 3176,  795, 3171,  794,  793, 3172,
-      792,  791, 3174, 3179, 3179, 3179,  788, 3179,  787,  786,
-
-     3179, 3182, 3182, 3182, 3193, 3193, 3193, 3194, 3194, 3194,
-      785, 3194,  784,  783, 3194, 3197, 3197, 3197, 3182,  778,
-     3171, 3193, 3217, 3217, 3217,  774, 3218, 3218, 3218,  773,
-     3218,  772, 3197, 3218, 3223, 3223, 3223,  771, 3223, 3217,
-      768, 3223, 3174, 3226, 3226, 3226,  767, 3226,  766,  763,
-     3226, 3229, 3229, 3229, 3238, 3238, 3238, 3256, 3256, 3256,
-     3257, 3257, 3257,  761, 3257,  760,  759, 3257,  756, 3229,
-      755,  754, 3238,  753, 3256, 3256,  749,  748, 3257, 3258,
-     3258, 3258,  747, 3258,  743,  742, 3258, 3269, 3269, 3269,
-     3271, 3271, 3271, 3272, 3272, 3272,  741, 3258, 3274, 3274,
-
-     3274, 3283, 3283, 3283, 3287, 3287, 3287,  740, 3287,  734,
-      733, 3287,  731, 3284, 3284, 3284, 3359, 3359, 3359, 3283,
-      723, 3238, 3259, 3259, 3259, 3259, 3259, 3259, 3259, 3259,
-     3259, 3284,  722, 3259, 3286, 3286, 3286,  718, 3259, 3259,
-     3259, 3259, 3259, 3288, 3288, 3288, 3298, 3298, 3298,  713,
-      709, 3286, 3299, 3299, 3299,  708, 3299,  704,  698, 3299,
-     3288,  697,  696, 3298,  692, 3300, 3300, 3300, 3259, 3259,
-     3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260, 3260,  689,
-     3284, 3260, 3300, 3360, 3360, 3360, 3260, 3260, 3260, 3260,
-     3260, 3301, 3301, 3301,  687, 3301,  686,  685, 3301, 3319,
-
-     3319, 3319,  681, 3319,  677,  673, 3319, 3326, 3326, 3326,
-     3334, 3334, 3334, 3369, 3369, 3369, 3260, 3260,  672, 3348,
-     3348, 3348,  671, 3348,  670, 3326, 3348,  666, 3334,  662,
-      659, 3369,  658, 3376, 3376, 3376,  657, 3348, 3351, 3351,
-     3351, 3351, 3351, 3351, 3351, 3351, 3351,  656,  652, 3351,
-     3376, 3449, 3449, 3449, 3351, 3351, 3351, 3351, 3351, 3371,
-     3371, 3371, 3373, 3373, 3373,  646, 3373,  645,  641, 3373,
-      633, 3377, 3377, 3377,  629, 3377,  622, 3371, 3377,  620,
-     3418, 3418, 3418,  619, 3351, 3351, 3352, 3352, 3352, 3352,
-     3352, 3352, 3352, 3352, 3352,  615,  609, 3352, 3418, 3450,
-
-     3450, 3450, 3352, 3352, 3352, 3352, 3352,  608, 3385, 3385,
-     3385, 3371, 3385,  604,  597, 3385, 3388, 3388, 3388,  596,
-     3388,  595,  594, 3388, 3436, 3436, 3436, 3455, 3455, 3455,
-      593,  589, 3352, 3352, 3456, 3456, 3456, 3461, 3461, 3461,
-      578, 3461, 3436, 3436, 3461, 3455, 3468, 3468, 3468,  574,
-      566, 3456, 3473, 3473, 3473, 3500, 3500, 3500, 3504, 3504,
-     3504,  565,  564, 3468, 3517, 3517, 3517,  563,  562, 3473,
-     3519, 3519, 3519, 3500,  558,  552, 3504, 3520, 3520, 3520,
-      551, 3520, 3517,  547, 3520,  541,  540, 3519, 3531, 3531,
-     3531, 3532, 3532, 3532,  536, 3532,  530,  529, 3532, 3539,
-
-     3539, 3539, 3540, 3540, 3540, 3531, 3540,  525,  521, 3540,
-     3504, 3557, 3557, 3557,  517,  516, 3539, 3569, 3569, 3569,
-      515, 3569,  511,  507, 3569,  503, 3582, 3582, 3582, 3557,
-     3582,  499,  493, 3582, 3591, 3591, 3591,  492, 3591,  491,
-      487, 3591, 3768, 3768, 3768, 3781, 3781, 3781, 3557, 3781,
-      483,  478, 3781, 3902, 3902, 3902, 3903, 3903, 3903,  477,
-     3768,  476,  475, 3781,  471,  467,  464,  460,  456,  453,
-      450, 3902,  448,  447, 3903, 3906, 3906, 3906, 3906, 3906,
-     3906, 3906, 3906, 3906, 3907, 3907, 3907, 3907, 3907, 3907,
-     3907, 3907, 3907, 3908, 3908, 3908, 3908, 3908, 3908, 3908,
-
-     3908, 3908, 3909, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
-     3909, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910,
-     3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3912,
-     3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3913, 3913,
-     3913, 3913, 3913, 3913, 3913, 3913, 3913, 3914, 3914, 3914,
-     3914, 3914, 3914, 3914, 3914, 3914, 3915, 3915, 3915, 3915,
-     3915, 3915, 3915, 3915, 3915, 3916, 3916, 3916, 3916, 3916,
-     3916, 3916, 3916, 3916, 3917, 3917, 3917, 3917, 3917, 3917,
-     3917, 3917, 3917, 3918, 3918, 3918, 3918, 3918, 3918, 3918,
-     3918, 3918, 3919, 3919, 3919, 3919, 3919, 3919, 3919, 3919,
-
-     3919, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
-     3921, 3921, 3921, 3921, 3921, 3921, 3921, 3921, 3921, 3922,
-     3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3923, 3923,
-     3923, 3923, 3923, 3923, 3923, 3923, 3923, 3924, 3924, 3924,
-     3924, 3924, 3924, 3924, 3924, 3924, 3925, 3925, 3925, 3925,
-     3925, 3925, 3925, 3925, 3925, 3926, 3926, 3926, 3926, 3926,
-     3926, 3926, 3926, 3926, 3927, 3927, 3927, 3927, 3927, 3927,
-     3927, 3927, 3927, 3928, 3928, 3928, 3928, 3928, 3928, 3928,
-     3928, 3928, 3929, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
-     3929, 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930,
-
-     3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3932,
-     3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3933, 3933,
-     3933, 3933, 3933, 3933, 3933, 3933, 3933, 3934, 3934, 3934,
-     3934, 3934, 3934, 3934, 3934, 3934, 3935, 3935, 3935, 3935,
-     3935, 3935, 3935, 3935, 3935, 3936, 3936, 3936, 3936, 3936,
-     3936, 3936, 3936, 3936, 3937, 3937, 3937, 3937, 3937, 3937,
-     3937, 3937, 3937, 3938, 3938, 3938, 3938, 3938, 3938, 3938,
-     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, 3945, 3945, 3945, 3945,
-     3945, 3945, 3945, 3945, 3945, 3946, 3946, 3946, 3946, 3946,
-     3946, 3946, 3946, 3946, 3947, 3947, 3947, 3947, 3947, 3947,
-     3947, 3947, 3947, 3948, 3948, 3948, 3948, 3948, 3948, 3948,
-     3948, 3948, 3949, 3949, 3949, 3949, 3949, 3949, 3949, 3949,
-     3949, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950,
-     3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3952,
-     3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3953, 3953,
-
-     3953, 3953, 3953, 3953, 3953, 3953, 3953, 3954, 3954, 3954,
-     3954, 3954, 3954, 3954, 3954, 3954, 3955, 3955, 3955, 3955,
-     3955, 3955, 3955, 3955, 3955, 3956, 3956, 3956, 3956, 3956,
-     3956, 3956, 3956, 3956, 3957, 3957, 3957, 3957, 3957, 3957,
-     3957, 3957, 3957, 3958, 3958, 3958, 3958, 3958, 3958, 3958,
-     3958, 3958, 3959, 3959, 3959, 3959, 3959, 3959, 3959, 3959,
-     3959, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960, 3960,
-     3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3961, 3962,
-     3962, 3962, 3962, 3962, 3962, 3962, 3962, 3962, 3963, 3963,
-     3963, 3963, 3963, 3963, 3963, 3963, 3963, 3964, 3964, 3964,
-
-     3964, 3964, 3964, 3964, 3964, 3964, 3965, 3965, 3965, 3965,
-     3965, 3965, 3965, 3965, 3965, 3966, 3966, 3966, 3966, 3966,
-     3966, 3966, 3966, 3966, 3967, 3967, 3967, 3967, 3967, 3967,
-     3967, 3967, 3967, 3968, 3968, 3968, 3968, 3968, 3968, 3968,
-     3968, 3968, 3969, 3969, 3969, 3969, 3969, 3969, 3969, 3969,
-     3969, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970, 3970,
-     3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3971, 3972,
-     3972, 3972, 3972, 3972, 3972, 3972, 3972, 3972, 3973, 3973,
-     3973, 3973, 3973, 3973, 3973, 3973, 3973, 3974, 3974, 3974,
-     3974, 3974, 3974, 3974, 3974, 3974, 3975, 3975, 3975,  442,
-
-      435,  434, 3975, 3976, 3976, 3976,  433,  432,  431, 3976,
-     3977, 3977, 3977,  427,  420,  419, 3977, 3978, 3978, 3978,
-      418,  414,  407, 3978, 3979, 3979, 3979,  406,  402,  395,
-     3979, 3980, 3980, 3980,  394,  393,  389, 3980, 3981, 3981,
-     3981,  383,  382,  381, 3981, 3982, 3982, 3982,  377,  371,
-      367, 3982, 3983, 3983, 3983,  363,  359,  358, 3983, 3984,
-     3984, 3984,  357,  356,  355, 3984, 3985, 3985, 3985,  351,
-      342,  341, 3985, 3986, 3986, 3986,  337,  333,  329, 3986,
-     3987, 3987, 3987,  325,  324,  320, 3987, 3988, 3988, 3988,
-      317,  316,  315, 3988, 3989, 3989, 3989,  309,  308,  306,
-
-     3989, 3990, 3990, 3990,  303,  291,    0, 3990, 3991, 3991,
-     3991,    0,    0,    0, 3991, 3992, 3992, 3992,    0,    0,
-        0, 3992, 3993, 3993, 3993,    0,    0,    0, 3993, 3994,
-     3994, 3994,    0,    0,    0, 3994, 3995, 3995, 3995,    0,
-        0,    0, 3995, 3996, 3996, 3996,    0,    0,    0, 3996,
-     3997, 3997, 3997,    0,    0,    0, 3997, 3998, 3998, 3998,
-        0,    0,    0, 3998, 3999, 3999, 3999,    0,    0,    0,
-     3999, 4000, 4000, 4000,    0,    0,    0, 4000, 4001, 4001,
-     4001,    0,    0,    0, 4001, 4002, 4002, 4002,    0,    0,
-        0, 4002, 4003, 4003, 4003,    0,    0,    0, 4003, 4004,
-
-     4004, 4004,    0,    0,    0, 4004, 4005, 4005, 4005,    0,
-        0,    0, 4005, 4006, 4006, 4006, 4006, 4006, 4006, 4006,
-        0, 4006, 4007, 4007, 4007,    0,    0,    0, 4007, 4008,
-        0,    0,    0, 4008, 4009, 4009, 4009,    0,    0,    0,
-     4009, 4010,    0,    0,    0, 4010, 4011, 4011, 4011,    0,
-        0,    0, 4011, 4012,    0,    0,    0, 4012, 4013, 4013,
-     4013,    0,    0,    0, 4013, 4014,    0,    0,    0, 4014,
-     4015, 4015, 4015,    0,    0,    0, 4015, 4016,    0,    0,
-        0, 4016, 4017, 4017, 4017,    0,    0,    0, 4017, 4018,
-        0,    0,    0, 4018, 4019, 4019, 4019,    0,    0,    0,
-
-     4019, 4020,    0,    0,    0, 4020, 4021, 4021, 4021,    0,
-        0,    0, 4021, 4022,    0,    0,    0, 4022, 4023, 4023,
-     4023,    0,    0,    0, 4023, 4024,    0,    0,    0, 4024,
-     4025, 4025, 4025,    0,    0,    0, 4025, 4026,    0,    0,
-        0, 4026, 4027, 4027, 4027,    0,    0,    0, 4027, 4028,
-        0,    0,    0, 4028, 4029, 4029, 4029,    0,    0,    0,
-     4029, 4030,    0,    0,    0, 4030, 4031, 4031, 4031,    0,
-        0,    0, 4031, 4032,    0,    0,    0, 4032, 4033, 4033,
-     4033,    0,    0,    0, 4033, 4034,    0,    0,    0, 4034,
-     4035, 4035, 4035,    0,    0,    0, 4035, 4036,    0,    0,
-
-        0, 4036, 4037, 4037, 4037,    0,    0,    0, 4037, 4038,
-        0,    0,    0, 4038, 4039, 4039, 4039,    0,    0,    0,
-     4039, 4040,    0,    0,    0, 4040, 4041, 4041, 4041,    0,
-        0,    0, 4041, 4042,    0,    0,    0, 4042, 4043, 4043,
-     4043,    0,    0,    0, 4043, 4044,    0,    0,    0, 4044,
-     4045, 4045, 4045,    0,    0,    0, 4045, 4046,    0,    0,
-        0, 4046, 4047, 4047, 4047,    0,    0,    0, 4047, 4048,
-        0,    0,    0, 4048, 4049, 4049, 4049,    0,    0,    0,
-     4049, 4050,    0,    0,    0, 4050, 4051, 4051, 4051,    0,
-        0,    0, 4051, 4052,    0,    0,    0, 4052, 4053, 4053,
-
-     4053,    0,    0,    0, 4053, 4054,    0,    0,    0, 4054,
-     4055, 4055, 4055,    0,    0,    0, 4055, 4056,    0,    0,
-        0, 4056, 4057, 4057, 4057,    0,    0,    0, 4057, 4058,
-        0,    0,    0, 4058, 4059, 4059, 4059,    0,    0,    0,
-     4059, 4060,    0,    0,    0, 4060, 4061, 4061, 4061,    0,
-        0,    0, 4061, 4062,    0,    0,    0, 4062, 4063, 4063,
-     4063,    0,    0,    0, 4063, 4064,    0,    0,    0, 4064,
-     4065, 4065, 4065,    0,    0,    0, 4065, 4066,    0,    0,
-        0, 4066, 4067, 4067, 4067,    0,    0,    0, 4067, 4068,
-        0,    0,    0, 4068, 4069, 4069, 4069, 4069, 4069, 4069,
-
-     4069, 4069, 4069, 4070,    0,    0,    0,    0, 4070, 4071,
-     4071, 4071,    0,    0,    0, 4071, 4072, 4072, 4072, 4072,
-        0,    0, 4072, 4072, 4073, 4073, 4073, 4073,    0, 4073,
-        0, 4073, 4074, 4074, 4074, 4074,    0,    0, 4074, 4074,
-     4075, 4075, 4075,    0,    0,    0, 4075, 4076, 4076, 4076,
-     4076,    0,    0, 4076, 4076, 4077, 4077, 4077,    0,    0,
-        0, 4077, 4078, 4078, 4078, 4078,    0,    0, 4078, 4078,
-     4079, 4079, 4079,    0,    0,    0, 4079, 4080, 4080, 4080,
-     4080,    0,    0, 4080, 4080, 4081, 4081, 4081, 4081,    0,
-     4081,    0, 4081, 4082, 4082, 4082, 4082,    0,    0, 4082,
-
-     4082, 4083, 4083, 4083, 4083,    0, 4083,    0, 4083, 4084,
-     4084, 4084, 4084,    0,    0, 4084, 4084, 4085, 4085, 4085,
-     4085,    0, 4085,    0, 4085, 4086, 4086, 4086, 4086,    0,
-        0, 4086, 4086, 4087, 4087, 4087, 4087,    0, 4087,    0,
-     4087, 4088, 4088, 4088, 4088,    0,    0, 4088, 4088, 4089,
-     4089, 4089,    0,    0,    0, 4089, 4090, 4090, 4090, 4090,
-        0,    0, 4090, 4090, 4091, 4091, 4091, 4091,    0,    0,
-     4091, 4091, 4092, 4092, 4092,    0,    0,    0, 4092, 4093,
-     4093, 4093, 4093,    0,    0, 4093, 4093, 4094, 4094, 4094,
-        0,    0,    0, 4094, 4095, 4095, 4095, 4095,    0,    0,
-
-     4095, 4095, 4096, 4096, 4096,    0,    0,    0, 4096, 4097,
-     4097, 4097, 4097,    0,    0, 4097, 4097, 4098, 4098, 4098,
-        0,    0,    0, 4098, 4099, 4099, 4099, 4099,    0,    0,
-     4099, 4099, 4100, 4100, 4100,    0,    0,    0, 4100, 4101,
-     4101, 4101, 4101,    0,    0, 4101, 4101, 4102, 4102, 4102,
-        0,    0,    0, 4102, 4103, 4103, 4103, 4103,    0,    0,
-     4103, 4103, 4104, 4104, 4104,    0,    0,    0, 4104, 4105,
-     4105, 4105, 4105,    0,    0, 4105, 4105, 4106, 4106, 4106,
-        0,    0,    0, 4106, 4107, 4107, 4107, 4107,    0,    0,
-     4107, 4107, 4108, 4108, 4108,    0,    0,    0, 4108, 4109,
-
-     4109, 4109, 4109,    0,    0, 4109, 4109, 4110, 4110, 4110,
-        0,    0,    0, 4110, 4111, 4111, 4111, 4111,    0,    0,
-     4111, 4111, 4112, 4112, 4112,    0,    0,    0, 4112, 4113,
-     4113, 4113, 4113,    0,    0, 4113, 4113, 4114, 4114, 4114,
-        0,    0,    0, 4114, 4115, 4115, 4115, 4115,    0,    0,
-     4115, 4115, 4116, 4116, 4116, 4116,    0, 4116,    0, 4116,
-     4117, 4117, 4117, 4117,    0,    0, 4117, 4117, 4118, 4118,
-     4118,    0,    0,    0, 4118, 4119, 4119, 4119, 4119,    0,
-        0, 4119, 4119, 4120, 4120, 4120,    0,    0,    0, 4120,
-     4121, 4121, 4121, 4121,    0,    0, 4121, 4121, 4122, 4122,
-
-     4122,    0,    0,    0, 4122, 4123, 4123, 4123, 4123,    0,
-        0, 4123, 4123, 4124, 4124, 4124,    0,    0,    0, 4124,
-     4125, 4125, 4125, 4125,    0,    0, 4125, 4125, 4126, 4126,
-     4126,    0,    0,    0, 4126, 4127, 4127, 4127, 4127,    0,
-        0, 4127, 4127, 4128, 4128, 4128,    0,    0,    0, 4128,
-     4129, 4129, 4129, 4129,    0,    0, 4129, 4129, 4130, 4130,
-     4130, 4130,    0, 4130,    0, 4130, 4131, 4131, 4131, 4131,
-        0,    0, 4131, 4131, 4132, 4132, 4132, 4132, 4132, 4132,
-     4132, 4132, 4132, 4133,    0, 4133,    0,    0, 4133, 4134,
-     4134, 4134,    0,    0,    0, 4134, 4135, 4135, 4135, 4135,
-
-        0,    0, 4135, 4135, 4136, 4136, 4136,    0,    0,    0,
-     4136, 4137, 4137, 4137, 4137,    0,    0, 4137, 4137, 4138,
-     4138, 4138,    0,    0,    0, 4138, 4139, 4139, 4139, 4139,
-        0,    0, 4139, 4139, 4140, 4140, 4140,    0,    0,    0,
-     4140, 4141, 4141, 4141, 4141,    0,    0, 4141, 4141, 4142,
-     4142, 4142,    0,    0,    0, 4142, 4143, 4143, 4143, 4143,
-        0,    0, 4143, 4143, 4144, 4144, 4144,    0,    0,    0,
-     4144, 4145, 4145, 4145, 4145,    0,    0, 4145, 4145, 4146,
-     4146, 4146, 4146,    0,    0, 4146, 4146, 4147, 4147, 4147,
-        0,    0,    0, 4147, 4148, 4148, 4148, 4148,    0,    0,
-
-     4148, 4148, 4149, 4149, 4149,    0,    0,    0, 4149, 4150,
-     4150, 4150, 4150,    0,    0, 4150, 4150, 4151, 4151, 4151,
-        0,    0,    0, 4151, 4152, 4152, 4152, 4152,    0,    0,
-     4152, 4152, 4153, 4153, 4153, 4153,    0,    0, 4153, 4153,
-     4154, 4154, 4154,    0,    0,    0, 4154, 4155, 4155, 4155,
-     4155,    0,    0, 4155, 4155, 4156, 4156, 4156, 4156,    0,
-     4156,    0, 4156, 4157, 4157, 4157, 4157,    0,    0, 4157,
-     4157, 4158, 4158, 4158, 4158,    0, 4158,    0, 4158, 4159,
-     4159, 4159, 4159,    0,    0, 4159, 4159, 4160, 4160, 4160,
-        0,    0,    0, 4160, 4161, 4161, 4161, 4161,    0,    0,
-
-     4161, 4161, 4162, 4162, 4162,    0,    0,    0, 4162, 4163,
-     4163, 4163, 4163,    0,    0, 4163, 4163, 4164, 4164, 4164,
-        0,    0,    0, 4164, 4165, 4165, 4165, 4165,    0,    0,
-     4165, 4165, 4166, 4166, 4166, 4166,    0, 4166,    0, 4166,
-     4167, 4167, 4167, 4167,    0,    0, 4167, 4167, 4168, 4168,
-     4168,    0,    0,    0, 4168, 4169, 4169, 4169, 4169,    0,
-        0, 4169, 4169, 4170, 4170, 4170,    0,    0,    0, 4170,
-     4171, 4171, 4171, 4171,    0,    0, 4171, 4171, 4172, 4172,
-     4172,    0,    0,    0, 4172, 4173, 4173, 4173, 4173,    0,
-        0, 4173, 4173, 4174, 4174, 4174,    0,    0,    0, 4174,
-
-     4175, 4175, 4175, 4175,    0,    0, 4175, 4175, 4176, 4176,
-     4176,    0,    0,    0, 4176, 4177, 4177, 4177, 4177,    0,
-        0, 4177, 4177, 4178, 4178, 4178,    0,    0,    0, 4178,
-     4179, 4179, 4179, 4179,    0,    0, 4179, 4179, 4180, 4180,
-     4180,    0,    0,    0, 4180, 4181, 4181, 4181, 4181,    0,
-        0, 4181, 4181, 4182, 4182, 4182,    0,    0,    0, 4182,
-     4183, 4183, 4183, 4183,    0,    0, 4183, 4183, 4184, 4184,
-     4184,    0,    0,    0, 4184, 4185, 4185, 4185, 4185,    0,
-        0, 4185, 4185, 4186, 4186, 4186, 4186,    0, 4186,    0,
-     4186, 4187, 4187, 4187, 4187,    0,    0, 4187, 4187, 4188,
-
-     4188, 4188,    0,    0,    0, 4188, 4189, 4189, 4189, 4189,
-        0,    0, 4189, 4189, 4190, 4190, 4190,    0,    0,    0,
-     4190, 4191, 4191, 4191, 4191,    0,    0, 4191, 4191, 4192,
-     4192, 4192,    0,    0,    0, 4192, 4193, 4193, 4193, 4193,
-        0,    0, 4193, 4193, 4194, 4194, 4194, 4194, 4194, 4194,
-     4194, 4194, 4194, 4195, 4195, 4195, 4195, 4195, 4195, 4195,
-     4195, 4195, 4196, 4196, 4196,    0,    0,    0, 4196, 4197,
-     4197, 4197,    0,    0,    0, 4197, 4198, 4198, 4198, 4198,
-        0,    0, 4198, 4198, 4199, 4199, 4199,    0,    0,    0,
-     4199, 4200, 4200, 4200, 4200,    0,    0, 4200, 4200, 4201,
-
-     4201, 4201, 4201,    0, 4201,    0, 4201, 4202, 4202, 4202,
-     4202,    0,    0, 4202, 4202, 4203, 4203, 4203,    0,    0,
-        0, 4203, 4204, 4204, 4204, 4204,    0,    0, 4204, 4204,
-     4205, 4205, 4205,    0,    0,    0, 4205, 4206, 4206, 4206,
-     4206,    0,    0, 4206, 4206, 4207, 4207, 4207, 4207,    0,
-        0, 4207, 4207, 4208, 4208, 4208,    0,    0,    0, 4208,
-     4209, 4209, 4209, 4209,    0,    0, 4209, 4209, 4210, 4210,
-     4210,    0,    0,    0, 4210, 4211, 4211, 4211, 4211,    0,
-        0, 4211, 4211, 4212, 4212, 4212, 4212,    0, 4212,    0,
-     4212, 4213, 4213, 4213, 4213,    0,    0, 4213, 4213, 4214,
-
-     4214, 4214, 4214,    0,    0, 4214, 4214, 4215, 4215, 4215,
-        0,    0,    0, 4215, 4216, 4216, 4216, 4216,    0,    0,
-     4216, 4216, 4217, 4217, 4217, 4217,    0,    0, 4217, 4217,
-     4218, 4218, 4218, 4218,    0,    0, 4218, 4218, 4219, 4219,
-     4219,    0,    0,    0, 4219, 4220, 4220, 4220, 4220,    0,
-        0, 4220, 4220, 4221, 4221, 4221,    0,    0,    0, 4221,
-     4222, 4222, 4222, 4222,    0,    0, 4222, 4222, 4223, 4223,
-     4223, 4223,    0, 4223,    0, 4223, 4224, 4224, 4224, 4224,
-        0,    0, 4224, 4224, 4225, 4225, 4225,    0,    0,    0,
-     4225, 4226, 4226, 4226, 4226,    0,    0, 4226, 4226, 4227,
-
-     4227, 4227,    0,    0,    0, 4227, 4228, 4228, 4228, 4228,
-        0,    0, 4228, 4228, 4229, 4229, 4229,    0,    0,    0,
-     4229, 4230, 4230, 4230, 4230,    0,    0, 4230, 4230, 4231,
-     4231, 4231,    0,    0,    0, 4231, 4232, 4232, 4232, 4232,
-        0,    0, 4232, 4232, 4233, 4233, 4233, 4233,    0, 4233,
-        0, 4233, 4234, 4234, 4234, 4234,    0,    0, 4234, 4234,
-     4235, 4235, 4235,    0,    0,    0, 4235, 4236, 4236, 4236,
-     4236,    0,    0, 4236, 4236, 4237, 4237, 4237,    0,    0,
-        0, 4237, 4238, 4238, 4238, 4238,    0,    0, 4238, 4238,
-     4239, 4239, 4239,    0,    0,    0, 4239, 4240, 4240, 4240,
-
-     4240,    0,    0, 4240, 4240, 4241, 4241, 4241,    0,    0,
-        0, 4241, 4242, 4242, 4242, 4242,    0,    0, 4242, 4242,
-     4243, 4243, 4243,    0,    0,    0, 4243, 4244, 4244, 4244,
-     4244,    0,    0, 4244, 4244, 4245, 4245, 4245,    0,    0,
-        0, 4245, 4246, 4246, 4246, 4246,    0,    0, 4246, 4246,
-     4247, 4247, 4247,    0,    0,    0, 4247, 4248, 4248, 4248,
-     4248,    0,    0, 4248, 4248, 4249, 4249, 4249,    0,    0,
-        0, 4249, 4250, 4250, 4250, 4250,    0,    0, 4250, 4250,
-     4251, 4251, 4251,    0,    0,    0, 4251, 4252, 4252, 4252,
-     4252,    0,    0, 4252, 4252, 4253, 4253, 4253, 4253, 4253,
-
-     4253, 4253, 4253, 4253, 4254, 4254, 4254, 4254, 4254, 4254,
-     4254, 4254, 4254, 4255, 4255, 4255,    0,    0,    0, 4255,
-     4256, 4256, 4256, 4256,    0, 4256,    0, 4256, 4257, 4257,
-     4257, 4257,    0,    0, 4257, 4257, 4258, 4258, 4258,    0,
-        0,    0, 4258, 4259, 4259, 4259, 4259,    0,    0, 4259,
-     4259, 4260, 4260, 4260, 4260,    0,    0, 4260, 4260, 4261,
-     4261, 4261,    0,    0,    0, 4261, 4262, 4262, 4262, 4262,
-        0,    0, 4262, 4262, 4263, 4263, 4263, 4263,    0, 4263,
-        0, 4263, 4264, 4264, 4264, 4264,    0,    0, 4264, 4264,
-     4265, 4265, 4265, 4265,    0,    0, 4265, 4265, 4266, 4266,
-
-     4266, 4266,    0, 4266,    0, 4266, 4267, 4267, 4267, 4267,
-        0,    0, 4267, 4267, 4268, 4268, 4268, 4268,    0, 4268,
-        0, 4268, 4269, 4269, 4269, 4269,    0,    0, 4269, 4269,
-     4270, 4270, 4270, 4270,    0, 4270,    0, 4270, 4271, 4271,
-     4271, 4271,    0,    0, 4271, 4271, 4272, 4272, 4272, 4272,
-        0,    0, 4272, 4272, 4273, 4273, 4273,    0,    0,    0,
-     4273, 4274, 4274, 4274, 4274,    0,    0, 4274, 4274, 4275,
-     4275, 4275, 4275,    0,    0, 4275, 4275, 4276, 4276, 4276,
-     4276,    0,    0, 4276, 4276, 4277, 4277, 4277,    0,    0,
-        0, 4277, 4278, 4278, 4278, 4278,    0,    0, 4278, 4278,
-
-     4279, 4279, 4279,    0,    0,    0, 4279, 4280, 4280, 4280,
-     4280,    0,    0, 4280, 4280, 4281, 4281, 4281, 4281,    0,
-        0, 4281, 4281, 4282, 4282, 4282,    0,    0,    0, 4282,
-     4283, 4283, 4283, 4283,    0,    0, 4283, 4283, 4284, 4284,
-     4284,    0,    0,    0, 4284, 4285, 4285, 4285, 4285,    0,
-        0, 4285, 4285, 4286, 4286, 4286,    0,    0,    0, 4286,
-     4287, 4287, 4287, 4287,    0,    0, 4287, 4287, 4288, 4288,
-     4288,    0,    0,    0, 4288, 4289, 4289, 4289, 4289,    0,
-        0, 4289, 4289, 4290, 4290, 4290, 4290,    0,    0, 4290,
-     4290, 4291, 4291, 4291,    0,    0,    0, 4291, 4292, 4292,
-
-     4292, 4292,    0,    0, 4292, 4292, 4293, 4293, 4293,    0,
-        0,    0, 4293, 4294, 4294, 4294, 4294,    0,    0, 4294,
-     4294, 4295, 4295, 4295,    0,    0,    0, 4295, 4296, 4296,
-     4296, 4296,    0,    0, 4296, 4296, 4297, 4297, 4297, 4297,
-        0, 4297,    0, 4297, 4298, 4298, 4298, 4298,    0,    0,
-     4298, 4298, 4299, 4299, 4299,    0,    0,    0, 4299, 4300,
-     4300, 4300, 4300,    0,    0, 4300, 4300, 4301, 4301, 4301,
-        0,    0,    0, 4301, 4302, 4302, 4302, 4302,    0,    0,
-     4302, 4302, 4303, 4303, 4303,    0,    0,    0, 4303, 4304,
-     4304, 4304, 4304,    0,    0, 4304, 4304, 4305, 4305, 4305,
-
-        0,    0,    0, 4305, 4306, 4306, 4306, 4306,    0,    0,
-     4306, 4306, 4307, 4307, 4307, 4307,    0, 4307,    0, 4307,
-     4308, 4308, 4308, 4308,    0,    0, 4308, 4308, 4309, 4309,
-     4309, 4309, 4309, 4309, 4309, 4309, 4309, 4310, 4310, 4310,
-     4310, 4310, 4310, 4310, 4310, 4310, 4311, 4311, 4311, 4311,
-        0, 4311,    0, 4311, 4312, 4312, 4312,    0,    0,    0,
-     4312, 4313, 4313, 4313, 4313,    0,    0, 4313, 4313, 4314,
-     4314, 4314,    0,    0,    0, 4314, 4315, 4315, 4315, 4315,
-        0,    0, 4315, 4315, 4316, 4316, 4316, 4316,    0,    0,
-     4316, 4316, 4317, 4317, 4317,    0,    0,    0, 4317, 4318,
-
-     4318, 4318, 4318,    0,    0, 4318, 4318, 4319, 4319, 4319,
-     4319,    0,    0, 4319, 4319, 4320, 4320, 4320, 4320,    0,
-        0, 4320, 4320, 4321, 4321, 4321, 4321,    0,    0, 4321,
-     4321, 4322, 4322, 4322, 4322,    0, 4322,    0, 4322, 4323,
-     4323, 4323, 4323,    0,    0, 4323, 4323, 4324, 4324, 4324,
-        0,    0,    0, 4324, 4325, 4325, 4325, 4325,    0,    0,
-     4325, 4325, 4326, 4326, 4326, 4326,    0,    0, 4326, 4326,
-     4327, 4327, 4327,    0,    0,    0, 4327, 4328, 4328, 4328,
-     4328,    0,    0, 4328, 4328, 4329, 4329, 4329, 4329,    0,
-        0, 4329, 4329, 4330, 4330, 4330,    0,    0,    0, 4330,
-
-     4331, 4331, 4331,    0,    0,    0, 4331, 4332, 4332, 4332,
-     4332,    0,    0, 4332, 4332, 4333, 4333, 4333, 4333,    0,
-        0, 4333, 4333, 4334, 4334, 4334,    0,    0,    0, 4334,
-     4335, 4335, 4335, 4335,    0,    0, 4335, 4335, 4336, 4336,
-     4336,    0,    0,    0, 4336, 4337, 4337, 4337, 4337,    0,
-     4337,    0, 4337, 4338, 4338, 4338, 4338,    0,    0, 4338,
-     4338, 4339, 4339, 4339,    0,    0,    0, 4339, 4340, 4340,
-     4340, 4340,    0,    0, 4340, 4340, 4341, 4341, 4341,    0,
-        0,    0, 4341, 4342, 4342, 4342, 4342,    0,    0, 4342,
-     4342, 4343, 4343, 4343,    0,    0,    0, 4343, 4344, 4344,
-
-     4344, 4344,    0,    0, 4344, 4344, 4345, 4345, 4345,    0,
-        0,    0, 4345, 4346, 4346, 4346, 4346,    0,    0, 4346,
-     4346, 4347, 4347, 4347, 4347,    0, 4347,    0, 4347, 4348,
-     4348, 4348, 4348,    0,    0, 4348, 4348, 4349, 4349, 4349,
-     4349,    0, 4349,    0, 4349, 4350, 4350, 4350, 4350,    0,
-        0, 4350, 4350, 4351, 4351, 4351,    0,    0,    0, 4351,
-     4352, 4352, 4352, 4352,    0,    0, 4352, 4352, 4353, 4353,
-     4353, 4353,    0, 4353,    0, 4353, 4354, 4354, 4354, 4354,
-        0,    0, 4354, 4354, 4355, 4355, 4355, 4355,    0, 4355,
-        0, 4355, 4356, 4356, 4356,    0,    0,    0, 4356, 4357,
-
-     4357, 4357, 4357,    0,    0, 4357, 4357, 4358, 4358, 4358,
-     4358, 4358, 4358, 4358, 4358, 4358, 4359, 4359, 4359, 4359,
-     4359, 4359, 4359, 4359, 4359, 4360, 4360, 4360,    0,    0,
-        0, 4360, 4361, 4361, 4361, 4361,    0,    0, 4361, 4361,
-     4362, 4362, 4362, 4362,    0, 4362,    0, 4362, 4363, 4363,
-     4363, 4363,    0,    0, 4363, 4363, 4364, 4364, 4364,    0,
-        0,    0, 4364, 4365, 4365, 4365, 4365,    0,    0, 4365,
-     4365, 4366, 4366, 4366, 4366,    0,    0, 4366, 4366, 4367,
-     4367, 4367, 4367,    0,    0, 4367, 4367, 4368, 4368, 4368,
-     4368,    0,    0, 4368, 4368, 4369, 4369, 4369, 4369,    0,
-
-        0, 4369, 4369, 4370, 4370, 4370,    0,    0,    0, 4370,
-     4371, 4371, 4371, 4371,    0,    0, 4371, 4371, 4372, 4372,
-     4372, 4372,    0,    0, 4372, 4372, 4373, 4373, 4373,    0,
-        0,    0, 4373, 4374, 4374, 4374, 4374,    0,    0, 4374,
-     4374, 4375, 4375, 4375, 4375,    0,    0, 4375, 4375, 4376,
-     4376, 4376,    0,    0,    0, 4376, 4377, 4377, 4377,    0,
-        0,    0, 4377, 4378, 4378, 4378, 4378,    0,    0, 4378,
-     4378, 4379, 4379, 4379, 4379,    0,    0, 4379, 4379, 4380,
-     4380, 4380,    0,    0,    0, 4380, 4381, 4381, 4381,    0,
-        0,    0, 4381, 4382, 4382, 4382, 4382,    0,    0, 4382,
-
-     4382, 4383, 4383, 4383, 4383,    0, 4383,    0, 4383, 4384,
-     4384, 4384, 4384,    0,    0, 4384, 4384, 4385, 4385, 4385,
-        0,    0,    0, 4385, 4386, 4386, 4386, 4386,    0,    0,
-     4386, 4386, 4387, 4387, 4387,    0,    0,    0, 4387, 4388,
-     4388, 4388,    0,    0,    0, 4388, 4389, 4389, 4389, 4389,
-        0,    0, 4389, 4389, 4390, 4390, 4390,    0,    0,    0,
-     4390, 4391, 4391, 4391, 4391,    0,    0, 4391, 4391, 4392,
-     4392, 4392,    0,    0,    0, 4392, 4393, 4393, 4393, 4393,
-        0,    0, 4393, 4393, 4394, 4394, 4394,    0,    0,    0,
-     4394, 4395, 4395, 4395, 4395,    0,    0, 4395, 4395, 4396,
-
-     4396, 4396,    0,    0,    0, 4396, 4397, 4397, 4397, 4397,
-        0,    0, 4397, 4397, 4398, 4398, 4398, 4398, 4398, 4398,
-     4398, 4398, 4398, 4399, 4399, 4399, 4399, 4399, 4399, 4399,
-     4399, 4399, 4400, 4400, 4400,    0,    0,    0, 4400, 4401,
+     2238, 2240, 2240, 2240, 3793, 3796, 2231, 3806, 2234, 2241,
+     2241, 2241, 3793, 2236, 3795, 3832, 2238, 3802, 3803, 2240,
+     2242, 2242, 2242, 2218, 2242, 3810, 2241, 2242, 2243, 2243,
+     2243, 2244, 2244, 2244, 2245, 2245, 2245, 1497, 2245, 1496,
+
+     1485, 2245, 2227, 3796, 3797, 2243, 3804, 3805, 2244, 2246,
+     2246, 2246, 2247, 2247, 2247, 2236, 2248, 2248, 2248, 3807,
+     2248, 3810, 3795, 2248, 3802, 3803, 2240, 2246, 3816, 2247,
+     2251, 2251, 2251, 2255, 2255, 2255, 2256, 2256, 2256, 2265,
+     2265, 2265, 3797, 2265, 3804, 3805, 2265, 3811, 2251, 3814,
+     3815, 2255, 3807, 2256, 2268, 2268, 2268, 2269, 2269, 2269,
+     2270, 2270, 2270, 2246, 2272, 2272, 2272, 1474, 3809, 2273,
+     2273, 2273, 2268, 2273, 2269, 3816, 2273, 3809, 2270, 3833,
+     1469, 2272, 3818, 3811, 2251, 2274, 2274, 2274, 2275, 2275,
+     2275, 3822, 2275, 3814, 3815, 2275, 2277, 2277, 2277, 1468,
+
+     3822, 2268, 2274, 2281, 2281, 2281, 2282, 2282, 2282, 3833,
+     2282, 1467, 1463, 2282, 2277, 2283, 2283, 2283, 3818, 3824,
+     2281, 2289, 2289, 2289, 2290, 2290, 2290, 2291, 2291, 2291,
+     2293, 2293, 2293, 2297, 2297, 2297, 2298, 2298, 2298, 2299,
+     2299, 2299, 2300, 2300, 2300, 2303, 2303, 2303, 2308, 2308,
+     2308, 2309, 2309, 2309, 2311, 2311, 2311, 3824, 2277, 2312,
+     2312, 2312, 2313, 2313, 2313, 2316, 2316, 2316, 3827, 2316,
+     3812, 3813, 2316, 2319, 2319, 2319, 3819, 2319, 3823, 3817,
+     2319, 2323, 2323, 2323, 2325, 2325, 2325, 3823, 3828, 2300,
+     2326, 2326, 2326, 2327, 2327, 2327, 2328, 2328, 2328, 2323,
+
+     3840, 2325, 2329, 2329, 2329, 3812, 3813, 2326, 3840, 2313,
+     2327, 3827, 3819, 2328, 2332, 2332, 2332, 2334, 2334, 2334,
+     2329, 2335, 2335, 2335, 3829, 2335, 3817, 3825, 2335, 2336,
+     2336, 2336, 2332, 2323, 2334, 3828, 2337, 2337, 2337, 1462,
+     2337, 3834, 2326, 2337, 2340, 2340, 2340, 2336, 2340, 3820,
+     3834, 2340, 2343, 2343, 2343, 3821, 2328, 1445, 2327, 2344,
+     2344, 2344, 2345, 2345, 2345, 3825, 2345, 1440, 3836, 2345,
+     2343, 3829, 2343, 2474, 2474, 2332, 2474, 2344, 2348, 2348,
+     2348, 3830, 2348, 3820, 2474, 2348, 2351, 2351, 2351, 3821,
+     2336, 2474, 2352, 2352, 2352, 2344, 2352, 1439, 3837, 2352,
+
+     2355, 2355, 2355, 3836, 2351, 2356, 2356, 2356, 3842, 2356,
+     3831, 3835, 2356, 1438, 2357, 2357, 2357, 2355, 2357, 3830,
+     3835, 2357, 2360, 2360, 2360, 2361, 2361, 2361, 3838, 2361,
+     2351, 3841, 2361, 3837, 2367, 2367, 2367, 3839, 2367, 3841,
+     2360, 2367, 2370, 2370, 2370, 2371, 2371, 2371, 3831, 2371,
+     1433, 3843, 2371, 2374, 2374, 2374, 3842, 2374, 3846, 2370,
+     2374, 2378, 2378, 2378, 2379, 2379, 2379, 2380, 2380, 2380,
+     2383, 2383, 2383, 3844, 2383, 3838, 3848, 2383, 2378, 2387,
+     2387, 2387, 2379, 3847, 3839, 2380, 2388, 2388, 2388, 2360,
+     2390, 2390, 2390, 3872, 2391, 2391, 2391, 2387, 2391, 3843,
+
+     3846, 2391, 3872, 3854, 2388, 1432, 1419, 2390, 2396, 2396,
+     2396, 3844, 3848, 2397, 2397, 2397, 2399, 2399, 2399, 3881,
+     2402, 2402, 2402, 3873, 2402, 3847, 2396, 2402, 3845, 2379,
+     3881, 2397, 3873, 1418, 2399, 2387, 3854, 3856, 2388, 2408,
+     2408, 2408, 2409, 2409, 2409, 3856, 2409, 3850, 3849, 2409,
+     2410, 2410, 2410, 2411, 2411, 2411, 2408, 2412, 2412, 2412,
+     2413, 2413, 2413, 2414, 2414, 2414, 3845, 3851, 2410, 2415,
+     2415, 2415, 2416, 2416, 2416, 2396, 2397, 2418, 2418, 2418,
+     2414, 2417, 2417, 2417, 3849, 3857, 2415, 3855, 3858, 2416,
+     2420, 2420, 2420, 3857, 3850, 2418, 3859, 3852, 2417, 2421,
+
+     2421, 2421, 1417, 2421, 3862, 3863, 2421, 2420, 2423, 2423,
+     2423, 2425, 2425, 2425, 3851, 2410, 2428, 2428, 2428, 3864,
+     3855, 2415, 1416, 2429, 2429, 2429, 2423, 2429, 3853, 2425,
+     2429, 2432, 2432, 2432, 2428, 3852, 3858, 2416, 2433, 2433,
+     2433, 2417, 2433, 2418, 3859, 2433, 3862, 3863, 2432, 2434,
+     2434, 2434, 3860, 2434, 3870, 3864, 2434, 2437, 2437, 2437,
+     2438, 2438, 2438, 2439, 2439, 2439, 3853, 2439, 1415, 3861,
+     2439, 2440, 2440, 2440, 3866, 2437, 3865, 2438, 2444, 2444,
+     2444, 2446, 2446, 2446, 2447, 2447, 2447, 3870, 2447, 2440,
+     3860, 2447, 2458, 2458, 2458, 1414, 2444, 3867, 2446, 2459,
+
+     2459, 2459, 1413, 1412, 2460, 2460, 2460, 3861, 2460, 2437,
+     2458, 2460, 3865, 2461, 2461, 2461, 2459, 2461, 3871, 3874,
+     2461, 3866, 1402, 2440, 2464, 2464, 2464, 1401, 2464, 1400,
+     1395, 2464, 2468, 2468, 2468, 2469, 2469, 2469, 1394, 2472,
+     2472, 2472, 2458, 2472, 3867, 1393, 2472, 2475, 2475, 2475,
+     2468, 3871, 3874, 2469, 2476, 2476, 2476, 2477, 2477, 2477,
+     2481, 2481, 2481, 2482, 2482, 2482, 2484, 2484, 2484, 2485,
+     2485, 2485, 2487, 2487, 2487, 2488, 2488, 2488, 2489, 2489,
+     2489, 2493, 2493, 2493, 2494, 2494, 2494, 2498, 2498, 2498,
+     2499, 2499, 2499, 2501, 2501, 2501, 2502, 2502, 2502, 1392,
+
+     2468, 2507, 2507, 2507, 2508, 2508, 2508, 2509, 2509, 2509,
+     2510, 2510, 2510, 3868, 2510, 1377, 3869, 2510, 1376, 2507,
+     2511, 2511, 2511, 3876, 2509, 2512, 2512, 2512, 2513, 2513,
+     2513, 2514, 2514, 2514, 2515, 2515, 2515, 2511, 2516, 2516,
+     2516, 1359, 2512, 1358, 3877, 2513, 2517, 2517, 2517, 3875,
+     2517, 3868, 2515, 2517, 3869, 2516, 2520, 2520, 2520, 1351,
+     2521, 2521, 2521, 2522, 2522, 2522, 2523, 2523, 2523, 2524,
+     2524, 2524, 3876, 2524, 2520, 1347, 2524, 2512, 2521, 3878,
+     2513, 2522, 3875, 1342, 2523, 2527, 2527, 2527, 2531, 2531,
+     2531, 1341, 2531, 3877, 3879, 2531, 1336, 2521, 2534, 2534,
+
+     2534, 2515, 1335, 2527, 2537, 2537, 2537, 1334, 2520, 2538,
+     2538, 2538, 3878, 2538, 1332, 2534, 2538, 2539, 2539, 2539,
+     1331, 2537, 2540, 2540, 2540, 2522, 1326, 3879, 2523, 2545,
+     2545, 2545, 2546, 2546, 2546, 2539, 2547, 2547, 2547, 1323,
+     2540, 2548, 2548, 2548, 1322, 2548, 1319, 2545, 2548, 1318,
+     2546, 1317, 1316, 2547, 2551, 2551, 2551, 2552, 2552, 2552,
+     2553, 2553, 2553, 2554, 2554, 2554, 2555, 2555, 2555, 1315,
+     1314, 2551, 1313, 1312, 2552, 1311, 1310, 2553, 1309, 1308,
+     2554, 1307, 1306, 2547, 2555, 2556, 2556, 2556, 1305, 1304,
+     2545, 2557, 2557, 2557, 2561, 2561, 2561, 2562, 2562, 2562,
+
+     1301, 2562, 1300, 2556, 2562, 2565, 2565, 2565, 2557, 1299,
+     2551, 1298, 2553, 2566, 2566, 2566, 2567, 2567, 2567, 2552,
+     2569, 2569, 2569, 2565, 2568, 2568, 2568, 2555, 2568, 1297,
+     1295, 2568, 1294, 2567, 2570, 2570, 2570, 2569, 2571, 2571,
+     2571, 2572, 2572, 2572, 2573, 2573, 2573, 2577, 2577, 2577,
+     2556, 2570, 2578, 2578, 2578, 2571, 2574, 2574, 2574, 2572,
+     2574, 2573, 1293, 2574, 2577, 2565, 2582, 2582, 2582, 1292,
+     2578, 2584, 2584, 2584, 1291, 2584, 1290, 1289, 2584, 2587,
+     2587, 2587, 1288, 1287, 2582, 1286, 2570, 2588, 2588, 2588,
+     2571, 2588, 1285, 1284, 2588, 1283, 1282, 2587, 2591, 2591,
+
+     2591, 2595, 2595, 2595, 1281, 2595, 1275, 1271, 2595, 2608,
+     2608, 2608, 2610, 2610, 2577, 2610, 2591, 2609, 2609, 2609,
+     1268, 2609, 1267, 2610, 2609, 2611, 2611, 2608, 2611, 1266,
+     2610, 2613, 2613, 2613, 1264, 1260, 2611, 2614, 2614, 2614,
+     2627, 2627, 2627, 2611, 1251, 2591, 2628, 2628, 2628, 2613,
+     2632, 2632, 2632, 1246, 1245, 2614, 2633, 2633, 2633, 2635,
+     2635, 2635, 2638, 2638, 2638, 2639, 2639, 2639, 2643, 2643,
+     2643, 2608, 2646, 2646, 2646, 2648, 2648, 2648, 2650, 2650,
+     2650, 2651, 2651, 2651, 1244, 2651, 1240, 1239, 2651, 2654,
+     2654, 2654, 1236, 2648, 1232, 2655, 2655, 2655, 2613, 2655,
+
+     2614, 1231, 2655, 2656, 2656, 2656, 2654, 2657, 2657, 2657,
+     2658, 2658, 2658, 2659, 2659, 2659, 2660, 2660, 2660, 1228,
+     2656, 2661, 2661, 2661, 2657, 2661, 1225, 1222, 2661, 1221,
+     1216, 2659, 1208, 2660, 2662, 2662, 2662, 2663, 2663, 2663,
+     2664, 2664, 2664, 2665, 2665, 2665, 2666, 2666, 2666, 2672,
+     2672, 2672, 2662, 1207, 1206, 2663, 1204, 1200, 2664, 1197,
+     1192, 2665, 1191, 1190, 2666, 1189, 2672, 2673, 2673, 2673,
+     1188, 2673, 1187, 1186, 2673, 2676, 2676, 2676, 1185, 2676,
+     1184, 1181, 2676, 2679, 2679, 2679, 2683, 2683, 2683, 2684,
+     2684, 2684, 2685, 2685, 2685, 2687, 2687, 2687, 2695, 2695,
+
+     2695, 2679, 2663, 2683, 2665, 1180, 1177, 2684, 2664, 1176,
+     2685, 1172, 2687, 2688, 2688, 2688, 2695, 2688, 1170, 1167,
+     2688, 2692, 2692, 2692, 2693, 2693, 2693, 2694, 2694, 2694,
+     1166, 2694, 1163, 1156, 2694, 2696, 2696, 2696, 2692, 1153,
+     1152, 2693, 2697, 2697, 2697, 1151, 1148, 2684, 2698, 2698,
+     2698, 1147, 2698, 2696, 1143, 2698, 2701, 2701, 2701, 2697,
+     2702, 2702, 2702, 2703, 2703, 2703, 1136, 2704, 2704, 2704,
+     1132, 2704, 1131, 2701, 2704, 2707, 2707, 2707, 2708, 2708,
+     2708, 2703, 2708, 1130, 1127, 2708, 2709, 2709, 2709, 2710,
+     2710, 2710, 2707, 2711, 2711, 2711, 1126, 2696, 2713, 2713,
+
+     2713, 1125, 1118, 2709, 1117, 1116, 2710, 2718, 2718, 2718,
+     1115, 2711, 2714, 2714, 2714, 2713, 2714, 1114, 1113, 2714,
+     2720, 2720, 2720, 1112, 1111, 2718, 1110, 2733, 2733, 2733,
+     2745, 2745, 2745, 2764, 2764, 2764, 1106, 1075, 2720, 2765,
+     2765, 2765, 2768, 2768, 2768, 2733, 1072, 1069, 2745, 2772,
+     2772, 2772, 2775, 2775, 2775, 2776, 2776, 2776, 2777, 2777,
+     2777, 1068, 2777, 1065, 1064, 2777, 2780, 2780, 2780, 2781,
+     2781, 2781, 2776, 2781, 1063, 1062, 2781, 2782, 2782, 2782,
+     1061, 1060, 2745, 2780, 2784, 2784, 2784, 2720, 2733, 2783,
+     2783, 2783, 1053, 2783, 2782, 1052, 2783, 2786, 2786, 2786,
+
+     1051, 2786, 2784, 1049, 2786, 2789, 2789, 2789, 2791, 2791,
+     2791, 2792, 2792, 2792, 2793, 2793, 2793, 2796, 2796, 2796,
+     2798, 2798, 2798, 2789, 2798, 1048, 2791, 2798, 1047, 2792,
+     1046, 1045, 2793, 1044, 2796, 2810, 2810, 2810, 2811, 2811,
+     2811, 2812, 2812, 2812, 1043, 2812, 1042, 1041, 2812, 2813,
+     2813, 2813, 2810, 1040, 1039, 2811, 2814, 2814, 2814, 1038,
+     2814, 1036, 1035, 2814, 1034, 1033, 2793, 2813, 1032, 1031,
+     2791, 2820, 2820, 2820, 1030, 2821, 2821, 2821, 2792, 2821,
+     1029, 1028, 2821, 2822, 2822, 2822, 1026, 2822, 2820, 1025,
+     2822, 2825, 2825, 2825, 2827, 2827, 2827, 2828, 2828, 2828,
+
+     1024, 2828, 1023, 1022, 2828, 2832, 2832, 2832, 1021, 2825,
+     1020, 1019, 2827, 2833, 2833, 2833, 2834, 2834, 2834, 1018,
+     2834, 1017, 2832, 2834, 2835, 2835, 2835, 2837, 2837, 2837,
+     2833, 2837, 1013, 1009, 2837, 2840, 2840, 2840, 1008, 2841,
+     2841, 2841, 2835, 2841, 1007, 1006, 2841, 2842, 2842, 2842,
+     1005, 1001, 2840,  999, 2843, 2843, 2843, 2827, 2843,  998,
+      997, 2843,  996,  995, 2842, 2844, 2844, 2844,  994, 2844,
+      993,  990, 2844, 2848, 2848, 2848, 2849, 2849, 2849, 2850,
+     2850, 2850, 2851, 2851, 2851, 2852, 2852, 2852,  989,  985,
+     2848,  984,  983, 2849, 2863, 2863, 2863, 2850, 2876, 2876,
+
+     2876,  982, 2852, 2877, 2877, 2877, 2894, 2894, 2894, 2896,
+     2896, 2896, 2863,  979,  978, 2876, 2900, 2900, 2900,  976,
+      974, 2877, 2904, 2904, 2904, 2905, 2905, 2905,  971, 2905,
+      970,  969, 2905, 2906, 2906, 2906,  968, 2906,  966, 2904,
+     2906, 2909, 2909, 2909,  963, 2909,  962,  960, 2909,  959,
+      956, 2850, 2912, 2912, 2912, 2863, 2913, 2913, 2913, 2914,
+     2914, 2914, 2916, 2916, 2916, 2917, 2917, 2917,  954,  951,
+     2912, 2918, 2918, 2918, 2913, 2918,  950, 2914, 2918, 2916,
+      949,  948, 2917, 2919, 2919, 2919, 2931, 2931, 2931, 2932,
+     2932, 2932,  945, 2932,  944, 2914, 2932, 2933, 2933, 2933,
+
+     2919, 2933,  943, 2931, 2933, 2936, 2936, 2936, 2913, 2939,
+     2939, 2939, 2941, 2941, 2941,  942, 2941,  941,  940, 2941,
+     2912,  939,  937, 2936,  934,  933, 2939, 2950, 2950, 2950,
+     2952, 2952, 2952, 2953, 2953, 2953,  929, 2953,  928,  927,
+     2953,  926, 2954, 2954, 2954, 2950, 2954, 2952,  925, 2954,
+     2957, 2957, 2957,  924, 2957,  915,  914, 2957, 2960, 2960,
+     2960,  911, 2960,  910,  909, 2960, 2970, 2970, 2970, 2971,
+     2971, 2971,  908, 2971,  907,  905, 2971, 2972, 2972, 2972,
+     2973, 2973, 2973, 2970, 2973,  904,  903, 2973, 2974, 2974,
+     2974, 2975, 2975, 2975, 2972, 2976, 2976, 2976, 2977, 2977,
+
+     2977,  900, 2977,  899,  898, 2977, 2974, 2988, 2988, 2988,
+      895,  894, 2976, 3001, 3001, 3001, 3002, 3002, 3002,  890,
+     3002,  888,  885, 3002,  884, 2988, 3003, 3003, 3003,  883,
+     3001, 3007, 3007, 3007, 3021, 3021, 3021, 3023, 3023, 3023,
+     3026, 3026, 3026,  882, 3003, 3028, 3028, 3028, 3007, 3007,
+      880, 2974,  877, 3030, 3030, 3030,  876, 3030,  875, 2988,
+     3030, 3037, 3037, 3037, 3038, 3038, 3038, 3039, 3039, 3039,
+     3041, 3041, 3041, 3042, 3042, 3042,  874, 3042,  871, 3037,
+     3042,  868, 3038,  865,  864, 3039,  863, 3041, 3043, 3043,
+     3043,  862, 3043,  861,  858, 3043, 3046, 3046, 3046, 3047,
+
+     3047, 3047,  855, 3047,  851,  850, 3047, 3059, 3059, 3059,
+      849, 3059,  848, 3046, 3059, 3063, 3063, 3063, 3064, 3064,
+     3064,  847, 3064,  846,  845, 3064,  844,  843, 3037, 3039,
+      842,  841, 3063, 3072, 3072, 3072, 3075, 3075, 3075,  839,
+     3075,  837,  834, 3075, 3090, 3090, 3090,  833, 3091, 3091,
+     3091, 3072, 3091,  832,  831, 3091, 3094, 3094, 3094,  830,
+     3094, 3090,  829, 3094, 3097, 3097, 3097, 3098, 3098, 3098,
+      824, 3098,  823,  822, 3098, 3109, 3109, 3109,  821, 3122,
+     3122, 3122, 3097, 3122,  818,  817, 3122, 3126, 3126, 3126,
+     3127, 3127, 3127, 3109, 3128, 3128, 3128,  816, 3128,  813,
+
+      812, 3128,  811,  810, 3126, 3126,  807, 3127, 3127, 3141,
+     3141, 3141, 3128, 3143, 3143, 3143, 3097, 3144, 3144, 3144,
+     3145, 3145, 3145,  806,  804, 3109, 3147, 3147, 3147, 3148,
+     3148, 3148, 3157, 3157, 3157, 3158, 3158, 3158, 3160, 3160,
+     3160, 3162, 3162, 3162,  801, 3162,  800,  796, 3162,  795,
+     3157,  794,  793, 3158,  792,  791, 3160, 3165, 3165, 3165,
+      788, 3165,  787,  786, 3165, 3168, 3168, 3168, 3179, 3179,
+     3179, 3180, 3180, 3180,  785, 3180,  784,  783, 3180, 3183,
+     3183, 3183, 3168,  778, 3157, 3179, 3203, 3203, 3203,  774,
+     3204, 3204, 3204,  773, 3204,  772, 3183, 3204, 3209, 3209,
+
+     3209,  771,  768, 3203,  767,  766, 3160, 3218, 3218, 3218,
+     3236, 3236, 3236, 3237, 3237, 3237, 3209, 3237,  763,  761,
+     3237,  760, 3238, 3238, 3238, 3218, 3238, 3236, 3236, 3238,
+      759, 3237, 3249, 3249, 3249, 3251, 3251, 3251,  756,  755,
+     3238, 3252, 3252, 3252, 3254, 3254, 3254, 3263, 3263, 3263,
+     3264, 3264, 3264, 3266, 3266, 3266, 3267, 3267, 3267,  754,
+     3267,  753,  749, 3267,  748, 3263,  747,  743, 3264,  742,
+     3266, 3268, 3268, 3268, 3218, 3239, 3239, 3239, 3239, 3239,
+     3239, 3239, 3239, 3239,  741,  740, 3239,  734, 3268,  733,
+      731, 3239, 3239, 3239, 3239, 3239, 3278, 3278, 3278, 3279,
+
+     3279, 3279,  723, 3279,  722,  718, 3279, 3281, 3281, 3281,
+      713, 3281,  709, 3278, 3281,  708,  704, 3264, 3280, 3280,
+     3280, 3239, 3239, 3240, 3240, 3240, 3240, 3240, 3240, 3240,
+     3240, 3240,  698,  697, 3240, 3280, 3306, 3306, 3306, 3240,
+     3240, 3240, 3240, 3240, 3299, 3299, 3299,  696, 3299,  692,
+      689, 3299,  687,  686, 3306, 3314, 3314, 3314, 3328, 3328,
+     3328,  685, 3328,  681,  677, 3328, 3339, 3339, 3339, 3240,
+     3240,  673,  672, 3314,  671,  670, 3328, 3331, 3331, 3331,
+     3331, 3331, 3331, 3331, 3331, 3331,  666,  662, 3331, 3340,
+     3340, 3340,  659, 3331, 3331, 3331, 3331, 3331, 3349, 3349,
+
+     3349, 3351, 3351, 3351, 3353, 3353, 3353,  658, 3353,  657,
+      656, 3353, 3429, 3429, 3429,  652, 3349,  646,  645, 3351,
+     3356, 3356, 3356, 3331, 3331, 3332, 3332, 3332, 3332, 3332,
+     3332, 3332, 3332, 3332,  641,  633, 3332, 3356, 3430, 3430,
+     3430, 3332, 3332, 3332, 3332, 3332,  629, 3357, 3357, 3357,
+      622, 3357,  620, 3351, 3357, 3365, 3365, 3365,  619, 3365,
+      615,  609, 3365, 3368, 3368, 3368,  608, 3368,  604,  597,
+     3368, 3332, 3332, 3398, 3398, 3398, 3416, 3416, 3416, 3435,
+     3435, 3435, 3436, 3436, 3436, 3441, 3441, 3441,  596, 3441,
+      595, 3398, 3441,  594, 3416, 3416,  593, 3435,  589, 3436,
+
+     3448, 3448, 3448, 3453, 3453, 3453, 3480, 3480, 3480, 3484,
+     3484, 3484, 3497, 3497, 3497,  578,  574, 3448,  566,  565,
+     3453, 3499, 3499, 3499, 3480,  564,  563, 3484,  562,  558,
+     3497,  552, 3500, 3500, 3500,  551, 3500,  547, 3499, 3500,
+     3511, 3511, 3511, 3512, 3512, 3512,  541, 3512,  540,  536,
+     3512, 3519, 3519, 3519, 3537, 3537, 3537, 3511, 3520, 3520,
+     3520, 3484, 3520,  530,  529, 3520,  525,  521, 3519, 3549,
+     3549, 3549, 3537, 3549,  517,  516, 3549, 3562, 3562, 3562,
+      515, 3562,  511,  507, 3562, 3571, 3571, 3571,  503, 3571,
+      499, 3537, 3571, 3748, 3748, 3748, 3761, 3761, 3761,  493,
+
+     3761,  492,  491, 3761, 3882, 3882, 3882, 3883, 3883, 3883,
+      487, 3748,  483,  478, 3761,  477,  476,  475,  471,  467,
+      464,  460, 3882,  456,  453, 3883, 3886, 3886, 3886, 3886,
+     3886, 3886, 3886, 3886, 3886, 3887, 3887, 3887, 3887, 3887,
+     3887, 3887, 3887, 3887, 3888, 3888, 3888, 3888, 3888, 3888,
+     3888, 3888, 3888, 3889, 3889, 3889, 3889, 3889, 3889, 3889,
+     3889, 3889, 3890, 3890, 3890, 3890, 3890, 3890, 3890, 3890,
+     3890, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891, 3891,
+     3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3892, 3893,
+     3893, 3893, 3893, 3893, 3893, 3893, 3893, 3893, 3894, 3894,
+
+     3894, 3894, 3894, 3894, 3894, 3894, 3894, 3895, 3895, 3895,
+     3895, 3895, 3895, 3895, 3895, 3895, 3896, 3896, 3896, 3896,
+     3896, 3896, 3896, 3896, 3896, 3897, 3897, 3897, 3897, 3897,
+     3897, 3897, 3897, 3897, 3898, 3898, 3898, 3898, 3898, 3898,
+     3898, 3898, 3898, 3899, 3899, 3899, 3899, 3899, 3899, 3899,
+     3899, 3899, 3900, 3900, 3900, 3900, 3900, 3900, 3900, 3900,
+     3900, 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901, 3901,
+     3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3902, 3903,
+     3903, 3903, 3903, 3903, 3903, 3903, 3903, 3903, 3904, 3904,
+     3904, 3904, 3904, 3904, 3904, 3904, 3904, 3905, 3905, 3905,
+
+     3905, 3905, 3905, 3905, 3905, 3905, 3906, 3906, 3906, 3906,
+     3906, 3906, 3906, 3906, 3906, 3907, 3907, 3907, 3907, 3907,
+     3907, 3907, 3907, 3907, 3908, 3908, 3908, 3908, 3908, 3908,
+     3908, 3908, 3908, 3909, 3909, 3909, 3909, 3909, 3909, 3909,
+     3909, 3909, 3910, 3910, 3910, 3910, 3910, 3910, 3910, 3910,
+     3910, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911, 3911,
+     3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3912, 3913,
+     3913, 3913, 3913, 3913, 3913, 3913, 3913, 3913, 3914, 3914,
+     3914, 3914, 3914, 3914, 3914, 3914, 3914, 3915, 3915, 3915,
+     3915, 3915, 3915, 3915, 3915, 3915, 3916, 3916, 3916, 3916,
+
+     3916, 3916, 3916, 3916, 3916, 3917, 3917, 3917, 3917, 3917,
+     3917, 3917, 3917, 3917, 3918, 3918, 3918, 3918, 3918, 3918,
+     3918, 3918, 3918, 3919, 3919, 3919, 3919, 3919, 3919, 3919,
+     3919, 3919, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920,
+     3920, 3921, 3921, 3921, 3921, 3921, 3921, 3921, 3921, 3921,
+     3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3922, 3923,
+     3923, 3923, 3923, 3923, 3923, 3923, 3923, 3923, 3924, 3924,
+     3924, 3924, 3924, 3924, 3924, 3924, 3924, 3925, 3925, 3925,
+     3925, 3925, 3925, 3925, 3925, 3925, 3926, 3926, 3926, 3926,
+     3926, 3926, 3926, 3926, 3926, 3927, 3927, 3927, 3927, 3927,
+
+     3927, 3927, 3927, 3927, 3928, 3928, 3928, 3928, 3928, 3928,
+     3928, 3928, 3928, 3929, 3929, 3929, 3929, 3929, 3929, 3929,
+     3929, 3929, 3930, 3930, 3930, 3930, 3930, 3930, 3930, 3930,
+     3930, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931, 3931,
+     3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3932, 3933,
+     3933, 3933, 3933, 3933, 3933, 3933, 3933, 3933, 3934, 3934,
+     3934, 3934, 3934, 3934, 3934, 3934, 3934, 3935, 3935, 3935,
+     3935, 3935, 3935, 3935, 3935, 3935, 3936, 3936, 3936, 3936,
+     3936, 3936, 3936, 3936, 3936, 3937, 3937, 3937, 3937, 3937,
+     3937, 3937, 3937, 3937, 3938, 3938, 3938, 3938, 3938, 3938,
+
+     3938, 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, 3945, 3945, 3945,
+     3945, 3945, 3945, 3945, 3945, 3945, 3946, 3946, 3946, 3946,
+     3946, 3946, 3946, 3946, 3946, 3947, 3947, 3947, 3947, 3947,
+     3947, 3947, 3947, 3947, 3948, 3948, 3948, 3948, 3948, 3948,
+     3948, 3948, 3948, 3949, 3949, 3949, 3949, 3949, 3949, 3949,
+
+     3949, 3949, 3950, 3950, 3950, 3950, 3950, 3950, 3950, 3950,
+     3950, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951, 3951,
+     3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3952, 3953,
+     3953, 3953, 3953, 3953, 3953, 3953, 3953, 3953, 3954, 3954,
+     3954, 3954, 3954, 3954, 3954, 3954, 3954, 3955, 3955, 3955,
+      450,  448,  447, 3955, 3956, 3956, 3956,  442,  435,  434,
+     3956, 3957, 3957, 3957,  433,  432,  431, 3957, 3958, 3958,
+     3958,  427,  420,  419, 3958, 3959, 3959, 3959,  418,  414,
+      407, 3959, 3960, 3960, 3960,  406,  402,  395, 3960, 3961,
+     3961, 3961,  394,  393,  389, 3961, 3962, 3962, 3962,  383,
+
+      382,  381, 3962, 3963, 3963, 3963,  377,  371,  367, 3963,
+     3964, 3964, 3964,  363,  359,  358, 3964, 3965, 3965, 3965,
+      357,  356,  355, 3965, 3966, 3966, 3966,  351,  342,  341,
+     3966, 3967, 3967, 3967,  337,  333,  329, 3967, 3968, 3968,
+     3968,  325,  324,  320, 3968, 3969, 3969, 3969,  317,  316,
+      315, 3969, 3970, 3970, 3970,  309,  308,  306, 3970, 3971,
+     3971, 3971,  303,  291,    0, 3971, 3972, 3972, 3972,    0,
+        0,    0, 3972, 3973, 3973, 3973,    0,    0,    0, 3973,
+     3974, 3974, 3974,    0,    0,    0, 3974, 3975, 3975, 3975,
+        0,    0,    0, 3975, 3976, 3976, 3976,    0,    0,    0,
+
+     3976, 3977, 3977, 3977,    0,    0,    0, 3977, 3978, 3978,
+     3978,    0,    0,    0, 3978, 3979, 3979, 3979,    0,    0,
+        0, 3979, 3980, 3980, 3980,    0,    0,    0, 3980, 3981,
+     3981, 3981,    0,    0,    0, 3981, 3982, 3982, 3982,    0,
+        0,    0, 3982, 3983, 3983, 3983,    0,    0,    0, 3983,
+     3984, 3984, 3984,    0,    0,    0, 3984, 3985, 3985, 3985,
+        0,    0,    0, 3985, 3986, 3986, 3986, 3986, 3986, 3986,
+     3986,    0, 3986, 3987, 3987, 3987,    0,    0,    0, 3987,
+     3988,    0,    0,    0, 3988, 3989, 3989, 3989,    0,    0,
+        0, 3989, 3990,    0,    0,    0, 3990, 3991, 3991, 3991,
+
+        0,    0,    0, 3991, 3992,    0,    0,    0, 3992, 3993,
+     3993, 3993,    0,    0,    0, 3993, 3994,    0,    0,    0,
+     3994, 3995, 3995, 3995,    0,    0,    0, 3995, 3996,    0,
+        0,    0, 3996, 3997, 3997, 3997,    0,    0,    0, 3997,
+     3998,    0,    0,    0, 3998, 3999, 3999, 3999,    0,    0,
+        0, 3999, 4000,    0,    0,    0, 4000, 4001, 4001, 4001,
+        0,    0,    0, 4001, 4002,    0,    0,    0, 4002, 4003,
+     4003, 4003,    0,    0,    0, 4003, 4004,    0,    0,    0,
+     4004, 4005, 4005, 4005,    0,    0,    0, 4005, 4006,    0,
+        0,    0, 4006, 4007, 4007, 4007,    0,    0,    0, 4007,
+
+     4008,    0,    0,    0, 4008, 4009, 4009, 4009,    0,    0,
+        0, 4009, 4010,    0,    0,    0, 4010, 4011, 4011, 4011,
+        0,    0,    0, 4011, 4012,    0,    0,    0, 4012, 4013,
+     4013, 4013,    0,    0,    0, 4013, 4014,    0,    0,    0,
+     4014, 4015, 4015, 4015,    0,    0,    0, 4015, 4016,    0,
+        0,    0, 4016, 4017, 4017, 4017,    0,    0,    0, 4017,
+     4018,    0,    0,    0, 4018, 4019, 4019, 4019,    0,    0,
+        0, 4019, 4020,    0,    0,    0, 4020, 4021, 4021, 4021,
+        0,    0,    0, 4021, 4022,    0,    0,    0, 4022, 4023,
+     4023, 4023,    0,    0,    0, 4023, 4024,    0,    0,    0,
+
+     4024, 4025, 4025, 4025,    0,    0,    0, 4025, 4026,    0,
+        0,    0, 4026, 4027, 4027, 4027,    0,    0,    0, 4027,
+     4028,    0,    0,    0, 4028, 4029, 4029, 4029,    0,    0,
+        0, 4029, 4030,    0,    0,    0, 4030, 4031, 4031, 4031,
+        0,    0,    0, 4031, 4032,    0,    0,    0, 4032, 4033,
+     4033, 4033,    0,    0,    0, 4033, 4034,    0,    0,    0,
+     4034, 4035, 4035, 4035,    0,    0,    0, 4035, 4036,    0,
+        0,    0, 4036, 4037, 4037, 4037,    0,    0,    0, 4037,
+     4038,    0,    0,    0, 4038, 4039, 4039, 4039,    0,    0,
+        0, 4039, 4040,    0,    0,    0, 4040, 4041, 4041, 4041,
+
+        0,    0,    0, 4041, 4042,    0,    0,    0, 4042, 4043,
+     4043, 4043,    0,    0,    0, 4043, 4044,    0,    0,    0,
+     4044, 4045, 4045, 4045,    0,    0,    0, 4045, 4046,    0,
+        0,    0, 4046, 4047, 4047, 4047,    0,    0,    0, 4047,
+     4048,    0,    0,    0, 4048, 4049, 4049, 4049, 4049, 4049,
+     4049, 4049, 4049, 4049, 4050,    0,    0,    0,    0, 4050,
+     4051, 4051, 4051,    0,    0,    0, 4051, 4052, 4052, 4052,
+     4052,    0,    0, 4052, 4052, 4053, 4053, 4053, 4053,    0,
+     4053,    0, 4053, 4054, 4054, 4054, 4054,    0,    0, 4054,
+     4054, 4055, 4055, 4055,    0,    0,    0, 4055, 4056, 4056,
+
+     4056, 4056,    0,    0, 4056, 4056, 4057, 4057, 4057,    0,
+        0,    0, 4057, 4058, 4058, 4058, 4058,    0,    0, 4058,
+     4058, 4059, 4059, 4059,    0,    0,    0, 4059, 4060, 4060,
+     4060, 4060,    0,    0, 4060, 4060, 4061, 4061, 4061, 4061,
+        0, 4061,    0, 4061, 4062, 4062, 4062, 4062,    0,    0,
+     4062, 4062, 4063, 4063, 4063, 4063,    0, 4063,    0, 4063,
+     4064, 4064, 4064, 4064,    0,    0, 4064, 4064, 4065, 4065,
+     4065, 4065,    0, 4065,    0, 4065, 4066, 4066, 4066, 4066,
+        0,    0, 4066, 4066, 4067, 4067, 4067, 4067,    0, 4067,
+        0, 4067, 4068, 4068, 4068, 4068,    0,    0, 4068, 4068,
+
+     4069, 4069, 4069,    0,    0,    0, 4069, 4070, 4070, 4070,
+     4070,    0,    0, 4070, 4070, 4071, 4071, 4071, 4071,    0,
+        0, 4071, 4071, 4072, 4072, 4072,    0,    0,    0, 4072,
+     4073, 4073, 4073, 4073,    0,    0, 4073, 4073, 4074, 4074,
+     4074,    0,    0,    0, 4074, 4075, 4075, 4075, 4075,    0,
+        0, 4075, 4075, 4076, 4076, 4076,    0,    0,    0, 4076,
+     4077, 4077, 4077, 4077,    0,    0, 4077, 4077, 4078, 4078,
+     4078,    0,    0,    0, 4078, 4079, 4079, 4079, 4079,    0,
+        0, 4079, 4079, 4080, 4080, 4080,    0,    0,    0, 4080,
+     4081, 4081, 4081, 4081,    0,    0, 4081, 4081, 4082, 4082,
+
+     4082,    0,    0,    0, 4082, 4083, 4083, 4083, 4083,    0,
+        0, 4083, 4083, 4084, 4084, 4084,    0,    0,    0, 4084,
+     4085, 4085, 4085, 4085,    0,    0, 4085, 4085, 4086, 4086,
+     4086,    0,    0,    0, 4086, 4087, 4087, 4087, 4087,    0,
+        0, 4087, 4087, 4088, 4088, 4088,    0,    0,    0, 4088,
+     4089, 4089, 4089, 4089,    0,    0, 4089, 4089, 4090, 4090,
+     4090,    0,    0,    0, 4090, 4091, 4091, 4091, 4091,    0,
+        0, 4091, 4091, 4092, 4092, 4092,    0,    0,    0, 4092,
+     4093, 4093, 4093, 4093,    0,    0, 4093, 4093, 4094, 4094,
+     4094,    0,    0,    0, 4094, 4095, 4095, 4095, 4095,    0,
+
+        0, 4095, 4095, 4096, 4096, 4096, 4096,    0, 4096,    0,
+     4096, 4097, 4097, 4097, 4097,    0,    0, 4097, 4097, 4098,
+     4098, 4098,    0,    0,    0, 4098, 4099, 4099, 4099, 4099,
+        0,    0, 4099, 4099, 4100, 4100, 4100,    0,    0,    0,
+     4100, 4101, 4101, 4101, 4101,    0,    0, 4101, 4101, 4102,
+     4102, 4102,    0,    0,    0, 4102, 4103, 4103, 4103, 4103,
+        0,    0, 4103, 4103, 4104, 4104, 4104,    0,    0,    0,
+     4104, 4105, 4105, 4105, 4105,    0,    0, 4105, 4105, 4106,
+     4106, 4106,    0,    0,    0, 4106, 4107, 4107, 4107, 4107,
+        0,    0, 4107, 4107, 4108, 4108, 4108,    0,    0,    0,
+
+     4108, 4109, 4109, 4109, 4109,    0,    0, 4109, 4109, 4110,
+     4110, 4110, 4110,    0, 4110,    0, 4110, 4111, 4111, 4111,
+     4111,    0,    0, 4111, 4111, 4112, 4112, 4112, 4112, 4112,
+     4112, 4112, 4112, 4112, 4113,    0, 4113,    0,    0, 4113,
+     4114, 4114, 4114,    0,    0,    0, 4114, 4115, 4115, 4115,
+     4115,    0,    0, 4115, 4115, 4116, 4116, 4116,    0,    0,
+        0, 4116, 4117, 4117, 4117, 4117,    0,    0, 4117, 4117,
+     4118, 4118, 4118,    0,    0,    0, 4118, 4119, 4119, 4119,
+     4119,    0,    0, 4119, 4119, 4120, 4120, 4120,    0,    0,
+        0, 4120, 4121, 4121, 4121, 4121,    0,    0, 4121, 4121,
+
+     4122, 4122, 4122,    0,    0,    0, 4122, 4123, 4123, 4123,
+     4123,    0,    0, 4123, 4123, 4124, 4124, 4124,    0,    0,
+        0, 4124, 4125, 4125, 4125, 4125,    0,    0, 4125, 4125,
+     4126, 4126, 4126, 4126,    0,    0, 4126, 4126, 4127, 4127,
+     4127,    0,    0,    0, 4127, 4128, 4128, 4128, 4128,    0,
+        0, 4128, 4128, 4129, 4129, 4129,    0,    0,    0, 4129,
+     4130, 4130, 4130, 4130,    0,    0, 4130, 4130, 4131, 4131,
+     4131,    0,    0,    0, 4131, 4132, 4132, 4132, 4132,    0,
+        0, 4132, 4132, 4133, 4133, 4133, 4133,    0,    0, 4133,
+     4133, 4134, 4134, 4134,    0,    0,    0, 4134, 4135, 4135,
+
+     4135, 4135,    0,    0, 4135, 4135, 4136, 4136, 4136, 4136,
+        0, 4136,    0, 4136, 4137, 4137, 4137, 4137,    0,    0,
+     4137, 4137, 4138, 4138, 4138, 4138,    0, 4138,    0, 4138,
+     4139, 4139, 4139, 4139,    0,    0, 4139, 4139, 4140, 4140,
+     4140,    0,    0,    0, 4140, 4141, 4141, 4141, 4141,    0,
+        0, 4141, 4141, 4142, 4142, 4142,    0,    0,    0, 4142,
+     4143, 4143, 4143, 4143,    0,    0, 4143, 4143, 4144, 4144,
+     4144,    0,    0,    0, 4144, 4145, 4145, 4145, 4145,    0,
+        0, 4145, 4145, 4146, 4146, 4146, 4146,    0, 4146,    0,
+     4146, 4147, 4147, 4147, 4147,    0,    0, 4147, 4147, 4148,
+
+     4148, 4148,    0,    0,    0, 4148, 4149, 4149, 4149, 4149,
+        0,    0, 4149, 4149, 4150, 4150, 4150,    0,    0,    0,
+     4150, 4151, 4151, 4151, 4151,    0,    0, 4151, 4151, 4152,
+     4152, 4152,    0,    0,    0, 4152, 4153, 4153, 4153, 4153,
+        0,    0, 4153, 4153, 4154, 4154, 4154,    0,    0,    0,
+     4154, 4155, 4155, 4155, 4155,    0,    0, 4155, 4155, 4156,
+     4156, 4156,    0,    0,    0, 4156, 4157, 4157, 4157, 4157,
+        0,    0, 4157, 4157, 4158, 4158, 4158,    0,    0,    0,
+     4158, 4159, 4159, 4159, 4159,    0,    0, 4159, 4159, 4160,
+     4160, 4160,    0,    0,    0, 4160, 4161, 4161, 4161, 4161,
+
+        0,    0, 4161, 4161, 4162, 4162, 4162,    0,    0,    0,
+     4162, 4163, 4163, 4163, 4163,    0,    0, 4163, 4163, 4164,
+     4164, 4164,    0,    0,    0, 4164, 4165, 4165, 4165, 4165,
+        0,    0, 4165, 4165, 4166, 4166, 4166, 4166,    0, 4166,
+        0, 4166, 4167, 4167, 4167, 4167,    0,    0, 4167, 4167,
+     4168, 4168, 4168,    0,    0,    0, 4168, 4169, 4169, 4169,
+     4169,    0,    0, 4169, 4169, 4170, 4170, 4170,    0,    0,
+        0, 4170, 4171, 4171, 4171, 4171,    0,    0, 4171, 4171,
+     4172, 4172, 4172,    0,    0,    0, 4172, 4173, 4173, 4173,
+     4173,    0,    0, 4173, 4173, 4174, 4174, 4174, 4174, 4174,
+
+     4174, 4174, 4174, 4174, 4175, 4175, 4175, 4175, 4175, 4175,
+     4175, 4175, 4175, 4176, 4176, 4176,    0,    0,    0, 4176,
+     4177, 4177, 4177,    0,    0,    0, 4177, 4178, 4178, 4178,
+     4178,    0,    0, 4178, 4178, 4179, 4179, 4179,    0,    0,
+        0, 4179, 4180, 4180, 4180, 4180,    0,    0, 4180, 4180,
+     4181, 4181, 4181, 4181,    0, 4181,    0, 4181, 4182, 4182,
+     4182, 4182,    0,    0, 4182, 4182, 4183, 4183, 4183,    0,
+        0,    0, 4183, 4184, 4184, 4184, 4184,    0,    0, 4184,
+     4184, 4185, 4185, 4185,    0,    0,    0, 4185, 4186, 4186,
+     4186, 4186,    0,    0, 4186, 4186, 4187, 4187, 4187, 4187,
+
+        0,    0, 4187, 4187, 4188, 4188, 4188,    0,    0,    0,
+     4188, 4189, 4189, 4189, 4189,    0,    0, 4189, 4189, 4190,
+     4190, 4190,    0,    0,    0, 4190, 4191, 4191, 4191, 4191,
+        0,    0, 4191, 4191, 4192, 4192, 4192, 4192,    0, 4192,
+        0, 4192, 4193, 4193, 4193, 4193,    0,    0, 4193, 4193,
+     4194, 4194, 4194, 4194,    0,    0, 4194, 4194, 4195, 4195,
+     4195,    0,    0,    0, 4195, 4196, 4196, 4196, 4196,    0,
+        0, 4196, 4196, 4197, 4197, 4197, 4197,    0,    0, 4197,
+     4197, 4198, 4198, 4198, 4198,    0,    0, 4198, 4198, 4199,
+     4199, 4199,    0,    0,    0, 4199, 4200, 4200, 4200, 4200,
+
+        0,    0, 4200, 4200, 4201, 4201, 4201,    0,    0,    0,
+     4201, 4202, 4202, 4202, 4202,    0,    0, 4202, 4202, 4203,
+     4203, 4203, 4203,    0, 4203,    0, 4203, 4204, 4204, 4204,
+     4204,    0,    0, 4204, 4204, 4205, 4205, 4205,    0,    0,
+        0, 4205, 4206, 4206, 4206, 4206,    0,    0, 4206, 4206,
+     4207, 4207, 4207,    0,    0,    0, 4207, 4208, 4208, 4208,
+     4208,    0,    0, 4208, 4208, 4209, 4209, 4209,    0,    0,
+        0, 4209, 4210, 4210, 4210, 4210,    0,    0, 4210, 4210,
+     4211, 4211, 4211,    0,    0,    0, 4211, 4212, 4212, 4212,
+     4212,    0,    0, 4212, 4212, 4213, 4213, 4213, 4213,    0,
+
+     4213,    0, 4213, 4214, 4214, 4214, 4214,    0,    0, 4214,
+     4214, 4215, 4215, 4215,    0,    0,    0, 4215, 4216, 4216,
+     4216, 4216,    0,    0, 4216, 4216, 4217, 4217, 4217,    0,
+        0,    0, 4217, 4218, 4218, 4218, 4218,    0,    0, 4218,
+     4218, 4219, 4219, 4219,    0,    0,    0, 4219, 4220, 4220,
+     4220, 4220,    0,    0, 4220, 4220, 4221, 4221, 4221,    0,
+        0,    0, 4221, 4222, 4222, 4222, 4222,    0,    0, 4222,
+     4222, 4223, 4223, 4223,    0,    0,    0, 4223, 4224, 4224,
+     4224, 4224,    0,    0, 4224, 4224, 4225, 4225, 4225,    0,
+        0,    0, 4225, 4226, 4226, 4226, 4226,    0,    0, 4226,
+
+     4226, 4227, 4227, 4227,    0,    0,    0, 4227, 4228, 4228,
+     4228, 4228,    0,    0, 4228, 4228, 4229, 4229, 4229,    0,
+        0,    0, 4229, 4230, 4230, 4230, 4230,    0,    0, 4230,
+     4230, 4231, 4231, 4231,    0,    0,    0, 4231, 4232, 4232,
+     4232, 4232,    0,    0, 4232, 4232, 4233, 4233, 4233, 4233,
+     4233, 4233, 4233, 4233, 4233, 4234, 4234, 4234, 4234, 4234,
+     4234, 4234, 4234, 4234, 4235, 4235, 4235,    0,    0,    0,
+     4235, 4236, 4236, 4236, 4236,    0, 4236,    0, 4236, 4237,
+     4237, 4237, 4237,    0,    0, 4237, 4237, 4238, 4238, 4238,
+        0,    0,    0, 4238, 4239, 4239, 4239, 4239,    0,    0,
+
+     4239, 4239, 4240, 4240, 4240, 4240,    0,    0, 4240, 4240,
+     4241, 4241, 4241,    0,    0,    0, 4241, 4242, 4242, 4242,
+     4242,    0,    0, 4242, 4242, 4243, 4243, 4243, 4243,    0,
+     4243,    0, 4243, 4244, 4244, 4244, 4244,    0,    0, 4244,
+     4244, 4245, 4245, 4245, 4245,    0,    0, 4245, 4245, 4246,
+     4246, 4246, 4246,    0, 4246,    0, 4246, 4247, 4247, 4247,
+     4247,    0,    0, 4247, 4247, 4248, 4248, 4248, 4248,    0,
+     4248,    0, 4248, 4249, 4249, 4249, 4249,    0,    0, 4249,
+     4249, 4250, 4250, 4250, 4250,    0, 4250,    0, 4250, 4251,
+     4251, 4251, 4251,    0,    0, 4251, 4251, 4252, 4252, 4252,
+
+     4252,    0,    0, 4252, 4252, 4253, 4253, 4253,    0,    0,
+        0, 4253, 4254, 4254, 4254, 4254,    0,    0, 4254, 4254,
+     4255, 4255, 4255, 4255,    0,    0, 4255, 4255, 4256, 4256,
+     4256, 4256,    0,    0, 4256, 4256, 4257, 4257, 4257,    0,
+        0,    0, 4257, 4258, 4258, 4258, 4258,    0,    0, 4258,
+     4258, 4259, 4259, 4259,    0,    0,    0, 4259, 4260, 4260,
+     4260, 4260,    0,    0, 4260, 4260, 4261, 4261, 4261, 4261,
+        0,    0, 4261, 4261, 4262, 4262, 4262,    0,    0,    0,
+     4262, 4263, 4263, 4263, 4263,    0,    0, 4263, 4263, 4264,
+     4264, 4264,    0,    0,    0, 4264, 4265, 4265, 4265, 4265,
+
+        0,    0, 4265, 4265, 4266, 4266, 4266,    0,    0,    0,
+     4266, 4267, 4267, 4267, 4267,    0,    0, 4267, 4267, 4268,
+     4268, 4268,    0,    0,    0, 4268, 4269, 4269, 4269, 4269,
+        0,    0, 4269, 4269, 4270, 4270, 4270, 4270,    0,    0,
+     4270, 4270, 4271, 4271, 4271,    0,    0,    0, 4271, 4272,
+     4272, 4272, 4272,    0,    0, 4272, 4272, 4273, 4273, 4273,
+        0,    0,    0, 4273, 4274, 4274, 4274, 4274,    0,    0,
+     4274, 4274, 4275, 4275, 4275,    0,    0,    0, 4275, 4276,
+     4276, 4276, 4276,    0,    0, 4276, 4276, 4277, 4277, 4277,
+     4277,    0, 4277,    0, 4277, 4278, 4278, 4278, 4278,    0,
+
+        0, 4278, 4278, 4279, 4279, 4279,    0,    0,    0, 4279,
+     4280, 4280, 4280, 4280,    0,    0, 4280, 4280, 4281, 4281,
+     4281,    0,    0,    0, 4281, 4282, 4282, 4282, 4282,    0,
+        0, 4282, 4282, 4283, 4283, 4283,    0,    0,    0, 4283,
+     4284, 4284, 4284, 4284,    0,    0, 4284, 4284, 4285, 4285,
+     4285,    0,    0,    0, 4285, 4286, 4286, 4286, 4286,    0,
+        0, 4286, 4286, 4287, 4287, 4287, 4287,    0, 4287,    0,
+     4287, 4288, 4288, 4288, 4288,    0,    0, 4288, 4288, 4289,
+     4289, 4289, 4289, 4289, 4289, 4289, 4289, 4289, 4290, 4290,
+     4290, 4290, 4290, 4290, 4290, 4290, 4290, 4291, 4291, 4291,
+
+     4291,    0, 4291,    0, 4291, 4292, 4292, 4292,    0,    0,
+        0, 4292, 4293, 4293, 4293, 4293,    0,    0, 4293, 4293,
+     4294, 4294, 4294,    0,    0,    0, 4294, 4295, 4295, 4295,
+     4295,    0,    0, 4295, 4295, 4296, 4296, 4296, 4296,    0,
+        0, 4296, 4296, 4297, 4297, 4297,    0,    0,    0, 4297,
+     4298, 4298, 4298, 4298,    0,    0, 4298, 4298, 4299, 4299,
+     4299, 4299,    0,    0, 4299, 4299, 4300, 4300, 4300, 4300,
+        0,    0, 4300, 4300, 4301, 4301, 4301, 4301,    0,    0,
+     4301, 4301, 4302, 4302, 4302, 4302,    0, 4302,    0, 4302,
+     4303, 4303, 4303, 4303,    0,    0, 4303, 4303, 4304, 4304,
+
+     4304,    0,    0,    0, 4304, 4305, 4305, 4305, 4305,    0,
+        0, 4305, 4305, 4306, 4306, 4306, 4306,    0,    0, 4306,
+     4306, 4307, 4307, 4307,    0,    0,    0, 4307, 4308, 4308,
+     4308, 4308,    0,    0, 4308, 4308, 4309, 4309, 4309, 4309,
+        0,    0, 4309, 4309, 4310, 4310, 4310,    0,    0,    0,
+     4310, 4311, 4311, 4311,    0,    0,    0, 4311, 4312, 4312,
+     4312, 4312,    0,    0, 4312, 4312, 4313, 4313, 4313, 4313,
+        0,    0, 4313, 4313, 4314, 4314, 4314,    0,    0,    0,
+     4314, 4315, 4315, 4315, 4315,    0,    0, 4315, 4315, 4316,
+     4316, 4316,    0,    0,    0, 4316, 4317, 4317, 4317, 4317,
+
+        0, 4317,    0, 4317, 4318, 4318, 4318, 4318,    0,    0,
+     4318, 4318, 4319, 4319, 4319,    0,    0,    0, 4319, 4320,
+     4320, 4320, 4320,    0,    0, 4320, 4320, 4321, 4321, 4321,
+        0,    0,    0, 4321, 4322, 4322, 4322, 4322,    0,    0,
+     4322, 4322, 4323, 4323, 4323,    0,    0,    0, 4323, 4324,
+     4324, 4324, 4324,    0,    0, 4324, 4324, 4325, 4325, 4325,
+        0,    0,    0, 4325, 4326, 4326, 4326, 4326,    0,    0,
+     4326, 4326, 4327, 4327, 4327, 4327,    0, 4327,    0, 4327,
+     4328, 4328, 4328, 4328,    0,    0, 4328, 4328, 4329, 4329,
+     4329, 4329,    0, 4329,    0, 4329, 4330, 4330, 4330, 4330,
+
+        0,    0, 4330, 4330, 4331, 4331, 4331,    0,    0,    0,
+     4331, 4332, 4332, 4332, 4332,    0,    0, 4332, 4332, 4333,
+     4333, 4333, 4333,    0, 4333,    0, 4333, 4334, 4334, 4334,
+     4334,    0,    0, 4334, 4334, 4335, 4335, 4335, 4335,    0,
+     4335,    0, 4335, 4336, 4336, 4336,    0,    0,    0, 4336,
+     4337, 4337, 4337, 4337,    0,    0, 4337, 4337, 4338, 4338,
+     4338, 4338, 4338, 4338, 4338, 4338, 4338, 4339, 4339, 4339,
+     4339, 4339, 4339, 4339, 4339, 4339, 4340, 4340, 4340,    0,
+        0,    0, 4340, 4341, 4341, 4341, 4341,    0,    0, 4341,
+     4341, 4342, 4342, 4342, 4342,    0, 4342,    0, 4342, 4343,
+
+     4343, 4343, 4343,    0,    0, 4343, 4343, 4344, 4344, 4344,
+        0,    0,    0, 4344, 4345, 4345, 4345, 4345,    0,    0,
+     4345, 4345, 4346, 4346, 4346, 4346,    0,    0, 4346, 4346,
+     4347, 4347, 4347, 4347,    0,    0, 4347, 4347, 4348, 4348,
+     4348, 4348,    0,    0, 4348, 4348, 4349, 4349, 4349, 4349,
+        0,    0, 4349, 4349, 4350, 4350, 4350,    0,    0,    0,
+     4350, 4351, 4351, 4351, 4351,    0,    0, 4351, 4351, 4352,
+     4352, 4352, 4352,    0,    0, 4352, 4352, 4353, 4353, 4353,
+        0,    0,    0, 4353, 4354, 4354, 4354, 4354,    0,    0,
+     4354, 4354, 4355, 4355, 4355, 4355,    0,    0, 4355, 4355,
+
+     4356, 4356, 4356,    0,    0,    0, 4356, 4357, 4357, 4357,
+        0,    0,    0, 4357, 4358, 4358, 4358, 4358,    0,    0,
+     4358, 4358, 4359, 4359, 4359, 4359,    0,    0, 4359, 4359,
+     4360, 4360, 4360,    0,    0,    0, 4360, 4361, 4361, 4361,
+        0,    0,    0, 4361, 4362, 4362, 4362, 4362,    0,    0,
+     4362, 4362, 4363, 4363, 4363, 4363,    0, 4363,    0, 4363,
+     4364, 4364, 4364, 4364,    0,    0, 4364, 4364, 4365, 4365,
+     4365,    0,    0,    0, 4365, 4366, 4366, 4366, 4366,    0,
+        0, 4366, 4366, 4367, 4367, 4367,    0,    0,    0, 4367,
+     4368, 4368, 4368,    0,    0,    0, 4368, 4369, 4369, 4369,
+
+     4369,    0,    0, 4369, 4369, 4370, 4370, 4370, 4370,    0,
+        0, 4370, 4370, 4371, 4371, 4371, 4371,    0,    0, 4371,
+     4371, 4372, 4372, 4372,    0,    0,    0, 4372, 4373, 4373,
+     4373, 4373,    0,    0, 4373, 4373, 4374, 4374, 4374,    0,
+        0,    0, 4374, 4375, 4375, 4375, 4375,    0,    0, 4375,
+     4375, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376, 4376,
+     4377, 4377, 4377, 4377, 4377, 4377, 4377, 4377, 4377, 4378,
+     4378, 4378,    0,    0,    0, 4378, 4379, 4379, 4379, 4379,
+        0,    0, 4379, 4379, 4380, 4380, 4380, 4380,    0, 4380,
+        0, 4380, 4381, 4381, 4381, 4381,    0,    0, 4381, 4381,
+
+     4382, 4382, 4382, 4382,    0, 4382,    0, 4382, 4383, 4383,
+     4383, 4383,    0,    0, 4383, 4383, 4384, 4384, 4384, 4384,
+        0,    0, 4384, 4384, 4385, 4385, 4385, 4385,    0,    0,
+     4385, 4385, 4386, 4386, 4386, 4386,    0,    0, 4386, 4386,
+     4387, 4387, 4387, 4387,    0,    0, 4387, 4387, 4388, 4388,
+     4388,    0,    0,    0, 4388, 4389, 4389, 4389, 4389,    0,
+        0, 4389, 4389, 4390, 4390, 4390,    0,    0,    0, 4390,
+     4391, 4391, 4391, 4391,    0,    0, 4391, 4391, 4392, 4392,
+     4392, 4392,    0,    0, 4392, 4392, 4393, 4393, 4393, 4393,
+        0, 4393,    0, 4393, 4394, 4394, 4394, 4394,    0, 4394,
+
+        0, 4394, 4395, 4395, 4395, 4395,    0,    0, 4395, 4395,
+     4396, 4396, 4396, 4396,    0,    0, 4396, 4396, 4397, 4397,
+     4397, 4397,    0, 4397,    0, 4397, 4398, 4398, 4398,    0,
+        0,    0, 4398, 4399, 4399, 4399, 4399,    0,    0, 4399,
+     4399, 4400, 4400, 4400, 4400,    0, 4400,    0, 4400, 4401,
      4401, 4401, 4401,    0,    0, 4401, 4401, 4402, 4402, 4402,
-     4402,    0, 4402,    0, 4402, 4403, 4403, 4403, 4403,    0,
-        0, 4403, 4403, 4404, 4404, 4404, 4404,    0, 4404,    0,
-     4404, 4405, 4405, 4405, 4405,    0,    0, 4405, 4405, 4406,
-     4406, 4406, 4406,    0,    0, 4406, 4406, 4407, 4407, 4407,
-     4407,    0,    0, 4407, 4407, 4408, 4408, 4408, 4408,    0,
-
-        0, 4408, 4408, 4409, 4409, 4409, 4409,    0,    0, 4409,
-     4409, 4410, 4410, 4410,    0,    0,    0, 4410, 4411, 4411,
-     4411, 4411,    0,    0, 4411, 4411, 4412, 4412, 4412,    0,
-        0,    0, 4412, 4413, 4413, 4413, 4413,    0,    0, 4413,
-     4413, 4414, 4414, 4414, 4414,    0,    0, 4414, 4414, 4415,
-     4415, 4415, 4415,    0, 4415,    0, 4415, 4416, 4416, 4416,
-     4416,    0, 4416,    0, 4416, 4417, 4417, 4417, 4417,    0,
-        0, 4417, 4417, 4418, 4418, 4418, 4418,    0,    0, 4418,
-     4418, 4419, 4419, 4419, 4419,    0, 4419,    0, 4419, 4420,
-     4420, 4420,    0,    0,    0, 4420, 4421, 4421, 4421, 4421,
-
-        0,    0, 4421, 4421, 4422, 4422, 4422, 4422,    0, 4422,
-        0, 4422, 4423, 4423, 4423, 4423,    0,    0, 4423, 4423,
-     4424, 4424, 4424, 4424,    0, 4424,    0, 4424, 4425, 4425,
-     4425,    0,    0,    0, 4425, 4426, 4426, 4426,    0,    0,
-        0, 4426, 4427, 4427, 4427,    0,    0,    0, 4427, 4428,
-     4428, 4428, 4428,    0,    0, 4428, 4428, 4429, 4429, 4429,
-        0,    0,    0, 4429, 4430, 4430, 4430, 4430,    0,    0,
-     4430, 4430, 4431, 4431, 4431,    0,    0,    0, 4431, 4432,
-     4432, 4432, 4432,    0,    0, 4432, 4432, 4433, 4433, 4433,
-        0,    0,    0, 4433, 4434, 4434, 4434, 4434,    0,    0,
-
-     4434, 4434, 4435, 4435, 4435, 4435, 4435, 4435, 4435, 4435,
-     4435, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436, 4436,
-     4437, 4437, 4437,    0,    0,    0, 4437, 4438, 4438, 4438,
-     4438,    0, 4438,    0, 4438, 4439, 4439, 4439, 4439,    0,
-        0, 4439, 4439, 4440, 4440, 4440, 4440,    0,    0, 4440,
-     4440, 4441, 4441, 4441, 4441,    0,    0, 4441, 4441, 4442,
-     4442, 4442, 4442,    0,    0, 4442, 4442, 4443, 4443, 4443,
-     4443,    0,    0, 4443, 4443, 4444, 4444, 4444,    0,    0,
-        0, 4444, 4445, 4445, 4445,    0,    0,    0, 4445, 4446,
-     4446, 4446, 4446,    0,    0, 4446, 4446, 4447, 4447, 4447,
-
-        0,    0,    0, 4447, 4448, 4448, 4448, 4448,    0,    0,
-     4448, 4448, 4449, 4449, 4449, 4449,    0,    0, 4449, 4449,
-     4450, 4450, 4450,    0,    0,    0, 4450, 4451, 4451, 4451,
-     4451,    0,    0, 4451, 4451, 4452, 4452, 4452, 4452,    0,
-     4452,    0, 4452, 4453, 4453, 4453,    0,    0,    0, 4453,
-     4454, 4454, 4454,    0,    0,    0, 4454, 4455, 4455, 4455,
-        0,    0,    0, 4455, 4456, 4456, 4456,    0,    0,    0,
-     4456, 4457, 4457, 4457,    0,    0,    0, 4457, 4458, 4458,
-     4458, 4458,    0,    0, 4458, 4458, 4459, 4459, 4459,    0,
-        0,    0, 4459, 4460, 4460, 4460, 4460,    0,    0, 4460,
-
-     4460, 4461, 4461, 4461,    0,    0,    0, 4461, 4462, 4462,
-     4462, 4462,    0,    0, 4462, 4462, 4463, 4463, 4463, 4463,
-     4463, 4463, 4463, 4463, 4463, 4464, 4464, 4464, 4464, 4464,
-     4464, 4464, 4464, 4464, 4465, 4465, 4465, 4465,    0, 4465,
-        0, 4465, 4466, 4466, 4466, 4466, 4466, 4466, 4466, 4466,
-     4466, 4467, 4467, 4467, 4467, 4467, 4467, 4467, 4467, 4467,
-     4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4468, 4469,
-     4469, 4469, 4469, 4469, 4469, 4469, 4469, 4469, 4470, 4470,
-     4470, 4470, 4470, 4470, 4470, 4470, 4470, 4471, 4471, 4471,
-     4471, 4471, 4471, 4471, 4471, 4471, 3905, 3905, 3905, 3905,
-
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905, 3905,
-     3905, 3905
+     4402,    0, 4402,    0, 4402, 4403, 4403, 4403,    0,    0,
+        0, 4403, 4404, 4404, 4404,    0,    0,    0, 4404, 4405,
+     4405, 4405, 4405,    0,    0, 4405, 4405, 4406, 4406, 4406,
+     4406,    0,    0, 4406, 4406, 4407, 4407, 4407,    0,    0,
+
+        0, 4407, 4408, 4408, 4408, 4408,    0,    0, 4408, 4408,
+     4409, 4409, 4409,    0,    0,    0, 4409, 4410, 4410, 4410,
+     4410,    0,    0, 4410, 4410, 4411, 4411, 4411, 4411, 4411,
+     4411, 4411, 4411, 4411, 4412, 4412, 4412, 4412, 4412, 4412,
+     4412, 4412, 4412, 4413, 4413, 4413,    0,    0,    0, 4413,
+     4414, 4414, 4414, 4414,    0, 4414,    0, 4414, 4415, 4415,
+     4415, 4415,    0,    0, 4415, 4415, 4416, 4416, 4416, 4416,
+        0,    0, 4416, 4416, 4417, 4417, 4417, 4417,    0,    0,
+     4417, 4417, 4418, 4418, 4418, 4418,    0,    0, 4418, 4418,
+     4419, 4419, 4419, 4419,    0,    0, 4419, 4419, 4420, 4420,
+
+     4420,    0,    0,    0, 4420, 4421, 4421, 4421,    0,    0,
+        0, 4421, 4422, 4422, 4422, 4422,    0,    0, 4422, 4422,
+     4423, 4423, 4423,    0,    0,    0, 4423, 4424, 4424, 4424,
+     4424,    0,    0, 4424, 4424, 4425, 4425, 4425, 4425,    0,
+        0, 4425, 4425, 4426, 4426, 4426,    0,    0,    0, 4426,
+     4427, 4427, 4427, 4427,    0,    0, 4427, 4427, 4428, 4428,
+     4428, 4428,    0, 4428,    0, 4428, 4429, 4429, 4429,    0,
+        0,    0, 4429, 4430, 4430, 4430,    0,    0,    0, 4430,
+     4431, 4431, 4431,    0,    0,    0, 4431, 4432, 4432, 4432,
+     4432, 4432, 4432, 4432, 4432, 4432, 4433, 4433, 4433, 4433,
+
+     4433, 4433, 4433, 4433, 4433, 4434, 4434, 4434, 4434, 4434,
+     4434, 4434, 4434, 4434, 4435, 4435, 4435, 4435, 4435, 4435,
+     4435, 4435, 4435, 4436, 4436, 4436, 4436, 4436, 4436, 4436,
+     4436, 4436, 4437, 4437, 4437, 4437, 4437, 4437, 4437, 4437,
+     4437, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+
+     3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885,
+     3885, 3885, 3885, 3885, 3885, 3885, 3885
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[652] =
+static yyconst flex_int32_t yy_rule_can_match_eol[648] =
     {   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, 1, 1, 
@@ -5010,14 +4965,14 @@ static yyconst flex_int32_t yy_rule_can_match_eol[652] =
     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, 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, 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, 0, 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, 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, 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, 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;
@@ -5436,9 +5391,6 @@ short int surfxml_storage_attach_isset;
 AT_surfxml_storage_content AX_surfxml_storage_content;
 #define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content)
 short int surfxml_storage_content_isset;
-AT_surfxml_storage_content___type AX_surfxml_storage_content___type;
-#define A_surfxml_storage_content___type (surfxml_bufferstack + AX_surfxml_storage_content___type)
-short int surfxml_storage_content___type_isset;
 AT_surfxml_storage_id AX_surfxml_storage_id;
 #define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id)
 short int surfxml_storage_id_isset;
@@ -5448,9 +5400,6 @@ short int surfxml_storage_typeId_isset;
 AT_surfxml_storage___type_content AX_surfxml_storage___type_content;
 #define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content)
 short int surfxml_storage___type_content_isset;
-AT_surfxml_storage___type_content___type AX_surfxml_storage___type_content___type;
-#define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type)
-short int surfxml_storage___type_content___type_isset;
 AT_surfxml_storage___type_id AX_surfxml_storage___type_id;
 #define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id)
 short int surfxml_storage___type_id_isset;
@@ -5502,23 +5451,23 @@ short int surfxml_zoneRoute_symmetrical_isset;
 
 /* XML state. */
 #ifdef FLEX_DEBUG
-# define ENTER(state)  debug_enter(state,#state)
-# define LEAVE         debug_leave()
-# define SET(state)    debug_set(state,#state)
+# 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)
+# define ENTER(state)  (yy_push_state(state))
+# define LEAVE    (yy_pop_state())
+# define SET(state)  BEGIN(state)
 #endif
 
 /* Generic actions. */
-#define SKIP   /*skip*/
+#define SKIP  /*skip*/
 #define SUCCEED        CLEANUP; return 0
 
-#define FAIL   return fail
+#define FAIL  return fail
 static int fail(const char*, ...);
 
 enum {flexml_max_err_msg_size = 512};
@@ -5555,12 +5504,12 @@ static int inext = 1;
 static int ck_blimit()
 {
      if (bnext >= blimit) {
-        blimit += FLEXML_BUFFERSTACKSIZE + 2;
-        {
-            char *temp = (char *) realloc(surfxml_bufferstack, blimit);
-            assert(temp);
-            surfxml_bufferstack = temp;
-        }
+   blimit += FLEXML_BUFFERSTACKSIZE + 2;
+   {
+       char *temp = (char *) realloc(surfxml_bufferstack, blimit);
+       assert(temp);
+       surfxml_bufferstack = temp;
+   }
      }
      return 0;
 }
@@ -5569,12 +5518,12 @@ static int ck_blimit()
 static int ck_ilimit()
 {
      if (inext >= ilimit) {
-        ilimit += FLEXML_INDEXSTACKSIZE + 2;
-        {
-            int *temp = (int *) realloc(indexstack, ilimit);
-            assert(temp);
-            indexstack = temp;
-        }
+   ilimit += FLEXML_INDEXSTACKSIZE + 2;
+   {
+       int *temp = (int *) realloc(indexstack, ilimit);
+       assert(temp);
+       indexstack = temp;
+   }
      }
      return 0;
 }
@@ -5588,16 +5537,16 @@ static void surfxml_bufferliteral(char c, int* pp, const char* text)
       assert(s && e && s <= e);
       ++s;
       while (s < e) {
-        if (isspace(*s)) {
-           BUFFERPUTC(' ');
-           do ++s; while (s < e && isspace(*s));
-        } else
-          BUFFERPUTC(*s++);
+   if (isspace(*s)) {
+      BUFFERPUTC(' ');
+      do ++s; while (s < e && isspace(*s));
+   } else
+     BUFFERPUTC(*s++);
       }
    } else {
       const char *s = text;
       while (*s)
-       BUFFERPUTC(*s++);
+  BUFFERPUTC(*s++);
    }
    BUFFERDONE;
 }
@@ -5631,18 +5580,18 @@ static int popbuffer(void)
 /* 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
+ * 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. */
@@ -5836,7 +5785,7 @@ FILE *surf_parse_get_out (void );
 
 void surf_parse_set_out  (FILE * _out_str  );
 
-                       int surf_parse_get_leng (void );
+      int surf_parse_get_leng (void );
 
 char *surf_parse_get_text (void );
 
@@ -5909,33 +5858,33 @@ static int input (void );
  */
 #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 < (size_t)max_size && \
-                            (c = getc( surf_parse_in )) != EOF && c != '\n'; ++n ) \
-                       buf[n] = (char) c; \
-               if ( c == '\n' ) \
-                       buf[n++] = (char) c; \
-               if ( c == EOF && ferror( surf_parse_in ) ) \
-                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
-               result = n; \
-               } \
-       else \
-               { \
-               errno=0; \
-               while ( (result = (int) fread(buf, 1, max_size, surf_parse_in))==0 && ferror(surf_parse_in)) \
-                       { \
-                       if( errno != EINTR) \
-                               { \
-                               YY_FATAL_ERROR( "input in flex scanner failed" ); \
-                               break; \
-                               } \
-                       errno=0; \
-                       clearerr(surf_parse_in); \
-                       } \
-               }\
+  if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+    { \
+    int c = '*'; \
+    size_t n; \
+    for ( n = 0; n < ( size_t ) max_size && \
+           (c = getc( surf_parse_in )) != EOF && c != '\n'; ++n ) \
+      buf[n] = (char) c; \
+    if ( c == '\n' ) \
+      buf[n++] = (char) c; \
+    if ( c == EOF && ferror( surf_parse_in ) ) \
+      YY_FATAL_ERROR( "input in flex scanner failed" ); \
+    result = n; \
+    } \
+  else \
+    { \
+    errno=0; \
+    while ( (result = (int) fread(buf, 1, max_size, surf_parse_in))==0 && ferror(surf_parse_in)) \
+      { \
+      if( errno != EINTR) \
+        { \
+        YY_FATAL_ERROR( "input in flex scanner failed" ); \
+        break; \
+        } \
+      errno=0; \
+      clearerr(surf_parse_in); \
+      } \
+    }\
 \
 
 #endif
@@ -5984,43 +5933,43 @@ extern int surf_parse_lex (void);
 #endif
 
 #define YY_RULE_SETUP \
-       YY_USER_ACTION
+  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;
+  yy_state_type yy_current_state;
+  char *yy_cp, *yy_bp;
+  int yy_act;
     
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
+  if ( !(yy_init) )
+    {
+    (yy_init) = 1;
 
 #ifdef YY_USER_INIT
-               YY_USER_INIT;
+    YY_USER_INIT;
 #endif
 
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
+    if ( ! (yy_start) )
+      (yy_start) = 1;  /* first start state */
 
-               if ( ! surf_parse_in )
-                       surf_parse_in = stdin;
+    if ( ! surf_parse_in )
+      surf_parse_in = stdin;
 
-               if ( ! surf_parse_out )
-                       surf_parse_out = stdout;
+    if ( ! surf_parse_out )
+      surf_parse_out = stdout;
 
-               if ( ! YY_CURRENT_BUFFER ) {
-                       surf_parse_ensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               surf_parse__create_buffer(surf_parse_in,YY_BUF_SIZE );
-               }
+    if ( ! YY_CURRENT_BUFFER ) {
+      surf_parse_ensure_buffer_stack ();
+      YY_CURRENT_BUFFER_LVALUE =
+        surf_parse__create_buffer(surf_parse_in,YY_BUF_SIZE );
+    }
 
-               surf_parse__load_buffer_state( );
-               }
+    surf_parse__load_buffer_state( );
+    }
 
-       {
+  {
 
  /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */
  SET(PROLOG);
@@ -6044,10 +5993,9 @@ YY_DECL
   bnext = inext = 1;
   surfxml_bufferliteral('\0', &bnext, "0.0");
   surfxml_bufferliteral('\0', &bnext, "2147483647");
-  surfxml_bufferliteral('\0', &bnext, "txt_unix");
+  surfxml_bufferliteral('\0', &bnext, "N11");
   surfxml_bufferliteral('\0', &bnext, "1");
   surfxml_bufferliteral('\0', &bnext, "0.0");
-  surfxml_bufferliteral('\0', &bnext, "txt_unix");
   surfxml_bufferliteral('\0', &bnext, "1");
   surfxml_bufferliteral('\0', &bnext, "0s");
   surfxml_bufferliteral('\0', &bnext, "-1.0");
@@ -6202,153 +6150,153 @@ YY_DECL
 
  /* COMMENTS and PIs: handled uniformly for efficiency. */
 
-       while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
-               {
-               yy_cp = (yy_c_buf_p);
+  while ( /*CONSTCOND*/1 )    /* loops until end-of-file is reached */
+    {
+    yy_cp = (yy_c_buf_p);
 
-               /* Support of surf_parse_text. */
-               *yy_cp = (yy_hold_char);
+    /* Support of surf_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_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_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 >= 3906 )
-                                       yy_c = yy_meta[(unsigned int) yy_c];
-                               }
-                       yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-                       ++yy_cp;
-                       }
-               while ( yy_base[yy_current_state] != 13997 );
+    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 >= 3886 )
+          yy_c = yy_meta[(unsigned int) yy_c];
+        }
+      yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+      ++yy_cp;
+      }
+    while ( yy_base[yy_current_state] != 13842 );
 
 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] )
-                       {
-                       unsigned int yyl;
-                       for ( yyl = 0; yyl < surf_parse_leng; ++yyl )
-                               if ( surf_parse_text[yyl] == '\n' )
-                                       
+    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] )
+      {
+      unsigned int yyl;
+      for ( yyl = 0; yyl < surf_parse_leng; ++yyl )
+        if ( surf_parse_text[yyl] == '\n' )
+          
     surf_parse_lineno++;
 ;
-                       }
+      }
 
-do_action:     /* This label is used only to access EOF actions. */
+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;
+    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
+  YY_BREAK
 case 2:
 YY_RULE_SETUP
 ENTER(INPI);
-       YY_BREAK
+  YY_BREAK
 
 case 3:
 YY_RULE_SETUP
 LEAVE;
-       YY_BREAK
+  YY_BREAK
 case 4:
 case 5:
 case 6:
 /* rule 6 can match eol */
 YY_RULE_SETUP
 SKIP;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(INCOMMENT):
 FAIL("EOF in comment.");
-       YY_BREAK
+  YY_BREAK
 
 case 7:
 YY_RULE_SETUP
 LEAVE;
-       YY_BREAK
+  YY_BREAK
 case 8:
 case 9:
 /* rule 9 can match eol */
 YY_RULE_SETUP
 SKIP;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(INPI):
 FAIL("EOF in PI (processing instruction).");
-       YY_BREAK
+  YY_BREAK
 
 /* SPACES: skipped uniformly */
 case 10:
 /* rule 10 can match eol */
 YY_RULE_SETUP
 SKIP;
-       YY_BREAK
+  YY_BREAK
 /* PROLOG: determine root element and process it. */
 
 case 11:
 /* rule 11 can match eol */
 YY_RULE_SETUP
 SET(DOCTYPE); 
-       YY_BREAK
+  YY_BREAK
 case 12:
 /* rule 12 can match eol */
 YY_RULE_SETUP
 FAIL("Bad declaration %s.\nIf your are using a XML v3 file (check the version attribute in <platform>), please update it with tools/simgrid_update_xml.pl",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 
 case 13:
 /* rule 13 can match eol */
 YY_RULE_SETUP
 SET(ROOT_surfxml_platform);
-       YY_BREAK
+  YY_BREAK
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
 FAIL("Bad declaration %s.\nIf your are using a XML v3 file (check the version attribute in <platform>), please update it with tools/simgrid_update_xml.pl",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 15:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in prolog.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(PROLOG):
 case YY_STATE_EOF(DOCTYPE):
 FAIL("EOF in prolog.");
-       YY_BREAK
+  YY_BREAK
 
 /* RULES DERIVED FROM DTD. */
 case 16:
 /* rule 16 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <AS> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 17:
 /* rule 17 can match eol */
 YY_RULE_SETUP
@@ -6359,88 +6307,88 @@ YY_RULE_SETUP
   surfxml_AS_routing_isset = 0;
   ENTER(AL_surfxml_AS); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 18:
 /* rule 18 can match eol */
 YY_RULE_SETUP
 if (surfxml_AS_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_AS>");} surfxml_AS_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_AS_id);
-       YY_BREAK
+  YY_BREAK
 case 19:
 /* rule 19 can match eol */
 YY_RULE_SETUP
 if (surfxml_AS_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_AS>");}  surfxml_AS_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_AS_id);
-       YY_BREAK
+  YY_BREAK
 case 20:
 /* rule 20 can match eol */
 case 21:
 /* rule 21 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_Full;
-       YY_BREAK
+  YY_BREAK
 case 22:
 /* rule 22 can match eol */
 case 23:
 /* rule 23 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_Floyd;
-       YY_BREAK
+  YY_BREAK
 case 24:
 /* rule 24 can match eol */
 case 25:
 /* rule 25 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_Dijkstra;
-       YY_BREAK
+  YY_BREAK
 case 26:
 /* rule 26 can match eol */
 case 27:
 /* rule 27 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_DijkstraCache;
-       YY_BREAK
+  YY_BREAK
 case 28:
 /* rule 28 can match eol */
 case 29:
 /* rule 29 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_None;
-       YY_BREAK
+  YY_BREAK
 case 30:
 /* rule 30 can match eol */
 case 31:
 /* rule 31 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_Vivaldi;
-       YY_BREAK
+  YY_BREAK
 case 32:
 /* rule 32 can match eol */
 case 33:
 /* rule 33 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_Cluster;
-       YY_BREAK
+  YY_BREAK
 case 34:
 /* rule 34 can match eol */
 case 35:
 /* rule 35 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_ClusterTorus;
-       YY_BREAK
+  YY_BREAK
 case 36:
 /* rule 36 can match eol */
 case 37:
 /* rule 37 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_ClusterFatTree;
-       YY_BREAK
+  YY_BREAK
 case 38:
 /* rule 38 can match eol */
 case 39:
 /* rule 39 can match eol */
 YY_RULE_SETUP
 A_surfxml_AS_routing = A_surfxml_AS_routing_ClusterDragonfly;
-       YY_BREAK
+  YY_BREAK
 case 40:
 YY_RULE_SETUP
 {
@@ -6448,7 +6396,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_AS_routing) FAIL("Required attribute `routing' not set for `AS' element.");
   LEAVE; STag_surfxml_AS();surfxml_pcdata_ix = 0; ENTER(S_surfxml_AS);
  }
-       YY_BREAK
+  YY_BREAK
 case 41:
 YY_RULE_SETUP
 {
@@ -6462,18 +6410,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 42:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of AS element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 43:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `AS' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_AS):
 FAIL("EOF in attribute list of `AS' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 44:
 /* rule 44 can match eol */
@@ -6489,16 +6437,16 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 45:
 /* rule 45 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</AS>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 46:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</AS>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_AS):
 case YY_STATE_EOF(S_surfxml_AS):
 case YY_STATE_EOF(S_surfxml_AS_1):
@@ -6507,13 +6455,13 @@ case YY_STATE_EOF(S_surfxml_AS_4):
 case YY_STATE_EOF(S_surfxml_AS_6):
 case YY_STATE_EOF(S_surfxml_AS_8):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</AS>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 47:
 /* rule 47 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <ASroute> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 48:
 /* rule 48 can match eol */
 YY_RULE_SETUP
@@ -6530,62 +6478,62 @@ YY_RULE_SETUP
   surfxml_ASroute_symmetrical_isset = 0;
   ENTER(AL_surfxml_ASroute); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 49:
 /* rule 49 can match eol */
 YY_RULE_SETUP
 if (surfxml_ASroute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_ASroute>");} surfxml_ASroute_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_ASroute_dst);
-       YY_BREAK
+  YY_BREAK
 case 50:
 /* rule 50 can match eol */
 YY_RULE_SETUP
 if (surfxml_ASroute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_ASroute>");}  surfxml_ASroute_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_ASroute_dst);
-       YY_BREAK
+  YY_BREAK
 case 51:
 /* rule 51 can match eol */
 YY_RULE_SETUP
 if (surfxml_ASroute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_ASroute>");} surfxml_ASroute_gw___dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_ASroute_gw___dst);
-       YY_BREAK
+  YY_BREAK
 case 52:
 /* rule 52 can match eol */
 YY_RULE_SETUP
 if (surfxml_ASroute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_ASroute>");}  surfxml_ASroute_gw___dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_ASroute_gw___dst);
-       YY_BREAK
+  YY_BREAK
 case 53:
 /* rule 53 can match eol */
 YY_RULE_SETUP
 if (surfxml_ASroute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_ASroute>");} surfxml_ASroute_gw___src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_ASroute_gw___src);
-       YY_BREAK
+  YY_BREAK
 case 54:
 /* rule 54 can match eol */
 YY_RULE_SETUP
 if (surfxml_ASroute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_ASroute>");}  surfxml_ASroute_gw___src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_ASroute_gw___src);
-       YY_BREAK
+  YY_BREAK
 case 55:
 /* rule 55 can match eol */
 YY_RULE_SETUP
 if (surfxml_ASroute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_ASroute>");} surfxml_ASroute_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_ASroute_src);
-       YY_BREAK
+  YY_BREAK
 case 56:
 /* rule 56 can match eol */
 YY_RULE_SETUP
 if (surfxml_ASroute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_ASroute>");}  surfxml_ASroute_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_ASroute_src);
-       YY_BREAK
+  YY_BREAK
 case 57:
 /* rule 57 can match eol */
 case 58:
 /* rule 58 can match eol */
 YY_RULE_SETUP
 A_surfxml_ASroute_symmetrical = A_surfxml_ASroute_symmetrical_YES;
-       YY_BREAK
+  YY_BREAK
 case 59:
 /* rule 59 can match eol */
 case 60:
 /* rule 60 can match eol */
 YY_RULE_SETUP
 A_surfxml_ASroute_symmetrical = A_surfxml_ASroute_symmetrical_NO;
-       YY_BREAK
+  YY_BREAK
 case 61:
 YY_RULE_SETUP
 {
@@ -6595,7 +6543,7 @@ 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; ENTER(S_surfxml_ASroute);
  }
-       YY_BREAK
+  YY_BREAK
 case 62:
 YY_RULE_SETUP
 {
@@ -6605,24 +6553,24 @@ 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: 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_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_zone: case S_surfxml_zone_5: SET(S_surfxml_zone_6); break;
-   case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
+   case S_surfxml_AS: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_3: 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;
+   case S_surfxml_zone_5: SET(S_surfxml_zone_6); break;
+   case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 63:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of ASroute element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 64:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `ASroute' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_ASroute):
 FAIL("EOF in attribute list of `ASroute' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 65:
 /* rule 65 can match eol */
@@ -6632,33 +6580,33 @@ YY_RULE_SETUP
   ETag_surfxml_ASroute();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: 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_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_zone: case S_surfxml_zone_5: SET(S_surfxml_zone_6); break;
-   case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
+   case S_surfxml_AS: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_3: 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;
+   case S_surfxml_zone_5: SET(S_surfxml_zone_6); break;
+   case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 66:
 /* rule 66 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</ASroute>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 67:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</ASroute>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_ASroute):
 case YY_STATE_EOF(S_surfxml_ASroute):
 case YY_STATE_EOF(S_surfxml_ASroute_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</ASroute>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 68:
 /* rule 68 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <actor> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 69:
 /* rule 69 can match eol */
 YY_RULE_SETUP
@@ -6667,70 +6615,70 @@ YY_RULE_SETUP
   surfxml_actor_function_isset = 0;
   AX_surfxml_actor_host = 0;
   surfxml_actor_host_isset = 0;
-  AX_surfxml_actor_kill___time = 60;
+  AX_surfxml_actor_kill___time = 46;
   surfxml_actor_kill___time_isset = 0;
   AX_surfxml_actor_on___failure = A_surfxml_actor_on___failure_DIE;
   surfxml_actor_on___failure_isset = 0;
-  AX_surfxml_actor_start___time = 55;
+  AX_surfxml_actor_start___time = 41;
   surfxml_actor_start___time_isset = 0;
   ENTER(AL_surfxml_actor); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 70:
 /* rule 70 can match eol */
 YY_RULE_SETUP
 if (surfxml_actor_function_isset != 0) {FAIL("Multiple definition of attribute function in <surfxml_actor>");} surfxml_actor_function_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_actor_function);
-       YY_BREAK
+  YY_BREAK
 case 71:
 /* rule 71 can match eol */
 YY_RULE_SETUP
 if (surfxml_actor_function_isset != 0) {FAIL("Multiple definition of attribute function in <surfxml_actor>");}  surfxml_actor_function_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_actor_function);
-       YY_BREAK
+  YY_BREAK
 case 72:
 /* rule 72 can match eol */
 YY_RULE_SETUP
 if (surfxml_actor_host_isset != 0) {FAIL("Multiple definition of attribute host in <surfxml_actor>");} surfxml_actor_host_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_actor_host);
-       YY_BREAK
+  YY_BREAK
 case 73:
 /* rule 73 can match eol */
 YY_RULE_SETUP
 if (surfxml_actor_host_isset != 0) {FAIL("Multiple definition of attribute host in <surfxml_actor>");}  surfxml_actor_host_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_actor_host);
-       YY_BREAK
+  YY_BREAK
 case 74:
 /* rule 74 can match eol */
 YY_RULE_SETUP
 if (surfxml_actor_kill___time_isset != 0) {FAIL("Multiple definition of attribute kill_time in <surfxml_actor>");} surfxml_actor_kill___time_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_actor_kill___time);
-       YY_BREAK
+  YY_BREAK
 case 75:
 /* rule 75 can match eol */
 YY_RULE_SETUP
 if (surfxml_actor_kill___time_isset != 0) {FAIL("Multiple definition of attribute kill_time in <surfxml_actor>");}  surfxml_actor_kill___time_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_actor_kill___time);
-       YY_BREAK
+  YY_BREAK
 case 76:
 /* rule 76 can match eol */
 case 77:
 /* rule 77 can match eol */
 YY_RULE_SETUP
 A_surfxml_actor_on___failure = A_surfxml_actor_on___failure_DIE;
-       YY_BREAK
+  YY_BREAK
 case 78:
 /* rule 78 can match eol */
 case 79:
 /* rule 79 can match eol */
 YY_RULE_SETUP
 A_surfxml_actor_on___failure = A_surfxml_actor_on___failure_RESTART;
-       YY_BREAK
+  YY_BREAK
 case 80:
 /* rule 80 can match eol */
 YY_RULE_SETUP
 if (surfxml_actor_start___time_isset != 0) {FAIL("Multiple definition of attribute start_time in <surfxml_actor>");} surfxml_actor_start___time_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_actor_start___time);
-       YY_BREAK
+  YY_BREAK
 case 81:
 /* rule 81 can match eol */
 YY_RULE_SETUP
 if (surfxml_actor_start___time_isset != 0) {FAIL("Multiple definition of attribute start_time in <surfxml_actor>");}  surfxml_actor_start___time_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_actor_start___time);
-       YY_BREAK
+  YY_BREAK
 case 82:
 YY_RULE_SETUP
 {
@@ -6738,7 +6686,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_actor_host) FAIL("Required attribute `host' not set for `actor' element.");
   LEAVE; STag_surfxml_actor();surfxml_pcdata_ix = 0; ENTER(S_surfxml_actor);
  }
-       YY_BREAK
+  YY_BREAK
 case 83:
 YY_RULE_SETUP
 {
@@ -6749,18 +6697,18 @@ YY_RULE_SETUP
    case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_4: case S_surfxml_platform_6: case S_surfxml_platform_7: case S_surfxml_platform_8: SET(S_surfxml_platform_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 84:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of actor element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 85:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `actor' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_actor):
 FAIL("EOF in attribute list of `actor' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 86:
 /* rule 86 can match eol */
@@ -6773,27 +6721,27 @@ YY_RULE_SETUP
    case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_4: case S_surfxml_platform_6: case S_surfxml_platform_7: case S_surfxml_platform_8: SET(S_surfxml_platform_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 87:
 /* rule 87 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</actor>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 88:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</actor>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_actor):
 case YY_STATE_EOF(S_surfxml_actor):
 case YY_STATE_EOF(S_surfxml_actor_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</actor>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 89:
 /* rule 89 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <argument> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 90:
 /* rule 90 can match eol */
 YY_RULE_SETUP
@@ -6802,25 +6750,25 @@ YY_RULE_SETUP
   surfxml_argument_value_isset = 0;
   ENTER(AL_surfxml_argument); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 91:
 /* rule 91 can match eol */
 YY_RULE_SETUP
 if (surfxml_argument_value_isset != 0) {FAIL("Multiple definition of attribute value in <surfxml_argument>");} surfxml_argument_value_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_argument_value);
-       YY_BREAK
+  YY_BREAK
 case 92:
 /* rule 92 can match eol */
 YY_RULE_SETUP
 if (surfxml_argument_value_isset != 0) {FAIL("Multiple definition of attribute value in <surfxml_argument>");}  surfxml_argument_value_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_argument_value);
-       YY_BREAK
+  YY_BREAK
 case 93:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_argument_value) FAIL("Required attribute `value' not set for `argument' element.");
   LEAVE; STag_surfxml_argument();surfxml_pcdata_ix = 0; ENTER(E_surfxml_argument);
  }
-       YY_BREAK
+  YY_BREAK
 case 94:
 YY_RULE_SETUP
 {
@@ -6831,18 +6779,18 @@ YY_RULE_SETUP
    case S_surfxml_process: case S_surfxml_process_1: case S_surfxml_process_2: SET(S_surfxml_process_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 95:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of argument element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 96:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `argument' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_argument):
 FAIL("EOF in attribute list of `argument' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 97:
 /* rule 97 can match eol */
@@ -6856,25 +6804,25 @@ YY_RULE_SETUP
    case S_surfxml_process: case S_surfxml_process_1: case S_surfxml_process_2: SET(S_surfxml_process_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 98:
 /* rule 98 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</argument>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 99:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</argument>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_argument):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</argument>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 100:
 /* rule 100 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <backbone> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 101:
 /* rule 101 can match eol */
 YY_RULE_SETUP
@@ -6887,38 +6835,38 @@ YY_RULE_SETUP
   surfxml_backbone_latency_isset = 0;
   ENTER(AL_surfxml_backbone); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 102:
 /* rule 102 can match eol */
 YY_RULE_SETUP
 if (surfxml_backbone_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in <surfxml_backbone>");} surfxml_backbone_bandwidth_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_backbone_bandwidth);
-       YY_BREAK
+  YY_BREAK
 case 103:
 /* rule 103 can match eol */
 YY_RULE_SETUP
 if (surfxml_backbone_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in <surfxml_backbone>");}  surfxml_backbone_bandwidth_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_backbone_bandwidth);
-       YY_BREAK
+  YY_BREAK
 case 104:
 /* rule 104 can match eol */
 YY_RULE_SETUP
 if (surfxml_backbone_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_backbone>");} surfxml_backbone_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_backbone_id);
-       YY_BREAK
+  YY_BREAK
 case 105:
 /* rule 105 can match eol */
 YY_RULE_SETUP
 if (surfxml_backbone_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_backbone>");}  surfxml_backbone_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_backbone_id);
-       YY_BREAK
+  YY_BREAK
 case 106:
 /* rule 106 can match eol */
 YY_RULE_SETUP
 if (surfxml_backbone_latency_isset != 0) {FAIL("Multiple definition of attribute latency in <surfxml_backbone>");} surfxml_backbone_latency_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_backbone_latency);
-       YY_BREAK
+  YY_BREAK
 case 107:
 /* rule 107 can match eol */
 YY_RULE_SETUP
 if (surfxml_backbone_latency_isset != 0) {FAIL("Multiple definition of attribute latency in <surfxml_backbone>");}  surfxml_backbone_latency_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_backbone_latency);
-       YY_BREAK
+  YY_BREAK
 case 108:
 YY_RULE_SETUP
 {
@@ -6927,7 +6875,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_backbone_latency) FAIL("Required attribute `latency' not set for `backbone' element.");
   LEAVE; STag_surfxml_backbone();surfxml_pcdata_ix = 0; ENTER(E_surfxml_backbone);
  }
-       YY_BREAK
+  YY_BREAK
 case 109:
 YY_RULE_SETUP
 {
@@ -6940,18 +6888,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 110:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of backbone element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 111:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `backbone' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_backbone):
 FAIL("EOF in attribute list of `backbone' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 112:
 /* rule 112 can match eol */
@@ -6965,25 +6913,25 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 113:
 /* rule 113 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</backbone>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 114:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</backbone>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_backbone):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</backbone>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 115:
 /* rule 115 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <bypassASroute> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 116:
 /* rule 116 can match eol */
 YY_RULE_SETUP
@@ -6998,48 +6946,48 @@ YY_RULE_SETUP
   surfxml_bypassASroute_src_isset = 0;
   ENTER(AL_surfxml_bypassASroute); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 117:
 /* rule 117 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassASroute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_bypassASroute>");} surfxml_bypassASroute_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassASroute_dst);
-       YY_BREAK
+  YY_BREAK
 case 118:
 /* rule 118 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassASroute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_bypassASroute>");}  surfxml_bypassASroute_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassASroute_dst);
-       YY_BREAK
+  YY_BREAK
 case 119:
 /* rule 119 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassASroute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_bypassASroute>");} surfxml_bypassASroute_gw___dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassASroute_gw___dst);
-       YY_BREAK
+  YY_BREAK
 case 120:
 /* rule 120 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassASroute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_bypassASroute>");}  surfxml_bypassASroute_gw___dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassASroute_gw___dst);
-       YY_BREAK
+  YY_BREAK
 case 121:
 /* rule 121 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassASroute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_bypassASroute>");} surfxml_bypassASroute_gw___src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassASroute_gw___src);
-       YY_BREAK
+  YY_BREAK
 case 122:
 /* rule 122 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassASroute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_bypassASroute>");}  surfxml_bypassASroute_gw___src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassASroute_gw___src);
-       YY_BREAK
+  YY_BREAK
 case 123:
 /* rule 123 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassASroute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_bypassASroute>");} surfxml_bypassASroute_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassASroute_src);
-       YY_BREAK
+  YY_BREAK
 case 124:
 /* rule 124 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassASroute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_bypassASroute>");}  surfxml_bypassASroute_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassASroute_src);
-       YY_BREAK
+  YY_BREAK
 case 125:
 YY_RULE_SETUP
 {
@@ -7049,7 +6997,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_bypassASroute_src) FAIL("Required attribute `src' not set for `bypassASroute' element.");
   LEAVE; STag_surfxml_bypassASroute();surfxml_pcdata_ix = 0; ENTER(S_surfxml_bypassASroute);
  }
-       YY_BREAK
+  YY_BREAK
 case 126:
 YY_RULE_SETUP
 {
@@ -7063,18 +7011,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 127:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of bypassASroute element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 128:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `bypassASroute' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_bypassASroute):
 FAIL("EOF in attribute list of `bypassASroute' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 129:
 /* rule 129 can match eol */
@@ -7088,27 +7036,27 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 130:
 /* rule 130 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</bypassASroute>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 131:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</bypassASroute>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_bypassASroute):
 case YY_STATE_EOF(S_surfxml_bypassASroute):
 case YY_STATE_EOF(S_surfxml_bypassASroute_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</bypassASroute>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 132:
 /* rule 132 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <bypassRoute> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 133:
 /* rule 133 can match eol */
 YY_RULE_SETUP
@@ -7119,28 +7067,28 @@ YY_RULE_SETUP
   surfxml_bypassRoute_src_isset = 0;
   ENTER(AL_surfxml_bypassRoute); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 134:
 /* rule 134 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_bypassRoute>");} surfxml_bypassRoute_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassRoute_dst);
-       YY_BREAK
+  YY_BREAK
 case 135:
 /* rule 135 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_bypassRoute>");}  surfxml_bypassRoute_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassRoute_dst);
-       YY_BREAK
+  YY_BREAK
 case 136:
 /* rule 136 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_bypassRoute>");} surfxml_bypassRoute_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassRoute_src);
-       YY_BREAK
+  YY_BREAK
 case 137:
 /* rule 137 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_bypassRoute>");}  surfxml_bypassRoute_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassRoute_src);
-       YY_BREAK
+  YY_BREAK
 case 138:
 YY_RULE_SETUP
 {
@@ -7148,7 +7096,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_bypassRoute_src) FAIL("Required attribute `src' not set for `bypassRoute' element.");
   LEAVE; STag_surfxml_bypassRoute();surfxml_pcdata_ix = 0; ENTER(S_surfxml_bypassRoute);
  }
-       YY_BREAK
+  YY_BREAK
 case 139:
 YY_RULE_SETUP
 {
@@ -7160,18 +7108,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 140:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of bypassRoute element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 141:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `bypassRoute' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_bypassRoute):
 FAIL("EOF in attribute list of `bypassRoute' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 142:
 /* rule 142 can match eol */
@@ -7185,27 +7133,27 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 143:
 /* rule 143 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</bypassRoute>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 144:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</bypassRoute>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_bypassRoute):
 case YY_STATE_EOF(S_surfxml_bypassRoute):
 case YY_STATE_EOF(S_surfxml_bypassRoute_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</bypassRoute>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 145:
 /* rule 145 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <bypassZoneRoute> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 146:
 /* rule 146 can match eol */
 YY_RULE_SETUP
@@ -7220,48 +7168,48 @@ YY_RULE_SETUP
   surfxml_bypassZoneRoute_src_isset = 0;
   ENTER(AL_surfxml_bypassZoneRoute); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 147:
 /* rule 147 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassZoneRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_bypassZoneRoute>");} surfxml_bypassZoneRoute_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassZoneRoute_dst);
-       YY_BREAK
+  YY_BREAK
 case 148:
 /* rule 148 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassZoneRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_bypassZoneRoute>");}  surfxml_bypassZoneRoute_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassZoneRoute_dst);
-       YY_BREAK
+  YY_BREAK
 case 149:
 /* rule 149 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassZoneRoute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_bypassZoneRoute>");} surfxml_bypassZoneRoute_gw___dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassZoneRoute_gw___dst);
-       YY_BREAK
+  YY_BREAK
 case 150:
 /* rule 150 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassZoneRoute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_bypassZoneRoute>");}  surfxml_bypassZoneRoute_gw___dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassZoneRoute_gw___dst);
-       YY_BREAK
+  YY_BREAK
 case 151:
 /* rule 151 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassZoneRoute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_bypassZoneRoute>");} surfxml_bypassZoneRoute_gw___src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassZoneRoute_gw___src);
-       YY_BREAK
+  YY_BREAK
 case 152:
 /* rule 152 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassZoneRoute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_bypassZoneRoute>");}  surfxml_bypassZoneRoute_gw___src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassZoneRoute_gw___src);
-       YY_BREAK
+  YY_BREAK
 case 153:
 /* rule 153 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassZoneRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_bypassZoneRoute>");} surfxml_bypassZoneRoute_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassZoneRoute_src);
-       YY_BREAK
+  YY_BREAK
 case 154:
 /* rule 154 can match eol */
 YY_RULE_SETUP
 if (surfxml_bypassZoneRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_bypassZoneRoute>");}  surfxml_bypassZoneRoute_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassZoneRoute_src);
-       YY_BREAK
+  YY_BREAK
 case 155:
 YY_RULE_SETUP
 {
@@ -7271,7 +7219,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_bypassZoneRoute_src) FAIL("Required attribute `src' not set for `bypassZoneRoute' element.");
   LEAVE; STag_surfxml_bypassZoneRoute();surfxml_pcdata_ix = 0; ENTER(S_surfxml_bypassZoneRoute);
  }
-       YY_BREAK
+  YY_BREAK
 case 156:
 YY_RULE_SETUP
 {
@@ -7285,18 +7233,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 157:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of bypassZoneRoute element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 158:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `bypassZoneRoute' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_bypassZoneRoute):
 FAIL("EOF in attribute list of `bypassZoneRoute' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 159:
 /* rule 159 can match eol */
@@ -7310,27 +7258,27 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 160:
 /* rule 160 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</bypassZoneRoute>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 161:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</bypassZoneRoute>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_bypassZoneRoute):
 case YY_STATE_EOF(S_surfxml_bypassZoneRoute):
 case YY_STATE_EOF(S_surfxml_bypassZoneRoute_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</bypassZoneRoute>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 162:
 /* rule 162 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <cabinet> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 163:
 /* rule 163 can match eol */
 YY_RULE_SETUP
@@ -7351,78 +7299,78 @@ YY_RULE_SETUP
   surfxml_cabinet_suffix_isset = 0;
   ENTER(AL_surfxml_cabinet); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 164:
 /* rule 164 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_bw_isset != 0) {FAIL("Multiple definition of attribute bw in <surfxml_cabinet>");} surfxml_cabinet_bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_bw);
-       YY_BREAK
+  YY_BREAK
 case 165:
 /* rule 165 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_bw_isset != 0) {FAIL("Multiple definition of attribute bw in <surfxml_cabinet>");}  surfxml_cabinet_bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_bw);
-       YY_BREAK
+  YY_BREAK
 case 166:
 /* rule 166 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_cabinet>");} surfxml_cabinet_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_id);
-       YY_BREAK
+  YY_BREAK
 case 167:
 /* rule 167 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_cabinet>");}  surfxml_cabinet_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_id);
-       YY_BREAK
+  YY_BREAK
 case 168:
 /* rule 168 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_lat_isset != 0) {FAIL("Multiple definition of attribute lat in <surfxml_cabinet>");} surfxml_cabinet_lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_lat);
-       YY_BREAK
+  YY_BREAK
 case 169:
 /* rule 169 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_lat_isset != 0) {FAIL("Multiple definition of attribute lat in <surfxml_cabinet>");}  surfxml_cabinet_lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_lat);
-       YY_BREAK
+  YY_BREAK
 case 170:
 /* rule 170 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in <surfxml_cabinet>");} surfxml_cabinet_prefix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_prefix);
-       YY_BREAK
+  YY_BREAK
 case 171:
 /* rule 171 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in <surfxml_cabinet>");}  surfxml_cabinet_prefix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_prefix);
-       YY_BREAK
+  YY_BREAK
 case 172:
 /* rule 172 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_radical_isset != 0) {FAIL("Multiple definition of attribute radical in <surfxml_cabinet>");} surfxml_cabinet_radical_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_radical);
-       YY_BREAK
+  YY_BREAK
 case 173:
 /* rule 173 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_radical_isset != 0) {FAIL("Multiple definition of attribute radical in <surfxml_cabinet>");}  surfxml_cabinet_radical_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_radical);
-       YY_BREAK
+  YY_BREAK
 case 174:
 /* rule 174 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_cabinet>");} surfxml_cabinet_speed_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_speed);
-       YY_BREAK
+  YY_BREAK
 case 175:
 /* rule 175 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_cabinet>");}  surfxml_cabinet_speed_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_speed);
-       YY_BREAK
+  YY_BREAK
 case 176:
 /* rule 176 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in <surfxml_cabinet>");} surfxml_cabinet_suffix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_suffix);
-       YY_BREAK
+  YY_BREAK
 case 177:
 /* rule 177 can match eol */
 YY_RULE_SETUP
 if (surfxml_cabinet_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in <surfxml_cabinet>");}  surfxml_cabinet_suffix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_suffix);
-       YY_BREAK
+  YY_BREAK
 case 178:
 YY_RULE_SETUP
 {
@@ -7435,7 +7383,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_cabinet_suffix) FAIL("Required attribute `suffix' not set for `cabinet' element.");
   LEAVE; STag_surfxml_cabinet();surfxml_pcdata_ix = 0; ENTER(E_surfxml_cabinet);
  }
-       YY_BREAK
+  YY_BREAK
 case 179:
 YY_RULE_SETUP
 {
@@ -7454,18 +7402,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 180:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of cabinet element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 181:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `cabinet' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_cabinet):
 FAIL("EOF in attribute list of `cabinet' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 182:
 /* rule 182 can match eol */
@@ -7481,38 +7429,38 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 183:
 /* rule 183 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</cabinet>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 184:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</cabinet>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_cabinet):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</cabinet>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 185:
 /* rule 185 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <cluster> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 186:
 /* rule 186 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_cluster_bb___bw = 0;
   surfxml_cluster_bb___bw_isset = 0;
-  AX_surfxml_cluster_bb___lat = 42;
+  AX_surfxml_cluster_bb___lat = 28;
   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 = 40;
+  AX_surfxml_cluster_core = 26;
   surfxml_cluster_core_isset = 0;
   AX_surfxml_cluster_id = 0;
   surfxml_cluster_id_isset = 0;
@@ -7542,221 +7490,221 @@ YY_RULE_SETUP
   surfxml_cluster_topology_isset = 0;
   ENTER(AL_surfxml_cluster); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 187:
 /* rule 187 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_bb___bw_isset != 0) {FAIL("Multiple definition of attribute bb_bw in <surfxml_cluster>");} surfxml_cluster_bb___bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_bb___bw);
-       YY_BREAK
+  YY_BREAK
 case 188:
 /* rule 188 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_bb___bw_isset != 0) {FAIL("Multiple definition of attribute bb_bw in <surfxml_cluster>");}  surfxml_cluster_bb___bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_bb___bw);
-       YY_BREAK
+  YY_BREAK
 case 189:
 /* rule 189 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_bb___lat_isset != 0) {FAIL("Multiple definition of attribute bb_lat in <surfxml_cluster>");} surfxml_cluster_bb___lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_bb___lat);
-       YY_BREAK
+  YY_BREAK
 case 190:
 /* rule 190 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_bb___lat_isset != 0) {FAIL("Multiple definition of attribute bb_lat in <surfxml_cluster>");}  surfxml_cluster_bb___lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_bb___lat);
-       YY_BREAK
+  YY_BREAK
 case 191:
 /* rule 191 can match eol */
 case 192:
 /* rule 192 can match eol */
 YY_RULE_SETUP
 A_surfxml_cluster_bb___sharing___policy = A_surfxml_cluster_bb___sharing___policy_SHARED;
-       YY_BREAK
+  YY_BREAK
 case 193:
 /* rule 193 can match eol */
 case 194:
 /* rule 194 can match eol */
 YY_RULE_SETUP
 A_surfxml_cluster_bb___sharing___policy = A_surfxml_cluster_bb___sharing___policy_FATPIPE;
-       YY_BREAK
+  YY_BREAK
 case 195:
 /* rule 195 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_bw_isset != 0) {FAIL("Multiple definition of attribute bw in <surfxml_cluster>");} surfxml_cluster_bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_bw);
-       YY_BREAK
+  YY_BREAK
 case 196:
 /* rule 196 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_bw_isset != 0) {FAIL("Multiple definition of attribute bw in <surfxml_cluster>");}  surfxml_cluster_bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_bw);
-       YY_BREAK
+  YY_BREAK
 case 197:
 /* rule 197 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_core_isset != 0) {FAIL("Multiple definition of attribute core in <surfxml_cluster>");} surfxml_cluster_core_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_core);
-       YY_BREAK
+  YY_BREAK
 case 198:
 /* rule 198 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_core_isset != 0) {FAIL("Multiple definition of attribute core in <surfxml_cluster>");}  surfxml_cluster_core_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_core);
-       YY_BREAK
+  YY_BREAK
 case 199:
 /* rule 199 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_cluster>");} surfxml_cluster_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_id);
-       YY_BREAK
+  YY_BREAK
 case 200:
 /* rule 200 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_cluster>");}  surfxml_cluster_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_id);
-       YY_BREAK
+  YY_BREAK
 case 201:
 /* rule 201 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_lat_isset != 0) {FAIL("Multiple definition of attribute lat in <surfxml_cluster>");} surfxml_cluster_lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_lat);
-       YY_BREAK
+  YY_BREAK
 case 202:
 /* rule 202 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_lat_isset != 0) {FAIL("Multiple definition of attribute lat in <surfxml_cluster>");}  surfxml_cluster_lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_lat);
-       YY_BREAK
+  YY_BREAK
 case 203:
 /* rule 203 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_limiter___link_isset != 0) {FAIL("Multiple definition of attribute limiter_link in <surfxml_cluster>");} surfxml_cluster_limiter___link_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_limiter___link);
-       YY_BREAK
+  YY_BREAK
 case 204:
 /* rule 204 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_limiter___link_isset != 0) {FAIL("Multiple definition of attribute limiter_link in <surfxml_cluster>");}  surfxml_cluster_limiter___link_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_limiter___link);
-       YY_BREAK
+  YY_BREAK
 case 205:
 /* rule 205 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_loopback___bw_isset != 0) {FAIL("Multiple definition of attribute loopback_bw in <surfxml_cluster>");} surfxml_cluster_loopback___bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_loopback___bw);
-       YY_BREAK
+  YY_BREAK
 case 206:
 /* rule 206 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_loopback___bw_isset != 0) {FAIL("Multiple definition of attribute loopback_bw in <surfxml_cluster>");}  surfxml_cluster_loopback___bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_loopback___bw);
-       YY_BREAK
+  YY_BREAK
 case 207:
 /* rule 207 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_loopback___lat_isset != 0) {FAIL("Multiple definition of attribute loopback_lat in <surfxml_cluster>");} surfxml_cluster_loopback___lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_loopback___lat);
-       YY_BREAK
+  YY_BREAK
 case 208:
 /* rule 208 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_loopback___lat_isset != 0) {FAIL("Multiple definition of attribute loopback_lat in <surfxml_cluster>");}  surfxml_cluster_loopback___lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_loopback___lat);
-       YY_BREAK
+  YY_BREAK
 case 209:
 /* rule 209 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in <surfxml_cluster>");} surfxml_cluster_prefix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_prefix);
-       YY_BREAK
+  YY_BREAK
 case 210:
 /* rule 210 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in <surfxml_cluster>");}  surfxml_cluster_prefix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_prefix);
-       YY_BREAK
+  YY_BREAK
 case 211:
 /* rule 211 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_radical_isset != 0) {FAIL("Multiple definition of attribute radical in <surfxml_cluster>");} surfxml_cluster_radical_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_radical);
-       YY_BREAK
+  YY_BREAK
 case 212:
 /* rule 212 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_radical_isset != 0) {FAIL("Multiple definition of attribute radical in <surfxml_cluster>");}  surfxml_cluster_radical_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_radical);
-       YY_BREAK
+  YY_BREAK
 case 213:
 /* rule 213 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_router___id_isset != 0) {FAIL("Multiple definition of attribute router_id in <surfxml_cluster>");} surfxml_cluster_router___id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_router___id);
-       YY_BREAK
+  YY_BREAK
 case 214:
 /* rule 214 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_router___id_isset != 0) {FAIL("Multiple definition of attribute router_id in <surfxml_cluster>");}  surfxml_cluster_router___id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_router___id);
-       YY_BREAK
+  YY_BREAK
 case 215:
 /* rule 215 can match eol */
 case 216:
 /* rule 216 can match eol */
 YY_RULE_SETUP
 A_surfxml_cluster_sharing___policy = A_surfxml_cluster_sharing___policy_SHARED;
-       YY_BREAK
+  YY_BREAK
 case 217:
 /* rule 217 can match eol */
 case 218:
 /* rule 218 can match eol */
 YY_RULE_SETUP
 A_surfxml_cluster_sharing___policy = A_surfxml_cluster_sharing___policy_FULLDUPLEX;
-       YY_BREAK
+  YY_BREAK
 case 219:
 /* rule 219 can match eol */
 case 220:
 /* rule 220 can match eol */
 YY_RULE_SETUP
 A_surfxml_cluster_sharing___policy = A_surfxml_cluster_sharing___policy_FATPIPE;
-       YY_BREAK
+  YY_BREAK
 case 221:
 /* rule 221 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_cluster>");} surfxml_cluster_speed_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_speed);
-       YY_BREAK
+  YY_BREAK
 case 222:
 /* rule 222 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_speed_isset != 0) {FAIL("Multiple definition of attribute speed in <surfxml_cluster>");}  surfxml_cluster_speed_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_speed);
-       YY_BREAK
+  YY_BREAK
 case 223:
 /* rule 223 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in <surfxml_cluster>");} surfxml_cluster_suffix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_suffix);
-       YY_BREAK
+  YY_BREAK
 case 224:
 /* rule 224 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in <surfxml_cluster>");}  surfxml_cluster_suffix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_suffix);
-       YY_BREAK
+  YY_BREAK
 case 225:
 /* rule 225 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_topo___parameters_isset != 0) {FAIL("Multiple definition of attribute topo_parameters in <surfxml_cluster>");} surfxml_cluster_topo___parameters_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_topo___parameters);
-       YY_BREAK
+  YY_BREAK
 case 226:
 /* rule 226 can match eol */
 YY_RULE_SETUP
 if (surfxml_cluster_topo___parameters_isset != 0) {FAIL("Multiple definition of attribute topo_parameters in <surfxml_cluster>");}  surfxml_cluster_topo___parameters_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_topo___parameters);
-       YY_BREAK
+  YY_BREAK
 case 227:
 /* rule 227 can match eol */
 case 228:
 /* rule 228 can match eol */
 YY_RULE_SETUP
 A_surfxml_cluster_topology = A_surfxml_cluster_topology_FLAT;
-       YY_BREAK
+  YY_BREAK
 case 229:
 /* rule 229 can match eol */
 case 230:
 /* rule 230 can match eol */
 YY_RULE_SETUP
 A_surfxml_cluster_topology = A_surfxml_cluster_topology_TORUS;
-       YY_BREAK
+  YY_BREAK
 case 231:
 /* rule 231 can match eol */
 case 232:
 /* rule 232 can match eol */
 YY_RULE_SETUP
 A_surfxml_cluster_topology = A_surfxml_cluster_topology_FAT___TREE;
-       YY_BREAK
+  YY_BREAK
 case 233:
 /* rule 233 can match eol */
 case 234:
 /* rule 234 can match eol */
 YY_RULE_SETUP
 A_surfxml_cluster_topology = A_surfxml_cluster_topology_DRAGONFLY;
-       YY_BREAK
+  YY_BREAK
 case 235:
 YY_RULE_SETUP
 {
@@ -7769,7 +7717,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_cluster_suffix) FAIL("Required attribute `suffix' not set for `cluster' element.");
   LEAVE; STag_surfxml_cluster();surfxml_pcdata_ix = 0; ENTER(S_surfxml_cluster);
  }
-       YY_BREAK
+  YY_BREAK
 case 236:
 YY_RULE_SETUP
 {
@@ -7788,18 +7736,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 237:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of cluster element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 238:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `cluster' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_cluster):
 FAIL("EOF in attribute list of `cluster' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 239:
 /* rule 239 can match eol */
@@ -7815,27 +7763,27 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 240:
 /* rule 240 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</cluster>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 241:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</cluster>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_cluster):
 case YY_STATE_EOF(S_surfxml_cluster):
 case YY_STATE_EOF(S_surfxml_cluster_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</cluster>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 242:
 /* rule 242 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <config> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 243:
 /* rule 243 can match eol */
 YY_RULE_SETUP
@@ -7844,24 +7792,24 @@ YY_RULE_SETUP
   surfxml_config_id_isset = 0;
   ENTER(AL_surfxml_config); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 244:
 /* rule 244 can match eol */
 YY_RULE_SETUP
 if (surfxml_config_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_config>");} surfxml_config_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_config_id);
-       YY_BREAK
+  YY_BREAK
 case 245:
 /* rule 245 can match eol */
 YY_RULE_SETUP
 if (surfxml_config_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_config>");}  surfxml_config_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_config_id);
-       YY_BREAK
+  YY_BREAK
 case 246:
 YY_RULE_SETUP
 {
   LEAVE; STag_surfxml_config();surfxml_pcdata_ix = 0; ENTER(S_surfxml_config);
  }
-       YY_BREAK
+  YY_BREAK
 case 247:
 YY_RULE_SETUP
 {
@@ -7870,18 +7818,18 @@ YY_RULE_SETUP
    case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 248:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of config element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 249:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `config' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_config):
 FAIL("EOF in attribute list of `config' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 250:
 /* rule 250 can match eol */
@@ -7894,27 +7842,27 @@ YY_RULE_SETUP
    case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 251:
 /* rule 251 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</config>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 252:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</config>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_config):
 case YY_STATE_EOF(S_surfxml_config):
 case YY_STATE_EOF(S_surfxml_config_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</config>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 253:
 /* rule 253 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <host> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 254:
 /* rule 254 can match eol */
 YY_RULE_SETUP
@@ -7923,11 +7871,11 @@ YY_RULE_SETUP
   surfxml_host_availability___file_isset = 0;
   AX_surfxml_host_coordinates = 0;
   surfxml_host_coordinates_isset = 0;
-  AX_surfxml_host_core = 25;
+  AX_surfxml_host_core = 20;
   surfxml_host_core_isset = 0;
   AX_surfxml_host_id = 0;
   surfxml_host_id_isset = 0;
-  AX_surfxml_host_pstate = 27;
+  AX_surfxml_host_pstate = 22;
   surfxml_host_pstate_isset = 0;
   AX_surfxml_host_speed = 0;
   surfxml_host_speed_isset = 0;
@@ -7935,78 +7883,78 @@ YY_RULE_SETUP
   surfxml_host_state___file_isset = 0;
   ENTER(AL_surfxml_host); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 255:
 /* rule 255 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);
-       YY_BREAK
+  YY_BREAK
 case 256:
 /* rule 256 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);
-       YY_BREAK
+  YY_BREAK
 case 257:
 /* rule 257 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);
-       YY_BREAK
+  YY_BREAK
 case 258:
 /* rule 258 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);
-       YY_BREAK
+  YY_BREAK
 case 259:
 /* rule 259 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);
-       YY_BREAK
+  YY_BREAK
 case 260:
 /* rule 260 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);
-       YY_BREAK
+  YY_BREAK
 case 261:
 /* rule 261 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);
-       YY_BREAK
+  YY_BREAK
 case 262:
 /* rule 262 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);
-       YY_BREAK
+  YY_BREAK
 case 263:
 /* rule 263 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);
-       YY_BREAK
+  YY_BREAK
 case 264:
 /* rule 264 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);
-       YY_BREAK
+  YY_BREAK
 case 265:
 /* rule 265 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);
-       YY_BREAK
+  YY_BREAK
 case 266:
 /* rule 266 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
+  YY_BREAK
 case 267:
 /* rule 267 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
+  YY_BREAK
 case 268:
 /* rule 268 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
+  YY_BREAK
 case 269:
 YY_RULE_SETUP
 {
@@ -8014,7 +7962,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_host_speed) FAIL("Required attribute `speed' not set for `host' element.");
   LEAVE; STag_surfxml_host();surfxml_pcdata_ix = 0; ENTER(S_surfxml_host);
  }
-       YY_BREAK
+  YY_BREAK
 case 270:
 YY_RULE_SETUP
 {
@@ -8026,18 +7974,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 271:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of host element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 272:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `host' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_host):
 FAIL("EOF in attribute list of `host' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 273:
 /* rule 273 can match eol */
@@ -8051,27 +7999,27 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 274:
 /* rule 274 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</host>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 275:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</host>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_host):
 case YY_STATE_EOF(S_surfxml_host):
 case YY_STATE_EOF(S_surfxml_host_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</host>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 276:
 /* rule 276 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <host_link> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 277:
 /* rule 277 can match eol */
 YY_RULE_SETUP
@@ -8084,38 +8032,38 @@ YY_RULE_SETUP
   surfxml_host___link_up_isset = 0;
   ENTER(AL_surfxml_host___link); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 278:
 /* rule 278 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
+  YY_BREAK
 case 279:
 /* rule 279 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
+  YY_BREAK
 case 280:
 /* rule 280 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
+  YY_BREAK
 case 281:
 /* rule 281 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
+  YY_BREAK
 case 282:
 /* rule 282 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
+  YY_BREAK
 case 283:
 /* rule 283 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
+  YY_BREAK
 case 284:
 YY_RULE_SETUP
 {
@@ -8124,7 +8072,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_host___link_up) FAIL("Required attribute `up' not set for `host_link' element.");
   LEAVE; STag_surfxml_host___link();surfxml_pcdata_ix = 0; ENTER(E_surfxml_host___link);
  }
-       YY_BREAK
+  YY_BREAK
 case 285:
 YY_RULE_SETUP
 {
@@ -8137,18 +8085,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 286:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of host_link element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 287:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `host_link' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_host___link):
 FAIL("EOF in attribute list of `host_link' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 288:
 /* rule 288 can match eol */
@@ -8162,25 +8110,26 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 289:
 /* rule 289 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</host_link>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 290:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</host_link>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_host___link):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</host_link>' expected.");
-       YY_BREAK
+  YY_BREAK
 
+/* <!-- tag include is deprecated. Not documented, and soon removed -->  */
 case 291:
 /* rule 291 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <include> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 292:
 /* rule 292 can match eol */
 YY_RULE_SETUP
@@ -8189,25 +8138,25 @@ YY_RULE_SETUP
   surfxml_include_file_isset = 0;
   ENTER(AL_surfxml_include); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 293:
 /* rule 293 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
+  YY_BREAK
 case 294:
 /* rule 294 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
+  YY_BREAK
 case 295:
 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
+  YY_BREAK
 case 296:
 YY_RULE_SETUP
 {
@@ -8220,18 +8169,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 297:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of include element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 298:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `include' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_include):
 FAIL("EOF in attribute list of `include' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 299:
 /* rule 299 can match eol */
@@ -8247,27 +8196,27 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 300:
 /* rule 300 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</include>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 301:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</include>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_include):
 case YY_STATE_EOF(S_surfxml_include):
 case YY_STATE_EOF(S_surfxml_include_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</include>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 302:
 /* rule 302 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <link> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 303:
 /* rule 303 can match eol */
 YY_RULE_SETUP
@@ -8288,89 +8237,89 @@ YY_RULE_SETUP
   surfxml_link_state___file_isset = 0;
   ENTER(AL_surfxml_link); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 304:
 /* rule 304 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
+  YY_BREAK
 case 305:
 /* rule 305 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
+  YY_BREAK
 case 306:
 /* rule 306 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
+  YY_BREAK
 case 307:
 /* rule 307 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
+  YY_BREAK
 case 308:
 /* rule 308 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
+  YY_BREAK
 case 309:
 /* rule 309 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
+  YY_BREAK
 case 310:
 /* rule 310 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
+  YY_BREAK
 case 311:
 /* rule 311 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
+  YY_BREAK
 case 312:
 /* rule 312 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
+  YY_BREAK
 case 313:
 /* rule 313 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
+  YY_BREAK
 case 314:
 /* rule 314 can match eol */
 case 315:
 /* rule 315 can match eol */
 YY_RULE_SETUP
 A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_SHARED;
-       YY_BREAK
+  YY_BREAK
 case 316:
 /* rule 316 can match eol */
 case 317:
 /* rule 317 can match eol */
 YY_RULE_SETUP
 A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_FATPIPE;
-       YY_BREAK
+  YY_BREAK
 case 318:
 /* rule 318 can match eol */
 case 319:
 /* rule 319 can match eol */
 YY_RULE_SETUP
 A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_FULLDUPLEX;
-       YY_BREAK
+  YY_BREAK
 case 320:
 /* rule 320 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
+  YY_BREAK
 case 321:
 /* rule 321 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
+  YY_BREAK
 case 322:
 YY_RULE_SETUP
 {
@@ -8378,7 +8327,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_link_id) FAIL("Required attribute `id' not set for `link' element.");
   LEAVE; STag_surfxml_link();surfxml_pcdata_ix = 0; ENTER(S_surfxml_link);
  }
-       YY_BREAK
+  YY_BREAK
 case 323:
 YY_RULE_SETUP
 {
@@ -8390,18 +8339,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 324:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of link element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 325:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `link' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_link):
 FAIL("EOF in attribute list of `link' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 326:
 /* rule 326 can match eol */
@@ -8415,27 +8364,27 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 327:
 /* rule 327 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</link>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 328:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</link>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_link):
 case YY_STATE_EOF(S_surfxml_link):
 case YY_STATE_EOF(S_surfxml_link_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</link>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 329:
 /* rule 329 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <link_ctn> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 330:
 /* rule 330 can match eol */
 YY_RULE_SETUP
@@ -8446,7 +8395,7 @@ YY_RULE_SETUP
   surfxml_link___ctn_id_isset = 0;
   ENTER(AL_surfxml_link___ctn); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 331:
 /* rule 331 can match eol */
@@ -8454,38 +8403,38 @@ case 332:
 /* rule 332 can match eol */
 YY_RULE_SETUP
 A_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_UP;
-       YY_BREAK
+  YY_BREAK
 case 333:
 /* rule 333 can match eol */
 case 334:
 /* rule 334 can match eol */
 YY_RULE_SETUP
 A_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_DOWN;
-       YY_BREAK
+  YY_BREAK
 case 335:
 /* rule 335 can match eol */
 case 336:
 /* rule 336 can match eol */
 YY_RULE_SETUP
 A_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_NONE;
-       YY_BREAK
+  YY_BREAK
 case 337:
 /* rule 337 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
+  YY_BREAK
 case 338:
 /* rule 338 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
+  YY_BREAK
 case 339:
 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
+  YY_BREAK
 case 340:
 YY_RULE_SETUP
 {
@@ -8500,18 +8449,18 @@ YY_RULE_SETUP
    case S_surfxml_zoneRoute: case S_surfxml_zoneRoute_1: case S_surfxml_zoneRoute_2: SET(S_surfxml_zoneRoute_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 341:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of link_ctn element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 342:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `link_ctn' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_link___ctn):
 FAIL("EOF in attribute list of `link_ctn' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 343:
 /* rule 343 can match eol */
@@ -8529,19 +8478,19 @@ YY_RULE_SETUP
    case S_surfxml_zoneRoute: case S_surfxml_zoneRoute_1: case S_surfxml_zoneRoute_2: SET(S_surfxml_zoneRoute_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 344:
 /* rule 344 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</link_ctn>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 345:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</link_ctn>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_link___ctn):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</link_ctn>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 /* <!-- <!ATTLIST model_prop key CDATA #REQUIRED> -->
   * <!-- <!ATTLIST model_prop key CDATA #REQUIRED> -->  */
@@ -8549,7 +8498,7 @@ case 346:
 /* rule 346 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <model_prop> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 347:
 /* rule 347 can match eol */
 YY_RULE_SETUP
@@ -8560,28 +8509,28 @@ YY_RULE_SETUP
   surfxml_model___prop_value_isset = 0;
   ENTER(AL_surfxml_model___prop); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 348:
 /* rule 348 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
+  YY_BREAK
 case 349:
 /* rule 349 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
+  YY_BREAK
 case 350:
 /* rule 350 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
+  YY_BREAK
 case 351:
 /* rule 351 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
+  YY_BREAK
 case 352:
 YY_RULE_SETUP
 {
@@ -8589,7 +8538,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_model___prop_value) FAIL("Required attribute `value' not set for `model_prop' element.");
   LEAVE; STag_surfxml_model___prop();surfxml_pcdata_ix = 0; ENTER(E_surfxml_model___prop);
  }
-       YY_BREAK
+  YY_BREAK
 case 353:
 YY_RULE_SETUP
 {
@@ -8600,18 +8549,18 @@ YY_RULE_SETUP
    case S_surfxml_storage___type: case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: SET(S_surfxml_storage___type_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 354:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of model_prop element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 355:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `model_prop' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_model___prop):
 FAIL("EOF in attribute list of `model_prop' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 356:
 /* rule 356 can match eol */
@@ -8624,25 +8573,25 @@ YY_RULE_SETUP
    case S_surfxml_storage___type: case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: SET(S_surfxml_storage___type_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 357:
 /* rule 357 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</model_prop>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 358:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</model_prop>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_model___prop):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</model_prop>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 359:
 /* rule 359 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <mount> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 360:
 /* rule 360 can match eol */
 YY_RULE_SETUP
@@ -8653,28 +8602,28 @@ YY_RULE_SETUP
   surfxml_mount_storageId_isset = 0;
   ENTER(AL_surfxml_mount); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 361:
 /* rule 361 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
+  YY_BREAK
 case 362:
 /* rule 362 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
+  YY_BREAK
 case 363:
 /* rule 363 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
+  YY_BREAK
 case 364:
 /* rule 364 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
+  YY_BREAK
 case 365:
 YY_RULE_SETUP
 {
@@ -8682,7 +8631,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_mount_storageId) FAIL("Required attribute `storageId' not set for `mount' element.");
   LEAVE; STag_surfxml_mount();surfxml_pcdata_ix = 0; ENTER(E_surfxml_mount);
  }
-       YY_BREAK
+  YY_BREAK
 case 366:
 YY_RULE_SETUP
 {
@@ -8693,18 +8642,18 @@ YY_RULE_SETUP
    case S_surfxml_host: case S_surfxml_host_1: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 367:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of mount element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 368:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `mount' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_mount):
 FAIL("EOF in attribute list of `mount' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 369:
 /* rule 369 can match eol */
@@ -8717,25 +8666,25 @@ YY_RULE_SETUP
    case S_surfxml_host: case S_surfxml_host_1: case S_surfxml_host_2: SET(S_surfxml_host_2); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 370:
 /* rule 370 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</mount>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 371:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</mount>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_mount):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</mount>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 372:
 /* rule 372 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <peer> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 373:
 /* rule 373 can match eol */
 YY_RULE_SETUP
@@ -8758,88 +8707,88 @@ YY_RULE_SETUP
   surfxml_peer_state___file_isset = 0;
   ENTER(AL_surfxml_peer); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 374:
 /* rule 374 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
+  YY_BREAK
 case 375:
 /* rule 375 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
+  YY_BREAK
 case 376:
 /* rule 376 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
+  YY_BREAK
 case 377:
 /* rule 377 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
+  YY_BREAK
 case 378:
 /* rule 378 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
+  YY_BREAK
 case 379:
 /* rule 379 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
+  YY_BREAK
 case 380:
 /* rule 380 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
+  YY_BREAK
 case 381:
 /* rule 381 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
+  YY_BREAK
 case 382:
 /* rule 382 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
+  YY_BREAK
 case 383:
 /* rule 383 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
+  YY_BREAK
 case 384:
 /* rule 384 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
+  YY_BREAK
 case 385:
 /* rule 385 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
+  YY_BREAK
 case 386:
 /* rule 386 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
+  YY_BREAK
 case 387:
 /* rule 387 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
+  YY_BREAK
 case 388:
 /* rule 388 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
+  YY_BREAK
 case 389:
 /* rule 389 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
+  YY_BREAK
 case 390:
 YY_RULE_SETUP
 {
@@ -8849,7 +8798,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_peer_speed) FAIL("Required attribute `speed' not set for `peer' element.");
   LEAVE; STag_surfxml_peer();surfxml_pcdata_ix = 0; ENTER(E_surfxml_peer);
  }
-       YY_BREAK
+  YY_BREAK
 case 391:
 YY_RULE_SETUP
 {
@@ -8865,18 +8814,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 392:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of peer element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 393:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `peer' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_peer):
 FAIL("EOF in attribute list of `peer' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 394:
 /* rule 394 can match eol */
@@ -8892,25 +8841,25 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 395:
 /* rule 395 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</peer>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 396:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</peer>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_peer):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</peer>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 /* <!-- 
   *              DTD of SimGrid platform and deployment files.
   * More info: http://simgrid.gforge.inria.fr/simgrid/latest/doc/platform.html
   * To upgrade your files, use the tool simgrid_update_xml
-  * * New in DTD version 5 (in SimGrid 3.16): backward compatible change (v4 files are valid v5 files)
+  * * New in DTD version 4.1 (in SimGrid 3.16): backward compatible change (v4 files are valid v4.1 files)
   *    - <zone> can be used as a synonym for the now deprecated <as>
   *    - <zoneZoute> an be used as a synonym for the now deprecated <asroute>
   *    - <bypassZoneRoute> an be used as a synonym for the now deprecated <bypassAsRoute>
@@ -8964,7 +8913,7 @@ case 397:
 /* rule 397 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <platform> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 398:
 /* rule 398 can match eol */
 YY_RULE_SETUP
@@ -8973,24 +8922,24 @@ YY_RULE_SETUP
   surfxml_platform_version_isset = 0;
   ENTER(AL_surfxml_platform); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 399:
 /* rule 399 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
+  YY_BREAK
 case 400:
 /* rule 400 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
+  YY_BREAK
 case 401:
 YY_RULE_SETUP
 {
   LEAVE; STag_surfxml_platform();surfxml_pcdata_ix = 0; ENTER(S_surfxml_platform);
  }
-       YY_BREAK
+  YY_BREAK
 case 402:
 YY_RULE_SETUP
 {
@@ -8999,18 +8948,18 @@ YY_RULE_SETUP
    case ROOT_surfxml_platform: SET(EPILOG); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 403:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of platform element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 404:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `platform' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_platform):
 FAIL("EOF in attribute list of `platform' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 405:
 /* rule 405 can match eol */
@@ -9023,16 +8972,16 @@ YY_RULE_SETUP
    case ROOT_surfxml_platform: SET(EPILOG); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 406:
 /* rule 406 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</platform>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 407:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</platform>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_platform):
 case YY_STATE_EOF(S_surfxml_platform):
 case YY_STATE_EOF(S_surfxml_platform_1):
@@ -9041,13 +8990,13 @@ case YY_STATE_EOF(S_surfxml_platform_4):
 case YY_STATE_EOF(S_surfxml_platform_6):
 case YY_STATE_EOF(S_surfxml_platform_8):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</platform>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 408:
 /* rule 408 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <process> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 409:
 /* rule 409 can match eol */
 YY_RULE_SETUP
@@ -9056,70 +9005,70 @@ YY_RULE_SETUP
   surfxml_process_function_isset = 0;
   AX_surfxml_process_host = 0;
   surfxml_process_host_isset = 0;
-  AX_surfxml_process_kill___time = 50;
+  AX_surfxml_process_kill___time = 36;
   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 = 45;
+  AX_surfxml_process_start___time = 31;
   surfxml_process_start___time_isset = 0;
   ENTER(AL_surfxml_process); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 410:
 /* rule 410 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
+  YY_BREAK
 case 411:
 /* rule 411 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
+  YY_BREAK
 case 412:
 /* rule 412 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
+  YY_BREAK
 case 413:
 /* rule 413 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
+  YY_BREAK
 case 414:
 /* rule 414 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
+  YY_BREAK
 case 415:
 /* rule 415 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
+  YY_BREAK
 case 416:
 /* rule 416 can match eol */
 case 417:
 /* rule 417 can match eol */
 YY_RULE_SETUP
 A_surfxml_process_on___failure = A_surfxml_process_on___failure_DIE;
-       YY_BREAK
+  YY_BREAK
 case 418:
 /* rule 418 can match eol */
 case 419:
 /* rule 419 can match eol */
 YY_RULE_SETUP
 A_surfxml_process_on___failure = A_surfxml_process_on___failure_RESTART;
-       YY_BREAK
+  YY_BREAK
 case 420:
 /* rule 420 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
+  YY_BREAK
 case 421:
 /* rule 421 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
+  YY_BREAK
 case 422:
 YY_RULE_SETUP
 {
@@ -9127,7 +9076,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_process_host) FAIL("Required attribute `host' not set for `process' element.");
   LEAVE; STag_surfxml_process();surfxml_pcdata_ix = 0; ENTER(S_surfxml_process);
  }
-       YY_BREAK
+  YY_BREAK
 case 423:
 YY_RULE_SETUP
 {
@@ -9138,18 +9087,18 @@ YY_RULE_SETUP
    case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_4: case S_surfxml_platform_6: case S_surfxml_platform_7: case S_surfxml_platform_8: SET(S_surfxml_platform_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 424:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of process element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 425:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `process' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_process):
 FAIL("EOF in attribute list of `process' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 426:
 /* rule 426 can match eol */
@@ -9162,21 +9111,21 @@ YY_RULE_SETUP
    case S_surfxml_platform: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_4: case S_surfxml_platform_6: case S_surfxml_platform_7: case S_surfxml_platform_8: SET(S_surfxml_platform_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 427:
 /* rule 427 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</process>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 428:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</process>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_process):
 case YY_STATE_EOF(S_surfxml_process):
 case YY_STATE_EOF(S_surfxml_process_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</process>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 /* <!-- <!ATTLIST prop key CDATA #REQUIRED> -->
   * <!-- <!ATTLIST prop key CDATA #REQUIRED> -->  */
@@ -9184,7 +9133,7 @@ case 429:
 /* rule 429 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <prop> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 430:
 /* rule 430 can match eol */
 YY_RULE_SETUP
@@ -9195,28 +9144,28 @@ YY_RULE_SETUP
   surfxml_prop_value_isset = 0;
   ENTER(AL_surfxml_prop); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 431:
 /* rule 431 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
+  YY_BREAK
 case 432:
 /* rule 432 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
+  YY_BREAK
 case 433:
 /* rule 433 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
+  YY_BREAK
 case 434:
 /* rule 434 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
+  YY_BREAK
 case 435:
 YY_RULE_SETUP
 {
@@ -9224,7 +9173,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_prop_value) FAIL("Required attribute `value' not set for `prop' element.");
   LEAVE; STag_surfxml_prop();surfxml_pcdata_ix = 0; ENTER(E_surfxml_prop);
  }
-       YY_BREAK
+  YY_BREAK
 case 436:
 YY_RULE_SETUP
 {
@@ -9244,18 +9193,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_2: case S_surfxml_zone_3: SET(S_surfxml_zone_3); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 437:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of prop element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 438:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `prop' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_prop):
 FAIL("EOF in attribute list of `prop' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 439:
 /* rule 439 can match eol */
@@ -9277,25 +9226,25 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_2: case S_surfxml_zone_3: SET(S_surfxml_zone_3); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 440:
 /* rule 440 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</prop>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 441:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</prop>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_prop):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</prop>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 442:
 /* rule 442 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <random> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 443:
 /* rule 443 can match eol */
 YY_RULE_SETUP
@@ -9318,7 +9267,7 @@ YY_RULE_SETUP
   surfxml_random_std___deviation_isset = 0;
   ENTER(AL_surfxml_random); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 444:
 /* rule 444 can match eol */
@@ -9326,98 +9275,98 @@ case 445:
 /* rule 445 can match eol */
 YY_RULE_SETUP
 A_surfxml_random_generator = A_surfxml_random_generator_DRAND48;
-       YY_BREAK
+  YY_BREAK
 case 446:
 /* rule 446 can match eol */
 case 447:
 /* rule 447 can match eol */
 YY_RULE_SETUP
 A_surfxml_random_generator = A_surfxml_random_generator_RAND;
-       YY_BREAK
+  YY_BREAK
 case 448:
 /* rule 448 can match eol */
 case 449:
 /* rule 449 can match eol */
 YY_RULE_SETUP
 A_surfxml_random_generator = A_surfxml_random_generator_RNGSTREAM;
-       YY_BREAK
+  YY_BREAK
 case 450:
 /* rule 450 can match eol */
 case 451:
 /* rule 451 can match eol */
 YY_RULE_SETUP
 A_surfxml_random_generator = A_surfxml_random_generator_NONE;
-       YY_BREAK
+  YY_BREAK
 case 452:
 /* rule 452 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
+  YY_BREAK
 case 453:
 /* rule 453 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
+  YY_BREAK
 case 454:
 /* rule 454 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
+  YY_BREAK
 case 455:
 /* rule 455 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
+  YY_BREAK
 case 456:
 /* rule 456 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
+  YY_BREAK
 case 457:
 /* rule 457 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
+  YY_BREAK
 case 458:
 /* rule 458 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
+  YY_BREAK
 case 459:
 /* rule 459 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
+  YY_BREAK
 case 460:
 /* rule 460 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
+  YY_BREAK
 case 461:
 /* rule 461 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
+  YY_BREAK
 case 462:
 /* rule 462 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
+  YY_BREAK
 case 463:
 /* rule 463 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
+  YY_BREAK
 case 464:
 /* rule 464 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
+  YY_BREAK
 case 465:
 /* rule 465 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
+  YY_BREAK
 case 466:
 YY_RULE_SETUP
 {
@@ -9428,7 +9377,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_random_std___deviation) FAIL("Required attribute `std_deviation' not set for `random' element.");
   LEAVE; STag_surfxml_random();surfxml_pcdata_ix = 0; ENTER(E_surfxml_random);
  }
-       YY_BREAK
+  YY_BREAK
 case 467:
 YY_RULE_SETUP
 {
@@ -9442,18 +9391,18 @@ YY_RULE_SETUP
    case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 468:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of random element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 469:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `random' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_random):
 FAIL("EOF in attribute list of `random' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 470:
 /* rule 470 can match eol */
@@ -9466,25 +9415,25 @@ YY_RULE_SETUP
    case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 471:
 /* rule 471 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</random>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 472:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</random>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_random):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</random>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 473:
 /* rule 473 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <route> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 474:
 /* rule 474 can match eol */
 YY_RULE_SETUP
@@ -9497,42 +9446,42 @@ YY_RULE_SETUP
   surfxml_route_symmetrical_isset = 0;
   ENTER(AL_surfxml_route); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 475:
 /* rule 475 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
+  YY_BREAK
 case 476:
 /* rule 476 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
+  YY_BREAK
 case 477:
 /* rule 477 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
+  YY_BREAK
 case 478:
 /* rule 478 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
+  YY_BREAK
 case 479:
 /* rule 479 can match eol */
 case 480:
 /* rule 480 can match eol */
 YY_RULE_SETUP
 A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_YES;
-       YY_BREAK
+  YY_BREAK
 case 481:
 /* rule 481 can match eol */
 case 482:
 /* rule 482 can match eol */
 YY_RULE_SETUP
 A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO;
-       YY_BREAK
+  YY_BREAK
 case 483:
 YY_RULE_SETUP
 {
@@ -9540,7 +9489,7 @@ YY_RULE_SETUP
   if (!AX_surfxml_route_src) FAIL("Required attribute `src' not set for `route' element.");
   LEAVE; STag_surfxml_route();surfxml_pcdata_ix = 0; ENTER(S_surfxml_route);
  }
-       YY_BREAK
+  YY_BREAK
 case 484:
 YY_RULE_SETUP
 {
@@ -9552,18 +9501,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 485:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of route element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 486:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `route' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_route):
 FAIL("EOF in attribute list of `route' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 487:
 /* rule 487 can match eol */
@@ -9577,27 +9526,27 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 488:
 /* rule 488 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</route>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 489:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</route>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_route):
 case YY_STATE_EOF(S_surfxml_route):
 case YY_STATE_EOF(S_surfxml_route_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</route>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 490:
 /* rule 490 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <router> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 491:
 /* rule 491 can match eol */
 YY_RULE_SETUP
@@ -9608,35 +9557,35 @@ YY_RULE_SETUP
   surfxml_router_id_isset = 0;
   ENTER(AL_surfxml_router); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 492:
 /* rule 492 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
+  YY_BREAK
 case 493:
 /* rule 493 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
+  YY_BREAK
 case 494:
 /* rule 494 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
+  YY_BREAK
 case 495:
 /* rule 495 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
+  YY_BREAK
 case 496:
 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
+  YY_BREAK
 case 497:
 YY_RULE_SETUP
 {
@@ -9647,18 +9596,18 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 498:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of router element.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case 499:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `router' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_router):
 FAIL("EOF in attribute list of `router' element.");
-       YY_BREAK
+  YY_BREAK
 
 case 500:
 /* rule 500 can match eol */
@@ -9672,25 +9621,25 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
+  YY_BREAK
 case 501:
 /* rule 501 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</router>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case 502:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</router>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_router):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</router>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 case 503:
 /* rule 503 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <storage> is not allowed here.");
-       YY_BREAK
+  YY_BREAK
 case 504:
 /* rule 504 can match eol */
 YY_RULE_SETUP
@@ -9699,67 +9648,55 @@ YY_RULE_SETUP
   surfxml_storage_attach_isset = 0;
   AX_surfxml_storage_content = 0;
   surfxml_storage_content_isset = 0;
-  AX_surfxml_storage_content___type = 31;
-  surfxml_storage_content___type_isset = 0;
   AX_surfxml_storage_id = 0;
   surfxml_storage_id_isset = 0;
   AX_surfxml_storage_typeId = 0;
   surfxml_storage_typeId_isset = 0;
   ENTER(AL_surfxml_storage); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
 case 505:
 /* rule 505 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
+  YY_BREAK
 case 506:
 /* rule 506 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
+  YY_BREAK
 case 507:
 /* rule 507 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
+  YY_BREAK
 case 508:
 /* rule 508 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
+  YY_BREAK
 case 509:
 /* rule 509 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
+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 510:
 /* rule 510 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
+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 511:
 /* rule 511 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
+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 512:
 /* rule 512 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 513:
-/* rule 513 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 514:
-/* rule 514 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 515:
+  YY_BREAK
+case 513:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_storage_attach) FAIL("Required attribute `attach' not set for `storage' element.");
@@ -9767,8 +9704,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_storage_typeId) FAIL("Required attribute `typeId' not set for `storage' element.");
   LEAVE; STag_surfxml_storage();surfxml_pcdata_ix = 0; ENTER(S_surfxml_storage);
  }
-       YY_BREAK
-case 516:
+  YY_BREAK
+case 514:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_storage_attach) FAIL("Required attribute `attach' not set for `storage' element.");
@@ -9780,21 +9717,21 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
-case 517:
+  YY_BREAK
+case 515:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of storage element.", surf_parse_text[0]);
-       YY_BREAK
-case 518:
+  YY_BREAK
+case 516:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `storage' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_storage):
 FAIL("EOF in attribute list of `storage' element.");
-       YY_BREAK
+  YY_BREAK
 
-case 519:
-/* rule 519 can match eol */
+case 517:
+/* rule 517 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -9805,109 +9742,95 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
-case 520:
-/* rule 520 can match eol */
+  YY_BREAK
+case 518:
+/* rule 518 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</storage>' expected.",surf_parse_text);
-       YY_BREAK
-case 521:
+  YY_BREAK
+case 519:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</storage>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_storage):
 case YY_STATE_EOF(S_surfxml_storage):
 case YY_STATE_EOF(S_surfxml_storage_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</storage>' expected.");
-       YY_BREAK
+  YY_BREAK
 
-case 522:
-/* rule 522 can match eol */
+case 520:
+/* rule 520 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <storage_type> is not allowed here.");
-       YY_BREAK
-case 523:
-/* rule 523 can match eol */
+  YY_BREAK
+case 521:
+/* rule 521 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_storage___type_content = 0;
   surfxml_storage___type_content_isset = 0;
-  AX_surfxml_storage___type_content___type = 16;
-  surfxml_storage___type_content___type_isset = 0;
   AX_surfxml_storage___type_id = 0;
   surfxml_storage___type_id_isset = 0;
-  AX_surfxml_storage___type_model = 0;
+  AX_surfxml_storage___type_model = 16;
   surfxml_storage___type_model_isset = 0;
   AX_surfxml_storage___type_size = 0;
   surfxml_storage___type_size_isset = 0;
   ENTER(AL_surfxml_storage___type); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
+case 522:
+/* rule 522 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 523:
+/* rule 523 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 524:
 /* rule 524 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
+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 */
 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
+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 */
 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
+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 */
 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
+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 */
 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
+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 */
 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 530:
-/* rule 530 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 531:
-/* rule 531 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 532:
-/* rule 532 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 533:
-/* rule 533 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 534:
+  YY_BREAK
+case 530:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_storage___type_id) FAIL("Required attribute `id' not set for `storage_type' element.");
-  if (!AX_surfxml_storage___type_model) FAIL("Required attribute `model' not set for `storage_type' element.");
   if (!AX_surfxml_storage___type_size) FAIL("Required attribute `size' not set for `storage_type' element.");
   LEAVE; STag_surfxml_storage___type();surfxml_pcdata_ix = 0; ENTER(S_surfxml_storage___type);
  }
-       YY_BREAK
-case 535:
+  YY_BREAK
+case 531:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_storage___type_id) FAIL("Required attribute `id' not set for `storage_type' element.");
-  if (!AX_surfxml_storage___type_model) FAIL("Required attribute `model' not set for `storage_type' element.");
   if (!AX_surfxml_storage___type_size) FAIL("Required attribute `size' not set for `storage_type' element.");
   LEAVE; STag_surfxml_storage___type(); surfxml_pcdata_ix = 0; ETag_surfxml_storage___type(); popbuffer(); /* attribute */
   switch (YY_START) {
@@ -9915,21 +9838,21 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
-case 536:
+  YY_BREAK
+case 532:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of storage_type element.", surf_parse_text[0]);
-       YY_BREAK
-case 537:
+  YY_BREAK
+case 533:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `storage_type' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_storage___type):
 FAIL("EOF in attribute list of `storage_type' element.");
-       YY_BREAK
+  YY_BREAK
 
-case 538:
-/* rule 538 can match eol */
+case 534:
+/* rule 534 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -9940,29 +9863,29 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
-case 539:
-/* rule 539 can match eol */
+  YY_BREAK
+case 535:
+/* rule 535 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</storage_type>' expected.",surf_parse_text);
-       YY_BREAK
-case 540:
+  YY_BREAK
+case 536:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</storage_type>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_storage___type):
 case YY_STATE_EOF(S_surfxml_storage___type):
 case YY_STATE_EOF(S_surfxml_storage___type_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</storage_type>' expected.");
-       YY_BREAK
+  YY_BREAK
 
-case 541:
-/* rule 541 can match eol */
+case 537:
+/* rule 537 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <trace> is not allowed here.");
-       YY_BREAK
-case 542:
-/* rule 542 can match eol */
+  YY_BREAK
+case 538:
+/* rule 538 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_trace_file = 0;
@@ -9973,47 +9896,47 @@ YY_RULE_SETUP
   surfxml_trace_periodicity_isset = 0;
   ENTER(AL_surfxml_trace); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
-case 543:
-/* rule 543 can match eol */
+case 539:
+/* rule 539 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 544:
-/* rule 544 can match eol */
+  YY_BREAK
+case 540:
+/* rule 540 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 545:
-/* rule 545 can match eol */
+  YY_BREAK
+case 541:
+/* rule 541 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 546:
-/* rule 546 can match eol */
+  YY_BREAK
+case 542:
+/* rule 542 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 547:
-/* rule 547 can match eol */
+  YY_BREAK
+case 543:
+/* rule 543 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 548:
-/* rule 548 can match eol */
+  YY_BREAK
+case 544:
+/* rule 544 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 549:
+  YY_BREAK
+case 545:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_trace_id) FAIL("Required attribute `id' not set for `trace' element.");
   if (!AX_surfxml_trace_periodicity) FAIL("Required attribute `periodicity' not set for `trace' element.");
   LEAVE; STag_surfxml_trace();pushbuffer(surfxml_pcdata_ix); BUFFERSET(surfxml_pcdata_ix);; ENTER(IN_trace);
  }
-       YY_BREAK
-case 550:
+  YY_BREAK
+case 546:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_trace_id) FAIL("Required attribute `id' not set for `trace' element.");
@@ -10026,21 +9949,21 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
-case 551:
+  YY_BREAK
+case 547:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of trace element.", surf_parse_text[0]);
-       YY_BREAK
-case 552:
+  YY_BREAK
+case 548:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `trace' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_trace):
 FAIL("EOF in attribute list of `trace' element.");
-       YY_BREAK
+  YY_BREAK
 
-case 553:
-/* rule 553 can match eol */
+case 549:
+/* rule 549 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -10055,23 +9978,23 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
-case 554:
-/* rule 554 can match eol */
+  YY_BREAK
+case 550:
+/* rule 550 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</trace>' expected.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(IN_trace):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</trace>' expected.");
-       YY_BREAK
+  YY_BREAK
 
-case 555:
-/* rule 555 can match eol */
+case 551:
+/* rule 551 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <trace_connect> is not allowed here.");
-       YY_BREAK
-case 556:
-/* rule 556 can match eol */
+  YY_BREAK
+case 552:
+/* rule 552 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_trace___connect_element = 0;
@@ -10082,72 +10005,72 @@ YY_RULE_SETUP
   surfxml_trace___connect_trace_isset = 0;
   ENTER(AL_surfxml_trace___connect); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
-case 557:
-/* rule 557 can match eol */
+case 553:
+/* rule 553 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
+  YY_BREAK
+case 554:
+/* rule 554 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 */
+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 */
 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
+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 */
 YY_RULE_SETUP
-A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_HOST___AVAIL;
-       YY_BREAK
+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 */
 YY_RULE_SETUP
-A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_SPEED;
-       YY_BREAK
+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 */
 YY_RULE_SETUP
-A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_LINK___AVAIL;
-       YY_BREAK
+A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_LATENCY;
+  YY_BREAK
 case 565:
 /* rule 565 can match eol */
-case 566:
-/* rule 566 can match eol */
-YY_RULE_SETUP
-A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_BANDWIDTH;
-       YY_BREAK
-case 567:
-/* rule 567 can match eol */
-case 568:
-/* rule 568 can match eol */
-YY_RULE_SETUP
-A_surfxml_trace___connect_kind = A_surfxml_trace___connect_kind_LATENCY;
-       YY_BREAK
-case 569:
-/* rule 569 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 570:
-/* rule 570 can match eol */
+  YY_BREAK
+case 566:
+/* rule 566 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 571:
+  YY_BREAK
+case 567:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_trace___connect_element) FAIL("Required attribute `element' not set for `trace_connect' element.");
   if (!AX_surfxml_trace___connect_trace) FAIL("Required attribute `trace' not set for `trace_connect' element.");
   LEAVE; STag_surfxml_trace___connect();surfxml_pcdata_ix = 0; ENTER(E_surfxml_trace___connect);
  }
-       YY_BREAK
-case 572:
+  YY_BREAK
+case 568:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_trace___connect_element) FAIL("Required attribute `element' not set for `trace_connect' element.");
@@ -10160,21 +10083,21 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
-case 573:
+  YY_BREAK
+case 569:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of trace_connect element.", surf_parse_text[0]);
-       YY_BREAK
-case 574:
+  YY_BREAK
+case 570:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `trace_connect' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_trace___connect):
 FAIL("EOF in attribute list of `trace_connect' element.");
-       YY_BREAK
+  YY_BREAK
 
-case 575:
-/* rule 575 can match eol */
+case 571:
+/* rule 571 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -10187,27 +10110,27 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
-case 576:
-/* rule 576 can match eol */
+  YY_BREAK
+case 572:
+/* rule 572 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</trace_connect>' expected.",surf_parse_text);
-       YY_BREAK
-case 577:
+  YY_BREAK
+case 573:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</trace_connect>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_trace___connect):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</trace_connect>' expected.");
-       YY_BREAK
+  YY_BREAK
 
-case 578:
-/* rule 578 can match eol */
+case 574:
+/* rule 574 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <zone> is not allowed here.");
-       YY_BREAK
-case 579:
-/* rule 579 can match eol */
+  YY_BREAK
+case 575:
+/* rule 575 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_zone_id = 0;
@@ -10216,97 +10139,97 @@ YY_RULE_SETUP
   surfxml_zone_routing_isset = 0;
   ENTER(AL_surfxml_zone); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
-case 580:
-/* rule 580 can match eol */
+case 576:
+/* rule 576 can match eol */
 YY_RULE_SETUP
 if (surfxml_zone_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_zone>");} surfxml_zone_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_zone_id);
-       YY_BREAK
+  YY_BREAK
+case 577:
+/* rule 577 can match eol */
+YY_RULE_SETUP
+if (surfxml_zone_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_zone>");}  surfxml_zone_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zone_id);
+  YY_BREAK
+case 578:
+/* rule 578 can match eol */
+case 579:
+/* rule 579 can match eol */
+YY_RULE_SETUP
+A_surfxml_zone_routing = A_surfxml_zone_routing_Full;
+  YY_BREAK
+case 580:
+/* rule 580 can match eol */
 case 581:
 /* rule 581 can match eol */
 YY_RULE_SETUP
-if (surfxml_zone_id_isset != 0) {FAIL("Multiple definition of attribute id in <surfxml_zone>");}  surfxml_zone_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zone_id);
-       YY_BREAK
+A_surfxml_zone_routing = A_surfxml_zone_routing_Floyd;
+  YY_BREAK
 case 582:
 /* rule 582 can match eol */
 case 583:
 /* rule 583 can match eol */
 YY_RULE_SETUP
-A_surfxml_zone_routing = A_surfxml_zone_routing_Full;
-       YY_BREAK
+A_surfxml_zone_routing = A_surfxml_zone_routing_Dijkstra;
+  YY_BREAK
 case 584:
 /* rule 584 can match eol */
 case 585:
 /* rule 585 can match eol */
 YY_RULE_SETUP
-A_surfxml_zone_routing = A_surfxml_zone_routing_Floyd;
-       YY_BREAK
+A_surfxml_zone_routing = A_surfxml_zone_routing_DijkstraCache;
+  YY_BREAK
 case 586:
 /* rule 586 can match eol */
 case 587:
 /* rule 587 can match eol */
 YY_RULE_SETUP
-A_surfxml_zone_routing = A_surfxml_zone_routing_Dijkstra;
-       YY_BREAK
+A_surfxml_zone_routing = A_surfxml_zone_routing_None;
+  YY_BREAK
 case 588:
 /* rule 588 can match eol */
 case 589:
 /* rule 589 can match eol */
 YY_RULE_SETUP
-A_surfxml_zone_routing = A_surfxml_zone_routing_DijkstraCache;
-       YY_BREAK
+A_surfxml_zone_routing = A_surfxml_zone_routing_Vivaldi;
+  YY_BREAK
 case 590:
 /* rule 590 can match eol */
 case 591:
 /* rule 591 can match eol */
 YY_RULE_SETUP
-A_surfxml_zone_routing = A_surfxml_zone_routing_None;
-       YY_BREAK
+A_surfxml_zone_routing = A_surfxml_zone_routing_Cluster;
+  YY_BREAK
 case 592:
 /* rule 592 can match eol */
 case 593:
 /* rule 593 can match eol */
 YY_RULE_SETUP
-A_surfxml_zone_routing = A_surfxml_zone_routing_Vivaldi;
-       YY_BREAK
+A_surfxml_zone_routing = A_surfxml_zone_routing_ClusterTorus;
+  YY_BREAK
 case 594:
 /* rule 594 can match eol */
 case 595:
 /* rule 595 can match eol */
 YY_RULE_SETUP
-A_surfxml_zone_routing = A_surfxml_zone_routing_Cluster;
-       YY_BREAK
+A_surfxml_zone_routing = A_surfxml_zone_routing_ClusterFatTree;
+  YY_BREAK
 case 596:
 /* rule 596 can match eol */
 case 597:
 /* rule 597 can match eol */
 YY_RULE_SETUP
-A_surfxml_zone_routing = A_surfxml_zone_routing_ClusterTorus;
-       YY_BREAK
-case 598:
-/* rule 598 can match eol */
-case 599:
-/* rule 599 can match eol */
-YY_RULE_SETUP
-A_surfxml_zone_routing = A_surfxml_zone_routing_ClusterFatTree;
-       YY_BREAK
-case 600:
-/* rule 600 can match eol */
-case 601:
-/* rule 601 can match eol */
-YY_RULE_SETUP
 A_surfxml_zone_routing = A_surfxml_zone_routing_ClusterDragonfly;
-       YY_BREAK
-case 602:
+  YY_BREAK
+case 598:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_zone_id) FAIL("Required attribute `id' not set for `zone' element.");
   if (!AX_surfxml_zone_routing) FAIL("Required attribute `routing' not set for `zone' element.");
   LEAVE; STag_surfxml_zone();surfxml_pcdata_ix = 0; ENTER(S_surfxml_zone);
  }
-       YY_BREAK
-case 603:
+  YY_BREAK
+case 599:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_zone_id) FAIL("Required attribute `id' not set for `zone' element.");
@@ -10319,21 +10242,21 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
-case 604:
+  YY_BREAK
+case 600:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of zone element.", surf_parse_text[0]);
-       YY_BREAK
-case 605:
+  YY_BREAK
+case 601:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `zone' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_zone):
 FAIL("EOF in attribute list of `zone' element.");
-       YY_BREAK
+  YY_BREAK
 
-case 606:
-/* rule 606 can match eol */
+case 602:
+/* rule 602 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
@@ -10346,16 +10269,16 @@ YY_RULE_SETUP
    case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_5: case S_surfxml_zone_6: SET(S_surfxml_zone_6); break;
   }
  }
-       YY_BREAK
-case 607:
-/* rule 607 can match eol */
+  YY_BREAK
+case 603:
+/* rule 603 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</zone>' expected.",surf_parse_text);
-       YY_BREAK
-case 608:
+  YY_BREAK
+case 604:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</zone>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_zone):
 case YY_STATE_EOF(S_surfxml_zone):
 case YY_STATE_EOF(S_surfxml_zone_1):
@@ -10364,15 +10287,15 @@ case YY_STATE_EOF(S_surfxml_zone_4):
 case YY_STATE_EOF(S_surfxml_zone_6):
 case YY_STATE_EOF(S_surfxml_zone_8):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</zone>' expected.");
-       YY_BREAK
+  YY_BREAK
 
-case 609:
-/* rule 609 can match eol */
+case 605:
+/* rule 605 can match eol */
 YY_RULE_SETUP
 FAIL("Starting tag <zoneRoute> is not allowed here.");
-       YY_BREAK
-case 610:
-/* rule 610 can match eol */
+  YY_BREAK
+case 606:
+/* rule 606 can match eol */
 YY_RULE_SETUP
 {
   AX_surfxml_zoneRoute_dst = 0;
@@ -10387,63 +10310,63 @@ YY_RULE_SETUP
   surfxml_zoneRoute_symmetrical_isset = 0;
   ENTER(AL_surfxml_zoneRoute); pushbuffer(0);
   }
-       YY_BREAK
+  YY_BREAK
 
+case 607:
+/* rule 607 can match eol */
+YY_RULE_SETUP
+if (surfxml_zoneRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_zoneRoute>");} surfxml_zoneRoute_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_zoneRoute_dst);
+  YY_BREAK
+case 608:
+/* rule 608 can match eol */
+YY_RULE_SETUP
+if (surfxml_zoneRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_zoneRoute>");}  surfxml_zoneRoute_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zoneRoute_dst);
+  YY_BREAK
+case 609:
+/* rule 609 can match eol */
+YY_RULE_SETUP
+if (surfxml_zoneRoute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_zoneRoute>");} surfxml_zoneRoute_gw___dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_zoneRoute_gw___dst);
+  YY_BREAK
+case 610:
+/* rule 610 can match eol */
+YY_RULE_SETUP
+if (surfxml_zoneRoute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_zoneRoute>");}  surfxml_zoneRoute_gw___dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zoneRoute_gw___dst);
+  YY_BREAK
 case 611:
 /* rule 611 can match eol */
 YY_RULE_SETUP
-if (surfxml_zoneRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_zoneRoute>");} surfxml_zoneRoute_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_zoneRoute_dst);
-       YY_BREAK
+if (surfxml_zoneRoute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_zoneRoute>");} surfxml_zoneRoute_gw___src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_zoneRoute_gw___src);
+  YY_BREAK
 case 612:
 /* rule 612 can match eol */
 YY_RULE_SETUP
-if (surfxml_zoneRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in <surfxml_zoneRoute>");}  surfxml_zoneRoute_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zoneRoute_dst);
-       YY_BREAK
+if (surfxml_zoneRoute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_zoneRoute>");}  surfxml_zoneRoute_gw___src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zoneRoute_gw___src);
+  YY_BREAK
 case 613:
 /* rule 613 can match eol */
 YY_RULE_SETUP
-if (surfxml_zoneRoute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_zoneRoute>");} surfxml_zoneRoute_gw___dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_zoneRoute_gw___dst);
-       YY_BREAK
+if (surfxml_zoneRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_zoneRoute>");} surfxml_zoneRoute_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_zoneRoute_src);
+  YY_BREAK
 case 614:
 /* rule 614 can match eol */
 YY_RULE_SETUP
-if (surfxml_zoneRoute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in <surfxml_zoneRoute>");}  surfxml_zoneRoute_gw___dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zoneRoute_gw___dst);
-       YY_BREAK
+if (surfxml_zoneRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_zoneRoute>");}  surfxml_zoneRoute_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zoneRoute_src);
+  YY_BREAK
 case 615:
 /* rule 615 can match eol */
-YY_RULE_SETUP
-if (surfxml_zoneRoute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_zoneRoute>");} surfxml_zoneRoute_gw___src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_zoneRoute_gw___src);
-       YY_BREAK
 case 616:
 /* rule 616 can match eol */
 YY_RULE_SETUP
-if (surfxml_zoneRoute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in <surfxml_zoneRoute>");}  surfxml_zoneRoute_gw___src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zoneRoute_gw___src);
-       YY_BREAK
+A_surfxml_zoneRoute_symmetrical = A_surfxml_zoneRoute_symmetrical_YES;
+  YY_BREAK
 case 617:
 /* rule 617 can match eol */
-YY_RULE_SETUP
-if (surfxml_zoneRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_zoneRoute>");} surfxml_zoneRoute_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_zoneRoute_src);
-       YY_BREAK
 case 618:
 /* rule 618 can match eol */
 YY_RULE_SETUP
-if (surfxml_zoneRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in <surfxml_zoneRoute>");}  surfxml_zoneRoute_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_zoneRoute_src);
-       YY_BREAK
-case 619:
-/* rule 619 can match eol */
-case 620:
-/* rule 620 can match eol */
-YY_RULE_SETUP
-A_surfxml_zoneRoute_symmetrical = A_surfxml_zoneRoute_symmetrical_YES;
-       YY_BREAK
-case 621:
-/* rule 621 can match eol */
-case 622:
-/* rule 622 can match eol */
-YY_RULE_SETUP
 A_surfxml_zoneRoute_symmetrical = A_surfxml_zoneRoute_symmetrical_NO;
-       YY_BREAK
-case 623:
+  YY_BREAK
+case 619:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_zoneRoute_dst) FAIL("Required attribute `dst' not set for `zoneRoute' element.");
@@ -10452,8 +10375,8 @@ YY_RULE_SETUP
   if (!AX_surfxml_zoneRoute_src) FAIL("Required attribute `src' not set for `zoneRoute' element.");
   LEAVE; STag_surfxml_zoneRoute();surfxml_pcdata_ix = 0; ENTER(S_surfxml_zoneRoute);
  }
-       YY_BREAK
-case 624:
+  YY_BREAK
+case 620:
 YY_RULE_SETUP
 {
   if (!AX_surfxml_zoneRoute_dst) FAIL("Required attribute `dst' not set for `zoneRoute' element.");
@@ -10462,172 +10385,172 @@ YY_RULE_SETUP
   if (!AX_surfxml_zoneRoute_src) FAIL("Required attribute `src' not set for `zoneRoute' element.");
   LEAVE; STag_surfxml_zoneRoute(); surfxml_pcdata_ix = 0; ETag_surfxml_zoneRoute(); popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: 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_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_zone: case S_surfxml_zone_5: SET(S_surfxml_zone_6); break;
-   case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
+   case S_surfxml_AS: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_3: 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;
+   case S_surfxml_zone_5: SET(S_surfxml_zone_6); break;
+   case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
-case 625:
+  YY_BREAK
+case 621:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c' in attribute list of zoneRoute element.", surf_parse_text[0]);
-       YY_BREAK
-case 626:
+  YY_BREAK
+case 622:
 YY_RULE_SETUP
 FAIL("Bad attribute `%s' in `zoneRoute' element start tag.",surf_parse_text);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(AL_surfxml_zoneRoute):
 FAIL("EOF in attribute list of `zoneRoute' element.");
-       YY_BREAK
+  YY_BREAK
 
-case 627:
-/* rule 627 can match eol */
+case 623:
+/* rule 623 can match eol */
 YY_RULE_SETUP
 {
   LEAVE;
   ETag_surfxml_zoneRoute();
   popbuffer(); /* attribute */
   switch (YY_START) {
-   case S_surfxml_AS: 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_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_zone: case S_surfxml_zone_5: SET(S_surfxml_zone_6); break;
-   case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
+   case S_surfxml_AS: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break;
+   case S_surfxml_AS_1: case S_surfxml_AS_3: 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;
+   case S_surfxml_zone_5: SET(S_surfxml_zone_6); break;
+   case S_surfxml_zone: case S_surfxml_zone_1: case S_surfxml_zone_3: case S_surfxml_zone_4: case S_surfxml_zone_6: case S_surfxml_zone_7: case S_surfxml_zone_8: SET(S_surfxml_zone_8); break;
   }
  }
-       YY_BREAK
-case 628:
-/* rule 628 can match eol */
+  YY_BREAK
+case 624:
+/* rule 624 can match eol */
 YY_RULE_SETUP
 FAIL("Unexpected end-tag `%s': `</zoneRoute>' expected.",surf_parse_text);
-       YY_BREAK
-case 629:
+  YY_BREAK
+case 625:
 YY_RULE_SETUP
 FAIL("Unexpected character `%c': `</zoneRoute>' expected.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(E_surfxml_zoneRoute):
 case YY_STATE_EOF(S_surfxml_zoneRoute):
 case YY_STATE_EOF(S_surfxml_zoneRoute_2):
 if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `</zoneRoute>' expected.");
-       YY_BREAK
+  YY_BREAK
 
 /* EPILOG: after the root element. */
 
-case 630:
+case 626:
 YY_RULE_SETUP
 {SET(PROLOG); yyless(0); CLEANUP; return -1;}
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(EPILOG):
 SUCCEED;
-       YY_BREAK
+  YY_BREAK
 
 /* CHARACTER DATA. */
 
 /* Non-defined standard entities... */
-case 631:
+case 627:
 YY_RULE_SETUP
 BUFFERPUTC('&');
-       YY_BREAK
-case 632:
+  YY_BREAK
+case 628:
 YY_RULE_SETUP
 BUFFERPUTC('<');
-       YY_BREAK
-case 633:
+  YY_BREAK
+case 629:
 YY_RULE_SETUP
 BUFFERPUTC('>');
-       YY_BREAK
-case 634:
+  YY_BREAK
+case 630:
 YY_RULE_SETUP
 BUFFERPUTC('\'');
-       YY_BREAK
-case 635:
+  YY_BREAK
+case 631:
 YY_RULE_SETUP
 BUFFERPUTC('"');
-       YY_BREAK
+  YY_BREAK
 /* Character entities. */
-case 636:
+case 632:
 YY_RULE_SETUP
 BUFFERPUTC((unsigned char)atoi(surf_parse_text+2));
-       YY_BREAK
-case 637:
+  YY_BREAK
+case 633:
 YY_RULE_SETUP
 BUFFERPUTC((unsigned char)strtol(surf_parse_text+3,NULL,16));
-       YY_BREAK
+  YY_BREAK
 
-case 638:
-/* rule 638 can match eol */
-case 639:
-/* rule 639 can match eol */
-case 640:
-/* rule 640 can match eol */
-case 641:
-/* rule 641 can match eol */
+case 634:
+/* rule 634 can match eol */
+case 635:
+/* rule 635 can match eol */
+case 636:
+/* rule 636 can match eol */
+case 637:
+/* rule 637 can match eol */
 YY_RULE_SETUP
 BUFFERPUTC('\n');
-       YY_BREAK
+  YY_BREAK
 
-case 642:
+case 638:
 YY_RULE_SETUP
 ENTER(CDATA);
-       YY_BREAK
-case 643:
+  YY_BREAK
+case 639:
 YY_RULE_SETUP
 FAIL("Unexpected `]""]>' in character data.");
-       YY_BREAK
+  YY_BREAK
 
-case 644:
+case 640:
 YY_RULE_SETUP
 BUFFERDONE; LEAVE;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(VALUE1):
 FAIL("EOF in literal (\"'\" expected).");
-       YY_BREAK
+  YY_BREAK
 
-case 645:
+case 641:
 YY_RULE_SETUP
 BUFFERDONE; LEAVE;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(VALUE2):
 FAIL("EOF in literal (`\"' expected).");
-       YY_BREAK
+  YY_BREAK
 
-case 646:
-/* rule 646 can match eol */
+case 642:
+/* rule 642 can match eol */
 YY_RULE_SETUP
 BUFFERPUTC(surf_parse_text[0]);
-       YY_BREAK
-case 647:
+  YY_BREAK
+case 643:
 YY_RULE_SETUP
 FAIL("Spurious `%c' in character data.",surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 
-case 648:
+case 644:
 YY_RULE_SETUP
 LEAVE;
-       YY_BREAK
-/* "]""]"              BUFFERPUTC(surf_parse_text[0]); BUFFERPUTC(surf_parse_text[1]); */
-case 649:
+  YY_BREAK
+/* "]""]"    BUFFERPUTC(surf_parse_text[0]); BUFFERPUTC(surf_parse_text[1]); */
+case 645:
 YY_RULE_SETUP
 BUFFERPUTC(surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(CDATA):
 FAIL("EOF in CDATA section.");
-       YY_BREAK
+  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 650:
-/* rule 650 can match eol */
+case 646:
+/* rule 646 can match eol */
 YY_RULE_SETUP
 FAIL("Syntax error on character `%c'.", surf_parse_text[0]);
-       YY_BREAK
+  YY_BREAK
 
-case 651:
+case 647:
 YY_RULE_SETUP
 ECHO;
-       YY_BREAK
+  YY_BREAK
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(S_surfxml_AS_2):
 case YY_STATE_EOF(S_surfxml_AS_5):
@@ -10655,332 +10578,332 @@ case YY_STATE_EOF(S_surfxml_zone_5):
 case YY_STATE_EOF(S_surfxml_zone_7):
 case YY_STATE_EOF(S_surfxml_zoneRoute_1):
 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 surf_parse_in at a new source and called
-                        * surf_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 = surf_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 ( surf_parse_wrap( ) )
-                                       {
-                                       /* Note: because we've taken care in
-                                        * yy_get_next_buffer() to have set up
-                                        * surf_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 */
+  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 surf_parse_in at a new source and called
+       * surf_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 = surf_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 ( surf_parse_wrap( ) )
+          {
+          /* Note: because we've taken care in
+           * yy_get_next_buffer() to have set up
+           * surf_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 surf_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
+ *  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
-               {
-                       int 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 )
-                               {
-                               int 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. */
-                                       surf_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 = NULL;
-
-                       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;
-                       surf_parse_restart(surf_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_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-               /* Extend the array by 50%, plus the number we really need. */
-               int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) surf_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];
+      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
+    {
+      int 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. */
 
-       return ret_val;
+      /* 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 )
+        {
+        int 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. */
+          surf_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 = NULL;
+
+      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;
+      surf_parse_restart(surf_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_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+    /* Extend the array by 50%, plus the number we really need. */
+    int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+    YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) surf_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_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 >= 3906 )
-                               yy_c = yy_meta[(unsigned int) yy_c];
-                       }
-               yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-               }
-
-       return yy_current_state;
+  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 >= 3886 )
+        yy_c = yy_meta[(unsigned int) yy_c];
+      }
+    yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) 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 );
+ *  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 >= 3906 )
-                       yy_c = yy_meta[(unsigned int) yy_c];
-               }
-       yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-       yy_is_jam = (yy_current_state == 3905);
-
-               return yy_is_jam ? 0 : 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 >= 3886 )
+      yy_c = yy_meta[(unsigned int) yy_c];
+    }
+  yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
+  yy_is_jam = (yy_current_state == 3885);
+
+    return yy_is_jam ? 0 : yy_current_state;
 }
 
 #ifndef YY_NO_UNPUT
@@ -10995,76 +10918,76 @@ static int yy_get_next_buffer (void)
 #endif
 
 {
-       int c;
+  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 */
-                       int 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. */
-                                       surf_parse_restart(surf_parse_in );
-
-                                       /*FALLTHROUGH*/
-
-                               case EOB_ACT_END_OF_FILE:
-                                       {
-                                       if ( surf_parse_wrap( ) )
-                                               return 0;
-
-                                       if ( ! (yy_did_buffer_switch_on_eof) )
-                                               YY_NEW_FILE;
+  *(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 */
+      int 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. */
+          surf_parse_restart(surf_parse_in );
+
+          /*FALLTHROUGH*/
+
+        case EOB_ACT_END_OF_FILE:
+          {
+          if ( surf_parse_wrap( ) )
+            return 0;
+
+          if ( ! (yy_did_buffer_switch_on_eof) )
+            YY_NEW_FILE;
 #ifdef __cplusplus
-                                       return yyinput();
+          return yyinput();
 #else
-                                       return input();
+          return input();
 #endif
-                                       }
+          }
 
-                               case EOB_ACT_CONTINUE_SCAN:
-                                       (yy_c_buf_p) = (yytext_ptr) + offset;
-                                       break;
-                               }
-                       }
-               }
+        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 surf_parse_text */
-       (yy_hold_char) = *++(yy_c_buf_p);
+  c = *(unsigned char *) (yy_c_buf_p);  /* cast for 8-bit char's */
+  *(yy_c_buf_p) = '\0';  /* preserve surf_parse_text */
+  (yy_hold_char) = *++(yy_c_buf_p);
 
-       if ( c == '\n' )
-               
+  if ( c == '\n' )
+    
     surf_parse_lineno++;
 ;
 
-       return c;
+  return c;
 }
-#endif /* ifndef YY_NO_INPUT */
+#endif  /* ifndef YY_NO_INPUT */
 
 /** Immediately switch to a different input stream.
  * @param input_file A readable stream.
@@ -11074,14 +10997,14 @@ static int yy_get_next_buffer (void)
     void surf_parse_restart  (FILE * input_file )
 {
     
-       if ( ! YY_CURRENT_BUFFER ){
+  if ( ! YY_CURRENT_BUFFER ){
         surf_parse_ensure_buffer_stack ();
-               YY_CURRENT_BUFFER_LVALUE =
+    YY_CURRENT_BUFFER_LVALUE =
             surf_parse__create_buffer(surf_parse_in,YY_BUF_SIZE );
-       }
+  }
 
-       surf_parse__init_buffer(YY_CURRENT_BUFFER,input_file );
-       surf_parse__load_buffer_state( );
+  surf_parse__init_buffer(YY_CURRENT_BUFFER,input_file );
+  surf_parse__load_buffer_state( );
 }
 
 /** Switch to a different input buffer.
@@ -11091,40 +11014,40 @@ static int yy_get_next_buffer (void)
     void surf_parse__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 {
     
-       /* TODO. We should be able to replace this entire function body
-        * with
-        *              surf_parse_pop_buffer_state();
-        *              surf_parse_push_buffer_state(new_buffer);
+  /* TODO. We should be able to replace this entire function body
+   * with
+   *    surf_parse_pop_buffer_state();
+   *    surf_parse_push_buffer_state(new_buffer);
      */
-       surf_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;
-       surf_parse__load_buffer_state( );
-
-       /* We don't actually know whether we did this switch during
-        * EOF (surf_parse_wrap()) processing, but the only time this flag
-        * is looked at is after surf_parse_wrap() is called, so it's safe
-        * to go ahead and always set it.
-        */
-       (yy_did_buffer_switch_on_eof) = 1;
+  surf_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;
+  surf_parse__load_buffer_state( );
+
+  /* We don't actually know whether we did this switch during
+   * EOF (surf_parse_wrap()) processing, but the only time this flag
+   * is looked at is after surf_parse_wrap() is called, so it's safe
+   * to go ahead and always set it.
+   */
+  (yy_did_buffer_switch_on_eof) = 1;
 }
 
 static void surf_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;
-       surf_parse_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-       (yy_hold_char) = *(yy_c_buf_p);
+      (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+  (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+  surf_parse_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+  (yy_hold_char) = *(yy_c_buf_p);
 }
 
 /** Allocate and initialize an input buffer state.
@@ -11135,26 +11058,26 @@ static void surf_parse__load_buffer_state  (void)
  */
     YY_BUFFER_STATE surf_parse__create_buffer  (FILE * file, int  size )
 {
-       YY_BUFFER_STATE b;
+  YY_BUFFER_STATE b;
     
-       b = (YY_BUFFER_STATE) surf_parse_alloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in surf_parse__create_buffer()" );
+  b = (YY_BUFFER_STATE) surf_parse_alloc(sizeof( struct yy_buffer_state )  );
+  if ( ! b )
+    YY_FATAL_ERROR( "out of dynamic memory in surf_parse__create_buffer()" );
 
-       b->yy_buf_size = (yy_size_t)size;
+  b->yy_buf_size = (yy_size_t)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 *) surf_parse_alloc(b->yy_buf_size + 2  );
-       if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in surf_parse__create_buffer()" );
+  /* 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 *) surf_parse_alloc(b->yy_buf_size + 2  );
+  if ( ! b->yy_ch_buf )
+    YY_FATAL_ERROR( "out of dynamic memory in surf_parse__create_buffer()" );
 
-       b->yy_is_our_buffer = 1;
+  b->yy_is_our_buffer = 1;
 
-       surf_parse__init_buffer(b,file );
+  surf_parse__init_buffer(b,file );
 
-       return b;
+  return b;
 }
 
 /** Destroy the buffer.
@@ -11164,16 +11087,16 @@ static void surf_parse__load_buffer_state  (void)
     void surf_parse__delete_buffer (YY_BUFFER_STATE  b )
 {
     
-       if ( ! b )
-               return;
+  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_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+    YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
-       if ( b->yy_is_our_buffer )
-               surf_parse_free((void *) b->yy_ch_buf  );
+  if ( b->yy_is_our_buffer )
+    surf_parse_free((void *) b->yy_ch_buf  );
 
-       surf_parse_free((void *) b  );
+  surf_parse_free((void *) b  );
 }
 
 /* Initializes or reinitializes a buffer.
@@ -11183,12 +11106,12 @@ static void surf_parse__load_buffer_state  (void)
     static void surf_parse__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 
 {
-       int oerrno = errno;
+  int oerrno = errno;
     
-       surf_parse__flush_buffer(b );
+  surf_parse__flush_buffer(b );
 
-       b->yy_input_file = file;
-       b->yy_fill_buffer = 1;
+  b->yy_input_file = file;
+  b->yy_fill_buffer = 1;
 
     /* If b is the current buffer, then surf_parse__init_buffer was _probably_
      * called from surf_parse_restart() or through yy_get_next_buffer.
@@ -11201,7 +11124,7 @@ static void surf_parse__load_buffer_state  (void)
 
         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
     
-       errno = oerrno;
+  errno = oerrno;
 }
 
 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
@@ -11210,25 +11133,25 @@ static void surf_parse__load_buffer_state  (void)
  */
     void surf_parse__flush_buffer (YY_BUFFER_STATE  b )
 {
-       if ( ! b )
-               return;
+      if ( ! b )
+    return;
 
-       b->yy_n_chars = 0;
+  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;
+  /* 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_buf_pos = &b->yy_ch_buf[0];
 
-       b->yy_at_bol = 1;
-       b->yy_buffer_status = YY_BUFFER_NEW;
+  b->yy_at_bol = 1;
+  b->yy_buffer_status = YY_BUFFER_NEW;
 
-       if ( b == YY_CURRENT_BUFFER )
-               surf_parse__load_buffer_state( );
+  if ( b == YY_CURRENT_BUFFER )
+    surf_parse__load_buffer_state( );
 }
 
 /** Pushes the new state onto the stack. The new state becomes
@@ -11239,28 +11162,28 @@ static void surf_parse__load_buffer_state  (void)
  */
 void surf_parse_push_buffer_state (YY_BUFFER_STATE new_buffer )
 {
-       if (new_buffer == NULL)
-               return;
+      if (new_buffer == NULL)
+    return;
 
-       surf_parse_ensure_buffer_stack();
+  surf_parse_ensure_buffer_stack();
 
-       /* This block is copied from surf_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);
-               }
+  /* This block is copied from surf_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;
+  /* Only push if top exists. Otherwise, replace top. */
+  if (YY_CURRENT_BUFFER)
+    (yy_buffer_stack_top)++;
+  YY_CURRENT_BUFFER_LVALUE = new_buffer;
 
-       /* copied from surf_parse__switch_to_buffer. */
-       surf_parse__load_buffer_state( );
-       (yy_did_buffer_switch_on_eof) = 1;
+  /* copied from surf_parse__switch_to_buffer. */
+  surf_parse__load_buffer_state( );
+  (yy_did_buffer_switch_on_eof) = 1;
 }
 
 /** Removes and deletes the top of the stack, if present.
@@ -11269,18 +11192,18 @@ void surf_parse_push_buffer_state (YY_BUFFER_STATE new_buffer )
  */
 void surf_parse_pop_buffer_state (void)
 {
-       if (!YY_CURRENT_BUFFER)
-               return;
+      if (!YY_CURRENT_BUFFER)
+    return;
 
-       surf_parse__delete_buffer(YY_CURRENT_BUFFER );
-       YY_CURRENT_BUFFER_LVALUE = NULL;
-       if ((yy_buffer_stack_top) > 0)
-               --(yy_buffer_stack_top);
+  surf_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) {
-               surf_parse__load_buffer_state( );
-               (yy_did_buffer_switch_on_eof) = 1;
-       }
+  if (YY_CURRENT_BUFFER) {
+    surf_parse__load_buffer_state( );
+    (yy_did_buffer_switch_on_eof) = 1;
+  }
 }
 
 /* Allocates the stack if it does not exist.
@@ -11288,45 +11211,45 @@ void surf_parse_pop_buffer_state (void)
  */
 static void surf_parse_ensure_buffer_stack (void)
 {
-       int num_to_alloc;
+  int num_to_alloc;
     
-       if (!(yy_buffer_stack)) {
+  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.
+    /* 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; /* After all that talk, this was set to 1 anyways... */
-               (yy_buffer_stack) = (struct yy_buffer_state**)surf_parse_alloc
-                                                               (num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                               );
-               if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in surf_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. */
-               yy_size_t grow_size = 8 /* arbitrary grow size */;
-
-               num_to_alloc = (yy_buffer_stack_max) + grow_size;
-               (yy_buffer_stack) = (struct yy_buffer_state**)surf_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 surf_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;
-       }
+    (yy_buffer_stack) = (struct yy_buffer_state**)surf_parse_alloc
+                (num_to_alloc * sizeof(struct yy_buffer_state*)
+                );
+    if ( ! (yy_buffer_stack) )
+      YY_FATAL_ERROR( "out of dynamic memory in surf_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. */
+    yy_size_t grow_size = 8 /* arbitrary grow size */;
+
+    num_to_alloc = (yy_buffer_stack_max) + grow_size;
+    (yy_buffer_stack) = (struct yy_buffer_state**)surf_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 surf_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.
@@ -11337,31 +11260,31 @@ static void surf_parse_ensure_buffer_stack (void)
  */
 YY_BUFFER_STATE surf_parse__scan_buffer  (char * base, yy_size_t  size )
 {
-       YY_BUFFER_STATE b;
+  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 NULL;
-
-       b = (YY_BUFFER_STATE) surf_parse_alloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in surf_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 = NULL;
-       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;
-
-       surf_parse__switch_to_buffer(b  );
-
-       return 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 NULL;
+
+  b = (YY_BUFFER_STATE) surf_parse_alloc(sizeof( struct yy_buffer_state )  );
+  if ( ! b )
+    YY_FATAL_ERROR( "out of dynamic memory in surf_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 = NULL;
+  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;
+
+  surf_parse__switch_to_buffer(b  );
+
+  return b;
 }
 
 /** Setup the input buffer state to scan a string. The next call to surf_parse_lex() will
@@ -11375,7 +11298,7 @@ YY_BUFFER_STATE surf_parse__scan_buffer  (char * base, yy_size_t  size )
 YY_BUFFER_STATE surf_parse__scan_string (yyconst char * yystr )
 {
     
-       return surf_parse__scan_bytes(yystr,(int) strlen(yystr) );
+  return surf_parse__scan_bytes(yystr,(int) strlen(yystr) );
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to surf_parse_lex() will
@@ -11387,64 +11310,64 @@ YY_BUFFER_STATE surf_parse__scan_string (yyconst char * yystr )
  */
 YY_BUFFER_STATE surf_parse__scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
 {
-       YY_BUFFER_STATE b;
-       char *buf;
-       yy_size_t n;
-       int i;
+  YY_BUFFER_STATE b;
+  char *buf;
+  yy_size_t n;
+  int i;
     
-       /* Get memory for full buffer, including space for trailing EOB's. */
-       n = (yy_size_t) (_yybytes_len + 2);
-       buf = (char *) surf_parse_alloc(n  );
-       if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in surf_parse__scan_bytes()" );
+  /* Get memory for full buffer, including space for trailing EOB's. */
+  n = (yy_size_t) (_yybytes_len + 2);
+  buf = (char *) surf_parse_alloc(n  );
+  if ( ! buf )
+    YY_FATAL_ERROR( "out of dynamic memory in surf_parse__scan_bytes()" );
 
-       for ( i = 0; i < _yybytes_len; ++i )
-               buf[i] = yybytes[i];
+  for ( i = 0; i < _yybytes_len; ++i )
+    buf[i] = yybytes[i];
 
-       buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+  buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-       b = surf_parse__scan_buffer(buf,n );
-       if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in surf_parse__scan_bytes()" );
+  b = surf_parse__scan_buffer(buf,n );
+  if ( ! b )
+    YY_FATAL_ERROR( "bad buffer in surf_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;
+  /* 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;
+  return b;
 }
 
     static void yy_push_state (int  _new_state )
 {
-       if ( (yy_start_stack_ptr) >= (yy_start_stack_depth) )
-               {
-               yy_size_t new_size;
+      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_size_t) (yy_start_stack_depth) * sizeof( int );
+    (yy_start_stack_depth) += YY_START_STACK_INCR;
+    new_size = (yy_size_t) (yy_start_stack_depth) * sizeof( int );
 
-               if ( ! (yy_start_stack) )
-                       (yy_start_stack) = (int *) surf_parse_alloc(new_size  );
+    if ( ! (yy_start_stack) )
+      (yy_start_stack) = (int *) surf_parse_alloc(new_size  );
 
-               else
-                       (yy_start_stack) = (int *) surf_parse_realloc((void *) (yy_start_stack),new_size  );
+    else
+      (yy_start_stack) = (int *) surf_parse_realloc((void *) (yy_start_stack),new_size  );
 
-               if ( ! (yy_start_stack) )
-                       YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
-               }
+    if ( ! (yy_start_stack) )
+      YY_FATAL_ERROR( "out of memory expanding start-condition stack" );
+    }
 
-       (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
+  (yy_start_stack)[(yy_start_stack_ptr)++] = YY_START;
 
-       BEGIN(_new_state);
+  BEGIN(_new_state);
 }
 
     static void yy_pop_state  (void)
 {
-       if ( --(yy_start_stack_ptr) < 0 )
-               YY_FATAL_ERROR( "start-condition stack underflow" );
+      if ( --(yy_start_stack_ptr) < 0 )
+    YY_FATAL_ERROR( "start-condition stack underflow" );
 
-       BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
+  BEGIN((yy_start_stack)[(yy_start_stack_ptr)]);
 }
 
 #ifndef YY_EXIT_FAILURE
@@ -11453,26 +11376,26 @@ YY_BUFFER_STATE surf_parse__scan_bytes  (yyconst char * yybytes, int  _yybytes_l
 
 static void yynoreturn yy_fatal_error (yyconst char* msg )
 {
-                       (void) fprintf( stderr, "%s\n", msg );
-       exit( YY_EXIT_FAILURE );
+      (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 surf_parse_text. */ \
+  do \
+    { \
+    /* Undo effects of setting up surf_parse_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-               surf_parse_text[surf_parse_leng] = (yy_hold_char); \
-               (yy_c_buf_p) = surf_parse_text + yyless_macro_arg; \
-               (yy_hold_char) = *(yy_c_buf_p); \
-               *(yy_c_buf_p) = '\0'; \
-               surf_parse_leng = yyless_macro_arg; \
-               } \
-       while ( 0 )
+    surf_parse_text[surf_parse_leng] = (yy_hold_char); \
+    (yy_c_buf_p) = surf_parse_text + yyless_macro_arg; \
+    (yy_hold_char) = *(yy_c_buf_p); \
+    *(yy_c_buf_p) = '\0'; \
+    surf_parse_leng = yyless_macro_arg; \
+    } \
+  while ( 0 )
 
 /* Accessor  methods (get/set functions) to struct members. */
 
@@ -11594,15 +11517,15 @@ int surf_parse_lex_destroy  (void)
 {
     
     /* Pop the buffer stack, destroying each element. */
-       while(YY_CURRENT_BUFFER){
-               surf_parse__delete_buffer(YY_CURRENT_BUFFER  );
-               YY_CURRENT_BUFFER_LVALUE = NULL;
-               surf_parse_pop_buffer_state();
-       }
+  while(YY_CURRENT_BUFFER){
+    surf_parse__delete_buffer(YY_CURRENT_BUFFER  );
+    YY_CURRENT_BUFFER_LVALUE = NULL;
+    surf_parse_pop_buffer_state();
+  }
 
-       /* Destroy the stack itself. */
-       surf_parse_free((yy_buffer_stack) );
-       (yy_buffer_stack) = NULL;
+  /* Destroy the stack itself. */
+  surf_parse_free((yy_buffer_stack) );
+  (yy_buffer_stack) = NULL;
 
     /* Destroy the start condition stack. */
         surf_parse_free((yy_start_stack)  );
@@ -11622,45 +11545,45 @@ int surf_parse_lex_destroy  (void)
 #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];
+    
+  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 )
-               ;
+  int n;
+  for ( n = 0; s[n]; ++n )
+    ;
 
-       return n;
+  return n;
 }
 #endif
 
 void *surf_parse_alloc (yy_size_t  size )
 {
-                       return malloc(size);
+      return malloc(size);
 }
 
 void *surf_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 realloc(ptr, 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 realloc(ptr, size);
 }
 
 void surf_parse_free (void * ptr )
 {
-                       free( (char *) ptr );   /* see surf_parse_realloc() for (char *) cast */
+      free( (char *) ptr );  /* see surf_parse_realloc() for (char *) cast */
 }
 
 #define YYTABLES_NAME "yytables"
@@ -11669,8 +11592,8 @@ void surf_parse_free (void * ptr )
 int surfxml_element_context(int i)
 {
   return (0<i && i<yy_start_stack_depth
-         ? yy_start_stack[yy_start_stack_ptr - i]
-         : 0);
+    ? yy_start_stack[yy_start_stack_ptr - i]
+    : 0);
 }
 
 #ifdef FLEX_DEBUG
@@ -11709,7 +11632,7 @@ static void debug_enter(int state, const char* statename) {
 static void debug_leave(void) {
     if (surf_parse__flex_debug) {
         print_yy_stack("--LEAVE : ");
-       print_surfxml_bufferstack();
+  print_surfxml_bufferstack();
     }
   yy_pop_state();
 }
@@ -11724,7 +11647,7 @@ static void cleanup(void)
 {
     if (surfxml_statenames) {
         free(surfxml_statenames);
-       surfxml_statenames = NULL;
+  surfxml_statenames = NULL;
     }
     free(surfxml_bufferstack);
     surfxml_bufferstack = NULL;
@@ -11739,12 +11662,12 @@ static int fail(const char* fmt, ...)
     va_list ap; va_start(ap, fmt);
 #ifdef FLEXML_yylineno
     used = snprintf(flexml_err_msg,flexml_max_err_msg_size,
-                  "Invalid XML (XML input line %d, state %d): ",
-                  surf_parse_lineno, YY_START);
+       "Invalid XML (XML input line %d, state %d): ",
+       surf_parse_lineno, YY_START);
 #else
     used = snprintf(flexml_err_msg,flexml_max_err_msg_size,
-                  "Invalid XML (state %d): ",
-                  YY_START);
+       "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);
index 722f962..fe1abe2 100644 (file)
@@ -315,16 +315,12 @@ typedef int AT_surfxml_storage_attach;
 #define AU_surfxml_storage_attach NULL
 typedef int AT_surfxml_storage_content;
 #define AU_surfxml_storage_content NULL
-typedef int AT_surfxml_storage_content___type;
-#define AU_surfxml_storage_content___type NULL
 typedef int AT_surfxml_storage_id;
 #define AU_surfxml_storage_id NULL
 typedef int AT_surfxml_storage_typeId;
 #define AU_surfxml_storage_typeId NULL
 typedef int AT_surfxml_storage___type_content;
 #define AU_surfxml_storage___type_content NULL
-typedef int AT_surfxml_storage___type_content___type;
-#define AU_surfxml_storage___type_content___type NULL
 typedef int AT_surfxml_storage___type_id;
 #define AU_surfxml_storage___type_id NULL
 typedef int AT_surfxml_storage___type_model;
@@ -680,9 +676,6 @@ XBT_PUBLIC_DATA(short int) surfxml_storage_attach_isset;
 XBT_PUBLIC_DATA(AT_surfxml_storage_content) AX_surfxml_storage_content;
 #define A_surfxml_storage_content (surfxml_bufferstack + AX_surfxml_storage_content)
 XBT_PUBLIC_DATA(short int) surfxml_storage_content_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage_content___type) AX_surfxml_storage_content___type;
-#define A_surfxml_storage_content___type (surfxml_bufferstack + AX_surfxml_storage_content___type)
-XBT_PUBLIC_DATA(short int) surfxml_storage_content___type_isset;
 XBT_PUBLIC_DATA(AT_surfxml_storage_id) AX_surfxml_storage_id;
 #define A_surfxml_storage_id (surfxml_bufferstack + AX_surfxml_storage_id)
 XBT_PUBLIC_DATA(short int) surfxml_storage_id_isset;
@@ -692,9 +685,6 @@ XBT_PUBLIC_DATA(short int) surfxml_storage_typeId_isset;
 XBT_PUBLIC_DATA(AT_surfxml_storage___type_content) AX_surfxml_storage___type_content;
 #define A_surfxml_storage___type_content (surfxml_bufferstack + AX_surfxml_storage___type_content)
 XBT_PUBLIC_DATA(short int) surfxml_storage___type_content_isset;
-XBT_PUBLIC_DATA(AT_surfxml_storage___type_content___type) AX_surfxml_storage___type_content___type;
-#define A_surfxml_storage___type_content___type (surfxml_bufferstack + AX_surfxml_storage___type_content___type)
-XBT_PUBLIC_DATA(short int) surfxml_storage___type_content___type_isset;
 XBT_PUBLIC_DATA(AT_surfxml_storage___type_id) AX_surfxml_storage___type_id;
 #define A_surfxml_storage___type_id (surfxml_bufferstack + AX_surfxml_storage___type_id)
 XBT_PUBLIC_DATA(short int) surfxml_storage___type_id_isset;
index ba3dab8..7e3c02e 100644 (file)
@@ -45,7 +45,7 @@ XBT_IMPORT_NO_EXPORT(unsigned int) surfxml_buffer_stack_stack[1024];
 
 void surfxml_bufferstack_push(int new_one)
 {
-  if (!new_one)
+  if (not new_one)
     old_buff = surfxml_bufferstack;
   else {
     surfxml_bufferstack_stack.push_back(surfxml_bufferstack);
@@ -55,7 +55,7 @@ void surfxml_bufferstack_push(int new_one)
 
 void surfxml_bufferstack_pop(int new_one)
 {
-  if (!new_one)
+  if (not new_one)
     surfxml_bufferstack = old_buff;
   else {
     free(surfxml_bufferstack);
@@ -118,7 +118,7 @@ void sg_platf_trace_connect(sg_platf_trace_connect_cbarg_t trace_connect)
 
 static int after_config_done;
 void parse_after_config() {
-  if (!after_config_done) {
+  if (not after_config_done) {
     TRACE_start();
 
     /* Register classical callbacks */
index 03adf83..12611da 100644 (file)
@@ -31,7 +31,7 @@ std::vector<simgrid::surf::LinkImpl*> parsed_link_list; /* temporary store of cu
  * Helping functions
  */
 void surf_parse_assert(bool cond, const char *fmt, ...) {
-  if (!cond ) {
+  if (not cond) {
     va_list va;
     va_start(va,fmt);
     int lineno = surf_parse_lineno;
@@ -315,7 +315,7 @@ void ETag_surfxml_storage()
   storage.id           = A_surfxml_storage_id;
   storage.type_id      = A_surfxml_storage_typeId;
   storage.content      = A_surfxml_storage_content;
-  storage.content_type = A_surfxml_storage_content___type;
+
   storage.attach       = A_surfxml_storage_attach;
   sg_platf_new_storage(&storage);
 }
@@ -338,7 +338,6 @@ void ETag_surfxml_storage___type()
   current_model_property_set    = nullptr;
 
   storage_type.content          = A_surfxml_storage___type_content;
-  storage_type.content_type     = A_surfxml_storage___type_content___type;
   storage_type.id               = A_surfxml_storage___type_id;
   storage_type.model            = A_surfxml_storage___type_model;
   storage_type.size             = surf_parse_get_size(A_surfxml_storage___type_size,
@@ -491,7 +490,7 @@ void STag_surfxml_prop()
     netzone->setProperty(A_surfxml_prop_id, A_surfxml_prop_value);
   }
   else{
-    if (!current_property_set)
+    if (not current_property_set)
       current_property_set = xbt_dict_new_homogeneous(&xbt_free_f); // Maybe, it should raise an error
     xbt_dict_set(current_property_set, A_surfxml_prop_id, xbt_strdup(A_surfxml_prop_value), nullptr);
     XBT_DEBUG("add prop %s=%s into current property set %p", A_surfxml_prop_id, A_surfxml_prop_value,
@@ -1071,7 +1070,7 @@ void STag_surfxml_argument(){
 }
 
 void STag_surfxml_model___prop(){
-  if (!current_model_property_set)
+  if (not current_model_property_set)
     current_model_property_set = new std::map<std::string, std::string>();
 
   current_model_property_set->insert(
index 39ec972..2fb1c6a 100644 (file)
@@ -57,8 +57,7 @@ xbt_automaton_transition_t xbt_automaton_transition_new(xbt_automaton_t a, xbt_a
 }
 
 xbt_automaton_exp_label_t xbt_automaton_exp_label_new(int type, ...){
-  xbt_automaton_exp_label_t label = NULL;
-  label = xbt_new0(struct xbt_automaton_exp_label, 1);
+  xbt_automaton_exp_label_t label = xbt_new0(struct xbt_automaton_exp_label, 1);
   label->type = type;
   xbt_automaton_exp_label_t left;
   xbt_automaton_exp_label_t right;
index 5541542..d451e56 100644 (file)
@@ -112,15 +112,15 @@ typedef unsigned int flex_uint32_t;
 /* The "const" storage-class-modifier is valid. */
 #define YY_USE_CONST
 
-#else  /* ! __cplusplus */
+#else  /* ! __cplusplus */
 
 /* C99 requires __STDC__ to be defined as 1. */
 #if defined (__STDC__)
 
 #define YY_USE_CONST
 
-#endif /* defined (__STDC__) */
-#endif /* ! __cplusplus */
+#endif  /* defined (__STDC__) */
+#endif  /* ! __cplusplus */
 
 #ifdef YY_USE_CONST
 #define yyconst const
@@ -199,83 +199,83 @@ extern FILE *xbt_automaton_parser_in, *xbt_automaton_parser_out;
     
 /* Return all but the first "n" matched characters back to the input stream. */
 #define yyless(n) \
-       do \
-               { \
-               /* Undo effects of setting up xbt_automaton_parser_text. */ \
+  do \
+    { \
+    /* Undo effects of setting up xbt_automaton_parser_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_automaton_parser_text again */ \
-               } \
-       while ( 0 )
+    *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_automaton_parser_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.
-        */
-       int 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;
+  {
+  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.
+   */
+  int 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;
+  /* Whether to try to fill the input buffer when we reach the
+   * end of it.
+   */
+  int yy_fill_buffer;
 
-       int yy_buffer_status;
+  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_automaton_parser_restart()), so that the user can continue scanning by
-        * just pointing xbt_automaton_parser_in at a new input file.
-        */
+  /* 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_automaton_parser_restart()), so that the user can continue scanning by
+   * just pointing xbt_automaton_parser_in at a new input file.
+   */
 #define YY_BUFFER_EOF_PENDING 2
 
-       };
+  };
 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
 
 /* Stack of input buffers. */
@@ -300,13 +300,13 @@ static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
 
 /* yy_hold_char holds the character lost when xbt_automaton_parser_text is formed. */
 static char yy_hold_char;
-static int yy_n_chars;         /* number of characters read into yy_ch_buf */
+static int yy_n_chars;    /* number of characters read into yy_ch_buf */
 yy_size_t xbt_automaton_parser_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 */
+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_automaton_parser_wrap()'s to do buffer switches
  * instead of setting up a fresh xbt_automaton_parser_in.  A bit of a hack ...
@@ -338,24 +338,24 @@ void xbt_automaton_parser_free (void *  );
 #define yy_new_buffer xbt_automaton_parser__create_buffer
 
 #define yy_set_interactive(is_interactive) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){ \
+  { \
+  if ( ! YY_CURRENT_BUFFER ){ \
         xbt_automaton_parser_ensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
+    YY_CURRENT_BUFFER_LVALUE =    \
             xbt_automaton_parser__create_buffer(xbt_automaton_parser_in,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-       }
+  } \
+  YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
+  }
 
 #define yy_set_bol(at_bol) \
-       { \
-       if ( ! YY_CURRENT_BUFFER ){\
+  { \
+  if ( ! YY_CURRENT_BUFFER ){\
         xbt_automaton_parser_ensure_buffer_stack (); \
-               YY_CURRENT_BUFFER_LVALUE =    \
+    YY_CURRENT_BUFFER_LVALUE =    \
             xbt_automaton_parser__create_buffer(xbt_automaton_parser_in,YY_BUF_SIZE ); \
-       } \
-       YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-       }
+  } \
+  YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
+  }
 
 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
 
@@ -392,21 +392,21 @@ static void yy_fatal_error (yyconst char msg[]  );
  * corresponding action - sets up xbt_automaton_parser_text.
  */
 #define YY_DO_BEFORE_ACTION \
-       (yytext_ptr) = yy_bp; \
-       xbt_automaton_parser_leng = (size_t) (yy_cp - yy_bp); \
-       (yy_hold_char) = *yy_cp; \
-       *yy_cp = '\0'; \
-       (yy_c_buf_p) = yy_cp;
+  (yytext_ptr) = yy_bp; \
+  xbt_automaton_parser_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 25
 #define YY_END_OF_BUFFER 26
 /* 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;
-       };
+  {
+  flex_int32_t yy_verify;
+  flex_int32_t yy_nxt;
+  };
 static yyconst flex_int16_t yy_accept[54] =
     {   0,
         0,    0,   26,   24,   18,   23,    8,   24,   24,    9,
@@ -650,33 +650,33 @@ static int input (void );
  */
 #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_automaton_parser_in )) != EOF && c != '\n'; ++n ) \
-                       buf[n] = (char) c; \
-               if ( c == '\n' ) \
-                       buf[n++] = (char) c; \
-               if ( c == EOF && ferror( xbt_automaton_parser_in ) ) \
-                       YY_FATAL_ERROR( "input in flex scanner failed" ); \
-               result = n; \
-               } \
-       else \
-               { \
-               errno=0; \
-               while ( (result = fread(buf, 1, max_size, xbt_automaton_parser_in))==0 && ferror(xbt_automaton_parser_in)) \
-                       { \
-                       if( errno != EINTR) \
-                               { \
-                               YY_FATAL_ERROR( "input in flex scanner failed" ); \
-                               break; \
-                               } \
-                       errno=0; \
-                       clearerr(xbt_automaton_parser_in); \
-                       } \
-               }\
+  if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
+    { \
+    int c = '*'; \
+    size_t n; \
+    for ( n = 0; n < max_size && \
+           (c = getc( xbt_automaton_parser_in )) != EOF && c != '\n'; ++n ) \
+      buf[n] = (char) c; \
+    if ( c == '\n' ) \
+      buf[n++] = (char) c; \
+    if ( c == EOF && ferror( xbt_automaton_parser_in ) ) \
+      YY_FATAL_ERROR( "input in flex scanner failed" ); \
+    result = n; \
+    } \
+  else \
+    { \
+    errno=0; \
+    while ( (result = fread(buf, 1, max_size, xbt_automaton_parser_in))==0 && ferror(xbt_automaton_parser_in)) \
+      { \
+      if( errno != EINTR) \
+        { \
+        YY_FATAL_ERROR( "input in flex scanner failed" ); \
+        break; \
+        } \
+      errno=0; \
+      clearerr(xbt_automaton_parser_in); \
+      } \
+    }\
 \
 
 #endif
@@ -725,206 +725,206 @@ extern int xbt_automaton_parser_lex (void);
 #endif
 
 #define YY_RULE_SETUP \
-       YY_USER_ACTION
+  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;
+  yy_state_type yy_current_state;
+  char *yy_cp, *yy_bp;
+  int yy_act;
     
-       if ( !(yy_init) )
-               {
-               (yy_init) = 1;
+  if ( !(yy_init) )
+    {
+    (yy_init) = 1;
 
 #ifdef YY_USER_INIT
-               YY_USER_INIT;
+    YY_USER_INIT;
 #endif
 
-               if ( ! (yy_start) )
-                       (yy_start) = 1; /* first start state */
+    if ( ! (yy_start) )
+      (yy_start) = 1;  /* first start state */
 
-               if ( ! xbt_automaton_parser_in )
-                       xbt_automaton_parser_in = stdin;
+    if ( ! xbt_automaton_parser_in )
+      xbt_automaton_parser_in = stdin;
 
-               if ( ! xbt_automaton_parser_out )
-                       xbt_automaton_parser_out = stdout;
+    if ( ! xbt_automaton_parser_out )
+      xbt_automaton_parser_out = stdout;
 
-               if ( ! YY_CURRENT_BUFFER ) {
-                       xbt_automaton_parser_ensure_buffer_stack ();
-                       YY_CURRENT_BUFFER_LVALUE =
-                               xbt_automaton_parser__create_buffer(xbt_automaton_parser_in,YY_BUF_SIZE );
-               }
+    if ( ! YY_CURRENT_BUFFER ) {
+      xbt_automaton_parser_ensure_buffer_stack ();
+      YY_CURRENT_BUFFER_LVALUE =
+        xbt_automaton_parser__create_buffer(xbt_automaton_parser_in,YY_BUF_SIZE );
+    }
 
-               xbt_automaton_parser__load_buffer_state( );
-               }
+    xbt_automaton_parser__load_buffer_state( );
+    }
 
-       {
+  {
 #line 38 "parserPromela.lex"
 
 
 #line 769 "automaton_lexer.yy.c"
 
-       while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
-               {
-               yy_cp = (yy_c_buf_p);
+  while ( /*CONSTCOND*/1 )    /* loops until end-of-file is reached */
+    {
+    yy_cp = (yy_c_buf_p);
 
-               /* Support of xbt_automaton_parser_text. */
-               *yy_cp = (yy_hold_char);
+    /* Support of xbt_automaton_parser_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_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_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 >= 54 )
-                                       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] != 90 );
+    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 >= 54 )
+          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] != 90 );
 
 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;
-
-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;
+    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;
+
+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
 #line 40 "parserPromela.lex"
 { return (NEVER); }
-       YY_BREAK
+  YY_BREAK
 case 2:
 YY_RULE_SETUP
 #line 41 "parserPromela.lex"
 { return (IF); }
-       YY_BREAK
+  YY_BREAK
 case 3:
 YY_RULE_SETUP
 #line 42 "parserPromela.lex"
 { return (FI); }
-       YY_BREAK
+  YY_BREAK
 case 4:
 YY_RULE_SETUP
 #line 43 "parserPromela.lex"
 { return (IMPLIES); }
-       YY_BREAK
+  YY_BREAK
 case 5:
 YY_RULE_SETUP
 #line 44 "parserPromela.lex"
 { return (GOTO); }
-       YY_BREAK
+  YY_BREAK
 case 6:
 YY_RULE_SETUP
 #line 45 "parserPromela.lex"
 { return (AND); }
-       YY_BREAK
+  YY_BREAK
 case 7:
 YY_RULE_SETUP
 #line 46 "parserPromela.lex"
 { return (OR); }
-       YY_BREAK
+  YY_BREAK
 case 8:
 YY_RULE_SETUP
 #line 47 "parserPromela.lex"
 { return (NOT); }
-       YY_BREAK
+  YY_BREAK
 case 9:
 YY_RULE_SETUP
 #line 48 "parserPromela.lex"
 { return (LEFT_PAR); }
-       YY_BREAK
+  YY_BREAK
 case 10:
 YY_RULE_SETUP
 #line 49 "parserPromela.lex"
 { return (RIGHT_PAR); }
-       YY_BREAK
+  YY_BREAK
 case 11:
 YY_RULE_SETUP
 #line 50 "parserPromela.lex"
 { return (CASE); }
-       YY_BREAK
+  YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 51 "parserPromela.lex"
 { return (COLON); }
-       YY_BREAK
+  YY_BREAK
 case 13:
 YY_RULE_SETUP
 #line 52 "parserPromela.lex"
 { return (SEMI_COLON); }
-       YY_BREAK
+  YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 53 "parserPromela.lex"
 { return (CASE_TRUE); }
-       YY_BREAK
+  YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 54 "parserPromela.lex"
 { return (LEFT_BRACE); }
-       YY_BREAK
+  YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 55 "parserPromela.lex"
 { return (RIGHT_BRACE); }
-       YY_BREAK
+  YY_BREAK
 case 17:
 /* rule 17 can match eol */
 YY_RULE_SETUP
 #line 58 "parserPromela.lex"
 { }
-       YY_BREAK
+  YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 60 "parserPromela.lex"
 { }
-       YY_BREAK
+  YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 63 "parserPromela.lex"
 { sscanf(xbt_automaton_parser_text,"%lf",&yylval.real); 
                             return (LITT_REEL); }
-       YY_BREAK
+  YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 66 "parserPromela.lex"
 { sscanf(xbt_automaton_parser_text,"%d",&yylval.integer); 
                             return (LITT_ENT); }
-       YY_BREAK
+  YY_BREAK
 case 21:
 /* rule 21 can match eol */
 YY_RULE_SETUP
@@ -932,397 +932,397 @@ YY_RULE_SETUP
 { yylval.string=(char *)malloc(strlen(xbt_automaton_parser_text)+1);
                             sscanf(xbt_automaton_parser_text,"%s",yylval.string); 
                             return (LITT_CHAINE); }
-       YY_BREAK
+  YY_BREAK
 case 22:
 YY_RULE_SETUP
 #line 73 "parserPromela.lex"
 { yylval.string=(char *)malloc(strlen(xbt_automaton_parser_text)+1);
                             sscanf(xbt_automaton_parser_text,"%s",yylval.string);
-                                             return (ID); }
-       YY_BREAK
+                            return (ID); }
+  YY_BREAK
 case 23:
 /* rule 23 can match eol */
 YY_RULE_SETUP
 #line 77 "parserPromela.lex"
 { }
-       YY_BREAK
+  YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 79 "parserPromela.lex"
 { }
-       YY_BREAK
+  YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 81 "parserPromela.lex"
 ECHO;
-       YY_BREAK
+  YY_BREAK
 #line 960 "automaton_lexer.yy.c"
 case YY_STATE_EOF(INITIAL):
-       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_automaton_parser_in at a new source and called
-                        * xbt_automaton_parser_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_automaton_parser_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_automaton_parser_wrap( ) )
-                                       {
-                                       /* Note: because we've taken care in
-                                        * yy_get_next_buffer() to have set up
-                                        * xbt_automaton_parser_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 */
+  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_automaton_parser_in at a new source and called
+       * xbt_automaton_parser_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_automaton_parser_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_automaton_parser_wrap( ) )
+          {
+          /* Note: because we've taken care in
+           * yy_get_next_buffer() to have set up
+           * xbt_automaton_parser_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_automaton_parser_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
+ *  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);
-       yy_size_t 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 = (yy_size_t) ((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_automaton_parser_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_automaton_parser_restart(xbt_automaton_parser_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 ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-               /* Extend the array by 50%, plus the number we really need. */
-               int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-               YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) xbt_automaton_parser_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];
+      char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+  char *source = (yytext_ptr);
+  yy_size_t 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 = (yy_size_t) ((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_automaton_parser_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_automaton_parser_restart(xbt_automaton_parser_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 ((int) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+    /* Extend the array by 50%, plus the number we really need. */
+    int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+    YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) xbt_automaton_parser_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;
 
-       return ret_val;
+  (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_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 >= 54 )
-                               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_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 >= 54 )
+        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 );
+ *  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 >= 54 )
-                       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 == 53);
-
-               return yy_is_jam ? 0 : 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 >= 54 )
+      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 == 53);
+
+    return yy_is_jam ? 0 : yy_current_state;
 }
 
 #ifndef YY_NO_UNPUT
 
     static void yyunput (int c, char * yy_bp )
 {
-       char *yy_cp;
+  char *yy_cp;
     
     yy_cp = (yy_c_buf_p);
 
-       /* undo effects of setting up xbt_automaton_parser_text */
-       *yy_cp = (yy_hold_char);
+  /* undo effects of setting up xbt_automaton_parser_text */
+  *yy_cp = (yy_hold_char);
 
-       if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-               { /* need to shift things up to make room */
-               /* +2 for EOB chars. */
-               yy_size_t number_to_move = (yy_n_chars) + 2;
-               char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-                                       YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-               char *source =
-                               &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
+  if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+    { /* need to shift things up to make room */
+    /* +2 for EOB chars. */
+    yy_size_t number_to_move = (yy_n_chars) + 2;
+    char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+          YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
+    char *source =
+        &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
 
-               while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-                       *--dest = *--source;
+    while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+      *--dest = *--source;
 
-               yy_cp += (int) (dest - source);
-               yy_bp += (int) (dest - source);
-               YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-                       (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
+    yy_cp += (int) (dest - source);
+    yy_bp += (int) (dest - source);
+    YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+      (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
 
-               if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-                       YY_FATAL_ERROR( "flex scanner push-back overflow" );
-               }
+    if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
+      YY_FATAL_ERROR( "flex scanner push-back overflow" );
+    }
 
-       *--yy_cp = (char) c;
+  *--yy_cp = (char) c;
 
-       (yytext_ptr) = yy_bp;
-       (yy_hold_char) = *yy_cp;
-       (yy_c_buf_p) = yy_cp;
+  (yytext_ptr) = yy_bp;
+  (yy_hold_char) = *yy_cp;
+  (yy_c_buf_p) = yy_cp;
 }
 
 #endif
@@ -1335,71 +1335,71 @@ static int yy_get_next_buffer (void)
 #endif
 
 {
-       int c;
+  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_automaton_parser_restart(xbt_automaton_parser_in );
-
-                                       /*FALLTHROUGH*/
-
-                               case EOB_ACT_END_OF_FILE:
-                                       {
-                                       if ( xbt_automaton_parser_wrap( ) )
-                                               return EOF;
-
-                                       if ( ! (yy_did_buffer_switch_on_eof) )
-                                               YY_NEW_FILE;
+  *(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_automaton_parser_restart(xbt_automaton_parser_in );
+
+          /*FALLTHROUGH*/
+
+        case EOB_ACT_END_OF_FILE:
+          {
+          if ( xbt_automaton_parser_wrap( ) )
+            return EOF;
+
+          if ( ! (yy_did_buffer_switch_on_eof) )
+            YY_NEW_FILE;
 #ifdef __cplusplus
-                                       return yyinput();
+          return yyinput();
 #else
-                                       return input();
+          return input();
 #endif
-                                       }
+          }
 
-                               case EOB_ACT_CONTINUE_SCAN:
-                                       (yy_c_buf_p) = (yytext_ptr) + offset;
-                                       break;
-                               }
-                       }
-               }
+        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_automaton_parser_text */
-       (yy_hold_char) = *++(yy_c_buf_p);
+  c = *(unsigned char *) (yy_c_buf_p);  /* cast for 8-bit char's */
+  *(yy_c_buf_p) = '\0';  /* preserve xbt_automaton_parser_text */
+  (yy_hold_char) = *++(yy_c_buf_p);
 
-       return c;
+  return c;
 }
-#endif /* ifndef YY_NO_INPUT */
+#endif  /* ifndef YY_NO_INPUT */
 
 /** Immediately switch to a different input stream.
  * @param input_file A readable stream.
@@ -1409,14 +1409,14 @@ static int yy_get_next_buffer (void)
     void xbt_automaton_parser_restart  (FILE * input_file )
 {
     
-       if ( ! YY_CURRENT_BUFFER ){
+  if ( ! YY_CURRENT_BUFFER ){
         xbt_automaton_parser_ensure_buffer_stack ();
-               YY_CURRENT_BUFFER_LVALUE =
+    YY_CURRENT_BUFFER_LVALUE =
             xbt_automaton_parser__create_buffer(xbt_automaton_parser_in,YY_BUF_SIZE );
-       }
+  }
 
-       xbt_automaton_parser__init_buffer(YY_CURRENT_BUFFER,input_file );
-       xbt_automaton_parser__load_buffer_state( );
+  xbt_automaton_parser__init_buffer(YY_CURRENT_BUFFER,input_file );
+  xbt_automaton_parser__load_buffer_state( );
 }
 
 /** Switch to a different input buffer.
@@ -1426,40 +1426,40 @@ static int yy_get_next_buffer (void)
     void xbt_automaton_parser__switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
 {
     
-       /* TODO. We should be able to replace this entire function body
-        * with
-        *              xbt_automaton_parser_pop_buffer_state();
-        *              xbt_automaton_parser_push_buffer_state(new_buffer);
+  /* TODO. We should be able to replace this entire function body
+   * with
+   *    xbt_automaton_parser_pop_buffer_state();
+   *    xbt_automaton_parser_push_buffer_state(new_buffer);
      */
-       xbt_automaton_parser_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_automaton_parser__load_buffer_state( );
-
-       /* We don't actually know whether we did this switch during
-        * EOF (xbt_automaton_parser_wrap()) processing, but the only time this flag
-        * is looked at is after xbt_automaton_parser_wrap() is called, so it's safe
-        * to go ahead and always set it.
-        */
-       (yy_did_buffer_switch_on_eof) = 1;
+  xbt_automaton_parser_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_automaton_parser__load_buffer_state( );
+
+  /* We don't actually know whether we did this switch during
+   * EOF (xbt_automaton_parser_wrap()) processing, but the only time this flag
+   * is looked at is after xbt_automaton_parser_wrap() is called, so it's safe
+   * to go ahead and always set it.
+   */
+  (yy_did_buffer_switch_on_eof) = 1;
 }
 
 static void xbt_automaton_parser__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_automaton_parser_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-       (yy_hold_char) = *(yy_c_buf_p);
+      (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+  (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+  xbt_automaton_parser_in = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+  (yy_hold_char) = *(yy_c_buf_p);
 }
 
 /** Allocate and initialize an input buffer state.
@@ -1470,26 +1470,26 @@ static void xbt_automaton_parser__load_buffer_state  (void)
  */
     YY_BUFFER_STATE xbt_automaton_parser__create_buffer  (FILE * file, int  size )
 {
-       YY_BUFFER_STATE b;
+  YY_BUFFER_STATE b;
     
-       b = (YY_BUFFER_STATE) xbt_automaton_parser_alloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser__create_buffer()" );
+  b = (YY_BUFFER_STATE) xbt_automaton_parser_alloc(sizeof( struct yy_buffer_state )  );
+  if ( ! b )
+    YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser__create_buffer()" );
 
-       b->yy_buf_size = (yy_size_t)size;
+  b->yy_buf_size = (yy_size_t)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_automaton_parser_alloc(b->yy_buf_size + 2  );
-       if ( ! b->yy_ch_buf )
-               YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser__create_buffer()" );
+  /* 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_automaton_parser_alloc(b->yy_buf_size + 2  );
+  if ( ! b->yy_ch_buf )
+    YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser__create_buffer()" );
 
-       b->yy_is_our_buffer = 1;
+  b->yy_is_our_buffer = 1;
 
-       xbt_automaton_parser__init_buffer(b,file );
+  xbt_automaton_parser__init_buffer(b,file );
 
-       return b;
+  return b;
 }
 
 /** Destroy the buffer.
@@ -1499,16 +1499,16 @@ static void xbt_automaton_parser__load_buffer_state  (void)
     void xbt_automaton_parser__delete_buffer (YY_BUFFER_STATE  b )
 {
     
-       if ( ! b )
-               return;
+  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_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+    YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
 
-       if ( b->yy_is_our_buffer )
-               xbt_automaton_parser_free((void *) b->yy_ch_buf  );
+  if ( b->yy_is_our_buffer )
+    xbt_automaton_parser_free((void *) b->yy_ch_buf  );
 
-       xbt_automaton_parser_free((void *) b  );
+  xbt_automaton_parser_free((void *) b  );
 }
 
 /* Initializes or reinitializes a buffer.
@@ -1518,12 +1518,12 @@ static void xbt_automaton_parser__load_buffer_state  (void)
     static void xbt_automaton_parser__init_buffer  (YY_BUFFER_STATE  b, FILE * file )
 
 {
-       int oerrno = errno;
+  int oerrno = errno;
     
-       xbt_automaton_parser__flush_buffer(b );
+  xbt_automaton_parser__flush_buffer(b );
 
-       b->yy_input_file = file;
-       b->yy_fill_buffer = 1;
+  b->yy_input_file = file;
+  b->yy_fill_buffer = 1;
 
     /* If b is the current buffer, then xbt_automaton_parser__init_buffer was _probably_
      * called from xbt_automaton_parser_restart() or through yy_get_next_buffer.
@@ -1536,7 +1536,7 @@ static void xbt_automaton_parser__load_buffer_state  (void)
 
         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
     
-       errno = oerrno;
+  errno = oerrno;
 }
 
 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
@@ -1545,25 +1545,25 @@ static void xbt_automaton_parser__load_buffer_state  (void)
  */
     void xbt_automaton_parser__flush_buffer (YY_BUFFER_STATE  b )
 {
-       if ( ! b )
-               return;
+      if ( ! b )
+    return;
 
-       b->yy_n_chars = 0;
+  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;
+  /* 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_buf_pos = &b->yy_ch_buf[0];
 
-       b->yy_at_bol = 1;
-       b->yy_buffer_status = YY_BUFFER_NEW;
+  b->yy_at_bol = 1;
+  b->yy_buffer_status = YY_BUFFER_NEW;
 
-       if ( b == YY_CURRENT_BUFFER )
-               xbt_automaton_parser__load_buffer_state( );
+  if ( b == YY_CURRENT_BUFFER )
+    xbt_automaton_parser__load_buffer_state( );
 }
 
 /** Pushes the new state onto the stack. The new state becomes
@@ -1574,28 +1574,28 @@ static void xbt_automaton_parser__load_buffer_state  (void)
  */
 void xbt_automaton_parser_push_buffer_state (YY_BUFFER_STATE new_buffer )
 {
-       if (new_buffer == NULL)
-               return;
-
-       xbt_automaton_parser_ensure_buffer_stack();
-
-       /* This block is copied from xbt_automaton_parser__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_automaton_parser__switch_to_buffer. */
-       xbt_automaton_parser__load_buffer_state( );
-       (yy_did_buffer_switch_on_eof) = 1;
+      if (new_buffer == NULL)
+    return;
+
+  xbt_automaton_parser_ensure_buffer_stack();
+
+  /* This block is copied from xbt_automaton_parser__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_automaton_parser__switch_to_buffer. */
+  xbt_automaton_parser__load_buffer_state( );
+  (yy_did_buffer_switch_on_eof) = 1;
 }
 
 /** Removes and deletes the top of the stack, if present.
@@ -1604,18 +1604,18 @@ void xbt_automaton_parser_push_buffer_state (YY_BUFFER_STATE new_buffer )
  */
 void xbt_automaton_parser_pop_buffer_state (void)
 {
-       if (!YY_CURRENT_BUFFER)
-               return;
-
-       xbt_automaton_parser__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_automaton_parser__load_buffer_state( );
-               (yy_did_buffer_switch_on_eof) = 1;
-       }
+      if (!YY_CURRENT_BUFFER)
+    return;
+
+  xbt_automaton_parser__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_automaton_parser__load_buffer_state( );
+    (yy_did_buffer_switch_on_eof) = 1;
+  }
 }
 
 /* Allocates the stack if it does not exist.
@@ -1623,45 +1623,45 @@ void xbt_automaton_parser_pop_buffer_state (void)
  */
 static void xbt_automaton_parser_ensure_buffer_stack (void)
 {
-       yy_size_t num_to_alloc;
+  yy_size_t num_to_alloc;
     
-       if (!(yy_buffer_stack)) {
+  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.
+    /* 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; /* After all that talk, this was set to 1 anyways... */
-               (yy_buffer_stack) = (struct yy_buffer_state**)xbt_automaton_parser_alloc
-                                                               (num_to_alloc * sizeof(struct yy_buffer_state*)
-                                                               );
-               if ( ! (yy_buffer_stack) )
-                       YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser_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. */
-               yy_size_t grow_size = 8 /* arbitrary grow size */;
-
-               num_to_alloc = (yy_buffer_stack_max) + grow_size;
-               (yy_buffer_stack) = (struct yy_buffer_state**)xbt_automaton_parser_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_automaton_parser_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;
-       }
+    num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */
+    (yy_buffer_stack) = (struct yy_buffer_state**)xbt_automaton_parser_alloc
+                (num_to_alloc * sizeof(struct yy_buffer_state*)
+                );
+    if ( ! (yy_buffer_stack) )
+      YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser_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. */
+    yy_size_t grow_size = 8 /* arbitrary grow size */;
+
+    num_to_alloc = (yy_buffer_stack_max) + grow_size;
+    (yy_buffer_stack) = (struct yy_buffer_state**)xbt_automaton_parser_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_automaton_parser_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.
@@ -1672,31 +1672,31 @@ static void xbt_automaton_parser_ensure_buffer_stack (void)
  */
 YY_BUFFER_STATE xbt_automaton_parser__scan_buffer  (char * base, yy_size_t  size )
 {
-       YY_BUFFER_STATE b;
+  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_automaton_parser_alloc(sizeof( struct yy_buffer_state )  );
-       if ( ! b )
-               YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser__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_automaton_parser__switch_to_buffer(b  );
-
-       return 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_automaton_parser_alloc(sizeof( struct yy_buffer_state )  );
+  if ( ! b )
+    YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser__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_automaton_parser__switch_to_buffer(b  );
+
+  return b;
 }
 
 /** Setup the input buffer state to scan a string. The next call to xbt_automaton_parser_lex() will
@@ -1710,7 +1710,7 @@ YY_BUFFER_STATE xbt_automaton_parser__scan_buffer  (char * base, yy_size_t  size
 YY_BUFFER_STATE xbt_automaton_parser__scan_string (yyconst char * yystr )
 {
     
-       return xbt_automaton_parser__scan_bytes(yystr,strlen(yystr) );
+  return xbt_automaton_parser__scan_bytes(yystr,strlen(yystr) );
 }
 
 /** Setup the input buffer state to scan the given bytes. The next call to xbt_automaton_parser_lex() will
@@ -1722,32 +1722,32 @@ YY_BUFFER_STATE xbt_automaton_parser__scan_string (yyconst char * yystr )
  */
 YY_BUFFER_STATE xbt_automaton_parser__scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
 {
-       YY_BUFFER_STATE b;
-       char *buf;
-       yy_size_t n;
-       yy_size_t i;
+  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_automaton_parser_alloc(n  );
-       if ( ! buf )
-               YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser__scan_bytes()" );
+  /* Get memory for full buffer, including space for trailing EOB's. */
+  n = _yybytes_len + 2;
+  buf = (char *) xbt_automaton_parser_alloc(n  );
+  if ( ! buf )
+    YY_FATAL_ERROR( "out of dynamic memory in xbt_automaton_parser__scan_bytes()" );
 
-       for ( i = 0; i < _yybytes_len; ++i )
-               buf[i] = yybytes[i];
+  for ( i = 0; i < _yybytes_len; ++i )
+    buf[i] = yybytes[i];
 
-       buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
+  buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
 
-       b = xbt_automaton_parser__scan_buffer(buf,n );
-       if ( ! b )
-               YY_FATAL_ERROR( "bad buffer in xbt_automaton_parser__scan_bytes()" );
+  b = xbt_automaton_parser__scan_buffer(buf,n );
+  if ( ! b )
+    YY_FATAL_ERROR( "bad buffer in xbt_automaton_parser__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;
+  /* 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;
+  return b;
 }
 
 #ifndef YY_EXIT_FAILURE
@@ -1756,26 +1756,26 @@ YY_BUFFER_STATE xbt_automaton_parser__scan_bytes  (yyconst char * yybytes, yy_si
 
 static void yy_fatal_error (yyconst char* msg )
 {
-                       (void) fprintf( stderr, "%s\n", msg );
-       exit( YY_EXIT_FAILURE );
+      (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_automaton_parser_text. */ \
+  do \
+    { \
+    /* Undo effects of setting up xbt_automaton_parser_text. */ \
         int yyless_macro_arg = (n); \
         YY_LESS_LINENO(yyless_macro_arg);\
-               xbt_automaton_parser_text[xbt_automaton_parser_leng] = (yy_hold_char); \
-               (yy_c_buf_p) = xbt_automaton_parser_text + yyless_macro_arg; \
-               (yy_hold_char) = *(yy_c_buf_p); \
-               *(yy_c_buf_p) = '\0'; \
-               xbt_automaton_parser_leng = yyless_macro_arg; \
-               } \
-       while ( 0 )
+    xbt_automaton_parser_text[xbt_automaton_parser_leng] = (yy_hold_char); \
+    (yy_c_buf_p) = xbt_automaton_parser_text + yyless_macro_arg; \
+    (yy_hold_char) = *(yy_c_buf_p); \
+    *(yy_c_buf_p) = '\0'; \
+    xbt_automaton_parser_leng = yyless_macro_arg; \
+    } \
+  while ( 0 )
 
 /* Accessor  methods (get/set functions) to struct members. */
 
@@ -1890,15 +1890,15 @@ int xbt_automaton_parser_lex_destroy  (void)
 {
     
     /* Pop the buffer stack, destroying each element. */
-       while(YY_CURRENT_BUFFER){
-               xbt_automaton_parser__delete_buffer(YY_CURRENT_BUFFER  );
-               YY_CURRENT_BUFFER_LVALUE = NULL;
-               xbt_automaton_parser_pop_buffer_state();
-       }
+  while(YY_CURRENT_BUFFER){
+    xbt_automaton_parser__delete_buffer(YY_CURRENT_BUFFER  );
+    YY_CURRENT_BUFFER_LVALUE = NULL;
+    xbt_automaton_parser_pop_buffer_state();
+  }
 
-       /* Destroy the stack itself. */
-       xbt_automaton_parser_free((yy_buffer_stack) );
-       (yy_buffer_stack) = NULL;
+  /* Destroy the stack itself. */
+  xbt_automaton_parser_free((yy_buffer_stack) );
+  (yy_buffer_stack) = NULL;
 
     /* Reset the globals. This is important in a non-reentrant scanner so the next time
      * xbt_automaton_parser_lex() is called, initialization will occur. */
@@ -1914,45 +1914,45 @@ int xbt_automaton_parser_lex_destroy  (void)
 #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];
+    
+  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 )
-               ;
+  int n;
+  for ( n = 0; s[n]; ++n )
+    ;
 
-       return n;
+  return n;
 }
 #endif
 
 void *xbt_automaton_parser_alloc (yy_size_t  size )
 {
-                       return (void *) malloc( size );
+      return (void *) malloc( size );
 }
 
 void *xbt_automaton_parser_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 );
+    
+  /* 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_automaton_parser_free (void * ptr )
 {
-                       free( (char *) ptr );   /* see xbt_automaton_parser_realloc() for (char *) cast */
+      free( (char *) ptr );  /* see xbt_automaton_parser_realloc() for (char *) cast */
 }
 
 #define YYTABLES_NAME "yytables"
index 3d83df1..6364fe3 100644 (file)
@@ -51,9 +51,8 @@ static void new_state(char* id, int src){
 
 static void new_transition(char* id, xbt_automaton_exp_label_t label)
 {
-  xbt_automaton_state_t state_dst = NULL;
   new_state(id, 0);
-  state_dst = xbt_automaton_state_exists(parsed_automaton, id);
+  xbt_automaton_state_t state_dst = xbt_automaton_state_exists(parsed_automaton, id);
   xbt_automaton_state_t state_src = xbt_automaton_state_exists(parsed_automaton, state_id_src);
   
   //xbt_transition_t trans = NULL;
index 20891ae..c61c519 100644 (file)
@@ -186,7 +186,7 @@ std::vector<std::string> resolveBacktrace(
 
   XBT_VERB("Fire a first command: '%s'", cmd.c_str());
   FILE* pipe = popen(cmd.c_str(), "r");
-  if (!pipe) {
+  if (not pipe) {
     xbt_die("Cannot fork addr2line to display the backtrace");
   }
 
@@ -235,7 +235,7 @@ std::vector<std::string> resolveBacktrace(
       XBT_DEBUG("addr=%s (as string) =%#lx (as number)",
         addrs[i].c_str(), addr);
 
-      while (!found) {
+      while (not found) {
         long int first;
         long int last;
 
@@ -261,7 +261,7 @@ std::vector<std::string> resolveBacktrace(
       free(maps_name);
       addrs[i].clear();
 
-      if (!found) {
+      if (not found) {
         XBT_VERB("Problem while reading the maps file. Following backtrace will be mangled.");
         XBT_DEBUG("No dynamic. Static symbol: %s", backtrace_syms[i]);
         result.push_back(simgrid::xbt::string_printf("?? (%s)", backtrace_syms[i]));
@@ -294,7 +294,7 @@ std::vector<std::string> resolveBacktrace(
         free(p);
         XBT_VERB("Fire a new command: '%s'", subcmd);
         FILE* subpipe = popen(subcmd, "r");
-        if (!subpipe) {
+        if (not subpipe) {
           xbt_die("Cannot fork addr2line to display the backtrace");
         }
         if (fgets(line_func, 1024, subpipe)) {
@@ -329,9 +329,9 @@ std::vector<std::string> resolveBacktrace(
     addrs[i].clear();
 
     /* Mask the bottom of the stack */
-    if (!strncmp("main", line_func, strlen("main")) ||
-        !strncmp("xbt_thread_context_wrapper", line_func, strlen("xbt_thread_context_wrapper"))
-        || !strncmp("smx_ctx_sysv_wrapper", line_func, strlen("smx_ctx_sysv_wrapper")))
+    if (not strncmp("main", line_func, strlen("main")) ||
+        not strncmp("xbt_thread_context_wrapper", line_func, strlen("xbt_thread_context_wrapper")) ||
+        not strncmp("smx_ctx_sysv_wrapper", line_func, strlen("smx_ctx_sysv_wrapper")))
       break;
   }
   pclose(pipe);
index bbbbf29..9b3fedb 100644 (file)
@@ -536,7 +536,7 @@ void xbt_cfg_help()    { simgrid_config->help(); }
  */
 void xbt_cfg_set_parse(const char *options)
 {
-  if (!options || !strlen(options)) {   /* nothing to do */
+  if (not options || not strlen(options)) { /* nothing to do */
     return;
   }
   char *optionlist_cpy = xbt_strdup(options);
@@ -544,7 +544,7 @@ void xbt_cfg_set_parse(const char *options)
   XBT_DEBUG("List to parse and set:'%s'", options);
   char *option = optionlist_cpy;
   while (1) {                   /* breaks in the code */
-    if (!option)
+    if (not option)
       break;
     char *name = option;
     int len = strlen(name);
@@ -573,7 +573,7 @@ void xbt_cfg_set_parse(const char *options)
 
     if (name[0] == ' ' || name[0] == '\n' || name[0] == '\t')
       continue;
-    if (!strlen(name))
+    if (not strlen(name))
       break;
 
     char *val = strchr(name, ':');
@@ -904,7 +904,7 @@ XBT_TEST_UNIT("c++flags", test_config_cxx_flags, "C++ flags")
   xbt_test_assert(string_flag == "bar", "Check string flag");
   xbt_test_assert(double_flag == 8.0, "Check double flag");
   xbt_test_assert(bool_flag1, "Check bool1 flag");
-  xbt_test_assert(!bool_flag2, "Check bool2 flag");
+  xbt_test_assert(not bool_flag2, "Check bool2 flag");
 
   xbt_cfg_free(&simgrid_config);
   simgrid_config = temp;
index 94e16a6..ba3d860 100644 (file)
@@ -166,7 +166,7 @@ xbt_test_suite_t xbt_test_suite_new(const char *name, const char *fmt, ...)
   xbt_test_suite_t suite = xbt_new0(struct s_xbt_test_suite, 1);
   va_list ap;
 
-  if (!_xbt_test_suites)
+  if (_xbt_test_suites == nullptr)
     _xbt_test_suites = xbt_dynar_new(sizeof(xbt_test_suite_t), xbt_test_suite_free);
 
   va_start(ap, fmt);
@@ -192,8 +192,8 @@ xbt_test_suite_t xbt_test_suite_by_name(const char *name, const char *fmt, ...)
 
   if (_xbt_test_suites)
     xbt_dynar_foreach(_xbt_test_suites, it_suite, suite)
-        if (!strcmp(suite->name, name))
-      return suite;
+      if (not strcmp(suite->name, name))
+        return suite;
 
   va_start(ap, fmt);
   bufname = bvprintf(fmt, ap);
@@ -275,7 +275,7 @@ static int xbt_test_suite_run(xbt_test_suite_t suite, int verbosity)
 
   snprintf(suite_title + 40 - (suite_len + 4) / 2, 81 - (40 - (suite_len + 4) / 2), "[ %s ]", suite->title);
   suite_title[40 + (suite_len + 5) / 2] = '=';
-  if (!suite->enabled)
+  if (not suite->enabled)
     snprintf(suite_title + 70, 11, " DISABLED ");
   fprintf(stderr, "\n%s\n", suite_title);
 
@@ -307,9 +307,9 @@ static int xbt_test_suite_run(xbt_test_suite_t suite, int verbosity)
         } else {
           unit->nb_tests++;
 
-          if (test->failed && !test->expected_failure)
+          if (test->failed && not test->expected_failure)
             unit->test_failed++;
-          if (!test->failed && test->expected_failure)
+          if (not test->failed && test->expected_failure)
             unit->test_failed++;
           if (test->expected_failure)
             unit->test_expect++;
@@ -344,7 +344,7 @@ static int xbt_test_suite_run(xbt_test_suite_t suite, int verbosity)
           }
           fprintf(stderr, "      %s: %s [%s:%d]\n", resname, test->title, file, line);
 
-          if ((test->expected_failure && !test->failed) || (!test->expected_failure && test->failed)) {
+          if ((test->expected_failure && not test->failed) || (not test->expected_failure && test->failed)) {
             xbt_dynar_foreach(test->logs, it_log, log) {
               file = (log->file != nullptr ? log->file : file);
               line = (log->line != 0 ? log->line : line);
@@ -358,7 +358,7 @@ static int xbt_test_suite_run(xbt_test_suite_t suite, int verbosity)
         } else {
           fprintf(stderr, "\n");
         }
-      } else if (!unit->enabled) {
+      } else if (not unit->enabled) {
         fprintf(stderr, " disabled\n"); /* no test were run */
       } else if (unit->nb_tests) {
         fprintf(stderr, "...... ok\n"); /* successful */
@@ -382,7 +382,7 @@ static int xbt_test_suite_run(xbt_test_suite_t suite, int verbosity)
         suite->nb_units++;
         if (unit->test_failed)
           suite->unit_failed++;
-      } else if (!unit->enabled) {
+      } else if (not unit->enabled) {
         suite->unit_disabled++;
       } else {
         suite->unit_ignore++;
@@ -398,7 +398,7 @@ static int xbt_test_suite_run(xbt_test_suite_t suite, int verbosity)
     _xbt_test_nb_suites++;
     if (suite->test_failed)
       _xbt_test_suite_failed++;
-  } else if (!suite->enabled) {
+  } else if (not suite->enabled) {
     _xbt_test_suite_disabled++;
   } else {
     _xbt_test_suite_ignore++;
@@ -466,13 +466,13 @@ static void apply_selection(char *selection)
   char suitename[512];
   char unitname[512];
 
-  if (!selection || selection[0] == '\0')
+  if (not selection || selection[0] == '\0')
     return;
 
   /*printf("Test selection: %s\n", selection); */
 
   /* First apply the selection */
-  while (!done) {
+  while (not done) {
     int enabling = 1;
 
     char *p = strchr(sel, ',');
@@ -505,7 +505,7 @@ static void apply_selection(char *selection)
     }
 
     /* Deal with the specific case of 'all' pseudo serie */
-    if (!strcmp("all", suitename)) {
+    if (not strcmp("all", suitename)) {
       xbt_assert(unitname[0] == '\0', "The 'all' pseudo-suite does not accept any unit specification\n");
 
       xbt_dynar_foreach(_xbt_test_suites, it_suite, suite) {
@@ -519,7 +519,7 @@ static void apply_selection(char *selection)
       for (it = 0; it < xbt_dynar_length(_xbt_test_suites); it++) {
         xbt_test_suite_t thissuite =
             xbt_dynar_get_as(_xbt_test_suites, it, xbt_test_suite_t);
-        if (!strcmp(suitename, thissuite->name)) {
+        if (not strcmp(suitename, thissuite->name)) {
           /* Do not disable the whole suite when we just want to disable a child */
           if (enabling || (unitname[0] == '\0'))
             thissuite->enabled = enabling;
@@ -535,7 +535,7 @@ static void apply_selection(char *selection)
                  it2_unit < xbt_dynar_length(thissuite->units);
                  it2_unit++) {
               xbt_test_unit_t thisunit = xbt_dynar_get_as(thissuite->units, it2_unit, xbt_test_unit_t);
-              if (!strcmp(thisunit->name, unitname)) {
+              if (not strcmp(thisunit->name, unitname)) {
                 thisunit->enabled = enabling;
                 break;
               }
index 9d5dc32..f5759cf 100644 (file)
@@ -119,7 +119,7 @@ static void xbt_dict_rehash(xbt_dict_t dict)
   XBT_DEBUG("REHASH (%d->%d)", oldsize, newsize);
 
   for (unsigned i = 0; i < oldsize; i++, currcell++) {
-    if (!*currcell)             /* empty cell */
+    if (*currcell == nullptr) /* empty cell */
       continue;
 
     xbt_dictelm_t *twincell = currcell + oldsize;
@@ -132,7 +132,7 @@ static void xbt_dict_rehash(xbt_dict_t dict)
       if ((bucklet->hash_code & newsize) != i) {        /* Move to b */
         *pprev = bucklet->next;
         bucklet->next = *twincell;
-        if (!*twincell)
+        if (*twincell == nullptr)
           dict->fill++;
         *twincell = bucklet;
       } else {
@@ -140,7 +140,7 @@ static void xbt_dict_rehash(xbt_dict_t dict)
       }
     }
 
-    if (!*currcell)             /* everything moved */
+    if (*currcell == nullptr) /* everything moved */
       dict->fill--;
   }
 }
@@ -164,7 +164,7 @@ void xbt_dict_set_ext(xbt_dict_t dict, const char *key, int key_len, void *data,
   xbt_dictelm_t current;
   xbt_dictelm_t previous = nullptr;
 
-  xbt_assert(!free_ctn, "Cannot set an individual free function in homogeneous dicts.");
+  xbt_assert(not free_ctn, "Cannot set an individual free function in homogeneous dicts.");
   XBT_CDEBUG(xbt_dict, "ADD %.*s hash = %u, size = %d, & = %u", key_len, key, hash_code,
              dict->table_size, hash_code & dict->table_size);
   current = dict->table[hash_code & dict->table_size];
@@ -369,7 +369,7 @@ void xbt_dict_remove_ext(xbt_dict_t dict, const char *key, int key_len)
     }
   }
 
-  if (!dict->table[hash_code & dict->table_size])
+  if (not dict->table[hash_code & dict->table_size])
     dict->fill--;
 
   xbt_dictelm_free(dict, current);
@@ -430,7 +430,7 @@ void xbt_dict_dump_output_string(void *s)
  */
 int xbt_dict_is_empty(xbt_dict_t dict)
 {
-  return !dict || (xbt_dict_length(dict) == 0);
+  return not dict || (xbt_dict_length(dict) == 0);
 }
 
 /**
@@ -477,7 +477,7 @@ void xbt_dict_dump_sizes(xbt_dict_t dict)
 
   printf("Dict %p: %d bucklets, %d used cells (of %d) ", dict, dict->count, dict->fill, dict->table_size);
 
-  if (!dict) {
+  if (not dict) {
     printf("\n");
     return;
   }
@@ -502,7 +502,7 @@ void xbt_dict_dump_sizes(xbt_dict_t dict)
       xbt_dynar_set(sizes, size, &prevsize);
     }
   }
-  if (!all_sizes)
+  if (not all_sizes)
     all_sizes = xbt_dynar_new(sizeof(int), nullptr);
 
   xbt_dynar_foreach(sizes, count, size) {
@@ -596,7 +596,7 @@ static void debugged_add(xbt_dict_t head, const char* key)
   debugged_add_ext(head, key, key);
 }
 
-static xbt_dict_t new_fixture(void)
+static xbt_dict_t new_fixture()
 {
   xbt_test_add("Fill in the dictionnary");
 
@@ -620,10 +620,10 @@ static void search_ext(xbt_dict_t head, const char *key, const char *data)
   if (data) {
     xbt_test_assert(found, "data do not match expectations: found nullptr while searching for %s", data);
     if (found)
-      xbt_test_assert(!strcmp(data, found), "data do not match expectations: found %s while searching for %s",
-                      found, data);
+      xbt_test_assert(not strcmp(data, found), "data do not match expectations: found %s while searching for %s", found,
+                      data);
   } else {
-    xbt_test_assert(!found, "data do not match expectations: found %s while searching for nullptr", found);
+    xbt_test_assert(not found, "data do not match expectations: found %s while searching for nullptr", found);
   }
 }
 
@@ -647,12 +647,12 @@ static void traverse(xbt_dict_t head)
   int i = 0;
 
   xbt_dict_foreach(head, cursor, key, data) {
-    if (!key || !data || strcmp(key, data)) {
+    if (not key || not data || strcmp(key, data)) {
       xbt_test_log("Seen #%d:  %s->%s", ++i, key, data);
     } else {
       xbt_test_log("Seen #%d:  %s", ++i, key);
     }
-    xbt_test_assert(!data || !strcmp(key, data), "Key(%s) != value(%s). Aborting", key, data);
+    xbt_test_assert(not data || not strcmp(key, data), "Key(%s) != value(%s). Aborting", key, data);
   }
 }
 
@@ -701,7 +701,7 @@ static void count_check_get_key(xbt_dict_t dict, int length)
   xbt_dict_foreach(dict, cursor, key, data) {
     effective++;
     char* key2 = xbt_dict_get_key(dict, data);
-    xbt_assert(!strcmp(key, key2), "The data was registered under %s instead of %s as expected", key2, key);
+    xbt_assert(not strcmp(key, key2), "The data was registered under %s instead of %s as expected", key2, key);
   }
 
   xbt_test_assert(effective == length, "Effective length(%d) != %d.", effective, length);
@@ -765,7 +765,7 @@ XBT_TEST_UNIT("basic", test_dict_basic, "Basic usage: change, retrieve and trave
   xbt_test_add("Search 123");
   char* data = (char*)xbt_dict_get(head, "123");
   xbt_test_assert(data);
-  xbt_test_assert(!strcmp("123", data));
+  xbt_test_assert(not strcmp("123", data));
 
   search_not_found(head, "Can't be found");
   search_not_found(head, "123 Can't be found");
@@ -872,13 +872,13 @@ XBT_TEST_UNIT("nulldata", test_dict_nulldata, "nullptr data management")
     char* data;
 
     xbt_dict_foreach(head, cursor, key, data) {
-      if (!key || !data || strcmp(key, data)) {
+      if (not key || not data || strcmp(key, data)) {
         xbt_test_log("Seen:  %s->%s", key, data);
       } else {
         xbt_test_log("Seen:  %s", key);
       }
 
-      if (!strcmp(key, "null"))
+      if (not strcmp(key, "null"))
         found = 1;
     }
     xbt_test_assert(found, "the key 'null', associated to nullptr is not found");
@@ -925,7 +925,7 @@ XBT_TEST_UNIT("crash", test_dict_crash, "Crash test")
 
       xbt_dict_set(head, key, key, nullptr);
       data = (char*) xbt_dict_get(head, key);
-      xbt_test_assert(!strcmp(key, data), "Retrieved value (%s) != Injected value (%s)", key, data);
+      xbt_test_assert(not strcmp(key, data), "Retrieved value (%s) != Injected value (%s)", key, data);
 
       count(head, j + 1);
     }
@@ -938,7 +938,6 @@ XBT_TEST_UNIT("crash", test_dict_crash, "Crash test")
   xbt_dict_t head = xbt_dict_new_homogeneous(&free);
   xbt_test_add("Fill %d elements, with keys being the number of element", NB_ELM);
   for (int j = 0; j < NB_ELM; j++) {
-    /* if (!(j%1000)) { printf("."); fflush(stdout); } */
     char* key = (char*)xbt_malloc(10);
 
     snprintf(key,10, "%d", j);
@@ -956,9 +955,9 @@ XBT_TEST_UNIT("crash", test_dict_crash, "Crash test")
     for (int j = 0; j < NB_ELM; j++) {
       snprintf(key,10, "%d", j);
       void* data = xbt_dict_get(head, key);
-      xbt_test_assert(!strcmp(key, (char *) data), "with get, key=%s != data=%s", key, (char *) data);
+      xbt_test_assert(not strcmp(key, (char*)data), "with get, key=%s != data=%s", key, (char*)data);
       data = xbt_dict_get_ext(head, key, strlen(key));
-      xbt_test_assert(!strcmp(key, (char *) data), "with get_ext, key=%s != data=%s", key, (char *) data);
+      xbt_test_assert(not strcmp(key, (char*)data), "with get_ext, key=%s != data=%s", key, (char*)data);
     }
   }
   free(key);
@@ -966,7 +965,6 @@ XBT_TEST_UNIT("crash", test_dict_crash, "Crash test")
   xbt_test_add("Remove my %d elements", NB_ELM);
   key = (char*) xbt_malloc(10);
   for (int j = 0; j < NB_ELM; j++) {
-    /* if (!(j%10000)) printf("."); fflush(stdout); */
     snprintf(key,10, "%d", j);
     xbt_dict_remove(head, key);
   }
index d9f3b14..38c7930 100644 (file)
@@ -27,9 +27,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_dict_cursor, xbt_dict, "To traverse dictiona
  */
 inline xbt_dict_cursor_t xbt_dict_cursor_new(const xbt_dict_t dict)
 {
-  xbt_dict_cursor_t res = NULL;
-
-  res = xbt_new(s_xbt_dict_cursor_t, 1);
+  xbt_dict_cursor_t res = xbt_new(s_xbt_dict_cursor_t, 1);
   res->dict = dict;
 
   xbt_dict_cursor_rewind(res);
index b7df27f..84ba004 100644 (file)
@@ -400,7 +400,7 @@ extern "C" void xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned in
   unsigned long offset;
   unsigned long cur;
 
-  if (!n)
+  if (not n)
     return;
 
   _sanity_check_dynar(dynar);
@@ -431,13 +431,13 @@ extern "C" void xbt_dynar_remove_n_at(xbt_dynar_t const dynar, const unsigned in
  * \code
  * signed int position = -1;
  * xbt_dynar_foreach(dynar, iter, elem) {
- *    if (!memcmp(elem, searched_element, sizeof(*elem))) {
+ *    if (not memcmp(elem, searched_element, sizeof(*elem))) {
  *        position = iter;
  *        break;
  *    }
  * }
  * \endcode
- * 
+ *
  * Raises not_found_error if not found. If you have less than 2 millions elements, you probably want to use
  * #xbt_dynar_search_or_negative() instead, so that you don't have to TRY/CATCH on element not found.
  */
@@ -446,7 +446,7 @@ extern "C" unsigned int xbt_dynar_search(xbt_dynar_t const dynar, void* const el
   unsigned long it;
 
   for (it = 0; it < dynar->used; it++)
-    if (!memcmp(_xbt_dynar_elm(dynar, it), elem, dynar->elmsize)) {
+    if (not memcmp(_xbt_dynar_elm(dynar, it), elem, dynar->elmsize)) {
       return it;
     }
 
@@ -467,7 +467,7 @@ extern "C" signed int xbt_dynar_search_or_negative(xbt_dynar_t const dynar, void
   unsigned long it;
 
   for (it = 0; it < dynar->used; it++)
-    if (!memcmp(_xbt_dynar_elm(dynar, it), elem, dynar->elmsize)) {
+    if (not memcmp(_xbt_dynar_elm(dynar, it), elem, dynar->elmsize)) {
       return it;
     }
 
@@ -484,7 +484,7 @@ extern "C" int xbt_dynar_member(xbt_dynar_t const dynar, void* const elem)
   unsigned long it;
 
   for (it = 0; it < dynar->used; it++)
-    if (!memcmp(_xbt_dynar_elm(dynar, it), elem, dynar->elmsize)) {
+    if (not memcmp(_xbt_dynar_elm(dynar, it), elem, dynar->elmsize)) {
       return 1;
     }
 
@@ -700,9 +700,9 @@ extern "C" int xbt_dynar_compare(xbt_dynar_t d1, xbt_dynar_t d2, int (*compar)(c
 {
   int i ;
   int size;
-  if((!d1) && (!d2))
+  if ((not d1) && (not d2))
     return 0;
-  if((!d1) || (!d2)) {
+  if ((not d1) || (not d2)) {
     XBT_DEBUG("nullptr dynar d1=%p d2=%p",d1,d2);
     xbt_dynar_free(&d2);
     return 1;
@@ -1080,7 +1080,7 @@ XBT_TEST_UNIT("string", test_dynar_string, "Dynars of strings")
   for (int cpt = 0; cpt < NB_ELEM; cpt++) {
     snprintf(buf,1023, "%d", cpt);
     xbt_dynar_shift(d, &s2);
-    xbt_test_assert(!strcmp(buf, s2), "The retrieved value is not the same than the injected one (%s!=%s)", buf, s2);
+    xbt_test_assert(not strcmp(buf, s2), "The retrieved value is not the same than the injected one (%s!=%s)", buf, s2);
     free(s2);
   }
   xbt_dynar_free(&d);           /* This code is used both as example and as regression test, so we try to */
@@ -1097,13 +1097,13 @@ XBT_TEST_UNIT("string", test_dynar_string, "Dynars of strings")
   /* 2. Traverse the dynar with the macro */
   xbt_dynar_foreach(d, iter, s1) {
     snprintf(buf,1023, "%u", NB_ELEM - iter - 1);
-    xbt_test_assert(!strcmp(buf, s1), "The retrieved value is not the same than the injected one (%s!=%s)", buf, s1);
+    xbt_test_assert(not strcmp(buf, s1), "The retrieved value is not the same than the injected one (%s!=%s)", buf, s1);
   }
   /* 3. Traverse the dynar with the macro */
   for (int cpt = 0; cpt < NB_ELEM; cpt++) {
     snprintf(buf,1023, "%d", cpt);
     xbt_dynar_pop(d, &s2);
-    xbt_test_assert(!strcmp(buf, s2), "The retrieved value is not the same than the injected one (%s!=%s)", buf, s2);
+    xbt_test_assert(not strcmp(buf, s2), "The retrieved value is not the same than the injected one (%s!=%s)", buf, s2);
     free(s2);
   }
   /* 4. Free the resources */
@@ -1127,22 +1127,22 @@ XBT_TEST_UNIT("string", test_dynar_string, "Dynars of strings")
   for (int cpt = 0; cpt < NB_ELEM / 2; cpt++) {
     snprintf(buf,1023, "%d", cpt);
     xbt_dynar_shift(d, &s2);
-    xbt_test_assert(!strcmp(buf, s2),
-                     "The retrieved value is not the same than the injected one at the begining (%s!=%s)", buf, s2);
+    xbt_test_assert(not strcmp(buf, s2),
+                    "The retrieved value is not the same than the injected one at the begining (%s!=%s)", buf, s2);
     free(s2);
   }
   for (int cpt = (NB_ELEM / 5) - 1; cpt >= 0; cpt--) {
     snprintf(buf,1023, "%d", cpt);
     xbt_dynar_shift(d, &s2);
-    xbt_test_assert(!strcmp(buf, s2),
-                     "The retrieved value is not the same than the injected one in the middle (%s!=%s)", buf, s2);
+    xbt_test_assert(not strcmp(buf, s2),
+                    "The retrieved value is not the same than the injected one in the middle (%s!=%s)", buf, s2);
     free(s2);
   }
   for (int cpt = NB_ELEM / 2; cpt < NB_ELEM; cpt++) {
     snprintf(buf,1023, "%d", cpt);
     xbt_dynar_shift(d, &s2);
-    xbt_test_assert(!strcmp(buf, s2), "The retrieved value is not the same than the injected one at the end (%s!=%s)",
-                     buf, s2);
+    xbt_test_assert(not strcmp(buf, s2),
+                    "The retrieved value is not the same than the injected one at the end (%s!=%s)", buf, s2);
     free(s2);
   }
   xbt_dynar_free(&d);           /* This code is used both as example and as regression test, so we try to */
@@ -1159,7 +1159,7 @@ XBT_TEST_UNIT("string", test_dynar_string, "Dynars of strings")
   for (int cpt = 2 * (NB_ELEM / 5); cpt < 4 * (NB_ELEM / 5); cpt++) {
     snprintf(buf,1023, "%d", cpt);
     xbt_dynar_remove_at(d, 2 * (NB_ELEM / 5), &s2);
-    xbt_test_assert(!strcmp(buf, s2), "Remove a bad value. Got %s, expected %s", s2, buf);
+    xbt_test_assert(not strcmp(buf, s2), "Remove a bad value. Got %s, expected %s", s2, buf);
     free(s2);
   }
   xbt_dynar_free(&d);           /* end_of_doxygen */
index b0f5564..9115b40 100644 (file)
@@ -227,10 +227,10 @@ XBT_TEST_UNIT("cleanup", test_cleanup, "cleanup handling")
     c = 1;
     if (v1 != 5678)
       xbt_test_fail("v1 = %d (!= 5678)", v1);
-    if (!(ex.category == 1 && ex.value == 2 && !strcmp(ex.what(), "blah")))
+    if (not(ex.category == 1 && ex.value == 2 && not strcmp(ex.what(), "blah")))
       xbt_test_fail("unexpected exception contents");
   }
-  if (!c)
+  if (not c)
     xbt_test_fail("xbt_ex_free not executed");
 }
 #endif                          /* SIMGRID_TEST */
index 2fc6aea..a7379c5 100644 (file)
@@ -114,7 +114,6 @@ static void xbt_log_connect_categories(void)
   XBT_LOG_CONNECT(xbt_heap);
   XBT_LOG_CONNECT(xbt_lib);
   XBT_LOG_CONNECT(xbt_mallocator);
-  XBT_LOG_CONNECT(xbt_matrix);
   XBT_LOG_CONNECT(xbt_memory_map);
   XBT_LOG_CONNECT(xbt_parmap);
   XBT_LOG_CONNECT(xbt_sync);
@@ -459,7 +458,6 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority
 
   unsigned int cursor;
   xbt_log_setting_t setting = NULL;
-  int found = 0;
 
   XBT_DEBUG("Initializing category '%s' (firstChild=%s, nextSibling=%s)", category->name,
          (category->firstChild ? category->firstChild->name : "none"),
@@ -504,6 +502,7 @@ int _xbt_log_cat_init(xbt_log_category_t category, e_xbt_log_priority_t priority
   if (xbt_log_settings) {
     xbt_assert(category, "NULL category");
     xbt_assert(category->name);
+    int found = 0;
 
     xbt_dynar_foreach(xbt_log_settings, cursor, setting) {
       xbt_assert(setting, "Damnit, NULL cat in the list");
index d43a9b6..3bb597d 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (c) 2008-2015. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2008-2017. 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. */
@@ -128,6 +127,7 @@ XBT_PRIVATE std::vector<VmMap> get_memory_map(pid_t pid)
       memreg.prot |= PROT_EXEC;
 
     /* Private (copy-on-write) or shared? */
+    memreg.flags = 0;
     if (info.shared)
       memreg.flags |= MAP_SHARED;
     else
@@ -145,9 +145,9 @@ XBT_PRIVATE std::vector<VmMap> get_memory_map(pid_t pid)
 
     /* Path */
     char path[MAXPATHLEN];
-       int pathlen;
+    int pathlen;
     pathlen = proc_regionfilename(pid, address, path, sizeof(path));
-       path[pathlen] = '\0';
+    path[pathlen]   = '\0';
     memreg.pathname = path;
 
 #if 0 /* Display mappings for debug */
@@ -256,8 +256,9 @@ XBT_PRIVATE std::vector<VmMap> get_memory_map(pid_t pid)
     } else {
       memreg.flags |= MAP_SHARED;
       if (lfields[1][3] != 's')
-       XBT_WARN("The protection is neither 'p' (private) nor 's' (shared) but '%s'. Let's assume shared, as on b0rken win-ubuntu systems.\nFull line: %s\n",
-                lfields[1], line);
+        XBT_WARN("The protection is neither 'p' (private) nor 's' (shared) but '%s'. Let's assume shared, as on b0rken "
+                 "win-ubuntu systems.\nFull line: %s\n",
+                 lfields[1], line);
     }
 
     /* Get the offset value */
@@ -296,7 +297,7 @@ XBT_PRIVATE std::vector<VmMap> get_memory_map(pid_t pid)
 
     /* Create space for a new map region in the region's array and copy the */
     /* parsed stuff from the temporal memreg variable */
-    XBT_DEBUG("Found region for %s", !memreg.pathname.empty() ? memreg.pathname.c_str() : "(null)");
+    XBT_DEBUG("Found region for %s", not memreg.pathname.empty() ? memreg.pathname.c_str() : "(null)");
 
     ret.push_back(std::move(memreg));
   }
@@ -360,9 +361,8 @@ XBT_PRIVATE std::vector<VmMap> get_memory_map(pid_t pid)
       */
     if (vmentries[i].kve_path[0] != '\0')
       memreg.pathname = vmentries[i].kve_path;
-    else if (vmentries[i].kve_type == KVME_TYPE_DEFAULT
-           && vmentries[i-1].kve_type == KVME_TYPE_VNODE
-        && vmentries[i-1].kve_path[0] != '\0')
+    else if (vmentries[i].kve_type == KVME_TYPE_DEFAULT && vmentries[i - 1].kve_type == KVME_TYPE_VNODE &&
+             vmentries[i - 1].kve_path[0] != '\0')
       memreg.pathname = vmentries[i-1].kve_path;
     else if (vmentries[i].kve_type == KVME_TYPE_DEFAULT
         && vmentries[i].kve_flags & KVME_FLAG_GROWS_DOWN)
@@ -374,8 +374,7 @@ XBT_PRIVATE std::vector<VmMap> get_memory_map(pid_t pid)
      * later identifies mappings based on the permissions that are expected
      * when running the Linux kernel.
      */
-    if (vmentries[i].kve_type == KVME_TYPE_VNODE
-        && ! (vmentries[i].kve_flags & KVME_FLAG_NEEDS_COPY))
+    if (vmentries[i].kve_type == KVME_TYPE_VNODE && not(vmentries[i].kve_flags & KVME_FLAG_NEEDS_COPY))
       memreg.prot &= ~PROT_WRITE;
 
     ret.push_back(std::move(memreg));
index 5294c14..66ec157 100644 (file)
@@ -13,7 +13,6 @@
 #include "mmprivate.h"
 #include "xbt/ex.h"
 #include "mc/mc.h"
-#include "src/mc/mc_ignore.h"
 
 /* Return memory to the heap.
    Like `mfree' but don't call a mfree_hook if there is one.  */
index 4ca13af..096941c 100644 (file)
@@ -327,7 +327,6 @@ static void mmalloc_fork_child(void)
 /* Initialize the default malloc descriptor. */
 void *mmalloc_preinit(void)
 {
-  int res;
   if (__mmalloc_default_mdp == NULL) {
     if(!xbt_pagesize)
       xbt_pagesize = getpagesize();
@@ -337,8 +336,7 @@ void *mmalloc_preinit(void)
     /* Fixme? only the default mdp in protected against forks */
     // This is mandated to protect the mmalloced areas through forks. Think of tesh.
     // Nah, removing the mutex isn't a good idea either for tesh
-    res = xbt_os_thread_atfork(mmalloc_fork_prepare,  
-                               mmalloc_fork_parent, mmalloc_fork_child);
+    int res = xbt_os_thread_atfork(mmalloc_fork_prepare, mmalloc_fork_parent, mmalloc_fork_child);
     if (res != 0)
       THROWF(system_error,0,"xbt_os_thread_atfork() failed: return value %d",res);
   }
index 2a1851b..0423149 100644 (file)
@@ -141,7 +141,7 @@ xbt_parmap_t xbt_parmap_new(unsigned int num_workers, e_xbt_parmap_mode_t mode)
  */
 void xbt_parmap_destroy(xbt_parmap_t parmap)
 {
-  if (!parmap) {
+  if (not parmap) {
     return;
   }
 
index 50a82e2..3407ff7 100644 (file)
@@ -1,21 +1,16 @@
 /* layout_simple - a dumb log layout                                        */
 
-/* Copyright (c) 2007-2016. The SimGrid Team.                               */
+/* Copyright (c) 2007-2017. The SimGrid Team.                               */
 
 /* 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/internal_config.h"       /* execinfo when available */
 #include "xbt/sysdep.h"
 #include "src/xbt/log_private.h"
 #include "simgrid/simix.h"      /* SIMIX_host_self_get_name */
 #include "surf/surf.h"
 #include <stdio.h>
 
-#if HAVE_EXECINFO_H
-#  include <execinfo.h> /* Function backtrace */
-#endif
-
 extern const char *xbt_log_priority_names[8];
 
 static double format_begin_of_time = -1;
@@ -27,7 +22,6 @@ static double format_begin_of_time = -1;
   "  where:\n"                                                          \
   "    source:    %%F: file          %%L: line          %%M: function  %%l: location (%%F:%%L)\n" \
   "    runtime:   %%h: hostname      %%t: thread        %%P: process   %%i: PID\n" \
-  "    backtrace: %%b: full          %%B: short\n"                      \
   "  when:        %%d: date          %%r: app. age\n"                   \
   "  other:       %%%%: %%             %%n: new line      %%e: plain space\n"
 
index 6ec8eeb..8d77b3e 100644 (file)
@@ -1,7 +1,6 @@
 /* layout_simple - a dumb log layout                                        */
 
-/* Copyright (c) 2007-2014. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2007-2017. 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. */
@@ -12,7 +11,6 @@
 #include "simgrid/simix.h"      /* SIMIX_host_self_get_name */
 #include "surf/surf.h"
 #include <stdio.h>
-#include "src/internal_config.h"
 
 extern const char *xbt_log_priority_names[8];
 extern int xbt_log_no_loc;
index ce2bc71..d53d973 100644 (file)
@@ -47,8 +47,8 @@ int xbt_pagebits = 0;
 /* Declare xbt_preinit and xbt_postexit as constructor/destructor of the library.
  * This is crude and rather compiler-specific, unfortunately.
  */
-static void xbt_preinit(void) _XBT_GNUC_CONSTRUCTOR(200);
-static void xbt_postexit(void);
+static void xbt_preinit() _XBT_GNUC_CONSTRUCTOR(200);
+static void xbt_postexit();
 
 #ifdef _WIN32
 #include <windows.h>
@@ -75,7 +75,8 @@ static BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserv
 
 #endif
 
-static void xbt_preinit(void) {
+static void xbt_preinit()
+{
   unsigned int seed = 2147483647;
 #ifdef _WIN32
   SYSTEM_INFO si;
@@ -104,9 +105,9 @@ static void xbt_preinit(void) {
   atexit(xbt_postexit);
 }
 
-static void xbt_postexit(void)
+static void xbt_postexit()
 {
-  if (!_sg_do_clean_atexit)
+  if (not _sg_do_clean_atexit)
     return;
   xbt_initialized--;
   xbt_dict_postexit();
@@ -152,11 +153,11 @@ void xbt_free_ref(void *d)
 }
 
 /** @brief Kill the program in silence */
-void xbt_abort(void)
+void xbt_abort()
 {
 #ifdef COVERAGE
   /* Call __gcov_flush on abort when compiling with coverage options. */
-  extern void __gcov_flush(void);
+  extern void __gcov_flush();
   __gcov_flush();
 #endif
 #ifdef _WIN32
diff --git a/src/xbt/xbt_matrix.c b/src/xbt/xbt_matrix.c
deleted file mode 100644 (file)
index f3d0908..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Copyright (c) 2006-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 <stdio.h>
-#include "xbt/sysdep.h"
-#include "xbt/log.h"
-#include "xbt/matrix.h"
-
-XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_matrix, xbt, "2D data storage");
-
-/** @brief constructor */
-xbt_matrix_t xbt_matrix_new(int lines, int rows, const unsigned long elmsize, void_f_pvoid_t const free_f)
-{
-  xbt_matrix_t res = xbt_new(s_xbt_matrix_t, 1);
-  res->lines = lines;
-  res->rows = rows;
-  res->elmsize = elmsize;
-  res->free_f = free_f;
-  res->data = xbt_malloc(elmsize * lines * rows);
-  return res;
-}
-
-/** @brief Creates a matrix being a submatrix of another one */
-xbt_matrix_t xbt_matrix_new_sub(xbt_matrix_t from, int lsize, int rsize, int lpos, int rpos,
-                                pvoid_f_pvoid_t const cpy_f)
-{
-  xbt_matrix_t res = xbt_matrix_new(lsize, rsize, from->elmsize, from->free_f);
-  xbt_matrix_copy_values(res, from, lsize, rsize, 0, 0, lpos, rpos, cpy_f);
-  return res;
-}
-
-/** @brief destructor */
-void xbt_matrix_free(xbt_matrix_t mat)
-{
-  if (mat) {
-    if (mat->free_f) {
-      for (unsigned i = 0; i < (mat->lines * mat->rows); i++) {
-        mat->free_f((void *) &(mat->data[i * mat->elmsize]));
-      }
-    }
-    free(mat->data);
-    free(mat);
-  }
-}
-
-/** @brief Display the content of a matrix (debugging purpose)
- *  @param coords: boolean indicating whether we should add the coords of each cell to the output*/
-void xbt_matrix_dump(xbt_matrix_t matrix, const char *name, int coords, void_f_pvoid_t display_fun)
-{
-  fprintf(stderr, ">>> Matrix %s dump (%u x %u)\n", name, matrix->lines, matrix->rows);
-  for (unsigned i = 0; i < matrix->lines; i++) {
-    fprintf(stderr, "  ");
-    for (unsigned j = 0; j < matrix->rows; j++) {
-      if (coords)
-        fprintf(stderr, " (%u,%u)=", i, j);
-      else
-        fprintf(stderr, " ");
-      display_fun(xbt_matrix_get_ptr(matrix, i, j));
-    }
-    fprintf(stderr, "\n");
-  }
-  fprintf(stderr, "<<< end_of_matrix %s dump\n", name);
-}
-
-/** @brief Copy the values from the matrix src into the matrix dst
- * @param dst: destination
- * @param src: source
- * @param lsize: number of lines to copy
- * @param rsize: number of rows to copy
- * @param lpos_dst: line offset on destination matrix
- * @param rpos_dst: row offset on destination matrix
- * @param lpos_src: line offset on destination matrix
- * @param rpos_src: row offset on destination matrix
- * @param cpy_f: the function to use to copy the elements over
- */
-void xbt_matrix_copy_values(xbt_matrix_t dst, xbt_matrix_t src, unsigned int lsize, unsigned int rsize,
-                            unsigned int lpos_dst, unsigned int rpos_dst,unsigned int lpos_src, unsigned int rpos_src,
-                            pvoid_f_pvoid_t const cpy_f)
-{
-  XBT_DEBUG ("Copy a %ux%u submatrix from %ux%u(of %ux%u) to %ux%u (of %ux%u)",
-       lsize, rsize, lpos_src, rpos_src, src->lines, src->rows, lpos_dst, rpos_dst, dst->lines, dst->rows);
-
-  /* everybody knows that issue is between the chair and the screen (particularly in my office) */
-  xbt_assert(src->elmsize == dst->elmsize);
-  /* don't check free_f since the user may play weird games with this */
-
-  xbt_assert(lpos_src + lsize <= src->lines);
-  xbt_assert(rpos_src + rsize <= src->rows);
-
-  xbt_assert(lpos_dst + lsize <= dst->lines);
-  xbt_assert(rpos_dst + rsize <= dst->rows);
-
-  /* Lets get serious here */
-  for (unsigned i = 0; i < rsize; i++) {
-    if (cpy_f) {
-      for (unsigned j = 0; j < lsize; j++)
-        xbt_matrix_get_as(dst, j + lpos_dst, i + rpos_dst, void *) =
-            cpy_f(xbt_matrix_get_ptr(src, j + rpos_src, i + lpos_src));
-    } else {
-      memcpy(xbt_matrix_get_ptr(dst, lpos_dst, i + rpos_dst), xbt_matrix_get_ptr(src, lpos_src, i + rpos_src),
-             dst->elmsize * lsize);
-    }
-  }
-}
-
-/** @brief Creates a new matrix of double filled with zeros */
-xbt_matrix_t xbt_matrix_double_new_zeros(int lines, int rows)
-{
-  xbt_matrix_t res = xbt_matrix_new(lines, rows, sizeof(double), NULL);
-
-  memset(res->data, 0, res->elmsize * res->lines * res->rows);
-  return res;
-}
-
-/** @brief Creates a new matrix of double being the identity matrix */
-xbt_matrix_t xbt_matrix_double_new_id(int lines, int rows)
-{
-  xbt_matrix_t res = xbt_matrix_double_new_zeros(lines, rows);
-
-  for (int i = 0; i < lines; i++)
-    xbt_matrix_get_as(res, i, i, double) = 1;
-  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)
-{
-  xbt_matrix_t res = xbt_matrix_new(lines, rows, sizeof(double), NULL);
-
-  for (int i = 0; i < lines * rows; i++)
-    *(double *) &res->data[i * res->elmsize] = i;
-
-  return res;
-}
-
-/** @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)
-{
-  xbt_assert(A->lines == C->lines, "A->lines != C->lines (%u vs %u)", A->lines, C->lines);
-  xbt_assert(B->rows == C->rows);
-
-  for (unsigned i = 0; i < C->lines; i++)
-    for (unsigned j = 0; j < C->rows; j++)
-      for (unsigned k = 0; k < B->lines; k++)
-        xbt_matrix_get_as(C, i, j, double) += xbt_matrix_get_as(A, i, k, double) * xbt_matrix_get_as(B, k, j, double);
-}
index 7bd87a6..b83e310 100644 (file)
@@ -96,7 +96,7 @@ void xbt_os_thread_mod_preinit(void)
   main_thread = xbt_new(s_xbt_os_thread_t, 1);
   main_thread->name = NULL;
   main_thread->detached = 0;
-  main_thread->name = (char *) "main";
+  main_thread->name = xbt_strdup("main");
   main_thread->param = NULL;
   main_thread->start_routine = NULL;
   main_thread->extra_data = NULL;
@@ -122,6 +122,7 @@ void xbt_os_thread_mod_postexit(void)
 
   //   if ((errcode=pthread_key_delete(xbt_self_thread_key)))
   //     THROWF(system_error,errcode,"pthread_key_delete failed for xbt_self_thread_key");
+  free(main_thread->name);
   free(main_thread);
   main_thread = NULL;
   thread_mod_inited = 0;
@@ -234,7 +235,7 @@ void xbt_os_thread_setguardsize(int guard_size)
 const char *xbt_os_thread_self_name(void)
 {
   xbt_os_thread_t me = xbt_os_thread_self();
-  return me ? me->name : "main";
+  return me ? (const char *)me->name : "main";
 }
 
 void xbt_os_thread_join(xbt_os_thread_t thread, void **thread_return)
index 86f8c7c..b9b6612 100644 (file)
@@ -23,7 +23,7 @@ static void read_and_trim_line(std::ifstream* fs, std::string* line)
   do {
     std::getline(*fs, *line);
     boost::trim(*line);
-  } while (!fs->eof() && (line->length() == 0 || line->front() == '#'));
+  } while (not fs->eof() && (line->length() == 0 || line->front() == '#'));
   XBT_DEBUG("got from trace: %s", line->c_str());
 }
 
@@ -34,9 +34,9 @@ class ReplayReader {
 public:
   explicit ReplayReader(const char* filename)
   {
-         XBT_VERB("Prepare to replay file '%s'", filename);
-         fs = new std::ifstream(filename, std::ifstream::in);
-         xbt_assert(fs->is_open(), "Cannot read file %s", filename);
+    XBT_VERB("Prepare to replay file '%s'", filename);
+    fs = new std::ifstream(filename, std::ifstream::in);
+    xbt_assert(fs->is_open(), "Cannot read replay file '%s'", filename);
   }
   ~ReplayReader()
   {
@@ -50,7 +50,7 @@ bool ReplayReader::get(ReplayAction* action)
   read_and_trim_line(fs, &line);
 
   boost::split(*action, line, boost::is_any_of(" \t"), boost::token_compress_on);
-  return !fs->eof();
+  return not fs->eof();
 }
 
 static ReplayAction* get_action(char* name)
@@ -125,9 +125,6 @@ static void handle_action(ReplayAction* action)
 /**
  * \ingroup XBT_replay
  * \brief function used internally to actually run the replay
-
- * \param argc argc .
- * \param argv argv
  */
 int replay_runner(int argc, char* argv[])
 {
index 76ad09e..6637f21 100644 (file)
@@ -7,7 +7,6 @@
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include <xbt/ex.hpp>
-#include "src/internal_config.h"
 #include "xbt/misc.h"
 #include "xbt/sysdep.h"
 #include "xbt/str.h"            /* headers of these functions */
@@ -33,10 +32,10 @@ void xbt_str_rtrim(char *s, const char *char_list)
   const char *__char_list = " \t\n\r\x0B";
   char white_char[256] = { 1, 0 };
 
-  if (!s)
+  if (not s)
     return;
 
-  if (!char_list) {
+  if (not char_list) {
     while (*__char_list) {
       white_char[(unsigned char) *__char_list++] = 1;
     }
@@ -76,10 +75,10 @@ void xbt_str_ltrim(char *s, const char *char_list)
   const char *__char_list = " \t\n\r\x0B";
   char white_char[256] = { 1, 0 };
 
-  if (!s)
+  if (not s)
     return;
 
-  if (!char_list) {
+  if (not char_list) {
     while (*__char_list) {
       white_char[(unsigned char) *__char_list++] = 1;
     }
@@ -112,7 +111,7 @@ void xbt_str_ltrim(char *s, const char *char_list)
  */
 void xbt_str_trim(char *s, const char *char_list)
 {
-  if (!s)
+  if (not s)
     return;
 
   xbt_str_rtrim(s, char_list);
@@ -162,7 +161,7 @@ xbt_dynar_t xbt_str_split(const char *s, const char *sep)
 
   /* check what are the separators */
   memset(is_sep, 0, sizeof(is_sep));
-  if (!sep) {
+  if (not sep) {
     while (*sep_dflt)
       is_sep[(unsigned char) *sep_dflt++] = 1;
   } else {
@@ -179,9 +178,9 @@ xbt_dynar_t xbt_str_split(const char *s, const char *sep)
   if (s[0] == '\0')
     return res;
 
-  while (!done) {
+  while (not done) {
     char *topush;
-    while (!is_sep[(unsigned char) *q]) {
+    while (not is_sep[(unsigned char)*q]) {
       q++;
     }
     if (*q == '\0')
@@ -199,7 +198,7 @@ xbt_dynar_t xbt_str_split(const char *s, const char *sep)
 
 /**
  * \brief This functions splits a string after using another string as separator
- * For example A!!B!!C split after !! will return the dynar {A,B,C}
+ * For example Anot not B!not C split after !! will return the dynar {A,B,C}
  * \return An array of dynars containing the string tokens
  */
 xbt_dynar_t xbt_str_split_str(const char *s, const char *sep)
@@ -218,14 +217,13 @@ xbt_dynar_t xbt_str_split_str(const char *s, const char *sep)
     return res;
   }
 
-  while (!done) {
+  while (not done) {
     char *to_push;
-    int v = 0;
     // get the start of the first occurrence of the substring
     q = strstr(p, sep);
     //if substring was not found add the entire string
     if (nullptr == q) {
-      v = strlen(p);
+      int v   = strlen(p);
       to_push = (char*) xbt_malloc(v + 1);
       memcpy(to_push, p, v);
       to_push[v] = '\0';
@@ -272,7 +270,7 @@ xbt_dynar_t xbt_str_split_quoted_in_place(char *s) {
   /* do not trim leading spaces: caller responsibility to clean his cruft */
   end = beg;
 
-  while (!done) {
+  while (not done) {
     switch (*end) {
     case '\\':
       ctn = 1;
@@ -284,8 +282,8 @@ xbt_dynar_t xbt_str_split_quoted_in_place(char *s) {
       break;
     case '\'':
       ctn = 1;
-      if (!in_double_quote) {
-        in_simple_quote = !in_simple_quote;
+      if (not in_double_quote) {
+        in_simple_quote = not in_simple_quote;
         memmove(end, end + 1, strlen(end));
       } else {
         /* simple quote protected by double ones */
@@ -294,8 +292,8 @@ xbt_dynar_t xbt_str_split_quoted_in_place(char *s) {
       break;
     case '"':
       ctn = 1;
-      if (!in_simple_quote) {
-        in_double_quote = !in_double_quote;
+      if (not in_simple_quote) {
+        in_double_quote = not in_double_quote;
         memmove(end, end + 1, strlen(end));
       } else {
         /* double quote protected by simple ones */
@@ -377,7 +375,7 @@ char *xbt_str_join(xbt_dynar_t dyn, const char *sep)
   unsigned int cpt;
   char* cursor;
 
-  if (!dyn_len)
+  if (not dyn_len)
     return xbt_strdup("");
 
   /* compute the length */
@@ -407,7 +405,7 @@ char *xbt_str_join_array(const char *const *strs, const char *sep)
   int amount_strings=0;
   int len=0;
 
-  if ((!strs) || (!strs[0]))
+  if ((not strs) || (not strs[0]))
     return xbt_strdup("");
 
   /* compute the length before malloc */
@@ -472,15 +470,13 @@ double xbt_str_parse_double(const char* str, const char* error_msg)
 
 XBT_TEST_SUITE("xbt_str", "String Handling");
 
-#define mytest(name, input, expected) \
-  xbt_test_add(name); \
-  d=xbt_str_split_quoted(input); \
-  s=xbt_str_join(d,"XXX"); \
-  xbt_test_assert(!strcmp(s,expected),\
-                   "Input (%s) leads to (%s) instead of (%s)", \
-                   input,s,expected);\
-                   free(s); \
-                   xbt_dynar_free(&d);
+#define mytest(name, input, expected)                                                                                  \
+  xbt_test_add(name);                                                                                                  \
+  d = xbt_str_split_quoted(input);                                                                                     \
+  s = xbt_str_join(d, "XXX");                                                                                          \
+  xbt_test_assert(not strcmp(s, expected), "Input (%s) leads to (%s) instead of (%s)", input, s, expected);            \
+  free(s);                                                                                                             \
+  xbt_dynar_free(&d);
 XBT_TEST_UNIT("xbt_str_split_quoted", test_split_quoted, "test the function xbt_str_split_quoted")
 {
   xbt_dynar_t d;
@@ -500,15 +496,13 @@ XBT_TEST_UNIT("xbt_str_split_quoted", test_split_quoted, "test the function xbt_
   mytest("Backslashed quotes + quotes", "'toto \\'tutu' tata", "toto 'tutuXXXtata");
 }
 
-#define mytest_str(name, input, separator, expected) \
-  xbt_test_add(name); \
-  d=xbt_str_split_str(input, separator); \
-  s=xbt_str_join(d,"XXX"); \
-  xbt_test_assert(!strcmp(s,expected),\
-                   "Input (%s) leads to (%s) instead of (%s)", \
-                   input,s,expected);\
-                   free(s); \
-                   xbt_dynar_free(&d);
+#define mytest_str(name, input, separator, expected)                                                                   \
+  xbt_test_add(name);                                                                                                  \
+  d = xbt_str_split_str(input, separator);                                                                             \
+  s = xbt_str_join(d, "XXX");                                                                                          \
+  xbt_test_assert(not strcmp(s, expected), "Input (%s) leads to (%s) instead of (%s)", input, s, expected);            \
+  free(s);                                                                                                             \
+  xbt_dynar_free(&d);
 
 XBT_TEST_UNIT("xbt_str_split_str", test_split_str, "test the function xbt_str_split_str")
 {
index 6f5381a..2d9d5df 100644 (file)
@@ -1,5 +1,11 @@
-foreach(example SemaphoreGC SleepHostOff)
-  set(sources ${CMAKE_CURRENT_SOURCE_DIR}/${example}/${example}.java)
+set(semaphoreGC_files  SemaphoreGC)
+set(sleepHostOff_files SleepHostOff)
+
+foreach(example semaphoreGC sleepHostOff)
+  foreach (filename ${${example}_files} )
+    set(sources "${${example}_sources}" "${CMAKE_CURRENT_SOURCE_DIR}/${example}/${filename}.java")
+  endforeach()
+
   set(tesh_files   ${tesh_files}   ${CMAKE_CURRENT_SOURCE_DIR}/${example}/${example}.tesh)
 
   if(enable_java)
@@ -21,6 +27,6 @@ set(examples_src ${examples_src} ${sources}
 set(tesh_files   ${tesh_files}                                                                 PARENT_SCOPE)
 
 if(enable_java)
-  ADD_TESH(tesh-java-SemaphoreGC  --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/teshsuite/java/SemaphoreGC  ${CMAKE_HOME_DIRECTORY}/teshsuite/java/SemaphoreGC/SemaphoreGC.tesh)
-  ADD_TESH(tesh-java-SleepHostOff --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/teshsuite/java/SleepHostOff ${CMAKE_HOME_DIRECTORY}/teshsuite/java/SleepHostOff/SleepHostOff.tesh)
+  ADD_TESH(tesh-java-semaphoreGC  --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/teshsuite/java/semaphoreGC  ${CMAKE_HOME_DIRECTORY}/teshsuite/java/semaphoreGC/semaphoreGC.tesh)
+  ADD_TESH(tesh-java-sleepHostOff --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/platforms --setenv LD_LIBRARY_PATH=${CMAKE_BINARY_DIR}/lib --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/teshsuite/java/sleepHostOff ${CMAKE_HOME_DIRECTORY}/teshsuite/java/sleepHostOff/sleepHostOff.tesh)
 endif()
similarity index 82%
rename from teshsuite/java/SemaphoreGC/SemaphoreGC.java
rename to teshsuite/java/semaphoreGC/SemaphoreGC.java
index 3939f28..cf18ab2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016. The SimGrid Team. All rights reserved.               */
+/* Copyright (c) 2016-2017. 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. */
@@ -7,14 +7,12 @@
  * This was reported as bug #19893 on gforge.
  */
 
-package SemaphoreGC;
+package semaphoreGC;
 
 import org.simgrid.msg.*;
 import org.simgrid.msg.Process;
 
 class SemCreator extends Process {
-  Semaphore sem; 
-
   SemCreator(Host h, String n){
     super(h, n);
   }
@@ -23,7 +21,7 @@ class SemCreator extends Process {
     int j; 
     Msg.info("Creating 50 new Semaphores, yielding and triggering a GC after each");
     for(j = 1; j <= 50; j++) {
-      sem = new Semaphore(0);
+      new Semaphore(0);
       waitFor(10);
       System.gc();
     }
@@ -39,7 +37,7 @@ public class SemaphoreGC {
   public static void main(String[] args) throws Exception {
     Msg.init(args);
     if (args.length < 1) {
-      Msg.info("Usage: java -cp simgrid.jar:. semaphore.SemaphoreGC <deployment.xml>");
+      Msg.info("Usage: java -cp simgrid.jar:. semaphoreGC.SemaphoreGC <deployment.xml>");
       System.exit(1);
     }
     Msg.createEnvironment(args[0]);
similarity index 86%
rename from teshsuite/java/SemaphoreGC/SemaphoreGC.tesh
rename to teshsuite/java/semaphoreGC/semaphoreGC.tesh
index 76c6b4a..d3d9f3e 100644 (file)
@@ -1,6 +1,6 @@
 ! timeout 15
 
-$ java -classpath ${classpath:=.} SemaphoreGC.SemaphoreGC ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.4r]%e(%i:%P@%h)%e%m%n"
+$ java -classpath ${classpath:=.} semaphoreGC.SemaphoreGC ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.4r]%e(%i:%P@%h)%e%m%n"
 > [    0.0000] (0:maestro@) Using regular java threads.
 > [    0.0000] (1:SemCreator@Fafard) Creating 50 new Semaphores, yielding and triggering a GC after each
 > [  500.0000] (1:SemCreator@Fafard) It worked, we survived. The test is passed.
@@ -1,10 +1,9 @@
-/* Copyright (c) 2014. The SimGrid Team.
- * All rights reserved.                                                     */
+/* Copyright (c) 2014-2017. 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. */
 
-package SleepHostOff;
+package sleepHostOff;
 
 import org.simgrid.msg.*;
 import org.simgrid.msg.Process;
@@ -56,7 +55,7 @@ public class SleepHostOff {
     Msg.init(args);
 
     if (args.length < 1) {
-      Msg.info("Usage: java -cp simgrid.jar:. sleep_host_off.SleepHostOff <platform.xml>");
+      Msg.info("Usage: java -cp simgrid.jar:. sleepHostOff.SleepHostOff <platform.xml>");
       System.exit(1);
     }
 
@@ -1,4 +1,4 @@
-$ java -classpath ${classpath:=.} SleepHostOff.SleepHostOff ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
+$ java -classpath ${classpath:=.} sleepHostOff.SleepHostOff ${srcdir:=.}/small_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n"
 > [  0.000000] (0:maestro@) Using regular java threads.
 > [  0.000000] (1:TestRunner@Fafard) **** **** **** ***** ***** Test Sleep ***** ***** **** **** ****
 > [  0.000000] (1:TestRunner@Fafard) Test sleep: Create a process on Tremblay that simply make periodic sleep, turn off Tremblay
index 09ad40e..fca03b1 100644 (file)
 #include "src/mc/Variable.hpp"
 
 int test_some_array[4][5][6];
-struct some_struct { int first; int second[4][5]; } test_some_struct;
+struct some_struct {
+  int first;
+  int second[4][5];
+} test_some_struct;
 
 static simgrid::mc::Type* find_type_by_name(simgrid::mc::ObjectInformation* info, const char* name)
 {
@@ -70,12 +73,8 @@ static void test_local_variable(simgrid::mc::ObjectInformation* info, const char
   simgrid::dwarf::Location location = simgrid::dwarf::resolve(
     var->location_list, info, cursor, frame_base, nullptr, -1);
 
-  xbt_assert(location.in_memory(),
-    "Expected the variable %s of function %s to be in memory",
-    variable, function);
-  xbt_assert(location.address() == address,
-    "Bad resolution of local variable %s of %s", variable, function);
-
+  xbt_assert(location.in_memory(), "Expected the variable %s of function %s to be in memory", variable, function);
+  xbt_assert(location.address() == address, "Bad resolution of local variable %s of %s", variable, function);
 }
 
 static simgrid::mc::Variable* test_global_variable(
@@ -84,12 +83,10 @@ static simgrid::mc::Variable* test_global_variable(
 {
   simgrid::mc::Variable* variable = info->find_variable(name);
   xbt_assert(variable, "Global variable %s was not found", name);
-  xbt_assert(variable->name == name,
-    "Name mismatch for %s", name);
+  xbt_assert(variable->name == name, "Name mismatch for %s", name);
   xbt_assert(variable->global, "Variable %s is not global", name);
-  xbt_assert(variable->address == address,
-      "Address mismatch for %s : %p expected but %p found",
-      name, address, variable->address);
+  xbt_assert(variable->address == address, "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);
@@ -112,9 +109,7 @@ typedef struct foo {int i;} s_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());
+  assert(process.binary_info->full_types_by_name.find("struct foo") != process.binary_info->full_types_by_name.end());
 }
 
 int main(int argc, char** argv)
@@ -127,28 +122,26 @@ int main(int argc, char** argv)
   simgrid::mc::Process process(getpid(), -1);
   process.init();
 
-  test_global_variable(process, process.binary_info.get(),
-    "some_local_variable", &some_local_variable, sizeof(int));
+  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(),
-    "test_some_array", &test_some_array, sizeof(test_some_array));
+  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");
   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);
+  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(),
-    "test_some_struct", &test_some_struct, sizeof(test_some_struct));
+  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");
   type = &i->second;
 
   assert(type);
   assert(find_member(*type, "first")->offset() == 0);
-  assert(find_member(*type, "second")->offset()
-      == ((const char*)&test_some_struct.second) - (const char*)&test_some_struct);
+  assert(find_member(*type, "second")->offset() ==
+         ((const char*)&test_some_struct.second) - (const char*)&test_some_struct);
 
   unw_context_t context;
   unw_cursor_t cursor;
@@ -157,11 +150,8 @@ int main(int argc, char** argv)
 
   test_local_variable(process.binary_info.get(), "main", "argc", &argc, &cursor);
 
-  {
-    int lexical_block_variable = 50;
-    test_local_variable(process.binary_info.get(), "main",
-      "lexical_block_variable", &lexical_block_variable, &cursor);
-  }
+  int lexical_block_variable = 50;
+  test_local_variable(process.binary_info.get(), "main", "lexical_block_variable", &lexical_block_variable, &cursor);
 
   s_foo my_foo;
   test_type_by_name(process, my_foo);
index c7df906..f714d3f 100644 (file)
@@ -40,10 +40,9 @@ static int master(int argc, char *argv[])
   double task_comm_size = 1E6;
 
   const char * mailbox = "jupi";
-  msg_task_t task = NULL;
   msg_host_t jupiter = MSG_host_by_name("Jupiter");
 
-  task = MSG_task_create("task on", task_comp_size, task_comm_size, NULL);
+  msg_task_t task = MSG_task_create("task on", task_comp_size, task_comm_size, NULL);
   XBT_INFO("Sending \"%s\"", task->name);
   if (MSG_task_send_with_timeout(task, mailbox, 1) != MSG_OK)
     MSG_task_destroy(task);
index 5841321..2c686cc 100644 (file)
@@ -80,13 +80,13 @@ static int worker(int argc, char *argv[])
     xbt_assert(res == MSG_OK, "MSG_task_get failed");
     XBT_INFO("Handling task \"%s\"", MSG_task_get_name(task));
 
-    if (!strcmp(MSG_task_get_name(task), "finalize")) {
+    if (not strcmp(MSG_task_get_name(task), "finalize")) {
       XBT_INFO("Destroying task \"%s\"", task->name);
       MSG_task_destroy(task);
       break;
     }
 
-    if (!strcmp(MSG_task_get_name(task), "cancel")) {
+    if (not strcmp(MSG_task_get_name(task), "cancel")) {
       MSG_process_create("worker1", worker_main, task, MSG_host_self());
       MSG_process_sleep(0.1);
       XBT_INFO("Canceling task \"%s\"", task->name);
index 4948ed4..991f201 100644 (file)
@@ -1,3 +1,8 @@
+/* Copyright (c) 2017. 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. */
+
 /* Bug report: https://github.com/simgrid/simgrid/issues/40
  *
  * Task.listen used to be on async mailboxes as it always returned false.
@@ -12,26 +17,27 @@ static void server()
 {
   simgrid::s4u::MailboxPtr mailbox = simgrid::s4u::Mailbox::byName("mailbox");
 
-  simgrid::s4u::this_actor::isend(mailbox, xbt_strdup("Some data"), 0);
+  simgrid::s4u::CommPtr sendComm = simgrid::s4u::this_actor::isend(mailbox, xbt_strdup("Some data"), 0);
 
   xbt_assert(mailbox->listen()); // True (1)
   XBT_INFO("Task listen works on regular mailboxes");
   char* res = static_cast<char*>(simgrid::s4u::this_actor::recv(mailbox));
 
-  xbt_assert(!strcmp("Some data", res), "Data received: %s", res);
+  xbt_assert(not strcmp("Some data", res), "Data received: %s", res);
   XBT_INFO("Data successfully received from regular mailbox");
   xbt_free(res);
+  sendComm->wait();
 
   simgrid::s4u::MailboxPtr mailbox2 = simgrid::s4u::Mailbox::byName("mailbox2");
   mailbox2->setReceiver(simgrid::s4u::Actor::self());
 
-  simgrid::s4u::this_actor::isend(mailbox2, xbt_strdup("More data"), 0);
+  simgrid::s4u::this_actor::dsend(mailbox2, xbt_strdup("More data"), 0);
 
   xbt_assert(mailbox2->listen()); // used to break.
   XBT_INFO("Task listen works on asynchronous mailboxes");
 
   res = static_cast<char*>(simgrid::s4u::this_actor::recv(mailbox2));
-  xbt_assert(!strcmp("More data", res));
+  xbt_assert(not strcmp("More data", res));
   xbt_free(res);
 
   XBT_INFO("Data successfully received from asynchronous mailbox");
index 184718e..a888ec0 100644 (file)
@@ -3,4 +3,4 @@ $ ./listen_async ${srcdir:=.}/../../../examples/platforms/small_platform.xml "--
 > [  0.000195] (test@Tremblay) Data successfully received from regular mailbox
 > [  0.000195] (test@Tremblay) Task listen works on asynchronous mailboxes
 > [  0.000195] (test@Tremblay) Data successfully received from asynchronous mailbox
-> [  0.000195] (maestro@) Variable 3 still in system when freing it: this may be a bug
+> [  0.000195] (maestro@) Probable bug: a simgrid::surf::NetworkCm02Action variable (#3) not removed before the LMM system destruction.
index 4a0b6fc..735879f 100644 (file)
@@ -11,12 +11,13 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(storage, "Messages specific for this simulation");
 
 static void display_storage_properties(simgrid::s4u::Storage* storage)
 {
-  xbt_dict_cursor_t cursor = NULL;
-  char* key;
-  char* data;
   xbt_dict_t props = storage->properties();
   if (xbt_dict_length(props) > 0) {
     XBT_INFO("\tProperties of mounted storage: %s", storage->name());
+
+    xbt_dict_cursor_t cursor = NULL;
+    char* key;
+    char* data;
     xbt_dict_foreach (props, cursor, key, data)
       XBT_INFO("\t\t'%s' -> '%s'", key, data);
   } else {
@@ -64,7 +65,7 @@ static void display_storage_content(simgrid::s4u::Storage* storage)
 {
   XBT_INFO("Print the content of the storage element: %s", storage->name());
   std::map<std::string, sg_size_t*>* content = storage->content();
-  if (!content->empty()) {
+  if (not content->empty()) {
     for (auto entry : *content)
       XBT_INFO("\t%s size: %llu bytes", entry.first.c_str(), *entry.second);
   } else {
@@ -149,7 +150,7 @@ static void server()
   XBT_INFO("Server waiting for transfers ...");
   while (1) {
     char* msg = static_cast<char*>(simgrid::s4u::this_actor::recv(mailbox));
-    if (!strcmp(msg, "finalize")) { // Shutdown ...
+    if (not strcmp(msg, "finalize")) { // Shutdown ...
       xbt_free(msg);
       break;
     } else { // Receive file to save
index d654328..e434b5b 100644 (file)
@@ -31,7 +31,7 @@ static bool parse_cmdline(int* timings, char** platformFile, int argc, char** ar
   bool parse_ok = true;
   for (int i = 1; i < argc; i++) {
     if (std::strlen(argv[i]) > 1 && argv[i][0] == '-' && argv[i][1] == '-') {
-      if (!std::strcmp(argv[i], "--timings")) {
+      if (not std::strcmp(argv[i], "--timings")) {
         *timings = 1;
       } else {
         parse_ok = false;
@@ -80,7 +80,7 @@ static void dump_platform()
     if (hosts[i]->coreCount() > 1) {
       std::printf(" core=\"%d\"", hosts[i]->coreCount());
     }
-    if (props && !xbt_dict_is_empty(props)) {
+    if (props && not xbt_dict_is_empty(props)) {
       std::printf(">\n");
       xbt_dict_foreach (props, cursor, key, data) {
         std::printf("    <prop id=\"%s\" value=\"%s\"/>\n", key, data);
@@ -129,7 +129,7 @@ static void dump_platform()
       std::vector<simgrid::surf::LinkImpl*> route;
       simgrid::kernel::routing::NetPoint* netcardDst = host2->pimpl_netpoint;
       simgrid::kernel::routing::NetZoneImpl::getGlobalRoute(netcardSrc, netcardDst, &route, nullptr);
-      if (!route.empty()) {
+      if (not route.empty()) {
         std::printf("  <route src=\"%s\" dst=\"%s\">\n  ", host1->cname(), host2->cname());
         for (auto link : route)
           std::printf("<link_ctn id=\"%s\"/>", link->cname());
index 242d10b..4a4d891 100644 (file)
@@ -7,7 +7,6 @@
 #include "simgrid/s4u/Host.hpp"
 #include "simgrid/simdag.h"
 #include "src/kernel/routing/NetPoint.hpp"
-#include "surf/surf_routing.h"
 #include <stdio.h>
 
 int main(int argc, char **argv)
index 900597c..b639c18 100644 (file)
@@ -92,7 +92,7 @@ set(umpire_tests_deadlock_broken
 )
  
 set(umpire_tests_problematic
-  deadlock-config # No deadlock detected by ISP unless MPI_Send blocking activated
+  deadlock-config # No deadlock detected by ISP unless MPI_Send blocking activated
  ) # problematic tests
  
  # These files are not listed on http://formalverification.cs.utah.edu/ISP_Tests/
index 42d8bf3..b04775f 100644 (file)
@@ -1,5 +1,5 @@
 p Test privatization
 ! setenv LD_LIBRARY_PATH=../../lib
 ! timeout 5
-$ ${bindir:=.}/../../../smpi_script/bin/smpirun -hostfile ../hostfile -platform ../../../examples/platforms/small_platform.xml -np 32 ${bindir:=.}/privatization --log=smpi_kernel.thres:warning --log=xbt_cfg.thres:warning --cfg=smpi/privatization:1 --log=simix_context.thres:error
+$ ${bindir:=.}/../../../smpi_script/bin/smpirun -hostfile ../hostfile -platform ../../../examples/platforms/small_platform.xml -np 32 ${bindir:=.}/privatization --log=smpi_kernel.thres:warning --log=xbt_cfg.thres:warning --cfg=smpi/privatization:1 --log=simix_context.thres:error --log=xbt_memory_map.thres:critical
 > You requested to use 32 ranks, but there is only 5 processes in your hostfile...
index 7d4323c..6dbca8c 100644 (file)
@@ -94,7 +94,7 @@ static void test(int nb_cnst, int nb_var, int nb_elem, unsigned int pw_base_limi
         l=j;
       fprintf(stderr,"(%i):%i/%i ",i,j,k);
       lmm_constraint_concurrency_maximum_reset(cnst[i]);
-      xbt_assert(!lmm_constraint_concurrency_maximum_get(cnst[i]));
+      xbt_assert(not lmm_constraint_concurrency_maximum_get(cnst[i]));
       if(i%10==9)
         fprintf(stderr,"\n");
     }
@@ -129,14 +129,14 @@ int main(int argc, char **argv)
   }
 
   //what class?
-  if(!strcmp(argv[1],"small"))
-      testclass=0;
-  else if(!strcmp(argv[1],"medium"))
-      testclass=1;
-  else if(!strcmp(argv[1],"big"))
-      testclass=2;
-  else if(!strcmp(argv[1],"huge"))
-      testclass=3;
+  if (not strcmp(argv[1], "small"))
+    testclass = 0;
+  else if (not strcmp(argv[1], "medium"))
+    testclass = 1;
+  else if (not strcmp(argv[1], "big"))
+    testclass = 2;
+  else if (not strcmp(argv[1], "huge"))
+    testclass = 3;
   else {
     fprintf(stderr, "Unknown class \"%s\", aborting!\n",argv[1]);
     return -2;
index 43edad4..c480421 100644 (file)
@@ -40,7 +40,8 @@ int main(int argc, char**argv)
 
   XBT_INFO("HeapA allocated");
 
-  int i, size;
+  int i;
+  int size;
   for (i = 0; i < TESTSIZE; i++) {
     size = size_of_block(i);
     pointers[i] = mmalloc(heapA, size);
@@ -70,7 +71,7 @@ int main(int argc, char**argv)
     } catch(xbt_ex& e) {
       gotit = true;
     }
-    if (!gotit)
+    if (not gotit)
       xbt_die("FAIL: A double-free went undetected (for size:%d)",size_of_block(i));
   }
 
@@ -82,7 +83,7 @@ int main(int argc, char**argv)
     } catch(xbt_ex& e) {
       gotit = true;
     }
-    if (!gotit)
+    if (not gotit)
       xbt_die("FAIL: A double-free went undetected (for size:%d)",size_of_block(i));
   }
 
index f9dc6e6..1226d70 100644 (file)
@@ -30,12 +30,6 @@ set(EXTRA_DIST
   src/simix/smx_network_private.h
   src/simix/smx_private.h
   src/simix/smx_synchro_private.h
-  src/kernel/activity/ActivityImpl.hpp
-  src/kernel/activity/SynchroComm.hpp
-  src/kernel/activity/SynchroExec.hpp
-  src/kernel/activity/SynchroIo.hpp
-  src/kernel/activity/SynchroSleep.hpp
-  src/kernel/activity/SynchroRaw.hpp
   src/smpi/colls/coll_tuned_topo.h
   src/smpi/colls/colls_private.h
   src/smpi/colls/smpi_mvapich2_selector_stampede.h
@@ -59,7 +53,7 @@ set(EXTRA_DIST
   src/surf/xml/simgrid_dtd.c
   src/surf/xml/surfxml_sax_cb.cpp
 
-  src/surf/storage_interface.hpp
+  src/surf/StorageImpl.hpp
   src/surf/storage_n11.hpp
   src/surf/surf_interface.hpp
   src/surf/surf_private.h
@@ -282,7 +276,6 @@ set(XBT_SRC
   src/xbt/xbt_log_layout_format.c
   src/xbt/xbt_log_layout_simple.c
   src/xbt/xbt_main.cpp
-  src/xbt/xbt_matrix.c
   src/xbt/xbt_os_file.c
   src/xbt/xbt_os_synchro.c
   src/xbt/xbt_os_time.c
@@ -343,7 +336,7 @@ set(SURF_SRC
   src/surf/plugins/host_load.cpp
   src/surf/PropertyHolder.cpp
   src/surf/sg_platf.cpp
-  src/surf/storage_interface.cpp
+  src/surf/StorageImpl.cpp
   src/surf/storage_n11.cpp
   src/surf/surf_c_bindings.cpp
   src/surf/surf_interface.cpp
@@ -385,13 +378,19 @@ set(SIMIX_SRC
   src/simix/smx_synchro.cpp
   src/simix/popping.cpp
   src/kernel/activity/ActivityImpl.cpp
+  src/kernel/activity/ActivityImpl.hpp
+  src/kernel/activity/CommImpl.cpp
+  src/kernel/activity/CommImpl.hpp
+  src/kernel/activity/ExecImpl.cpp
+  src/kernel/activity/ExecImpl.hpp
   src/kernel/activity/MailboxImpl.cpp
   src/kernel/activity/MailboxImpl.hpp
-  src/kernel/activity/SynchroComm.cpp
-  src/kernel/activity/SynchroExec.cpp
-  src/kernel/activity/SynchroSleep.cpp
-  src/kernel/activity/SynchroRaw.cpp
+  src/kernel/activity/SleepImpl.cpp
+  src/kernel/activity/SleepImpl.hpp
   src/kernel/activity/SynchroIo.cpp
+  src/kernel/activity/SynchroIo.hpp
+  src/kernel/activity/SynchroRaw.cpp
+  src/kernel/activity/SynchroRaw.hpp
   
   ${SIMIX_GENERATED_SRC}
   )
@@ -584,7 +583,6 @@ set(MC_SRC
   src/mc/remote/mc_protocol.cpp
   
   src/mc/AddressSpace.hpp
-  src/mc/AddressSpace.cpp
   src/mc/Frame.hpp
   src/mc/Frame.cpp
   src/mc/ModelChecker.hpp
@@ -598,7 +596,6 @@ set(MC_SRC
   src/mc/RegionSnapshot.cpp
   src/mc/RegionSnapshot.hpp
   src/mc/Type.hpp
-  src/mc/Variable.cpp
   src/mc/Variable.hpp
   src/mc/mc_forward.hpp
   src/mc/Process.hpp
@@ -691,7 +688,6 @@ set(headers_to_install
   include/smpi/smpi_extended_traces.h
   include/smpi/smpi_extended_traces_fortran.h
   include/smpi/forward.hpp
-  include/smpi/smpi_shared_malloc.hpp
   include/surf/surf_routing.h
   include/xbt.h
   include/xbt/RngStream.h
@@ -723,7 +719,6 @@ set(headers_to_install
   include/xbt/log.h
   include/xbt/log.hpp
   include/xbt/mallocator.h
-  include/xbt/matrix.h
   include/xbt/misc.h
   include/xbt/mmalloc.h
   include/xbt/module.h
@@ -947,7 +942,7 @@ set(txt_files
   ${txt_files}
   AUTHORS
   COPYING
-  README
+  README.md
   ChangeLog
   INSTALL
   LICENSE-LGPL-2.1
index 6615daa..68bbde4 100644 (file)
@@ -14,12 +14,18 @@ set(optCFLAGS "")
 set(warnCXXFLAGS "")
 
 if(enable_compile_warnings)
-  set(warnCFLAGS "-fno-common -Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral")
+  set(warnCFLAGS "-fno-common -Wall -Wunused -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing")
+  if(CMAKE_C_COMPILER_ID MATCHES "Clang|GCC")
+    set(warnCFLAGS "${warnCFLAGS} -Wno-format-nonliteral")
+  endif()
   if(CMAKE_COMPILER_IS_GNUCC)
     set(warnCFLAGS "${warnCFLAGS} -Wclobbered -Wno-error=clobbered  -Wno-unused-local-typedefs -Wno-error=attributes")
   endif()
 
-  set(warnCXXFLAGS "${warnCFLAGS} -Wall -Wextra -Wunused -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment  -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral")
+  set(warnCXXFLAGS "${warnCFLAGS} -Wall -Wextra -Wunused -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment  -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing")
+  if(CMAKE_CXX_COMPILER_ID MATCHES "Clang|GCC")
+    set(warnCXXFLAGS "${warnCXXFLAGS} -Wno-format-nonliteral")
+  endif()
   if(CMAKE_COMPILER_IS_GNUCXX)
     set(warnCXXFLAGS "${warnCXXFLAGS} -Wclobbered -Wno-error=clobbered  -Wno-unused-local-typedefs -Wno-error=attributes")
   endif()
@@ -29,10 +35,15 @@ if(enable_compile_warnings)
     set(warnCXXFLAGS "${warnCXXFLAGS} -Wno-mismatched-tags -Wno-extern-c-compat")
   endif()
 
-  # the one specific to C but refused by C++
+  # the one specific to C but refused by C++
   set(warnCFLAGS "${warnCFLAGS} -Wmissing-prototypes") 
 
-  set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wall")
+  if(CMAKE_Fotran_COMPILER_ID MATCHES "GCC|PGI")
+    set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wall")
+  endif()
+  if(CMAKE_Fotran_COMPILER_ID MATCHES "Intel")
+    set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -warn all")
+  endif()
   set(CMAKE_JAVA_COMPILE_FLAGS "-Xlint")
 endif()
 
@@ -65,7 +76,7 @@ endif()
 # Configure LTO
 # NOTE, cmake 3.0 has a INTERPROCEDURAL_OPTIMIZATION target
 #       property for this (http://www.cmake.org/cmake/help/v3.0/prop_tgt/INTERPROCEDURAL_OPTIMIZATION.html)
-if(enable_lto) # User wants LTO. Try if we can do that
+if(enable_lto) # User wants LTO. Try if we can do that
   set(enable_lto OFF)
   if(enable_compile_optimizations
       AND CMAKE_COMPILER_IS_GNUCC
@@ -200,8 +211,8 @@ if(NOT $ENV{LDFLAGS} STREQUAL "")
 endif()
 
 if(MINGW)
-  # http://stackoverflow.com/questions/10452262/create-64-bit-jni-under-windows
-  # We don't want to ship libgcc_s_seh-1.dll nor libstdc++-6.dll
+  # http://stackoverflow.com/questions/10452262/create-64-bit-jni-under-windows
+  # We don't want to ship libgcc_s_seh-1.dll nor libstdc++-6.dll
   set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   -static-libgcc")
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++")
   set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS   "${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS} -static-libgcc")
index 233fcec..eff28d8 100644 (file)
@@ -208,6 +208,8 @@ if(enable_maintainer_mode AND NOT WIN32)
       COMMAND ${SED_EXE} -i ${string9} src/surf/xml/simgrid_dtd.c
       COMMAND ${SED_EXE} -i ${string15} src/surf/xml/simgrid_dtd.c
       COMMAND ${SED_EXE} -i 's/int yyl\;/unsigned int yyl\;/' src/surf/xml/simgrid_dtd.c
+      COMMAND ${SED_EXE} -i 's/int surf_parse_leng\;/unsigned int surf_parse_leng\;/' src/surf/xml/simgrid_dtd.c
+      COMMAND ${SED_EXE} -i 's/n = 0\; n < max_size/n = 0\; n < (size_t) max_size/' src/surf/xml/simgrid_dtd.c
       COMMAND ${SED_EXE} -i "s/register //" src/surf/xml/simgrid_dtd.c
       COMMAND ${CMAKE_COMMAND} -E echo "       Generated surf/xml/simgrid_dtd.c"
 
@@ -217,6 +219,7 @@ if(enable_maintainer_mode AND NOT WIN32)
       COMMAND ${FLEX_EXE} -o src/simdag/dax_dtd.c -Pdax_ --noline src/simdag/dax_dtd.l
       COMMAND ${SED_EXE} -i ${string9}                        src/simdag/dax_dtd.c
       COMMAND ${SED_EXE} -i 's/int yyl\;/unsigned int yyl\;/' src/simdag/dax_dtd.c
+      COMMAND ${SED_EXE} -i 's/int dax_leng\;/unsigned int dax_leng\;/' src/simdag/dax_dtd.c
       COMMAND ${CMAKE_COMMAND} -E echo "       Generated src/simdag/dax_dtd.c"
 
       WORKING_DIRECTORY ${CMAKE_HOME_DIRECTORY}
index 1378bd4..d7c456a 100644 (file)
@@ -5,7 +5,7 @@
 set(MACOSX_RPATH ON)
 if(APPLE)
   # add the current location of libsimgrid-java.dynlib as a location for libsimgrid.dynlib
-  # (useful when unpacking the native libraries from the jarfile)
+  # (useful when unpacking the native libraries from the jarfile)
   set(CMAKE_INSTALL_RPATH "@loader_path/.")
   SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
 endif()
@@ -34,9 +34,8 @@ if (HAVE_BOOST_CONTEXTS)
   set(SIMGRID_DEP "${SIMGRID_DEP} ${Boost_CONTEXT_LIBRARY}")
 endif()
 
-if(HAVE_PTHREAD AND ${HAVE_THREAD_CONTEXTS} AND NOT APPLE)
-  # Clang on recent Mac OS X is not happy about -pthread.
-  SET(SIMGRID_DEP "${SIMGRID_DEP} -pthread")
+if(CMAKE_USE_PTHREADS_INIT AND ${HAVE_THREAD_CONTEXTS})
+  set(SIMGRID_DEP "${SIMGRID_DEP} ${CMAKE_THREAD_LIBS_INIT}")
 endif()
 
 if(SIMGRID_HAVE_LUA)
index c432450..8257653 100644 (file)
@@ -61,13 +61,13 @@ IF(SIMGRID_HAVE_MC)
   ADD_TESH_FACTORIES(mc-bugged1                "ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1.tesh)
   ADD_TESH_FACTORIES(mc-bugged2                "ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged2.tesh)
   IF(HAVE_UCONTEXT_CONTEXTS AND SIMGRID_PROCESSOR_x86_64) # liveness model-checking works only on 64bits (for now ...)
-    ADD_TESH(mc-bugged1-liveness-ucontext         --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness.tesh)
-    ADD_TESH(mc-bugged1-liveness-ucontext-sparse  --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness_sparse.tesh)
-    ADD_TESH(mc-bugged1-liveness-visited-ucontext --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness_visited.tesh)
-    ADD_TESH(mc-bugged1-liveness-visited-ucontext-sparse --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness_visited_sparse.tesh)
+#    ADD_TESH(mc-bugged1-liveness-ucontext         --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness.tesh)
+#    ADD_TESH(mc-bugged1-liveness-ucontext-sparse  --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness_sparse.tesh)
+#    ADD_TESH(mc-bugged1-liveness-visited-ucontext --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness_visited.tesh)
+#    ADD_TESH(mc-bugged1-liveness-visited-ucontext-sparse --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness_visited_sparse.tesh)
     IF(HAVE_C_STACK_CLEANER)
       # This test checks if the stack cleaner is making a difference:
-      ADD_TEST(mc-bugged1-liveness-stack-cleaner ${CMAKE_HOME_DIRECTORY}/examples/msg/mc/bugged1_liveness_stack_cleaner ${CMAKE_HOME_DIRECTORY}/examples/msg/mc/ ${CMAKE_BINARY_DIR}/examples/msg/mc/)
+#      ADD_TEST(mc-bugged1-liveness-stack-cleaner ${CMAKE_HOME_DIRECTORY}/examples/msg/mc/bugged1_liveness_stack_cleaner ${CMAKE_HOME_DIRECTORY}/examples/msg/mc/ ${CMAKE_BINARY_DIR}/examples/msg/mc/)
     ENDIF()
   ENDIF()
 ENDIF()
index 8545ed3..dabc6b7 100644 (file)
@@ -21,7 +21,7 @@ static int growsdown(int *x)
    */
   if (iterate != 0 && y != (x > &y)) {
     fprintf(stderr, "The stack changed its direction! (Iteration: %d. It was growing %s; &y=%p; &prevY=%p)\n",
-           (10-iterate), y?"down":"up", &y, x);
+            (10 - iterate), y ? "down" : "up", &y, x);
     exit(1);
   }
   return y;
index 211a727..259fae9 100755 (executable)
@@ -1,7 +1,6 @@
 #!/bin/bash
 
-# Copyright (c) 2010, 2014. The SimGrid Team.
-# All rights reserved.
+# Copyright (c) 2010-2017. 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.
@@ -14,10 +13,10 @@ fi
 
 TRACE=$1
 echo "input: $TRACE"
-OUTPUT=`echo $TRACE | cut -d\. -f1`.fix.trace
+OUTPUT=$( echo $TRACE | cut -d\. -f1 ).fix.trace
 
-cat $TRACE | grep ^% > header
-DEFEVENTS=`cat header | grep Define | awk '{ print $3 }'`
+grep ^% < $TRACE > header
+DEFEVENTS=$(grep Define < header | awk '{ print $3 }')
 
 GREP=""
 GREP2=""
@@ -28,9 +27,9 @@ do
 done
 GREP="/^%\ /d; /^%     /d; /^%E/d; $GREP"
 
-cat $TRACE | eval grep $GREP2 > types
+grep $GREP2 < $TRACE > types
 /bin/sed -e "$GREP" $TRACE > events
-cat events |  sort -n -k 2 -s > events.sorted
+sort -n -k 2 -s < events > events.sorted
 cat header types events.sorted > $OUTPUT
 rm types events events.sorted header
 
index fdedc56..9a6678b 100755 (executable)
@@ -149,7 +149,7 @@ do
     #    +++ - timestamp
     # to both lines working on the same file and having a a/ and b/ prefix.
     # Else it can not be applied with 'git apply'.
-    git ${GIT_SUBCOMMAND} --binary ${CLANG_FORMAT} --diff -q >> "$patch"
+    git ${GIT_SUBCOMMAND} --binary ${CLANG_FORMAT} --diff -q "$file" >> "$patch"
     #"$CLANG_FORMAT" -style=file "$file" | \
         #diff -u "$file" - | \
         #sed -e "1s|--- |--- a/|" -e "2s|+++ -|+++ b/$file|" >> "$patch"
index d76f57f..65e549f 100755 (executable)
@@ -5,14 +5,8 @@
 # Use it as a wrapper to your build command, eg: ./travis-sonarqube.sh make VERBOSE=1
 
 # On Mac OSX or with pull requests, you don't want to run SonarQube but to exec the build command directly.
-if [ ${TRAVIS_OS_NAME} != 'linux' ] || [ ${TRAVIS_PULL_REQUEST} != 'false' ] 
-then
-  exec "$@"
-fi
-# Passed this point, we are on Linux and not in a PR (exec never returns)
-
 
-# Be verbose and fail fast
+# Be verbose and fail fast
 set -ex
 
 # Install required software
@@ -59,4 +53,4 @@ sonar-scanner -Dsonar.host.url=https://sonarqube.com -Dsonar.login=$SONAR_TOKEN
   | grep -v 'INFO: Parsing /home/travis/build/simgrid/simgrid/Testing/CoverageInfo'  \
   | grep -v 'WARN: File not analysed by Sonar, so ignoring coverage: /usr/include/'
 
-exit $outcome
\ No newline at end of file
+exit $outcome
index 1befd18..b2ed44a 100755 (executable)
@@ -31,7 +31,7 @@ do
    fi
 done
 
-### Cleanup previous runs
+### Cleanup previous runs
 
 ! [ -z "$WORKSPACE" ] || die "No WORKSPACE"
 [ -d "$WORKSPACE" ] || die "WORKSPACE ($WORKSPACE) does not exist"
@@ -66,11 +66,11 @@ ctest -D ExperimentalCoverage || true
 unset JAVA_TOOL_OPTIONS
 if [ -f Testing/TAG ] ; then
 
-  files=`find . -name "jacoco.exec"`
+  files=$( find . -name "jacoco.exec" )
   i=0
   for file in $files
   do
-    sourcepath=`dirname $file`
+    sourcepath=$( dirname $file )
     #convert jacoco reports in xml ones
     ant -f $WORKSPACE/tools/jenkins/jacoco.xml -Dexamplesrcdir=$WORKSPACE -Dbuilddir=$BUILDFOLDER/${sourcepath} -Djarfile=$BUILDFOLDER/simgrid.jar -Djacocodir=${JACOCO_PATH}/lib
     #convert jacoco xml reports in cobertura xml reports
@@ -80,6 +80,6 @@ if [ -f Testing/TAG ] ; then
 
    #convert all gcov reports to xml cobertura reports
    gcovr -r .. --xml-pretty -e teshsuite.* -u -o $WORKSPACE/xml_coverage.xml
-   xsltproc $WORKSPACE/tools/jenkins/ctest2junit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > CTestResults_memcheck.xml
+   xsltproc $WORKSPACE/tools/jenkins/ctest2junit.xsl Testing/$( head -n 1 < Testing/TAG )/Test.xml > CTestResults_memcheck.xml
    mv CTestResults_memcheck.xml $WORKSPACE
 fi
index 3a58949..d286e1a 100755 (executable)
@@ -30,7 +30,7 @@ do
    fi
 done
 
-### Cleanup previous runs
+### Cleanup previous runs
 
 ! [ -z "$WORKSPACE" ] || die "No WORKSPACE"
 [ -d "$WORKSPACE" ] || die "WORKSPACE ($WORKSPACE) does not exist"
@@ -46,7 +46,7 @@ NUMPROC="$(nproc)" || NUMPROC=1
 
 cd $WORKSPACE/build
 
-### Proceed with the tests
+### Proceed with the tests
 ctest -D ExperimentalStart || true
 
 cmake -Denable_documentation=OFF -Denable_lua=OFF  \
index 799781c..1203441 100755 (executable)
@@ -31,7 +31,7 @@ Testing with valgrind and gcov. Click on the graphs for details.
  <tr class=\"matrix-row\">  
   <td class=\"matrix-cell\">
     <a href=\"https://ci.inria.fr/simgrid/job/SimGrid-DynamicAnalysis-Valgrind/label=simgrid-debian8-64-dynamic-analysis/valgrindResult/\">
-        <img src=\"https://ci.inria.fr/simgrid/job/SimGrid-DynamicAnalysis/lastCompletedBuild/label=simgrid-debian8-64-dynamic-analysis/artifact/valgrind_graph.png\" title="$VALGRIND_RES">
+        <img src=\"https://ci.inria.fr/simgrid/job/SimGrid-DynamicAnalysis/lastCompletedBuild/label=simgrid-debian8-64-dynamic-analysis/artifact/valgrind_graph.png\" title=\"$VALGRIND_RES\">
        </a>
   </td>
   <td class=\"matrix-cell\">
index 62d76e3..128fcc4 100755 (executable)
@@ -34,7 +34,7 @@ onoff() {
   fi
 }
 
-### Cleanup previous runs
+### Cleanup previous runs
 
 ! [ -z "$WORKSPACE" ] || die "No WORKSPACE"
 [ -d "$WORKSPACE" ] || die "WORKSPACE ($WORKSPACE) does not exist"
index 63064ba..9d83f58 100755 (executable)
@@ -55,7 +55,7 @@ do
    fi
 done
 
-### Cleanup previous runs
+### Cleanup previous runs
 
 ! [ -z "$WORKSPACE" ] || die "No WORKSPACE"
 [ -d "$WORKSPACE" ] || die "WORKSPACE ($WORKSPACE) does not exist"
index 1421468..d92a433 100755 (executable)
@@ -47,7 +47,7 @@ onoff() {
 #test -e /bin/tar  || die 1 "I need tar to compile. Please fix your slave."
 #test -e /bin/gzip || die 1 "I need gzip to compile. Please fix your slave."
 #test -e /usr/include/libunwind.h || die 1 "I need libunwind to compile. Please fix your slave."
-#test -e /usr/include/valgrind/valgrind.h || die 1 "I need valgrind to compile. Please fix your slave."
+#test -e /usr/include/valgrind/valgrind.h || die 1 "I need valgrind to compile. Please fix your slave."
 
 build_mode="$1"
 echo "Build mode $build_mode on $(uname -np)" >&2
@@ -94,7 +94,7 @@ PATH="$WORKSPACE/build/lib:$PATH"
 if test "$(uname -o)" != "Msys"; then
   echo "XX"
   echo "XX Build the archive out of the tree"
-  echo "XX   pwd: `pwd`"
+  echo "XX   pwd: "$(pwd)
   echo "XX"
 
   cmake -G"$GENERATOR" -Denable_documentation=OFF $WORKSPACE
@@ -103,9 +103,9 @@ if test "$(uname -o)" != "Msys"; then
   echo "XX"
   echo "XX Open the resulting archive"
   echo "XX"
-  gunzip `cat VERSION`.tar.gz
-  tar xf `cat VERSION`.tar
-  cd `cat VERSION`
+  gunzip $(cat VERSION).tar.gz
+  tar xf $(cat VERSION).tar
+  cd $(cat VERSION)
   mkdir build
   cd build
   SRCFOLDER=".."
@@ -116,7 +116,7 @@ fi
 
 echo "XX"
 echo "XX Configure and build SimGrid"
-echo "XX   pwd: `pwd`"
+echo "XX   pwd: "$(pwd)
 echo "XX"
 cmake -G"$GENERATOR"\
   -Denable_debug=ON -Denable_documentation=OFF -Denable_coverage=OFF \
@@ -134,19 +134,17 @@ make -j$NUMBER_OF_PROCESSORS VERBOSE=1
 
 if test "$(uname -o)" != "Msys"; then
   cd $WORKSPACE/build
-  cd `cat VERSION`/build
+  cd $(cat VERSION)/build
 fi
 
-TRES=0
-
 echo "XX"
 echo "XX Run the tests"
-echo "XX   pwd: `pwd`"
+echo "XX   pwd: "$(pwd)
 echo "XX"
 
 ctest -T test --output-on-failure --no-compress-output || true
 if [ -f Testing/TAG ] ; then
-   xsltproc $WORKSPACE/tools/jenkins/ctest2junit.xsl Testing/`head -n 1 < Testing/TAG`/Test.xml > CTestResults.xml
+   xsltproc $WORKSPACE/tools/jenkins/ctest2junit.xsl Testing/$( head -n 1 < Testing/TAG )/Test.xml > CTestResults.xml
    mv CTestResults.xml $WORKSPACE
 fi
 
index 8f6c631..ff81d66 100644 (file)
@@ -46,8 +46,8 @@ def format(xml, formats, attrib):
     return "".join(res)
 
 
-def formats(list):
-    return sorted(((Decimal(i), j) for i, j in list), key=lambda x: x[0], reverse=True)
+def formats(ll):
+    return sorted(((Decimal(i), j) for i, j in ll), key=lambda x: x[0], reverse=True)
 
 for root, dirnames, filenames in os.walk(sys.argv[1]):
     for filename in fnmatch.filter(filenames, '*.xml'):
@@ -90,6 +90,6 @@ for root, dirnames, filenames in os.walk(sys.argv[1]):
         xml = format(xml, time_formats, "bb_lat")
 
         # print xml
-        file = open(path, "w")
-        file.write(xml)
-        file.close()
+        outfile = open(path, "w")
+        outfile.write(xml)
+        outfile.close()
index e15cfce..e9a7f4f 100644 (file)
    obj:*/libpthread*.so
    ...
 }
+
+{
+   ignore unwind cruft 
+   Memcheck:Param
+   rt_sigprocmask(set)
+   ...
+   obj:/usr/lib/x86_64-linux-gnu/libunwind.so.*
+   ...
+}
+{
+   ignore unwind cruft 
+   Memcheck:Param
+   msync(start)
+   ...
+   obj:/usr/lib/x86_64-linux-gnu/libunwind.so.*
+   ...
+}
+{
+   ignore unwind invalid reads 
+   Memcheck:Addr8
+   fun:_Ux86_64_setcontext
+}
index 70947d3..a7a760a 100755 (executable)
@@ -28,7 +28,7 @@ under the terms of the license (GNU LGPL) which comes with this package.
 # print "WARNING: Output were only sorted using the $sort_prefix first chars.\n"
 #    if ( $sort_prefix > 0 );
 # print "WARNING: Use <! output sort 19> to sort by simulated date and process ID only.\n";
-#    
+#
 # print "----8<---------------  Begin of unprocessed observed output (as it should appear in file):\n";
 # map {print "> $_\n"} @{$cmd{'unsorted got'}};
 # print "--------------->8----  End of the unprocessed observed output.\n";
@@ -129,7 +129,7 @@ class FileReader(Singleton):
             self.filename = os.path.basename(filename)
             self.abspath = os.path.abspath(filename)
             self.f = open(self.filename_raw)
-        
+
         self.linenumber = 0
 
     def linenumber(self):
@@ -292,7 +292,7 @@ class Cmd(object):
             self.timeout *= 20
             self.args = TeshState().wrapper + self.args
         elif re.match(".*smpirun.*", self.args) is not None:
-            self.args = "sh " + self.args 
+            self.args = "sh " + self.args
         if TeshState().jenkins and self.timeout != None:
             self.timeout *= 10
 
@@ -305,13 +305,13 @@ class Cmd(object):
 
         try:
             proc = subprocess.Popen(args, bufsize=1, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True)
-        except OSError as e:
-            if e.errno == 8:
-                e.strerror += "\nOSError: [Errno 8] Executed scripts should start with shebang line (like #!/bin/sh)"
-            raise e
         except FileNotFoundError:
             print("["+FileReader().filename+":"+str(self.linenumber)+"] Cannot start '"+args[0]+"': File not found")
             exit(3)
+        except OSError as osE:
+            if osE.errno == 8:
+                osE.strerror += "\nOSError: [Errno 8] Executed scripts should start with shebang line (like #!/bin/sh)"
+            raise osE
 
         cmdName = FileReader().filename+":"+str(self.linenumber)
         try:
@@ -348,7 +348,7 @@ class Cmd(object):
                 self.output_pipe_stdout.sort(key=lambda x: x[:self.sort].lower())
             
             diff = list(difflib.unified_diff(self.output_pipe_stdout, stdouta,lineterm="",fromfile='expected', tofile='obtained'))
-            if len(diff) > 0: 
+            if len(diff) > 0:
                 print("Output of <"+cmdName+"> mismatch:")
                 if self.sort >= 0: # If sorted, truncate the diff output and show the unsorted version
                     difflen = 0;
@@ -418,7 +418,7 @@ if __name__ == '__main__':
     group1.add_argument('--setenv', metavar='var=value', action='append', help='set a specific environment variable')
     group1.add_argument('--cfg', metavar='arg', help='add parameter --cfg=arg to each command line')
     group1.add_argument('--log', metavar='arg', help='add parameter --log=arg to each command line')
-    group1.add_argument('--ignore-jenkins', action='store_true', help='ignore all cruft generated on SimGrid continous integration servers')
+    group1.add_argument('--ignore-jenkins', action='store_true', help='ignore all cruft generated on SimGrid continous integration servers')
     group1.add_argument('--wrapper', metavar='arg', help='Run each command in the provided wrapper (eg valgrind)')
     group1.add_argument('--keep', action='store_true', help='Keep the obtained output when it does not match the expected one')