From: Gabriel Corona Date: Mon, 26 May 2014 10:05:12 +0000 (+0200) Subject: Merge branch 'master' into mc X-Git-Tag: v3_12~956^2~24 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/eb5b6b0c3c4d9a38bb205b2c8bc9aeeba8674a25?hp=8452130aa48a4ecfce975c1fcf002c3b20fb6480 Merge branch 'master' into mc --- diff --git a/.gitignore b/.gitignore index 7cb95488fd..bba0e9587a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,18 +14,13 @@ *.class \#* -################################################ ### Maintainer mode src/simdag/dax_dtd.l src/surf/simgrid_dtd.l src/xbt/graphxml.l - -################################################ ### Jedule examples/simdag/scheduling/simgrid.jed teshsuite/simdag/platforms/simgrid.jed - -################################################ ### Libraries links src/bindings/ruby/simgrid.so examples/ruby/simgrid.so @@ -35,13 +30,9 @@ examples/msg/masterslave/simgrid.so examples/simdag/simgrid.so examples/lua/console/simgrid.so simgrid.jar - -################################################ ### Unit files src/simgrid_units_main.c src/*_unit.c - -################################################ ### Generated files _*.c include/simgrid_config.h @@ -54,8 +45,6 @@ src/smpi/smpicc src/smpi/smpirun simgrid-*.tar.gz testprog - -################################################ ### Cmake files CPackConfig.cmake CPackSourceConfig.cmake @@ -65,7 +54,6 @@ cmake_install.cmake CMakeFiles install_manifest.txt _CPack_Packages/ -CMakeFiles CMakeCache.txt DartConfiguration.tcl simgrid.nsi @@ -79,14 +67,9 @@ build_*/ build/ buildtools/Cmake/memcheck_tests.cmake buildtools/Cmake/test_prog/prog_va_copy.c - - -################################################ ### windows borland *.bpr *.bpf - -################################################ ### Documentation doc/all_bib.html doc/logcategories.sh @@ -103,8 +86,6 @@ doc/simgrid.tag doc/doxygen/logcategories.doc doc/index-API.doc doc/simgrid_modules.map - -################################################ ### Specific of project .settings/ .csettings/ @@ -116,8 +97,6 @@ Debug/ .emacs.desktop tags callgrind.out.* - -################################################ ### Examples and traces *.exe testgraph.dot @@ -241,7 +220,6 @@ examples/smpi/sendrecv examples/smpi/mc_bugged1 examples/smpi/mc_bugged2 examples/smpi/smpi_traced_simple - examples/msg/mc/bugged1_liveness examples/msg/mc/bugged1_stateful examples/msg/mc/bugged2_liveness @@ -251,41 +229,39 @@ examples/msg/mc/electric_fence examples/smpi/mc/bugged1 examples/smpi/mc/bugged1_liveness examples/smpi/mc/bugged2 - - src/replay/replay src/testall teshsuite/bug-17132/bug-17132 -teshsuite/smpi/allgather_coll -teshsuite/smpi/allgatherv_coll -teshsuite/smpi/allreduce_coll -teshsuite/smpi/alltoall_coll -teshsuite/smpi/alltoallv_coll -teshsuite/smpi/barrier_coll +teshsuite/smpi/allgather/allgather_coll +teshsuite/smpi/allgatherv/allgatherv_coll +teshsuite/smpi/allreduce/allreduce_coll +teshsuite/smpi/alltoall/alltoall_coll +teshsuite/smpi/alltoallv/alltoallv_coll +teshsuite/smpi/barrier/barrier_coll teshsuite/smpi/bcast_coll -teshsuite/smpi/gather_coll +teshsuite/smpi/gather/gather_coll teshsuite/smpi/reduce_coll teshsuite/smpi/reduce_scatter_coll -teshsuite/smpi/allreduce -teshsuite/smpi/alltoall2 -teshsuite/smpi/alltoall_basic -teshsuite/smpi/alltoallv -teshsuite/smpi/bcast -teshsuite/smpi/compute +teshsuite/smpi/allreduce/allreduce +teshsuite/smpi/alltoall/alltoall2 +teshsuite/smpi/alltoall/alltoall_basic +teshsuite/smpi/alltoallv/alltoallv +teshsuite/smpi/bcast/bcast +teshsuite/smpi/compute/compute teshsuite/smpi/compute2 teshsuite/smpi/compute3 teshsuite/smpi/dsend -teshsuite/smpi/hvector_test -teshsuite/smpi/indexed_test -teshsuite/smpi/pingpong -teshsuite/smpi/reduce -teshsuite/smpi/scatter -teshsuite/smpi/shared +teshsuite/smpi/hvector/hvector_test +teshsuite/smpi/indexed/indexed_test +teshsuite/smpi/pingpong/pingpong +teshsuite/smpi/reduce/reduce +teshsuite/smpi/scatter/scatter +teshsuite/smpi/shared/shared teshsuite/smpi/smpi_sendrecv teshsuite/smpi/split -teshsuite/smpi/struct_test +teshsuite/smpi/struct/struct_test teshsuite/smpi/ttest01 -teshsuite/smpi/vector_test +teshsuite/smpi/vector/vector_test teshsuite/smpi/mpich-test/*/*.out teshsuite/smpi/mpich-test/*/*.stdo teshsuite/smpi/mpich-test/coll/allgatherf @@ -726,25 +702,29 @@ teshsuite/smpi/mpich3-test/pt2pt/sendrecv3 teshsuite/smpi/mpich3-test/pt2pt/sendself teshsuite/smpi/mpich3-test/pt2pt/waitany-null teshsuite/smpi/mpich3-test/pt2pt/waittestnull - -teshsuite/msg/host_on_off -teshsuite/msg/process +teshsuite/smpi/mpich3-test/topo/cartcreates +teshsuite/smpi/mpich3-test/topo/cartshift1 +teshsuite/smpi/mpich3-test/topo/cartsuball +teshsuite/smpi/mpich3-test/topo/cartzero +teshsuite/msg/host_on_off/host_on_off +teshsuite/msg/process/process +teshsuite/msg/process_join/process_join teshsuite/msg/storage/storage_basic -teshsuite/msg/task_destroy_cancel -teshsuite/msg/pid -teshsuite/msg/get_sender +teshsuite/msg/task_destroy_cancel/task_destroy_cancel +teshsuite/msg/pid/pid +teshsuite/msg/get_sender/get_sender teshsuite/msg/trace/test_trace_integration -teshsuite/simix/check_defaults -teshsuite/simix/stack_overflow +teshsuite/simix/check_defaults/check_defaults +teshsuite/simix/stack_overflow/stack_overflow teshsuite/simdag/availability/availability_test -teshsuite/simdag/basic0 -teshsuite/simdag/basic1 -teshsuite/simdag/basic2 -teshsuite/simdag/basic3 -teshsuite/simdag/basic4 -teshsuite/simdag/basic5 -teshsuite/simdag/basic6 -teshsuite/simdag/incomplete +teshsuite/simdag/basic/basic0 +teshsuite/simdag/basic/basic1 +teshsuite/simdag/basic/basic2 +teshsuite/simdag/basic/basic3 +teshsuite/simdag/basic/basic4 +teshsuite/simdag/basic/basic5 +teshsuite/simdag/basic/basic6 +teshsuite/simdag/incomplete/incomplete teshsuite/simdag/network/mxn/test_intra_all2all teshsuite/simdag/network/mxn/test_intra_independent_comm teshsuite/simdag/network/mxn/test_intra_scatter @@ -759,26 +739,22 @@ teshsuite/simdag/platforms/basic_tracing teshsuite/simdag/platforms/basic_link_test teshsuite/simdag/platforms/evaluate_get_route_time teshsuite/simdag/platforms/evaluate_parse_time +teshsuite/simdag/platforms/graphicator teshsuite/simdag/partask/test_comp_only_par teshsuite/simdag/partask/test_comp_only_seq -teshsuite/xbt/log_large_test -teshsuite/xbt/parallel_log_crashtest -testsuite/xbt/parmap_bench +teshsuite/surf/lmm_usage/lmm_usage +teshsuite/surf/maxmin_bench/maxmin_bench +teshsuite/surf/surf_usage/surf_usage +teshsuite/surf/surf_usage/surf_usage2 +teshsuite/surf/trace_usage/trace_usage +teshsuite/xbt/log_large/log_large_test teshsuite/xbt/mmalloc_test -teshsuite/xbt/parmap_test -testsuite/run_tests -testsuite/simdag/sd_test -testsuite/surf/lmm_usage -testsuite/surf/maxmin_bench -testsuite/surf/surf_usage -testsuite/surf/surf_usage2 -testsuite/surf/trace_usage -testsuite/testgraph.dot -testsuite/testgraph.xml -testsuite/xbt/context_usage -testsuite/xbt/graphxml_usage -testsuite/xbt/heap_bench -testsuite/xbt/log_usage +teshsuite/xbt/graphxml_usage/graphxml_usage +teshsuite/xbt/heap_bench/heap_bench +teshsuite/xbt/log_usage/log_usage +teshsuite/xbt/parallel_log/parallel_log_crashtest +teshsuite/xbt/parmap_bench/parmap_bench +teshsuite/xbt/parmap_test/parmap_test tools/tesh/tesh examples/msg/tracing/categories examples/msg/tracing/ms @@ -792,8 +768,6 @@ test_rl test_sg examples/smpi/smpi_traced.trace examples/simdag/dot/simulate_dot -teshsuite/simdag/platforms/graphicator - ######################################### ## touched files to track the dependencies of java examples examples/java/async/java_async_compiled @@ -816,3 +790,4 @@ examples/java/suspend/java_suspend_compiled examples/java/tracing/java_tracing_compiled examples/java/reservationSurfPlugin/java_reservation_surf_plugin_compiled examples/java/surfPlugin/java_surf_plugin_compiled +/CMakeCache.txt diff --git a/ChangeLog b/ChangeLog index 5abdda77c9..181642a48c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,19 +1,5 @@ SimGrid (3.11) NOT RELEASED; urgency=low - TENTATIVE RELEASE GOALS for 3.11: - * Switch to tesh.pl, and kill the now unused parts of xbt that seem fragile - * Clean up CMake files (may need a full rewrite). - Non exhaustive list of subgoals: - - Use genuine cmake mechanisms and variables when available, - instead of reinventing the wheel. - - Correctly determine system and architecture (e.g. x32). - - Correctly determine compiler type and version (e.g. clang). - - Correctly set compiler flags according to compiler type and version. - - Correctly set compiler flags for C++, Java, and Fortran compilers too. - - Use git to generate the dist archive. Either use git-archive to - generate the tarball, or keep using cmake -E tar, but use git-ls-files - to get the list of files to pack. - The Class Release. Tools: @@ -25,11 +11,37 @@ SimGrid (3.11) NOT RELEASED; urgency=low - examples/msg/cloud/simple_vm.tesh - examples/java/cloud/cloud.tesh - examples/java/cloud/migration/migration.tesh + * Add java surf examples: + - examples/java/surfPlugin/surf_plugin.tesh + - examples/java/reservationSurfPlugin/reservation_surf_plugin.tes + - examples/java/surfCpuModel/surf_cpu_model.tesh + * Add SMPI+MSG example: + - examples/smpi/smpi_msg_masterslave/ + + TeshSuite: + * Add tests: + - msg process test + - msg task destroy cancel test + - msg_host on/off test + * Move all tests in testsuite to teshsuite (adding tesh files) + * Restructure teshsuites + - one folder for each kind of test + * Restructure AddTests.cmake + - unify tests names + - structure the order of tests (with sections) MSG: * Add virtual machine - creation of a VM on a PM - migration of a VM from a PM to another PM + * New functions + - MSG_process_join(msg_process_t process, double timeout) + - msg_bar_t MSG_barrier_init(unsigned int count) + - int MSG_barrier_wait(msg_bar_t barrier) + - void MSG_barrier_destroy(msg_bar_t barrier) + - msg_as_t MSG_environment_as_get_by_name(const char * name) + * New option "msg/debug_multiple_use" to help debugging when a task is used + several times SIMIX: * Protect context stacks against stack overflow. The number of protected memory @@ -41,12 +53,15 @@ SimGrid (3.11) NOT RELEASED; urgency=low * Clean simcalls - remove sem_destroy, file_set_data, comm_destroy, vm_set_state, host_set_data, host_get_data + * New simcalls + - simcall_process_join(smx_process_t process, double timeout) + * Fix bug where sleeping processing could not be suspended. SURF: * Translate surf models from C to C++ - Generic classes for all models: Model, Resource, Action - - A generic interface for each kind of model (cpu, network, storage - workstation, workstationvm) + - A generic interface for each kind of model (CPU, Network, Storage + Workstation, WorkstationVM) - C bindings * Translate surf routings from C to C++ * Add callbacks using sigc++ or boost::signals2 @@ -54,20 +69,43 @@ SimGrid (3.11) NOT RELEASED; urgency=low - Add callback functions for action state change - Handle Energy as a plugin * Replace swag by boost::intrusive - * Add new routing model for torus clusters + * Add new routing model for torus clusters + - topology="TORUS" and topo_parameters="ndim1,ndim2,...,ndimn" parameters + for cluster tag + - see examples/platforms/torus_cluster.xml * More documentation SMPI: - * hostfiles support host:nb_processes construct to deploy several processes on - one node + * Hostfiles support host:nb_processes construct to deploy several processes on + one node. * Collective communication algorithms should not crash if used with improper number of nodes and report the error. + * SMPI now partially supports MPI_Topologies : MPI_Cart_create, MPI_Cart_shift, + MPI_Cart_rank, MPI_Cart_get, MPI_Cart_coords, MPI_Cartdim_get, + MPI_Dims_create, MPI_Cart_sub are supported. + * New interface to use SMPI programmatically (still depends on MSG for + some parts, see examples/smpi/smpi_msg_masterslave) : + - SMPI_app_instance_register(const char *name, xbt_main_func_t code, + int num_processes) + - SMPI_init() + - SMPI_finalize(); + * Global variables privatization in MPI executables is now performed at runtime + with the option smpi/privatize_global_variables (default:no). + Limitations : Linux/BSD only, with mmap enabled. Global variables inside + dynamic libraries loaded by the application are not privatized (static + linking with these libraries is advised in this case) + + Tracing: + * Options defined in XML work correctly now. Java: * New cmake option, enable_lib_in_jar, to control whether native libraries are copied into simgrid.jar or not (ON by default). Use this option if you want to reduce the size of the installed simgrid.jar, *and* the native libraries are kept installed elsewhere. + * Surf binding with SWIG (code generated in maintainer mode only): + - plugin to handle callbacks + - CPU model only for the moment Build System: * Supernovae build mode is definitively removed. It was used to improve @@ -75,6 +113,16 @@ SimGrid (3.11) NOT RELEASED; urgency=low link-time optimizations commonly available in compilers. * Update ns-3 find lib. Bindings for ns-3 should work again now. * Add boost dependency for surf++ + * Add new macro for tests + - ADD_TESH(name ) + - ADD_TESH_FACTORIES(name "thread;ucontext;raw" ) + + XBT: + * New functions + - xbt_bar_t XBT_barrier_init(unsigned int count) + - int XBT_barrier_wait(xbt_bar_t barrier) + - void XBT_barrier_destroy(xbt_bar_t barrier) + * Make the xbt_os_time module public -- $date Da SimGrid team diff --git a/README.coding b/README.coding index c78b39b68c..a5c9b96484 100644 --- a/README.coding +++ b/README.coding @@ -23,12 +23,6 @@ The tree is not split on projects, but on file finality: src/include -> another location for protected headers. Used by SURF, and other should be converted, since this is the Right Thing. - testsuite/ -> The more test the better. - Same organization than src/ and include/ - Tests are allowed to load some headers of the module they test. - All tests should be listed in run_test.in so that they get - run on 'make check'. - examples/ -> Supposed to be copy/pastable by the user, so keep it clear and avoid any kind of trick. In particular, do only include the public headers here. @@ -39,9 +33,6 @@ The tree is not split on projects, but on file finality: unusual behaviors. All tests written in this section should leverage our tesh(1) utility. - testsuite/ -> Old test suite, that should be converted to tesh and - moved to teshsuite at some point. - ** ** Indentation standard ** diff --git a/TODO b/TODO index 3d4a9feb1b..03e4af865e 100644 --- a/TODO +++ b/TODO @@ -1,34 +1,37 @@ - -### -### Urgent stuff: -### - -* Have a proper todo file - - - - - - - - ************************************************ *** This file is a TODO. It is thus kinda *** *** outdated. You know the story, right? *** ************************************************ +### +### Urgent stuff: +### - +* Have a proper todo file ### ### Ongoing stuff ### -Document host module - -/* FIXME: better place? */ -int vasprintf (char **ptr, const char *fmt, va_list ap); -char *bprintf(const char*fmt, ...) _XBT_GNUC_PRINTF(1,2); +* Switch to tesh.pl, and kill the now unused parts of xbt that seem fragile + +* Clean up CMake files (may need a full rewrite). + Non exhaustive list of subgoals: + - Use genuine cmake mechanisms and variables when available, + instead of reinventing the wheel. + - Correctly determine system and architecture (e.g. x32). + - Correctly determine compiler type and version (e.g. clang). + - Correctly set compiler flags according to compiler type and version. + - Correctly set compiler flags for C++, Java, and Fortran compilers too. + - Use git to generate the dist archive. Either use git-archive to + generate the tarball, or keep using cmake -E tar, but use git-ls-files + to get the list of files to pack. + +* Document host module + +* /* FIXME: better place? */ + int vasprintf (char **ptr, const char *fmt, va_list ap); + char *bprintf(const char*fmt, ...) _XBT_GNUC_PRINTF(1,2); ### ### Planned diff --git a/buildtools/Cmake/AddTests.cmake b/buildtools/Cmake/AddTests.cmake index e357023a23..f57e826fab 100644 --- a/buildtools/Cmake/AddTests.cmake +++ b/buildtools/Cmake/AddTests.cmake @@ -1,15 +1,16 @@ -if(enable_memcheck) +IF(enable_memcheck) include(FindValgrind) -endif() +ENDIF() -if(enable_smpi AND NOT WIN32) +IF(enable_smpi AND NOT WIN32) exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicc" OUTPUT_VARIABLE "OKITOKI") + exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicxx" OUTPUT_VARIABLE "OKITOKI") exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif2c" OUTPUT_VARIABLE "OKITOKI") exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff" OUTPUT_VARIABLE "OKITOKI") exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif90" OUTPUT_VARIABLE "OKITOKI") exec_program("chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun" OUTPUT_VARIABLE "OKITOKI") -endif() +ENDIF() ### For code coverage ### Set some variables @@ -21,18 +22,18 @@ SET(DROP_SITE_CDASH TRUE) SET(TRIGGER_SITE "http://cdash.inria.fr/CDash/cgi-bin/Submit-Random-TestingResults.cgi") #If you use the --read-var-info option Memcheck will run more slowly but may give a more detailed description of any illegal address. -if(WIN32) +IF(WIN32) SET(TESH_COMMAND perl.exe ${CMAKE_BINARY_DIR}/bin/tesh) SET(TESH_OPTION $TESH_OPTION --timeout 50) -else() +ELSE() SET(TESH_COMMAND ${CMAKE_BINARY_DIR}/bin/tesh) -endif() +ENDIF() #some tests may take forever on non futexes systems, using busy_wait with n cores < n workers # default to posix for these tests if futexes are not supported -if(NOT HAVE_FUTEX_H) +IF(NOT HAVE_FUTEX_H) SET(CONTEXTS_SYNCHRO --cfg contexts/synchro:posix) -endif() +ENDIF() MACRO(ADD_TESH NAME) SET(ARGR ${ARGV}) @@ -51,16 +52,16 @@ MACRO(ADD_TESH_FACTORIES NAME FACTORIES) (${FACTORY} STREQUAL "raw" AND HAVE_RAWCTX) OR (${FACTORY} STREQUAL "ucontext" AND CONTEXT_UCONTEXT)) ADD_TESH("${NAME}-${FACTORY}" "--cfg" "contexts/factory:${FACTORY}" ${ARGR}) - endif() + ENDIF() ENDFOREACH() ENDMACRO() INCLUDE(CTest) ENABLE_TESTING() -if(NOT enable_memcheck) - #ADD_TESH_FACTORIES(msg-sendrecv-CLM05 "thread;ucontext" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh) - +IF(NOT enable_memcheck) + ## CORE ## + ### TESH ### ADD_TESH(tesh-self-basic --cd "${CMAKE_BINARY_DIR}/bin" ${CMAKE_HOME_DIRECTORY}/tools/tesh/basic.tesh) ADD_TESH(tesh-self-cd --cd "${CMAKE_BINARY_DIR}/bin" ${CMAKE_HOME_DIRECTORY}/tools/tesh/cd.tesh) ADD_TESH(tesh-self-IO-broken-pipe --cd "${CMAKE_BINARY_DIR}/bin" ${CMAKE_HOME_DIRECTORY}/tools/tesh/IO-broken-pipe.tesh) @@ -75,88 +76,118 @@ if(NOT enable_memcheck) ADD_TESH(tesh-self-catch-wrong-output --cd "${CMAKE_BINARY_DIR}/bin" ${CMAKE_HOME_DIRECTORY}/tools/tesh/catch-wrong-output.tesh) ADD_TESH(tesh-self-bg-basic --cd "${CMAKE_BINARY_DIR}/bin" ${CMAKE_HOME_DIRECTORY}/tools/tesh/bg-basic.tesh) ADD_TESH(tesh-self-background --cd "${CMAKE_BINARY_DIR}/bin" ${CMAKE_HOME_DIRECTORY}/tools/tesh/background.tesh) - - if(NOT WIN32) + IF(NOT WIN32) ADD_TESH(tesh-self-set-signal --cd "${CMAKE_BINARY_DIR}/bin" ${CMAKE_HOME_DIRECTORY}/tools/tesh/set-signal.tesh) ADD_TESH(tesh-self-bg-set-signal --cd "${CMAKE_BINARY_DIR}/bin" ${CMAKE_HOME_DIRECTORY}/tools/tesh/bg-set-signal.tesh) ADD_TESH(tesh-self-catch-signal --cd "${CMAKE_BINARY_DIR}/bin" ${CMAKE_HOME_DIRECTORY}/tools/tesh/catch-signal.tesh) - endif() + ENDIF() - # BEGIN TESH TESTS + ### GENERIC ### + # BEGIN TESH TESTS # test for code coverage - ADD_TEST(help ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test --help) - ADD_TEST(help-models ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test --help-models) + ADD_TEST(test-help ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test --help) + ADD_TEST(test-help-models ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test --help-models) + IF(HAVE_TRACING) + ADD_TEST(test-tracing-help ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test --help-tracing) + ADD_TESH(graphicator --setenv srcdir=${CMAKE_HOME_DIRECTORY} --setenv bindir=${CMAKE_BINARY_DIR}/bin --cd ${CMAKE_HOME_DIRECTORY}/tools/graphicator graphicator.tesh) + ENDIF() + # END TESH TESTS + + ### MC ### + IF(HAVE_MC) + ADD_TESH(tesh-mc-dwarf --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/mc/dwarf --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf dwarf.tesh) + ADD_TESH(tesh-mc-dwarf-expression --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/mc/dwarf_expression --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf_expression dwarf_expression.tesh) + + 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(CONTEXT_UCONTEXT AND PROCESSOR_x86_64) # liveness model-checking works only on 64bits (for now ...) + ADD_TESH(mc-bugged1-liveness-ucontext --cfg contexts/factory:ucontext --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness.tesh) + ADD_TESH(mc-bugged1-liveness-visited-ucontext --cfg contexts/factory:ucontext --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness_visited.tesh) + ENDIF() + ENDIF() + + + ### SIMIX ### + # BEGIN TESH TESTS + IF(HAVE_RAWCTX) + ADD_TESH(tesh-simix-factory-default --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simix/check_defaults --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/check_defaults factory_raw.tesh) + ELSEIF(CONTEXT_UCONTEXT) + ADD_TESH(tesh-simix-factory-default --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simix/check_defaults --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/check_defaults factory_ucontext.tesh) + ELSE() + ADD_TESH(tesh-simix-factory-default --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simix/check_defaults --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/check_defaults factory_thread.tesh) + ENDIF() + ADD_TESH(tesh-simix-factory-thread --cfg contexts/factory:thread --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simix/check_defaults --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/check_defaults factory_thread.tesh) + IF(HAVE_RAWCTX) + ADD_TESH(tesh-simix-factory-raw --cfg contexts/factory:raw --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simix/check_defaults --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/check_defaults factory_raw.tesh) + ENDIF() + IF(CONTEXT_UCONTEXT) + ADD_TESH(tesh-simix-factory-ucontext --cfg contexts/factory:ucontext --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simix/check_defaults --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/check_defaults factory_ucontext.tesh) + ENDIF() + # END TESH TESTS + ADD_TESH_FACTORIES(stack-overflow "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simix/stack_overflow --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/stack_overflow stack_overflow.tesh) + ### + ### Declare that we know that some tests are broken + ### + IF(release) + IF(WIN32 OR CMAKE_SYSTEM_NAME MATCHES "Darwin") + # These tests are known to fail on Windows and Mac OS X + # (the expected error message is not shown). + SET_TESTS_PROPERTIES(stack-overflow-thread PROPERTIES WILL_FAIL true) + IF(CONTEXT_UCONTEXT) + SET_TESTS_PROPERTIES(stack-overflow-ucontext PROPERTIES WILL_FAIL true) + ENDIF() + IF(HAVE_RAWCTX) + SET_TESTS_PROPERTIES(stack-overflow-raw PROPERTIES WILL_FAIL true) + ENDIF() + ENDIF() + ENDIF() + + + ### SURF ### + # BEGIN TESH TESTS + ADD_TESH(tesh-surf-lmm --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/lmm_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/lmm_usage lmm_usage.tesh) + ADD_TESH(tesh-surf-maxmin --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/maxmin_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/maxmin_bench maxmin_bench.tesh) + ADD_TESH(tesh-surf-usage --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/surf_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/ surf_usage/surf_usage.tesh) + ADD_TESH(tesh-surf-trace --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/trace_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/ trace_usage/trace_usage.tesh) + # END TESH TESTS - # teshsuite/xbt - ADD_TESH(xbt-log-large --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_large_test.tesh) - ADD_TESH(xbt-log-parallel --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parallel_log_crashtest.tesh) + + ### XBT ### + # BEGIN TESH TESTS + ADD_TESH(tesh-xbt-log-large --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/log_large --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_large log_large_test.tesh) + ADD_TESH(tesh-xbt-log-parallel --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/parallel_log --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parallel_log parallel_log_crashtest.tesh) IF(HAVE_MMALLOC) IF(${ARCH_32_BITS}) - ADD_TESH(xbt-mmalloc-32 --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mmalloc_32.tesh) + ADD_TESH(tesh-xbt-mmalloc-32 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/mmalloc --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mmalloc mmalloc_32.tesh) ELSE() - ADD_TESH(xbt-mmalloc-64 --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mmalloc_64.tesh) + ADD_TESH(tesh-xbt-mmalloc-64 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/mmalloc --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mmalloc mmalloc_64.tesh) ENDIF() ENDIF() - ADD_TESH(xbt-parmap --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_test.tesh) - - # BEGIN CONTEXTS FACTORY - if(HAVE_RAWCTX) - ADD_TEST(simix-factory-default ${TESH_COMMAND} ${TESH_OPTION} --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/factory_raw.tesh) - elseif(CONTEXT_UCONTEXT) - ADD_TEST(simix-factory-default ${TESH_COMMAND} ${TESH_OPTION} --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/factory_ucontext.tesh) - else() - ADD_TEST(simix-factory-default ${TESH_COMMAND} ${TESH_OPTION} --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/factory_thread.tesh) - endif() - ADD_TEST(simix-factory-thread ${TESH_COMMAND} ${TESH_OPTION} --cfg contexts/factory:thread --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/factory_thread.tesh) - if(HAVE_RAWCTX) - ADD_TEST(simix-factory-raw ${TESH_COMMAND} ${TESH_OPTION} --cfg contexts/factory:raw --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/factory_raw.tesh) - endif() - if(CONTEXT_UCONTEXT) - ADD_TEST(simix-factory-ucontext ${TESH_COMMAND} ${TESH_OPTION} --cfg contexts/factory:ucontext --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/factory_ucontext.tesh) - endif() - - # these tests need the assertion mechanism - # exclude them from memcheck, as they normally die, leaving lots of unfree'd objects - IF(enable_debug AND NOT enable_memcheck) - ADD_TESH(tesh-parser-bogus-symmetric --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_two_hosts_asymetric.tesh) - ADD_TESH(tesh-parser-bogus-missing-gw --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_missing_gateway.tesh) - ADD_TESH(tesh-disk-attachment --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_disk_attachment.tesh) - ENDIF() + ADD_TESH(tesh-xbt-parmap --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/parmap_test --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_test parmap_test.tesh) + ADD_TESH(tesh-xbt-log --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/log_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_usage log_usage.tesh) + ADD_TESH(tesh-xbt-graphxml --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/graphxml_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/graphxml_usage graphxml_usage.tesh) + ADD_TESH(tesh-xbt-heap --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/heap_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/heap_bench heap_bench.tesh) + #ADD_TESH(test-xbt-parmap --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/parmap_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_bench parmap_bench.tesh) + # END TESH TESTS - ADD_TESH(tesh-simdag-bypass --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms basic_parsing_test_bypass.tesh) - ADD_TESH(tesh-simdag-flatifier --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms flatifier.tesh) - ADD_TESH(tesh-simdag-link --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms basic_link_test.tesh) - ADD_TESH(tesh-simdag-reinit-costs --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/test_reinit_costs.tesh) - ADD_TESH(tesh-simdag-parser --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms basic_parsing_test.tesh) - ADD_TESH(tesh-simdag-parser-sym-full --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms basic_parsing_test_sym_full.tesh) - ADD_TESH(tesh-simdag-full-links --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms get_full_link.tesh) - ADD_TESH(tesh-simdag-basic0 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic0.tesh) - ADD_TESH(tesh-simdag-basic1 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic1.tesh) - ADD_TESH(tesh-simdag-basic2 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic2.tesh) - ADD_TESH(tesh-simdag-basic3 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic3.tesh) - ADD_TESH(tesh-simdag-basic4 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic4.tesh) - ADD_TESH(tesh-simdag-basic5 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic5.tesh) - ADD_TESH(tesh-simdag-basic6 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic6.tesh) - ADD_TESH(tesh-simdag-incomplete --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/incomplete.tesh) - ADD_TESH(tesh-simdag-p2p-1 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p/test_latency1.tesh) - ADD_TESH(tesh-simdag-p2p-2 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p/test_latency2.tesh) - ADD_TESH(tesh-simdag-p2p-3 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p/test_latency3.tesh) - ADD_TESH(tesh-simdag-p2p-4 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p/test_latency_bound.tesh) - ADD_TESH(tesh-simdag-mxn-1 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn/test_intra_all2all.tesh) - ADD_TESH(tesh-simdag-mxn-2 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn/test_intra_independent_comm.tesh) - ADD_TESH(tesh-simdag-mxn-3 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn/test_intra_scatter.tesh) - ADD_TESH(tesh-simdag-par-1 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/partask/test_comp_only_seq.tesh) - ADD_TESH(tesh-simdag-par-2 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/partask/test_comp_only_par.tesh) - ADD_TESH(tesh-simdag-availability --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/availability/availability_test.tesh) + ## INTERFACES ## + ### MSG ### + # BEGIN TESH TESTS + ADD_TESH_FACTORIES(tesh-msg-get-sender "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/get_sender --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/get_sender ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/get_sender/get_sender.tesh) + ADD_TESH_FACTORIES(tesh-msg-host-on-off "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/host_on_off --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/host_on_off ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/host_on_off/host_on_off.tesh) + ADD_TESH_FACTORIES(tesh-msg-pid "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/pid --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/pid ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/pid/pid.tesh) + ADD_TESH_FACTORIES(tesh-msg-process "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/process ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process/process.tesh) + ADD_TESH_FACTORIES(tesh-msg-process-join "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process_join --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/process_join ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process_join/process_join.tesh) + ADD_TESH_FACTORIES(tesh-msg-storage-basic "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/storage --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/storage ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/storage/storage_basic.tesh) + ADD_TESH_FACTORIES(tesh-msg-task-destroy-cancel "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/task_destroy_cancel --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/task_destroy_cancel ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.tesh) + ADD_TESH_FACTORIES(tesh-msg-trace "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/msg/trace --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace/trace.tesh) - # MSG examples ADD_TESH(msg-file --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/msg/io/io.tesh) ADD_TESH(msg-storage --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/msg/io/storage.tesh) ADD_TESH(msg-start-kill-time --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/msg/start_kill_time/start_kill_time.tesh) ADD_TESH(msg-chainsend --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/chainsend --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/chainsend --cd ${CMAKE_HOME_DIRECTORY}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/chainsend/chainsend.tesh) - ADD_TESH_FACTORIES(msg-sendrecv-CLM03 "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh) ADD_TESH_FACTORIES(msg-sendrecv-Vegas "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Vegas.tesh) ADD_TESH_FACTORIES(msg-sendrecv-Reno "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_Reno.tesh) @@ -165,39 +196,22 @@ if(NOT enable_memcheck) ADD_TESH_FACTORIES(msg-masterslave-bypass "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_bypass.tesh) ADD_TESH_FACTORIES(msg-masterslave-kill "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_kill.tesh) ADD_TESH_FACTORIES(msg-masterslave-multicore "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_multicore.tesh) - ADD_TESH_FACTORIES(msg-masterslave-no-crosstraffic-mailbox "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh) ADD_TESH_FACTORIES(msg-masterslave-no-crosstraffic "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave.tesh) ADD_TESH_FACTORIES(msg-masterslave-no-crosstraffic-forwarder "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder.tesh) ADD_TESH_FACTORIES(msg-masterslave-no-crosstraffic-failure "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh) - ADD_TESH_FACTORIES(msg-masterslave "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_crosstraffic.tesh) ADD_TESH_FACTORIES(msg-masterslave-forwarder "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_forwarder_crosstraffic.tesh) ADD_TESH_FACTORIES(msg-masterslave-failure "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure_crosstraffic.tesh) ADD_TESH_FACTORIES(msg-masterslave-mailbox "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox_crosstraffic.tesh) ADD_TESH_FACTORIES(msg-masterslave-cpu-ti "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/masterslave --cd ${CMAKE_HOME_DIRECTORY}/examples/msg masterslave/masterslave_cpu_ti_crosstraffic.tesh) - ADD_TESH_FACTORIES(msg-masterslave-vivaldi "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_vivaldi.tesh) - ADD_TESH_FACTORIES(msg-cloud-two-tasks-vm "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/cloud/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/ --cd ${CMAKE_BINARY_DIR}/examples/msg/cloud/ ${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/two_tasks_vm.tesh) - ADD_TESH_FACTORIES(msg-cloud-simple-vm "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/cloud/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/ --cd ${CMAKE_BINARY_DIR}/examples/msg/cloud/ ${CMAKE_HOME_DIRECTORY}/examples/msg/cloud/simple_vm.tesh) - ADD_TESH_FACTORIES(msg-energy-pstates "thread" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/e1/pstate.tesh) ADD_TESH_FACTORIES(msg-energy-consumption "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/e2/energy_consumption.tesh) ADD_TESH_FACTORIES(msg-energy-concurrent-tasks "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/energy/e3/concurrent_tasks.tesh) - - ADD_TESH_FACTORIES(tesh-msg-get-sender "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/get_sender --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/get_sender ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/get_sender/get_sender.tesh) - ADD_TESH_FACTORIES(tesh-msg-host-on-off "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/host_on_off --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/host_on_off ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/host_on_off/host_on_off.tesh) - ADD_TESH_FACTORIES(tesh-msg-pid "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/pid --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/pid ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/pid/pid.tesh) - ADD_TESH_FACTORIES(tesh-msg-process "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/process ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process/process.tesh) - ADD_TESH_FACTORIES(tesh-msg-process-join "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process_join --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/process_join ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/process_join/process_join.tesh) - ADD_TESH_FACTORIES(tesh-msg-storage-basic "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/storage --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/storage ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/storage/storage_basic.tesh) - ADD_TESH_FACTORIES(tesh-msg-task-destroy-cancel "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/msg/task_destroy_cancel --cd ${CMAKE_BINARY_DIR}/teshsuite/msg/task_destroy_cancel ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.tesh) - ADD_TESH_FACTORIES(tesh-msg-trace "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/msg/trace --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace ${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace/trace.tesh) - ADD_TESH_FACTORIES(msg-token-ring "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_BINARY_DIR}/examples/msg/token_ring ${CMAKE_HOME_DIRECTORY}/examples/msg/token_ring/token_ring.tesh) - ADD_TESH_FACTORIES(msg-migration "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/migration/migration.tesh) ADD_TESH_FACTORIES(msg-ptask "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/parallel_task/parallel_task.tesh) ADD_TESH_FACTORIES(msg-priority "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/priority/priority.tesh) @@ -212,218 +226,258 @@ if(NOT enable_memcheck) ADD_TESH_FACTORIES(msg-bittorrent-parallel "thread;ucontext;raw" --cfg contexts/nthreads:4 ${CONTEXTS_SYNCHRO} --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/bittorrent --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/bittorrent bittorrent.tesh) ADD_TESH_FACTORIES(msg-kademlia "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/kademlia --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/kademlia kademlia.tesh) ADD_TESH_FACTORIES(msg-kademlia-parallel "thread;ucontext;raw" --cfg contexts/nthreads:4 --cfg contexts/factory:thread ${CONTEXTS_SYNCHRO} --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/kademlia --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/kademlia kademlia.tesh) - - # simdag examples - if(HAVE_GRAPHVIZ) - ADD_TESH(simdag-test-dotload --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag/dot --cd ${CMAKE_BINARY_DIR}/examples/simdag/dot ${CMAKE_HOME_DIRECTORY}/examples/simdag/dot/test_simdag_dotload.tesh) - endif() - ADD_TESH(simdag-test-simdag --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag.tesh) - ADD_TESH(simdag-test-simdag2 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag2.tesh) - ADD_TESH(simdag-test-seq-access --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag_seq_access.tesh) - ADD_TESH(simdag-test-typed-tasks --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag_typed_tasks.tesh) - ADD_TESH(simdag-test-fail --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag test_simdag_fail.tesh) - ADD_TESH(simdag-test-avail --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag test_simdag_avail.tesh) - ADD_TESH(simdag-test-comm-throttling --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag_comm_throttling.tesh) - ADD_TESH(simdag-test-dax --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/dax --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag/dax smalldax.tesh) - ADD_TESH(simdag-test-dax-cycle --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag/dax --cd ${CMAKE_BINARY_DIR}/examples/simdag/dax ${CMAKE_HOME_DIRECTORY}/examples/simdag/dax/simple_dax_with_cycle.tesh) - ADD_TESH(simdag-test-prop --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/properties/test_prop.tesh) - ADD_TESH(simdag-test-minmin-scheduling --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/scheduling --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag/scheduling test_minmin.tesh) - ADD_TESH(simdag-test-io --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/simdag/io/io.tesh) - - ADD_TESH_FACTORIES(msg-gtnets-crosstraffic "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-crosstraffic.tesh) - - if(HAVE_GTNETS) - + IF(HAVE_GTNETS) ADD_TESH_FACTORIES(msg-gtnets-waxman "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-waxman.tesh) ADD_TESH_FACTORIES(msg-gtnets-dogbone "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-dogbone-gtnets.tesh) ADD_TESH_FACTORIES(msg-gtnets-onelink "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-onelink-gtnets.tesh) ADD_TESH_FACTORIES(msg-gtnets-dogbone-lv08 "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-dogbone-lv08.tesh) ADD_TESH_FACTORIES(msg-gtnets-onelink-lv08 "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/gtnets-onelink-lv08.tesh) - - if(HAVE_TRACING) + IF(HAVE_TRACING) ADD_TESH(msg-tracing-gtnets-waxman --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/tracing-gtnets-waxman.tesh) ADD_TESH(msg-tracing-gtnets-dogbone --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/tracing-gtnets-dogbone-gtnets.tesh) ADD_TESH(msg-tracing-gtnets-onelink --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/tracing-gtnets-onelink-gtnets.tesh) ADD_TESH(msg-tracing-gtnets-dogbone-lv08 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/tracing-gtnets-dogbone-lv08.tesh) ADD_TESH(msg-tracing-gtnets-onelink-lv08 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/gtnets/tracing-gtnets-onelink-lv08.tesh) - endif() - endif() - - if(HAVE_NS3) + ENDIF() + ENDIF() + IF(HAVE_NS3) ADD_TESH_FACTORIES(msg-ns3 "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/ns3/ns3.tesh) - endif() - + ENDIF() IF(HAVE_TRACING) - ADD_TEST(tracing-help ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test --help-tracing) ADD_TESH(tracing-ms --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --cd ${CMAKE_HOME_DIRECTORY}/examples/msg tracing/ms.tesh) - ADD_TESH(tracing-simdag --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag_tracing.tesh) ADD_TESH(tracing-trace-platform --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --cd ${CMAKE_HOME_DIRECTORY}/examples/msg tracing/trace_platform.tesh) ADD_TESH(tracing-user-variables --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --cd ${CMAKE_HOME_DIRECTORY}/examples/msg tracing/user_variables.tesh) ADD_TESH(tracing-link-user-variables --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --cd ${CMAKE_HOME_DIRECTORY}/examples/msg tracing/link_user_variables.tesh) ADD_TESH(tracing-link-srcdst-user-variables --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --cd ${CMAKE_HOME_DIRECTORY}/examples/msg tracing/link_srcdst_user_variables.tesh) ADD_TESH(tracing-categories --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --cd ${CMAKE_HOME_DIRECTORY}/examples/msg tracing/categories.tesh) ADD_TESH(tracing-process-migration --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg --cd ${CMAKE_HOME_DIRECTORY}/examples/msg tracing/procmig.tesh) - ADD_TESH(graphicator --setenv srcdir=${CMAKE_HOME_DIRECTORY} --setenv bindir=${CMAKE_BINARY_DIR}/bin --cd ${CMAKE_HOME_DIRECTORY}/tools/graphicator graphicator.tesh) ENDIF() + ADD_TEST(msg-icomms-waitany ${CMAKE_BINARY_DIR}/examples/msg/icomms/peer3 ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/small_platform.xml ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/deployment_peer05.xml) + # END TESH TESTS - # Lua examples - if(HAVE_LUA) - ADD_TESH(lua-duplicated-globals --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/state_cloner duplicated_globals.tesh) - ADD_TESH(lua-masterslave --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/masterslave master_slave.tesh) - ADD_TESH(lua-mult-matrix --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/multi_matrix mult_matrix.tesh) - ADD_TESH(lua-masterslave-bypass --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/console master_slave_bypass.tesh) - ADD_TESH(lua-chord --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/chord chord.tesh) - ADD_TESH(lua-bittorrent --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/bittorrent bittorrent.tesh) - ADD_TESH(lua-kademlia --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/kademlia kademlia.tesh) - set_tests_properties(lua-duplicated-globals PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") - set_tests_properties(lua-masterslave PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") - set_tests_properties(lua-mult-matrix PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") - set_tests_properties(lua-masterslave-bypass PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") - set_tests_properties(lua-chord PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") - set_tests_properties(lua-bittorrent PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") - set_tests_properties(lua-kademlia PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") - endif() - - if(enable_smpi) - # smpi examples - ADD_TESH_FACTORIES(smpi-bcast "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast.tesh) - ADD_TESH_FACTORIES(smpi-reduce "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce.tesh) - ADD_TESH_FACTORIES(smpi-vector "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/vector.tesh) - ADD_TESH_FACTORIES(smpi-hvector "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hvector.tesh) - ADD_TESH_FACTORIES(smpi-indexed "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/indexed.tesh) - ADD_TESH_FACTORIES(smpi-struct "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/struct.tesh) - ADD_TESH_FACTORIES(smpi-pt2pt "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pt2pt.tesh) - ADD_TESH_FACTORIES(smpi-compute "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/compute.tesh) - if (NOT WIN32) - ADD_TESH_FACTORIES(smpi-shared "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/shared.tesh) - endif() - - # https://gforge.inria.fr/tracker/index.php?func=detail&aid=17132&group_id=12&atid=165 - ADD_TESH_FACTORIES(smpi-bug-17132 "thread" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132 --cd ${CMAKE_BINARY_DIR}/teshsuite/bug-17132 ${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132/bug-17132.tesh) - ADD_TESH_FACTORIES(smpi-bug-17132-surf-debug "thread" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132 --cd ${CMAKE_BINARY_DIR}/teshsuite/bug-17132 ${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132/bug-17132-surf-debug.tesh) - ADD_TESH_FACTORIES(smpi-energy "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/energy.tesh) - if(SMPI_F2C) - ADD_TESH_FACTORIES(smpi-energy-f77 "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/f77/energy.tesh) - endif() - if(SMPI_F90) - ADD_TESH_FACTORIES(smpi-energy-f90 "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/f90/energy.tesh) - endif() + ### SIMDAG ### + # BEGIN TESH TESTS + # these tests need the assertion mechanism + # exclude them from memcheck, as they normally die, leaving lots of unfree'd objects + IF(enable_debug AND NOT enable_memcheck) + ADD_TESH(tesh-parser-bogus-symmetric --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_two_hosts_asymetric.tesh) + ADD_TESH(tesh-parser-bogus-missing-gw --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_missing_gateway.tesh) + ADD_TESH(tesh-disk-attachment --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms bogus_disk_attachment.tesh) + ENDIF() + ADD_TESH(tesh-simdag-bypass --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms basic_parsing_test_bypass.tesh) + ADD_TESH(tesh-simdag-flatifier --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms flatifier.tesh) + ADD_TESH(tesh-simdag-link --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --setenv srcdir=${CMAKE_HOME_DIRECTORY} --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms basic_link_test.tesh) + ADD_TESH(tesh-simdag-reinit-costs --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/test_reinit_costs.tesh) + ADD_TESH(tesh-simdag-parser --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms basic_parsing_test.tesh) + ADD_TESH(tesh-simdag-parser-sym-full --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms basic_parsing_test_sym_full.tesh) + ADD_TESH(tesh-simdag-full-links --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms get_full_link.tesh) + ADD_TESH(tesh-simdag-basic0 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/basic --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic basic0.tesh) + ADD_TESH(tesh-simdag-basic1 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/basic --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic basic1.tesh) + ADD_TESH(tesh-simdag-basic2 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/basic --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic basic2.tesh) + ADD_TESH(tesh-simdag-basic3 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/basic --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic basic3.tesh) + ADD_TESH(tesh-simdag-basic4 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/basic --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic basic4.tesh) + ADD_TESH(tesh-simdag-basic5 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/basic --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic basic5.tesh) + ADD_TESH(tesh-simdag-basic6 --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/basic --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic basic6.tesh) + ADD_TESH(tesh-simdag-incomplete --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/simdag/incomplete --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/incomplete incomplete.tesh) + ADD_TESH(tesh-simdag-p2p-1 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p/test_latency1.tesh) + ADD_TESH(tesh-simdag-p2p-2 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p/test_latency2.tesh) + ADD_TESH(tesh-simdag-p2p-3 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p/test_latency3.tesh) + ADD_TESH(tesh-simdag-p2p-4 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p/test_latency_bound.tesh) + ADD_TESH(tesh-simdag-mxn-1 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn/test_intra_all2all.tesh) + ADD_TESH(tesh-simdag-mxn-2 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn/test_intra_independent_comm.tesh) + ADD_TESH(tesh-simdag-mxn-3 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn/test_intra_scatter.tesh) + ADD_TESH(tesh-simdag-par-1 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/partask/test_comp_only_seq.tesh) + ADD_TESH(tesh-simdag-par-2 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/partask/test_comp_only_par.tesh) + ADD_TESH(tesh-simdag-availability --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/availability/availability_test.tesh) + ADD_TEST(tesh-simdag-full-links01 ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms/two_clusters.xml FULL_LINK) + ADD_TEST(tesh-simdag-full-links02 ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms/two_clusters_one_name.xml FULL_LINK) + ADD_TEST(tesh-simdag-one-link-g5k ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test ${CMAKE_HOME_DIRECTORY}/examples/platforms/g5k.xml ONE_LINK) + # END TESH TESTS - ADD_TESH_FACTORIES(smpi-msg-masterslave "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_msg_masterslave --cd ${CMAKE_BINARY_DIR}/examples/smpi/smpi_msg_masterslave ${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_msg_masterslave/msg_smpi.tesh) + # BEGIN TESH TESTS + IF(HAVE_GRAPHVIZ) + IF(HAVE_TRACING) + ADD_TESH(simdag-dotload --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag/dot --cd ${CMAKE_BINARY_DIR}/examples/simdag/dot ${CMAKE_HOME_DIRECTORY}/examples/simdag/dot/test_simdag_dotload.tesh) + ELSE() + ADD_TESH(simdag-dotload --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag/dot --cd ${CMAKE_BINARY_DIR}/examples/simdag/dot ${CMAKE_HOME_DIRECTORY}/examples/simdag/dot/test_simdag_dotload_notrace.tesh) + ENDIF() + ENDIF() + ADD_TESH(simdag-simdag --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag.tesh) + ADD_TESH(simdag-simdag2 --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag2.tesh) + ADD_TESH(simdag-seq-access --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag_seq_access.tesh) + ADD_TESH(simdag-typed-tasks --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag_typed_tasks.tesh) + IF(HAVE_TRACING) + ADD_TESH(simdag-fail --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag test_simdag_fail.tesh) + ELSE() + ADD_TESH(simdag-fail --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag test_simdag_fail_notrace.tesh) + ENDIF() + ADD_TESH(simdag-avail --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag test_simdag_avail.tesh) + ADD_TESH(simdag-comm-throttling --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag_comm_throttling.tesh) + IF(HAVE_TRACING) + ADD_TESH(simdag-dax --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/dax --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag/dax smalldax.tesh) + ELSE() + ADD_TESH(simdag-dax --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/dax --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag/dax smalldax_notrace.tesh) + ENDIF() + ADD_TESH(simdag-dax-cycle --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag/dax --cd ${CMAKE_BINARY_DIR}/examples/simdag/dax ${CMAKE_HOME_DIRECTORY}/examples/simdag/dax/simple_dax_with_cycle.tesh) + ADD_TESH(simdag-prop --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/properties/test_prop.tesh) + ADD_TESH(simdag-minmin-scheduling --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/scheduling --cd ${CMAKE_HOME_DIRECTORY}/examples/simdag/scheduling test_minmin.tesh) + ADD_TESH(simdag-io --setenv bindir=${CMAKE_BINARY_DIR}/examples/simdag/ --setenv srcdir=${CMAKE_HOME_DIRECTORY}/ --cd ${CMAKE_HOME_DIRECTORY}/examples/ ${CMAKE_HOME_DIRECTORY}/examples/simdag/io/io.tesh) + IF(HAVE_TRACING) + ADD_TESH(tracing-simdag --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/test_simdag_tracing.tesh) + ENDIF() + # END TESH TESTS - if(HAVE_TRACING) - ADD_TESH(smpi-tracing-ptp --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi --cd ${CMAKE_BINARY_DIR}/examples/smpi ${CMAKE_HOME_DIRECTORY}/examples/smpi/tracing/smpi_traced.tesh) - ADD_TESH(smpi-replay --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi --cd ${CMAKE_BINARY_DIR}/examples/smpi ${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/smpi_replay.tesh) - ADD_TESH(smpi-replay-ti-tracing --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/TI_output.tesh) - endif() + ### SMPI ### + IF(enable_smpi) + # BEGIN TESH TESTS + # smpi examples + ADD_TESH_FACTORIES(tesh-smpi-bcast "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/bcast --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast bcast.tesh) + ADD_TESH_FACTORIES(tesh-smpi-reduce "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/reduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce reduce.tesh) + ADD_TESH_FACTORIES(tesh-smpi-vector "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/vector --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/vector vector.tesh) + ADD_TESH_FACTORIES(tesh-smpi-hvector "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/hvector --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hvector hvector.tesh) + ADD_TESH_FACTORIES(tesh-smpi-indexed "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/indexed --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/indexed indexed.tesh) + ADD_TESH_FACTORIES(tesh-smpi-struct "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/struct --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/struct struct.tesh) + ADD_TESH_FACTORIES(tesh-smpi-pt2pt "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/pingpong --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pingpong pt2pt.tesh) + ADD_TESH_FACTORIES(tesh-smpi-compute "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/compute --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/compute compute.tesh) + IF(NOT WIN32) + ADD_TESH_FACTORIES(tesh-smpi-shared "thread;ucontext;raw" --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/shared --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/shared shared.tesh) + ENDIF() + # https://gforge.inria.fr/tracker/index.php?func=detail&aid=17132&group_id=12&atid=165 + ADD_TESH_FACTORIES(tesh-smpi-bug-17132 "thread" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132 --cd ${CMAKE_BINARY_DIR}/teshsuite/bug-17132 ${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132/bug-17132.tesh) + ADD_TESH_FACTORIES(tesh-smpi-bug-17132-surf-debug "thread" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132 --cd ${CMAKE_BINARY_DIR}/teshsuite/bug-17132 ${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132/bug-17132-surf-debug.tesh) + IF(HAVE_TRACING) + ADD_TESH(tesh-smpi-replay-ti-tracing --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/pingpong --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pingpong TI_output.tesh) + ENDIF() FOREACH (GATHER_COLL default ompi mpich ompi_basic_linear ompi_linear_sync ompi_binomial) - ADD_TESH(smpi-gather-coll-${GATHER_COLL} --cfg smpi/gather:${GATHER_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/gather_coll.tesh) + ADD_TESH(tesh-smpi-gather-coll-${GATHER_COLL} --cfg smpi/gather:${GATHER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/gather --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/gather gather_coll.tesh) ENDFOREACH() - FOREACH (ALLGATHER_COLL default 2dmesh 3dmesh bruck GB loosely_lr NTSLR NTSLR_NB pair rdb rhv ring SMP_NTS smp_simple spreading_simple ompi mpich ompi_neighborexchange) - ADD_TESH(smpi-allgather-coll-${ALLGATHER_COLL} --cfg smpi/allgather:${ALLGATHER_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgather_coll.tesh) + ADD_TESH(tesh-smpi-allgather-coll-${ALLGATHER_COLL} --cfg smpi/allgather:${ALLGATHER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allgather --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgather allgather_coll.tesh) ENDFOREACH() - FOREACH (ALLGATHERV_COLL default GB pair ring ompi mpich ompi_neighborexchange ompi_bruck mpich_rdb mpich_ring) - ADD_TESH(smpi-allgatherv-coll-${ALLGATHERV_COLL} --cfg smpi/allgatherv:${ALLGATHERV_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgatherv_coll.tesh) + ADD_TESH(tesh-smpi-allgatherv-coll-${ALLGATHERV_COLL} --cfg smpi/allgatherv:${ALLGATHERV_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allgatherv --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgatherv allgatherv_coll.tesh) ENDFOREACH() - FOREACH (ALLREDUCE_COLL default lr rab1 rab2 rab_rdb rdb smp_binomial smp_binomial_pipeline smp_rdb smp_rsag smp_rsag_lr smp_rsag_rab redbcast ompi mpich ompi_ring_segmented) - ADD_TESH(smpi-allreduce-coll-${ALLREDUCE_COLL} --cfg smpi/allreduce:${ALLREDUCE_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allreduce_coll.tesh) + ADD_TESH(tesh-smpi-allreduce-coll-${ALLREDUCE_COLL} --cfg smpi/allreduce:${ALLREDUCE_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allreduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allreduce allreduce_coll.tesh) ENDFOREACH() - FOREACH (ALLREDUCE_COLL_LARGE ompi_ring_segmented) - ADD_TESH(smpi-allreduce-coll-large-${ALLREDUCE_COLL_LARGE} --cfg smpi/allreduce:${ALLREDUCE_COLL_LARGE} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allreduce_coll_large.tesh) + ADD_TESH(tesh-smpi-allreduce-coll-large-${ALLREDUCE_COLL_LARGE} --cfg smpi/allreduce:${ALLREDUCE_COLL_LARGE} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/allreduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allreduce allreduce_coll_large.tesh) ENDFOREACH() - FOREACH (ALLTOALL_COLL 2dmesh 3dmesh pair pair_one_barrier pair_light_barrier pair_mpi_barrier rdb ring ring_light_barrier ring_mpi_barrier ring_one_barrier bruck basic_linear ompi mpich) - ADD_TESH(smpi-alltoall-coll-${ALLTOALL_COLL} --cfg smpi/alltoall:${ALLTOALL_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoall_coll.tesh) + ADD_TESH(tesh-smpi-alltoall-coll-${ALLTOALL_COLL} --cfg smpi/alltoall:${ALLTOALL_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/alltoall --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoall alltoall_coll.tesh) ENDFOREACH() - FOREACH (ALLTOALLV_COLL default pair pair_light_barrier pair_mpi_barrier pair_one_barrier ring ring_light_barrier ring_mpi_barrier ring_one_barrier bruck ompi mpich ompi_basic_linear) - ADD_TESH(smpi-alltoallv-coll-${ALLTOALLV_COLL} --cfg smpi/alltoallv:${ALLTOALLV_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoallv_coll.tesh) + ADD_TESH(tesh-smpi-alltoallv-coll-${ALLTOALLV_COLL} --cfg smpi/alltoallv:${ALLTOALLV_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/alltoallv --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoallv alltoallv_coll.tesh) ENDFOREACH() - FOREACH (BCAST_COLL default arrival_pattern_aware arrival_pattern_aware_wait arrival_scatter binomial_tree flattree flattree_pipeline NTSB NTSL NTSL_Isend scatter_LR_allgather scatter_rdb_allgather SMP_binary SMP_binomial SMP_linear ompi mpich ompi_split_bintree ompi_pipeline) - ADD_TESH(smpi-bcast-coll-${BCAST_COLL} --cfg smpi/bcast:${BCAST_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast_coll.tesh) + ADD_TESH(tesh-smpi-bcast-coll-${BCAST_COLL} --cfg smpi/bcast:${BCAST_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/bcast --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast bcast_coll.tesh) ENDFOREACH() - FOREACH (REDUCE_COLL default arrival_pattern_aware binomial flat_tree NTSL scatter_gather ompi mpich ompi_chain ompi_binary ompi_basic_linear ompi_binomial ompi_in_order_binary) - ADD_TESH(smpi-reduce-coll-${REDUCE_COLL} --cfg smpi/reduce:${REDUCE_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce_coll.tesh) + ADD_TESH(tesh-smpi-reduce-coll-${REDUCE_COLL} --cfg smpi/reduce:${REDUCE_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/reduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce reduce_coll.tesh) ENDFOREACH() - FOREACH (REDUCE_SCATTER_COLL default ompi mpich ompi_basic_recursivehalving ompi_ring mpich_noncomm mpich_pair mpich_rdb) - ADD_TESH(smpi-reduce-scatter-coll-${REDUCE_SCATTER_COLL} --cfg smpi/reduce_scatter:${REDUCE_SCATTER_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce_scatter_coll.tesh) + ADD_TESH(tesh-smpi-reduce-scatter-coll-${REDUCE_SCATTER_COLL} --cfg smpi/reduce_scatter:${REDUCE_SCATTER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/reduce --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce reduce_scatter_coll.tesh) ENDFOREACH() - FOREACH (SCATTER_COLL default ompi mpich ompi_basic_linear ompi_binomial) - ADD_TESH(smpi-scatter-coll-${SCATTER_COLL} --cfg smpi/scatter:${SCATTER_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/scatter_coll.tesh) + ADD_TESH(tesh-smpi-scatter-coll-${SCATTER_COLL} --cfg smpi/scatter:${SCATTER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/scatter --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/scatter scatter_coll.tesh) ENDFOREACH() - FOREACH (BARRIER_COLL default ompi mpich ompi_basic_linear ompi_tree ompi_bruck ompi_recursivedoubling ompi_doublering) - ADD_TESH(smpi-barrier-coll-${BARRIER_COLL} --cfg smpi/barrier:${BARRIER_COLL} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi --cd ${CMAKE_BINARY_DIR}/teshsuite/smpi ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/barrier_coll.tesh) + ADD_TESH(tesh-smpi-barrier-coll-${BARRIER_COLL} --cfg smpi/barrier:${BARRIER_COLL} --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/smpi/barrier --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/barrier barrier_coll.tesh) ENDFOREACH() - endif() + # END TESH TESTS + IF(enable_smpi_MPICH3_testsuite) + ADD_TEST(test-smpi-mpich3-coll-thread ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:thread -execarg=--cfg=smpi/privatize_global_variables:yes) + ADD_TEST(test-smpi-mpich3-coll-ompi-thread ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:thread -execarg=--cfg=smpi/coll_selector:ompi -execarg=--cfg=smpi/send_is_detached_thres:0 -execarg=--cfg=smpi/privatize_global_variables:yes) + ADD_TEST(test-smpi-mpich3-coll-mpich-thread ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:thread -execarg=--cfg=smpi/coll_selector:mpich -execarg=--cfg=smpi/privatize_global_variables:yes) + SET_TESTS_PROPERTIES(test-smpi-mpich3-coll-thread test-smpi-mpich3-coll-ompi-thread test-smpi-mpich3-coll-mpich-thread PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") + IF(CONTEXT_UCONTEXT) + ADD_TEST(test-smpi-mpich3-coll-ompi-ucontext ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:ucontext -execarg=--cfg=smpi/coll_selector:ompi -execarg=--cfg=smpi/send_is_detached_thres:0 -execarg=--cfg=smpi/privatize_global_variables:yes) + SET_TESTS_PROPERTIES(test-smpi-mpich3-coll-ompi-ucontext PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") + ENDIF() + IF(HAVE_RAWCTX) + ADD_TEST(test-smpi-mpich3-coll-mpich-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:mpich -execarg=--cfg=smpi/privatize_global_variables:yes) + SET_TESTS_PROPERTIES(test-smpi-mpich3-coll-mpich-raw PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") + ENDIF() + IF(HAVE_RAWCTX) + ADD_TEST(test-smpi-mpich3-attr-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/attr perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/attr -tests=testlist -execarg=--cfg=contexts/factory:raw) + ADD_TEST(test-smpi-mpich3-comm-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/comm perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/comm -tests=testlist -execarg=--cfg=contexts/factory:raw) + ADD_TEST(test-smpi-mpich3-init-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/init perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/init -tests=testlist -execarg=--cfg=contexts/factory:raw) + ADD_TEST(test-smpi-mpich3-datatype-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/datatype perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/datatype -tests=testlist -execarg=--cfg=contexts/factory:raw) + ADD_TEST(test-smpi-mpich3-group-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/group perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/group -tests=testlist -execarg=--cfg=contexts/factory:raw) + ADD_TEST(test-smpi-mpich3-pt2pt-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/pt2pt perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/pt2pt -tests=testlist -execarg=--cfg=contexts/factory:raw) + ADD_TEST(test-smpi-mpich3-topo-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/topo perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/topo -tests=testlist -execarg=--cfg=contexts/factory:raw) + SET_TESTS_PROPERTIES(test-smpi-mpich3-attr-raw test-smpi-mpich3-comm-raw test-smpi-mpich3-init-raw test-smpi-mpich3-datatype-raw test-smpi-mpich3-group-raw test-smpi-mpich3-pt2pt-raw test-smpi-mpich3-topo-raw PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") + ENDIF() + IF(SMPI_F2C) + ADD_TEST(test-smpi-mpich3-thread-f77 ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/f77/ perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/ -tests=testlist -execarg=--cfg=contexts/stack_size:8000 -execarg=--cfg=smpi/privatize_global_variables:yes) + SET_TESTS_PROPERTIES(test-smpi-mpich3-thread-f77 PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") + ENDIF() + IF(SMPI_F90) + ADD_TEST(test-smpi-mpich3-thread-f90 ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/f90/ perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/ -tests=testlist -execarg=--cfg=smpi/privatize_global_variables:yes) + SET_TESTS_PROPERTIES(test-smpi-mpich3-thread-f90 PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") + ENDIF() + ENDIF() + + # BEGIN TESH TESTS + ADD_TESH_FACTORIES(smpi-energy "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/energy.tesh) + IF(SMPI_F2C) + ADD_TESH_FACTORIES(smpi-energy-f77 "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/f77/energy.tesh) + ENDIF() + IF(SMPI_F90) + ADD_TESH_FACTORIES(smpi-energy-f90 "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/energy --cd ${CMAKE_BINARY_DIR}/examples/smpi/energy ${CMAKE_HOME_DIRECTORY}/examples/smpi/energy/f90/energy.tesh) + ENDIF() + ADD_TESH_FACTORIES(smpi-msg-masterslave "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_msg_masterslave --cd ${CMAKE_BINARY_DIR}/examples/smpi/smpi_msg_masterslave ${CMAKE_HOME_DIRECTORY}/examples/smpi/smpi_msg_masterslave/msg_smpi.tesh) + IF(HAVE_TRACING) + ADD_TESH(smpi-tracing-ptp --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi --cd ${CMAKE_BINARY_DIR}/examples/smpi ${CMAKE_HOME_DIRECTORY}/examples/smpi/tracing/smpi_traced.tesh) + ADD_TESH(smpi-replay --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/smpi --cd ${CMAKE_BINARY_DIR}/examples/smpi ${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/smpi_replay.tesh) + ENDIF() + # END TESH TESTS + ENDIF() + + ## BINGINGS ## + ### LUA ### + # BEGIN TESH TESTS + IF(HAVE_LUA) + ADD_TESH(lua-duplicated-globals --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/state_cloner duplicated_globals.tesh) + ADD_TESH(lua-masterslave --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/masterslave master_slave.tesh) + ADD_TESH(lua-mult-matrix --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/multi_matrix mult_matrix.tesh) + ADD_TESH(lua-masterslave-bypass --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/console master_slave_bypass.tesh) + ADD_TESH(lua-chord --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/chord chord.tesh) + ADD_TESH(lua-bittorrent --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/bittorrent bittorrent.tesh) + ADD_TESH(lua-kademlia --cd ${CMAKE_HOME_DIRECTORY}/examples/lua/kademlia kademlia.tesh) + SET_TESTS_PROPERTIES(lua-duplicated-globals PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") + SET_TESTS_PROPERTIES(lua-masterslave PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") + SET_TESTS_PROPERTIES(lua-mult-matrix PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") + SET_TESTS_PROPERTIES(lua-masterslave-bypass PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") + SET_TESTS_PROPERTIES(lua-chord PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") + SET_TESTS_PROPERTIES(lua-bittorrent PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") + SET_TESTS_PROPERTIES(lua-kademlia PROPERTIES ENVIRONMENT "LUA_CPATH=${CMAKE_BINARY_DIR}/examples/lua/?.so") + ENDIF() # END TESH TESTS - if(enable_smpi_MPICH3_testsuite) - ADD_TEST(smpi-mpich3-coll-thread ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:thread -execarg=--cfg=smpi/privatize_global_variables:yes) - ADD_TEST(smpi-mpich3-coll-ompi-thread ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:thread -execarg=--cfg=smpi/coll_selector:ompi -execarg=--cfg=smpi/send_is_detached_thres:0 -execarg=--cfg=smpi/privatize_global_variables:yes) - ADD_TEST(smpi-mpich3-coll-mpich-thread ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:thread -execarg=--cfg=smpi/coll_selector:mpich -execarg=--cfg=smpi/privatize_global_variables:yes) - set_tests_properties(smpi-mpich3-coll-thread smpi-mpich3-coll-ompi-thread smpi-mpich3-coll-mpich-thread PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") - - if(CONTEXT_UCONTEXT) - ADD_TEST(smpi-mpich3-coll-ompi-ucontext ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:ucontext -execarg=--cfg=smpi/coll_selector:ompi -execarg=--cfg=smpi/send_is_detached_thres:0 -execarg=--cfg=smpi/privatize_global_variables:yes) - set_tests_properties(smpi-mpich3-coll-ompi-ucontext PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") - endif() - if(HAVE_RAWCTX) - ADD_TEST(smpi-mpich3-coll-mpich-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/coll perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll -tests=testlist -execarg=--cfg=contexts/factory:raw -execarg=--cfg=smpi/coll_selector:mpich -execarg=--cfg=smpi/privatize_global_variables:yes) - set_tests_properties(smpi-mpich3-coll-mpich-raw PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") - endif() - - if(HAVE_RAWCTX) - ADD_TEST(smpi-mpich3-attr-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/attr perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/attr -tests=testlist -execarg=--cfg=contexts/factory:raw) - ADD_TEST(smpi-mpich3-comm-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/comm perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/comm -tests=testlist -execarg=--cfg=contexts/factory:raw) - ADD_TEST(smpi-mpich3-init-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/init perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/init -tests=testlist -execarg=--cfg=contexts/factory:raw) - ADD_TEST(smpi-mpich3-datatype-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/datatype perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/datatype -tests=testlist -execarg=--cfg=contexts/factory:raw) - ADD_TEST(smpi-mpich3-group-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/group perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/group -tests=testlist -execarg=--cfg=contexts/factory:raw) - ADD_TEST(smpi-mpich3-pt2pt-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/pt2pt perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/pt2pt -tests=testlist -execarg=--cfg=contexts/factory:raw) - ADD_TEST(smpi-mpich3-topo-raw ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/topo perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/topo -tests=testlist -execarg=--cfg=contexts/factory:raw) - set_tests_properties(smpi-mpich3-attr-raw smpi-mpich3-comm-raw smpi-mpich3-init-raw smpi-mpich3-datatype-raw smpi-mpich3-group-raw smpi-mpich3-pt2pt-raw smpi-mpich3-topo-raw PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") - endif() - - if(SMPI_F2C) - ADD_TEST(smpi-mpich3-thread-f77 ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/f77/ perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f77/ -tests=testlist -execarg=--cfg=contexts/stack_size:8000 -execarg=--cfg=smpi/privatize_global_variables:yes) - set_tests_properties(smpi-mpich3-thread-f77 PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") - endif() - if(SMPI_F90) - ADD_TEST(smpi-mpich3-thread-f90 ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR}/teshsuite/smpi/mpich3-test/f90/ perl ${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/runtests -mpiexec=${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun -srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/f90/ -tests=testlist -execarg=--cfg=smpi/privatize_global_variables:yes) - set_tests_properties(smpi-mpich3-thread-f90 PROPERTIES PASS_REGULAR_EXPRESSION "tests passed!") - endif() - endif() - - # Java examples - if(enable_java) - if(WIN32) - set(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/\;${SIMGRID_FULL_JAR}") - else() - set(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/:${SIMGRID_FULL_JAR}") - endif() + + ### JAVA ### + IF(enable_java) + IF(WIN32) + SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/\;${SIMGRID_FULL_JAR}") + ELSE() + SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/java/:${SIMGRID_FULL_JAR}") + ENDIF() ADD_TESH(java-async --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/async/async.tesh) ADD_TESH(java-bittorrent --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/bittorrent/bittorrent.tesh) ADD_TESH(java-bypass --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/master_slave_bypass/bypass.tesh) @@ -443,83 +497,33 @@ if(NOT enable_memcheck) ADD_TESH(java-surf-cpu-model --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/surfCpuModel/surf_cpu_model.tesh) ADD_TESH(java-surf-plugin --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/surfPlugin/surf_plugin.tesh) ADD_TESH(java-suspend --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/suspend/suspend.tesh) - if(HAVE_TRACING) + IF(HAVE_TRACING) ADD_TESH(java-tracing --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/java --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/java ${CMAKE_HOME_DIRECTORY}/examples/java/tracing/tracingPingPong.tesh) - endif() - endif() + ENDIF() + ENDIF() - # Scala examples - if(enable_scala) - if(WIN32) - set(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/scala/\;${SIMGRID_FULL_JAR}\;${SCALA_JARS}") - else() - set(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/scala/:${SIMGRID_FULL_JAR}:${SCALA_JARS}") - endif() + ### SCALA ### + IF(enable_scala) + IF(WIN32) + SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/scala/\;${SIMGRID_FULL_JAR}\;${SCALA_JARS}") + ELSE() + SET(TESH_CLASSPATH "${CMAKE_BINARY_DIR}/examples/scala/:${SIMGRID_FULL_JAR}:${SCALA_JARS}") + ENDIF() ADD_TESH(scala-bypass --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/scala --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/scala ${CMAKE_HOME_DIRECTORY}/examples/scala/master_slave_bypass/bypass.tesh) ADD_TESH(scala-kill --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/scala --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/scala ${CMAKE_HOME_DIRECTORY}/examples/scala/master_slave_kill/kill.tesh) ADD_TESH(scala-masterslave --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/scala --setenv classpath=${TESH_CLASSPATH} --cd ${CMAKE_BINARY_DIR}/examples/scala ${CMAKE_HOME_DIRECTORY}/examples/scala/masterslave/masterslave.tesh) - endif() + ENDIF() - ADD_TESH_FACTORIES(stack-overflow "thread;ucontext;raw" --setenv srcdir=${CMAKE_HOME_DIRECTORY}/teshsuite --cd ${CMAKE_BINARY_DIR}/teshsuite ${CMAKE_HOME_DIRECTORY}/teshsuite/simix/stack_overflow.tesh) +ENDIF() - # examples/msg/mc - if(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) + ## OTHER ## +ADD_TEST(testall ${CMAKE_BINARY_DIR}/src/testall) - if(CONTEXT_UCONTEXT AND PROCESSOR_x86_64) # liveness model-checking works only on 64bits (for now ...) - ADD_TESH(mc-bugged1-liveness-ucontext --cfg contexts/factory:ucontext --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness.tesh) - ADD_TESH(mc-bugged1-liveness-visited-ucontext --cfg contexts/factory:ucontext --setenv bindir=${CMAKE_BINARY_DIR}/examples/msg/mc --cd ${CMAKE_HOME_DIRECTORY}/examples/msg/mc bugged1_liveness_visited.tesh) - endif() - endif() +IF(enable_auto_install) + ADD_TEST(simgrid_install make install) +ENDIF() - ### - ### Declare that we know that some tests are broken - ### - if(release) - if(WIN32 OR CMAKE_SYSTEM_NAME MATCHES "Darwin") - # These tests are known to fail on Windows and Mac OS X - # (the expected error message is not shown). - set_tests_properties(stack-overflow-thread PROPERTIES WILL_FAIL true) - if(CONTEXT_UCONTEXT) - set_tests_properties(stack-overflow-ucontext PROPERTIES WILL_FAIL true) - endif() - if(HAVE_RAWCTX) - set_tests_properties(stack-overflow-raw PROPERTIES WILL_FAIL true) - endif() - endif() - endif() - -endif() - -ADD_TEST(tesh-simdag-full-links01 ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms/two_clusters.xml FULL_LINK) -ADD_TEST(tesh-simdag-full-links02 ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test ${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms/two_clusters_one_name.xml FULL_LINK) -ADD_TEST(tesh-simdag-one-link-g5k ${CMAKE_BINARY_DIR}/teshsuite/simdag/platforms/basic_parsing_test ${CMAKE_HOME_DIRECTORY}/examples/platforms/g5k.xml ONE_LINK) -ADD_TEST(msg-icomms-waitany ${CMAKE_BINARY_DIR}/examples/msg/icomms/peer3 ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/small_platform.xml ${CMAKE_HOME_DIRECTORY}/examples/msg/icomms/deployment_peer05.xml) - -# testsuite directory -ADD_TESH(test-xbt-log --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/log_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_usage log_usage.tesh) -ADD_TESH(test-xbt-graphxml --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/graphxml_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/graphxml_usage graphxml_usage.tesh) -ADD_TESH(test-xbt-heap --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/heap_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/heap_bench heap_bench.tesh) -#ADD_TESH(test-xbt-parmap --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/xbt/parmap_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_bench parmap_bench.tesh) - -ADD_TESH(test-surf-lmm --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/lmm_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/lmm_usage lmm_usage.tesh) -ADD_TESH(test-surf-maxmin --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/maxmin_bench --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/maxmin_bench maxmin_bench.tesh) -ADD_TESH(test-surf-usage --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/surf_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/ surf_usage/surf_usage.tesh) -ADD_TESH(test-surf-trace --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/surf/trace_usage --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/surf/ trace_usage/trace_usage.tesh) - -if(HAVE_MC) - ADD_TESH(mc-dwarf --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/mc/dwarf --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf dwarf.tesh) - ADD_TESH(mc-dwarf-expression --setenv bindir=${CMAKE_BINARY_DIR}/teshsuite/mc/dwarf_expression --cd ${CMAKE_HOME_DIRECTORY}/teshsuite/mc/dwarf_expression dwarf_expression.tesh) -endif() - -add_test(testall ${CMAKE_BINARY_DIR}/src/testall) - -if(enable_auto_install) - add_test(simgrid_install make install) -endif() - -if(enable_memcheck) - include(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/memcheck_tests.cmake) -endif() +IF(enable_memcheck) + INCLUDE(${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/memcheck_tests.cmake) +ENDIF() diff --git a/buildtools/Cmake/CTestConfig.cmake b/buildtools/Cmake/CTestConfig.cmake index 7c961b1882..04854c2c57 100644 --- a/buildtools/Cmake/CTestConfig.cmake +++ b/buildtools/Cmake/CTestConfig.cmake @@ -51,7 +51,6 @@ if(enable_coverage) "/tools/" "/buildtools/" "/include/" - "/testsuite/" "/teshsuite/" "/src/bindings/" ) diff --git a/buildtools/Cmake/CompleteInFiles.cmake b/buildtools/Cmake/CompleteInFiles.cmake index 9f8c205a6f..9b9df891ae 100644 --- a/buildtools/Cmake/CompleteInFiles.cmake +++ b/buildtools/Cmake/CompleteInFiles.cmake @@ -843,6 +843,7 @@ file(READ ${CMAKE_HOME_DIRECTORY}/src/smpi/smpitools.sh SMPITOOLS_SH) configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/mpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/mpif.h @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/include/smpi/smpif.h.in ${CMAKE_BINARY_DIR}/include/smpi/smpif.h @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/bin/smpicc @ONLY) +configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicxx.in ${CMAKE_BINARY_DIR}/bin/smpicxx @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/bin/smpif2c @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/bin/smpiff @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/bin/smpif90 @ONLY) @@ -864,6 +865,7 @@ set(CMAKE_SMPI_COMMAND "${CMAKE_SMPI_COMMAND}:\${LD_LIBRARY_PATH:+:$LD_LIBRARY_P set(libdir "${CMAKE_BINARY_DIR}/lib") configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc @ONLY) +configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicxx.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicxx @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff @ONLY) configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90 @ONLY) @@ -873,11 +875,13 @@ set(top_builddir ${CMAKE_HOME_DIRECTORY}) if(NOT WIN32) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicc) + execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicxx) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif2c) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif90) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc) + execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicxx) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff) execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90) @@ -899,6 +903,7 @@ set(generated_files_to_clean ${generated_headers} ${generated_headers_to_install} ${CMAKE_BINARY_DIR}/bin/smpicc + ${CMAKE_BINARY_DIR}/bin/smpicxx ${CMAKE_BINARY_DIR}/bin/smpif2c ${CMAKE_BINARY_DIR}/bin/smpiff ${CMAKE_BINARY_DIR}/bin/smpif90 diff --git a/buildtools/Cmake/DefinePackages.cmake b/buildtools/Cmake/DefinePackages.cmake index 160d93e2af..567d46fb1c 100644 --- a/buildtools/Cmake/DefinePackages.cmake +++ b/buildtools/Cmake/DefinePackages.cmake @@ -18,7 +18,6 @@ set(EXTRA_DIST src/include/surf/trace_mgr.h src/include/xbt/win32_ucontext.h src/include/xbt/wine_dbghelp.h - src/include/xbt/xbt_os_time.h src/msg/msg_mailbox.h src/msg/msg_private.h src/portable.h @@ -231,7 +230,6 @@ set(SMPI_SRC src/smpi/smpi_pmpi.c src/smpi/smpi_replay.c src/smpi/smpi_topo.c - src/surf/surf_routing_cluster_fat_tree.cpp ) if(SMPI_F2C) @@ -333,6 +331,7 @@ set(SURF_SRC src/surf/surf_interface.cpp src/surf/surf_routing.cpp src/surf/surf_routing_cluster.cpp + src/surf/surf_routing_cluster_fat_tree.cpp src/surf/surf_routing_cluster_torus.cpp src/surf/surf_routing_dijkstra.cpp src/surf/surf_routing_floyd.cpp @@ -661,6 +660,7 @@ set(headers_to_install include/xbt/sysdep.h include/xbt/virtu.h include/xbt/xbt_os_thread.h + include/xbt/xbt_os_time.h ) set(source_of_generated_headers include/simgrid_config.h.in @@ -902,6 +902,7 @@ set(DOC_IMG set(bin_files ${bin_files} src/smpi/smpicc.in + src/smpi/smpicxx.in src/smpi/smpif2c.in src/smpi/smpiff.in src/smpi/smpif90.in @@ -1011,15 +1012,34 @@ set(TESHSUITE_CMAKEFILES_TXT teshsuite/msg/storage/CMakeLists.txt teshsuite/msg/task_destroy_cancel/CMakeLists.txt teshsuite/msg/trace/CMakeLists.txt - teshsuite/simdag/CMakeLists.txt teshsuite/simdag/availability/CMakeLists.txt + teshsuite/simdag/basic/CMakeLists.txt + teshsuite/simdag/incomplete/CMakeLists.txt teshsuite/simdag/network/CMakeLists.txt teshsuite/simdag/network/mxn/CMakeLists.txt teshsuite/simdag/network/p2p/CMakeLists.txt teshsuite/simdag/partask/CMakeLists.txt teshsuite/simdag/platforms/CMakeLists.txt - teshsuite/simix/CMakeLists.txt + teshsuite/simix/check_defaults/CMakeLists.txt + teshsuite/simix/stack_overflow/CMakeLists.txt teshsuite/smpi/CMakeLists.txt + teshsuite/smpi/allgather/CMakeLists.txt + teshsuite/smpi/allgatherv/CMakeLists.txt + teshsuite/smpi/allreduce/CMakeLists.txt + teshsuite/smpi/alltoall/CMakeLists.txt + teshsuite/smpi/alltoallv/CMakeLists.txt + teshsuite/smpi/barrier/CMakeLists.txt + teshsuite/smpi/bcast/CMakeLists.txt + teshsuite/smpi/compute/CMakeLists.txt + teshsuite/smpi/gather/CMakeLists.txt + teshsuite/smpi/hvector/CMakeLists.txt + teshsuite/smpi/indexed/CMakeLists.txt + teshsuite/smpi/pingpong/CMakeLists.txt + teshsuite/smpi/reduce/CMakeLists.txt + teshsuite/smpi/scatter/CMakeLists.txt + teshsuite/smpi/shared/CMakeLists.txt + teshsuite/smpi/struct/CMakeLists.txt + teshsuite/smpi/vector/CMakeLists.txt teshsuite/smpi/mpich3-test/CMakeLists.txt teshsuite/smpi/mpich3-test/attr/CMakeLists.txt teshsuite/smpi/mpich3-test/coll/CMakeLists.txt @@ -1047,11 +1067,14 @@ set(TESHSUITE_CMAKEFILES_TXT teshsuite/surf/maxmin_bench/CMakeLists.txt teshsuite/surf/surf_usage/CMakeLists.txt teshsuite/surf/trace_usage/CMakeLists.txt - teshsuite/xbt/CMakeLists.txt teshsuite/xbt/graphxml_usage/CMakeLists.txt teshsuite/xbt/heap_bench/CMakeLists.txt + teshsuite/xbt/log_large/CMakeLists.txt teshsuite/xbt/log_usage/CMakeLists.txt + teshsuite/xbt/mmalloc/CMakeLists.txt + teshsuite/xbt/parallel_log/CMakeLists.txt teshsuite/xbt/parmap_bench/CMakeLists.txt + teshsuite/xbt/parmap_test/CMakeLists.txt ) set(TOOLS_CMAKEFILES_TXT @@ -1097,7 +1120,6 @@ set(CMAKE_SOURCE_FILES buildtools/Cmake/Scripts/Makefile.default buildtools/Cmake/Scripts/SimGrid.packproj buildtools/Cmake/Scripts/generate_memcheck_tests.pl - buildtools/Cmake/Scripts/generate_new_tests.pl buildtools/Cmake/Scripts/java_bundle.sh buildtools/Cmake/Scripts/my_valgrind.pl buildtools/Cmake/Scripts/postinstall.sh @@ -1140,6 +1162,7 @@ set(PLATFORMS_EXAMPLES examples/platforms/content/storage_content.txt examples/platforms/content/win_storage_content.txt examples/platforms/data_center.xml + examples/platforms/deployment_remote_io.xml examples/platforms/g5k.xml examples/platforms/generation_scripts/create_hierarchical_clusters.pl examples/platforms/generation_scripts/enhancedDTDwithHierarchicalCluster.pl @@ -1149,6 +1172,7 @@ set(PLATFORMS_EXAMPLES examples/platforms/meta_cluster.xml examples/platforms/multicore_machine.xml examples/platforms/prop.xml + examples/platforms/remote_io.xml examples/platforms/routing_cluster.xml examples/platforms/storage.xml examples/platforms/syscoord/generate_peer_platform.pl diff --git a/buildtools/Cmake/Distrib.cmake b/buildtools/Cmake/Distrib.cmake index 24ea37ddef..597fc9ee8e 100644 --- a/buildtools/Cmake/Distrib.cmake +++ b/buildtools/Cmake/Distrib.cmake @@ -29,6 +29,7 @@ endif() if(enable_smpi) install(PROGRAMS ${CMAKE_BINARY_DIR}/bin/smpicc + ${CMAKE_BINARY_DIR}/bin/smpicxx ${CMAKE_BINARY_DIR}/bin/smpirun DESTINATION $ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/) if(SMPI_F2C) @@ -138,6 +139,7 @@ add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_INSTALL_PREFIX}/lib/lua/5.1/simgrid* COMMAND ${CMAKE_COMMAND} -E echo "uninstall lib ok" COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpicc + COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpicxx COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpif2c COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpiff COMMAND ${CMAKE_COMMAND} -E remove -f ${CMAKE_INSTALL_PREFIX}/bin/smpif90 diff --git a/buildtools/Cmake/MakeExe.cmake b/buildtools/Cmake/MakeExe.cmake index 12e5b5790b..8c3a10751d 100644 --- a/buildtools/Cmake/MakeExe.cmake +++ b/buildtools/Cmake/MakeExe.cmake @@ -93,8 +93,9 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/storage) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/task_destroy_cancel) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/msg/trace) -add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/availability) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/basic) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/incomplete) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/mxn) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/network/p2p) @@ -103,9 +104,27 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simdag/platforms) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/bug-17132) -add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simix) - -add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simix/check_defaults) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/simix/stack_overflow) + +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgather) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allgatherv) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/allreduce) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoall) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/alltoallv) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/barrier) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/bcast) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/compute) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/gather) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hvector) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/indexed) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/pingpong) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/reduce) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/scatter) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/shared) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/struct) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/vector) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/attr) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/mpich3-test/coll) @@ -136,11 +155,14 @@ add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/surf/maxmin_bench) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/surf/surf_usage) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/surf/trace_usage) -add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/graphxml_usage) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/heap_bench) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_large) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/log_usage) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/mmalloc) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parallel_log) add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_bench) +add_subdirectory(${CMAKE_HOME_DIRECTORY}/teshsuite/xbt/parmap_test) add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools) add_subdirectory(${CMAKE_HOME_DIRECTORY}/tools/graphicator) diff --git a/buildtools/Cmake/Scripts/generate_memcheck_tests.pl b/buildtools/Cmake/Scripts/generate_memcheck_tests.pl index d6b1a32a14..fc4fd61816 100755 --- a/buildtools/Cmake/Scripts/generate_memcheck_tests.pl +++ b/buildtools/Cmake/Scripts/generate_memcheck_tests.pl @@ -51,7 +51,7 @@ while ( defined( $line = ) ) { } if ( $line =~ /END TESH TESTS/ ) { $dump = 0; - last; + next; } if ($dump) { $line =~ s/^ //; @@ -107,8 +107,6 @@ while ( defined( $line = ) ) { } my ($count) = 0; - my ($count_first) = 0; - my ($count_second) = 0; open TESH_FILE, $tesh_file or die "Unable to open tesh file: \"$tesh_file\". $!\n"; my ($input) = ""; my ($l); @@ -141,10 +139,10 @@ while ( defined( $line = ) ) { if ( $command =~ /^mkfile\s+(\S+)/) { my $file = $1; # don't ask me to explain why so many backslashes... - $input =~ s/\\/\\\\\\\\\\\\\\\\/g; - $input =~ s/\n/\\\\\\\\n/g; - $input =~ s/"/\\\\\\\\042/g; - $input =~ s/'/\\\\\\\\047/g; + $input =~ s/\\/\\\\\\\\/g; + $input =~ s/\n/\\\\n/g; + $input =~ s/"/\\\\042/g; + $input =~ s/'/\\\\047/g; $input =~ s/%/%%/g; $command = "sh -c \"printf '$input' > $file\""; } @@ -153,11 +151,19 @@ while ( defined( $line = ) ) { print "${indent}ADD_TEST(NAME memcheck-$name_test-$factory-$count\n"; print "${indent} WORKING_DIRECTORY $path\/\n"; print "${indent} COMMAND $command --cfg=contexts/factory:$factory)\n"; + if ($count > 0) { + print "${indent}set_tests_properties(memcheck-$name_test-$factory-$count\n"; + print "${indent} PROPERTIES DEPENDS memcheck-$name_test-$factory-" . ($count - 1) . ")\n"; + } } } else { print "${indent}ADD_TEST(NAME memcheck-$name_test-$count\n"; print "${indent} WORKING_DIRECTORY $path\/\n"; print "${indent} COMMAND $command)\n"; + if ($count > 0) { + print "${indent}set_tests_properties(memcheck-$name_test-$count\n"; + print "${indent} PROPERTIES DEPENDS memcheck-$name_test-" . ($count - 1) . ")\n"; + } } $input = ""; #push @test_list, "memcheck-$name_test-$count"; @@ -169,14 +175,15 @@ while ( defined( $line = ) ) { } close(TESH_FILE); } - elsif ( $line =~ /^\s*set_tests_properties/ ) { - if ( $line =~ /set_tests_properties\(([\S]+)/ ) { + elsif ( $line =~ /^\s*SET_TESTS_PROPERTIES/ ) { + if ( $line =~ /SET_TESTS_PROPERTIES\(([\S]+)/ ) { my ($name_temp) = ($1); $line =~ s/$name_temp/memcheck-$name_temp-0/g; print $line. "\n"; } - } - else { + } elsif ( $line =~ /^(\s*)ADD_TEST\((.*)\)/ ) { + print "$1ADD_TEST(memcheck-$2)\n"; + } else { print $line. "\n"; } } diff --git a/buildtools/Cmake/Scripts/generate_new_tests.pl b/buildtools/Cmake/Scripts/generate_new_tests.pl deleted file mode 100755 index e3c807cd9b..0000000000 --- a/buildtools/Cmake/Scripts/generate_new_tests.pl +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/perl -w - -# Copyright (c) 2012, 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. - -use strict; - -# input file = AddTest.txt - -if($#ARGV!=0) { - die "Usage: generate_new_tests.pl AddTests.cmake\n"; -} - -open MAKETEST, $ARGV[0] or die "Unable to open $ARGV[1]. $!\n"; - -my($line); -my($path); -my($dump)=0; -my($setenv); -my($tesh_file); -my($config_var); -my($name_test); - -while(defined($line=)) -{ - chomp $line; - if($line =~ /BEGIN CONTEXTS FACTORY/) { - print "$line\n"; - $dump = 1; - next; - } - if($line =~ /HAVE_TRACING/) { - print "$line\n"; - $dump = !$dump; - next; - } - if($line =~ /HAVE_LUA/) { - print "$line\n"; - $dump = !$dump; - next; - } - if($line =~ /HAVE_RUBY/) { - print "$line\n"; - $dump = !$dump; - next; - } - if($dump) - { - if($line =~ /ADD_TEST.*\/bin\/tesh/) - { - $setenv = ""; - $config_var = ""; - $path = ""; - $tesh_file = ""; - $name_test = ""; - - if($line =~ /ADD_TEST\(([\S]+)/) - { - $name_test =($1); - } - if($line =~ /--cfg\s*\t*(\S*)/) - { - $config_var = "--cfg $1 $config_var"; - } - if($line =~ /--cd\s*(\S+)/) - { - $path="--cd $1"; - } - if($line =~ /--setenv\s*\t*(\S*)\=(\S*)/) - { - $setenv = "--setenv $1=$2 $setenv"; - } - if($line =~ /([\S]+)[)]$/) - { - $tesh_file =($1); - } - - print "ADD_TEST($name_test-raw \$\{CMAKE_BINARY_DIR\}/bin/tesh --cfg contexts/factory:raw $config_var $setenv $path $tesh_file)\n"; - print "ADD_TEST($name_test-thread \$\{CMAKE_BINARY_DIR\}/bin/tesh --cfg contexts/factory:thread $config_var $setenv $path $tesh_file)\n"; - print "ADD_TEST($name_test-ucontext \$\{CMAKE_BINARY_DIR\}/bin/tesh --cfg contexts/factory:ucontext $config_var $setenv $path $tesh_file)\n"; - } - elsif($line =~ /set_tests_properties\(([\S]+)/) - { - my($name_temp)=($1); - $line =~ s/$name_temp/$name_temp-raw $name_temp-thread $name_temp-ucontext/g; - print $line."\n"; - } - else - { - print "$line\n"; - } - - } - else - { - print "$line\n"; - } -} -close(MAKETEST); diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index 9976bac125..302af7916f 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -782,8 +782,7 @@ EXCLUDE_SYMBOLS = EXAMPLE_PATH = ./ \ @top_srcdir@/src/surf/ \ @top_srcdir@/src/xbt/ \ - @top_srcdir@/examples \ - @top_srcdir@/testsuite + @top_srcdir@/examples # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp diff --git a/doc/doxygen/inside_extending.doc b/doc/doxygen/inside_extending.doc index cf71bb1066..bf38712a8e 100644 --- a/doc/doxygen/inside_extending.doc +++ b/doc/doxygen/inside_extending.doc @@ -1,5 +1,5 @@ -/*! -\page inside_extending Extending SimGrid +/*! +\page inside_extending Extending SimGrid We start to put TAGS in simgrid source code for having tutorials to see where is the important parts ans steps to create: \li \ref simgrid_dev_guide_api @@ -26,20 +26,117 @@ user@caraja:~/workspace/simgrid/src$ cg "TUTORIAL: New API" \endverbatim \section simgrid_dev_guide_model How to add a new model in surf? +The figure below show the architecture of the SURF layer. This layer is composed +of different kind of models representing the differents systems we want to +modelize (i.e.cpu, network, storage, workstation, virtual machine). + A model in simgrid is composed of three classes: Model, Resource and Action -(surf_interface.hpp). +(surf_interface.hpp). + +\image html surf++.png +\image latex surf++.pdf "surf++" width=\textwidth Actually there are five kind of models: CpuModel, NetworkModel, WorkstationModel, WorkstationVMModel and StorageModel. For each kind of model, there is an interface (e.g.: cpu_interface.hpp) and some implementations (e.g.: cpu_cas01.hpp, -cpu_ti.hpp). +cpu_ti.hpp). + +init function: +void surf_cpu_model_init_Cas01() +s_surf_model_description_t surf_network_model_description[] = { + +\subsection simgrid_dev_guide_model_implem How to add a new model implementation in surf? If you want to create a new implementation of a kind of model you must extend -the classes of the corresponding interface. +the classes of the corresponding interfaces. + +For instance, if you want to add a new cup model called `Plop`, create two files +cpu_plop.hpp and cpu_plop_cpp which contains classes CpuPlopModel, CpuPlop and +CpuPlopAction implementating respectively the interfaces CpuModel, Cpu and +CpuAction. You also need to define a initializing function like this: + +~~~~ +void surf_cpu_model_init_plop() +{ + xbt_assert(!surf_cpu_model_pm); + + surf_cpu_model_pm = new CpuPlopModel(); + + sg_platf_host_add_cb(cpu_parse_init); + sg_platf_postparse_add_cb(cpu_add_traces); + + xbt_dynar_push(model_list, &surf_cpu_model_pm); +} +~~~~ + +and add an entry in the corresponding array in surf_interface.cpp + +~~~~ +s_surf_model_description_t surf_cpu_model_description[] = { + {"Cas01", + "Simplistic CPU model (time=size/power).", + surf_cpu_model_init_Cas01}, + {"Plop", + "The new plop CPU model.", + surf_cpu_model_init_plop}, + {NULL, NULL, NULL} /* this array must be NULL terminated */ +}; +~~~~ + +\subsection simgrid_dev_guide_model_kind How to add a new kind of model in surf? If you want to create a new kind of model, you must create a new interface - where you extend the classes Model, Resource and Action, and then create an - implementation of this interface. +where you extend the classes Model, Resource and Action, and then create an +implementation of this interface. + + +\section simgrid_dev_guide_surf_callbacks How to use surf callbacks? + +Adding features to surf could also be handle by using surf callbacks (instead +of adding new implementation model). The list of available callbacks is +accessible there \ref SURF_callbacks. An example of using surf callbacks is the +energy plugin. If you want to add a plugin you need to define callback function +and to connect them to callbacks handler in an initialization function. + +~~~~ +static void MyNetworkLinkCreatedCallback(NetworkLinkPtr cpu){ + // your code +} + +static void MyNetworkLinkDestructedCallback(NetworkLinkPtr cpu){ + // your code +} + +static void MyNetworkCommunicationCallback(NetworkActionPtr cpu, + RoutingEdgePtr src, + RoutingEdgePtr dst){ + // your code +} + +void sg_my_network_plugin_init() { + surf_callback_connect(networkLinkCreatedCallbacks, + MyNetworkLinkCreatedCallback); + surf_callback_connect(networkLinkDestructedCallbacks, + MyNetworkLinkDestructedCallback); + surf_callback_connect(networkCommunicationCallbacks, + MyNetworkCommunicationCallback); +} +~~~~ + +Then you need to add an entry in surf_interface.cpp refering to your +initialization function. + +~~~~ +s_surf_model_description_t surf_plugin_description[] = { + {"Energy", + "Cpu energy consumption.", + sg_energy_plugin_init}, + {"MyNetworkPlugin", + "My network plugin.", + sg_my_network_plugin_init}, + {NULL, NULL, NULL} /* this array must be NULL terminated */ +}; +~~~~ \section simgrid_dev_guide_simcall How to add a new simcall? A simcall is used to go from user mode to kernel mode. The workflow of diff --git a/doc/doxygen/options.doc b/doc/doxygen/options.doc index b70680d11c..0b18f833b6 100644 --- a/doc/doxygen/options.doc +++ b/doc/doxygen/options.doc @@ -350,6 +350,20 @@ Of course, specifying a reduction technique enables the model-checking so that you don't have to give --cfg=model-check:1 in addition. +\subsection options_mc_perf Performance considerations for the model checker + +The size of the stacks can have a huge impact on the memory +consumption when using model-checking. Currently each snapshot, will +save a copy of the whole stack and not only of the part which is +really meaningful: you should expect the contribution of the memory +consumption of the snapshots to be \f$ \mbox{number of processes} +\times \mbox{stack size} \times \mbox{number of states} \f$. + +However, when compiled against the model checker, the stacks are not +protected with guards: if the stack size is too small for your +application, the stack will silently overflow on other parts of the +memory. + \section options_virt Configuring the User Process Virtualization \subsection options_virt_factory Selecting the virtualization factory @@ -389,13 +403,26 @@ the error messages that you get when the stack size is too small are rather disturbing: this leads to stack overflow (overwriting other stacks), leading to segfaults with corrupted stack traces. -If you want to push the scalability limits of your code, you really +If you want to push the scalability limits of your code, you might want to reduce the \b contexts/stack_size item. Its default value is 8192 (in KiB), while our Chord simulation works with stacks as small as 16 KiB, for example. For the thread factory, the default value is the one of the system, if it is too large/small, it has to be set with this parameter. +The operating system should only allocate memory for the pages of the +stack which are actually used and you might not need to use this in +most cases. However, this setting is very important when using the +model checker (see \ref options_mc_perf). + +In some cases, no stack guard page is used and the stack will silently +overflow on other parts of the memory if the stack size is too small +for your application. This happens : + +- on Windows systems; +- when the model checker is enabled; +- when stack guard pages are explicitely disabled (see \ref options_perf_guard_size). + \subsection options_virt_parallel Running user code in parallel Parallel execution of the user code is only considered stable in @@ -518,6 +545,21 @@ second) under which the execution chunks are not reported to the simulation kernel (default value: 1e-6). Please note that in some circonstances, this optimization can hinder the simulation accuracy. + In some cases, however, one may wish to disable simulation of +application computation. This is the case when SMPI is used not to +simulate an MPI applications, but instead an MPI code that performs +"live replay" of another MPI app (e.g., ScalaTrace's replay tool, +various on-line simulators that run an app at scale). In this case the +computation of the replay/simulation logic should not be simulated by +SMPI. Instead, the replay tool or on-line simulator will issue +"computation events", which correspond to the actual MPI simulation +being replayed/simulated. At the moment, these computation events can +be simulated using SMPI by calling internal smpi_execute*() functions. + +To disable the benchmarking/simulation of computation in the simulated +application, the variable \b +smpi/simulation_computation should be set to no + \subsection options_smpi_timing Reporting simulation time Most of the time, you run MPI code through SMPI to compute the time it @@ -529,9 +571,38 @@ to 1, \c smpirun will display this information when the simulation ends. \verbat Simulation time: 1e3 seconds. \endverbatim -\subsection options_model_smpi_detached Simulating MPI detached send +\subsection options_smpi_global Automatic privatization of global variables + +MPI executables are meant to be executed in separated processes, but SMPI is +executed in only one process. Global variables from executables will be placed +in the same memory zone and shared between processes, causing hard to find bugs. +To avoid this, several options are possible : + - Manual edition of the code, for example to add __thread keyword before data + declaration, which allows the resulting code to work with SMPI, but only + if the thread factory (see \ref options_virt_factory) is used, as global + variables are then placed in the TLS (thread local storage) segment. + - Source-to-source transformation, to add a level of indirection + to the global variables. SMPI does this for F77 codes compiled with smpiff, + and used to provide coccinelle scripts for C codes, which are not functional anymore. + - Compilation pass, to have the compiler automatically put the data in + an adapted zone. + - Runtime automatic switching of the data segments. SMPI stores a copy of + each global data segment for each process, and at each context switch replaces + the actual data with its copy from the right process. This mechanism uses mmap, + and is for now limited to systems supporting this functionnality (all Linux + and some BSD should be compatible). + Another limitation is that SMPI only accounts for global variables defined in + the executable. If the processes use external global variables from dynamic + libraries, they won't be switched correctly. To avoid this, using static + linking is advised (but not with the simgrid library, to avoid replicating + its own global variables). + + To use this runtime automatic switching, the variable \b smpi/privatize_global_variables + should be set to yes -(this configuration item is experimental and may change or disapear) + + +\subsection options_model_smpi_detached Simulating MPI detached send This threshold specifies the size in bytes under which the send will return immediately. This is different from the threshold detailed in \ref options_model_network_asyncsend @@ -547,6 +618,7 @@ simulate the behavior of most of the existing MPI libraries. The \b smpi/coll_se uses naive version of collective operations). Each collective operation can be manually selected with a \b smpi/collective_name:algo_name. Available algorithms are listed in \ref SMPI_collective_algorithms . + \section options_generic Configuring other aspects of SimGrid \subsection options_generic_path XML file inclusion path @@ -571,6 +643,23 @@ when \b verbose-exit is set to 0 (it is to 1 by default). It can be done by using XBT. Go to \ref XBT_log for more details. +\section options_perf Performance optimizations + +\subsection options_perf_context Context factory + +In order to achieve higher performance, you might want to use the raw +context factory which avoids any system call when switching between +tasks. If it is not possible you might use ucontext instead. + +\subsection options_perf_guard_size Disabling stack guard pages + +A stack guard page is usually used which prevents the stack from +overflowing on other parts of the memory. However this might have a +performance impact if a huge number of processes is created. The +option \b contexts:guard_size is the number of stack guard pages +used. By setting it to 0, no guard pages will be used: in this case, +you should avoid using small stacks (\b stack_size) as the stack will +silently overflow on other parts of the memory. \section options_index Index of all existing configuration items @@ -579,6 +668,7 @@ It can be done by using XBT. Go to \ref XBT_log for more details. - \c contexts/parallel_threshold: \ref options_virt_parallel - \c contexts/stack_size: \ref options_virt_stacksize - \c contexts/synchro: \ref options_virt_parallel +- \c contexts/guard_size: \ref options_virt_parallel - \c cpu/maxmin_selective_update: \ref options_model_optim - \c cpu/model: \ref options_model_select @@ -609,12 +699,14 @@ It can be done by using XBT. Go to \ref XBT_log for more details. - \c surf/nthreads: \ref options_model_nthreads +- \c smpi/simulation_computation: \ref options_smpi_bench - \c smpi/running_power: \ref options_smpi_bench - \c smpi/display_timing: \ref options_smpi_timing - \c smpi/cpu_threshold: \ref options_smpi_bench - \c smpi/async_small_thres: \ref options_model_network_asyncsend - \c smpi/send_is_detached: \ref options_model_smpi_detached - \c smpi/coll_selector: \ref options_model_smpi_collectives +- \c smpi/privatize_global_variables: \ref options_smpi_global - \c path: \ref options_generic_path - \c verbose-exit: \ref options_generic_exit diff --git a/examples/java/surfCpuModel/CpuConstantModel.java b/examples/java/surfCpuModel/CpuConstantModel.java index 7f7d418e75..fb2925a10c 100644 --- a/examples/java/surfCpuModel/CpuConstantModel.java +++ b/examples/java/surfCpuModel/CpuConstantModel.java @@ -14,7 +14,7 @@ public class CpuConstantModel extends CpuModel { Msg.info("Initialize Cpu Constant Model"); } - public Cpu createResource(String name, double[] power_peak, int pstate, double power_scale, TmgrTrace power_trace, int core, ResourceState state_initial, TmgrTrace state_trace, XbtDict cpu_properties) { + public Cpu createCpu(String name, double[] power_peak, int pstate, double power_scale, TmgrTrace power_trace, int core, ResourceState state_initial, TmgrTrace state_trace, XbtDict cpu_properties) { Msg.info("New Cpu("+name+", "+power_peak[pstate]+", "+power_scale+")"); CpuConstant res = new CpuConstant(this, name, cpu_properties, core, power_peak[pstate], power_scale); diff --git a/examples/java/tracing/CMakeLists.txt b/examples/java/tracing/CMakeLists.txt index 562f1614dd..26d6584048 100644 --- a/examples/java/tracing/CMakeLists.txt +++ b/examples/java/tracing/CMakeLists.txt @@ -1,24 +1,26 @@ cmake_minimum_required(VERSION 2.6) -set(example java_tracing) -set(sources - ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java - ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java - ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java - ${CMAKE_CURRENT_SOURCE_DIR}/TracingTest.java - ) +if(HAVE_TRACING) + set(example java_tracing) + set(sources + ${CMAKE_CURRENT_SOURCE_DIR}/PingPongTask.java + ${CMAKE_CURRENT_SOURCE_DIR}/Receiver.java + ${CMAKE_CURRENT_SOURCE_DIR}/Sender.java + ${CMAKE_CURRENT_SOURCE_DIR}/TracingTest.java + ) -if(enable_java) - add_custom_command( - COMMENT "Building ${example}..." - OUTPUT ${example}_compiled - DEPENDS ${sources} simgrid-java_jar ${SIMGRID_JAR} - COMMAND ${JAVA_COMPILE} -classpath ${SIMGRID_JAR} - -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} - COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled - COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled - ) - add_custom_target(${example} ALL DEPENDS ${example}_compiled) + if(enable_java) + add_custom_command( + COMMENT "Building ${example}..." + OUTPUT ${example}_compiled + DEPENDS ${sources} simgrid-java_jar ${SIMGRID_JAR} + COMMAND ${JAVA_COMPILE} -classpath ${SIMGRID_JAR} + -d ${CMAKE_CURRENT_BINARY_DIR}/.. ${sources} + COMMAND ${CMAKE_COMMAND} -E remove ${example}_compiled + COMMAND ${CMAKE_COMMAND} -E touch ${example}_compiled + ) + add_custom_target(${example} ALL DEPENDS ${example}_compiled) + endif() endif() set(tesh_files diff --git a/examples/msg/io/CMakeLists.txt b/examples/msg/io/CMakeLists.txt index 13a39a6369..42c3f2bf3f 100644 --- a/examples/msg/io/CMakeLists.txt +++ b/examples/msg/io/CMakeLists.txt @@ -5,22 +5,25 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") add_executable(file file.c) add_executable(file_unlink file_unlink.c) add_executable(storage storage.c) +add_executable(remote remote.c) ### Add definitions for compile if(NOT WIN32) target_link_libraries(file simgrid pthread) target_link_libraries(file_unlink simgrid pthread) target_link_libraries(storage simgrid pthread) + target_link_libraries(remote simgrid pthread) else() target_link_libraries(file simgrid) target_link_libraries(file_unlink simgrid) - target_link_libraries(storage simgrid) + target_link_libraries(remote simgrid) endif() set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/io.tesh ${CMAKE_CURRENT_SOURCE_DIR}/storage.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/remote.tesh PARENT_SCOPE ) set(xml_files @@ -32,6 +35,7 @@ set(examples_src ${CMAKE_CURRENT_SOURCE_DIR}/file.c ${CMAKE_CURRENT_SOURCE_DIR}/file_unlink.c ${CMAKE_CURRENT_SOURCE_DIR}/storage.c + ${CMAKE_CURRENT_SOURCE_DIR}/remote.c PARENT_SCOPE ) set(bin_files diff --git a/examples/msg/io/remote.c b/examples/msg/io/remote.c new file mode 100644 index 0000000000..3a3efbcbed --- /dev/null +++ b/examples/msg/io/remote.c @@ -0,0 +1,139 @@ +/* Copyright (c) 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. */ + +/** @addtogroup MSG_examples + * + * @subsection MSG_ex_resources Other resource kinds + * + * This section contains some sparse examples of how to use the other + * kind of resources, such as disk or GPU. These resources are quite + * experimental for now, but here we go anyway. + * + * - io/remote.c Example of delegated I/O operations + */ + +#include +#include +#include "msg/msg.h" +#include "surf/surf_private.h" + +int host(int argc, char *argv[]); + +XBT_LOG_NEW_DEFAULT_CATEGORY(remote_io, + "Messages specific for this io example"); + + +int host(int argc, char *argv[]){ + msg_file_t file = NULL; + const char* filename; +// msg_storage_t st; + sg_size_t read;//,write; + + file = MSG_file_open(argv[1], NULL); + filename = MSG_file_get_name(file); + XBT_INFO("Opened file '%s'",filename); + MSG_file_dump(file); + + // st = MSG_storage_get_by_name(st_name); + + XBT_INFO("Try to read %llu from '%s'",MSG_file_get_size(file),filename); + read = MSG_file_read(file, MSG_file_get_size(file)); + XBT_INFO("Have read %llu from '%s'",read,filename); + + MSG_file_close(file); + return 0; +} + +//int host(int argc, char *argv[]) +//{ +// msg_file_t file = NULL; +// sg_size_t read,write; +// msg_storage_t st; +// const char* st_name; +// +// if(!strcmp(MSG_process_get_name(MSG_process_self()),"0")){ +// file = MSG_file_open(FILENAME1, NULL); +// MSG_file_dump(file); +// st_name = "Disk4"; +// } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"1")) { +// file = MSG_file_open(FILENAME2, NULL); +// st_name = "Disk2"; +// } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"2")){ +// file = MSG_file_open(FILENAME3, NULL); +// st_name = "Disk3"; +// } else if(!strcmp(MSG_process_get_name(MSG_process_self()),"3")){ +// file = MSG_file_open(FILENAME4, NULL); +// st_name = "Disk1"; +// } +// else xbt_die("FILENAME NOT DEFINED %s",MSG_process_get_name(MSG_process_self())); +// +// const char* filename = MSG_file_get_name(file); +// XBT_INFO("\tOpen file '%s'",filename); +// st = MSG_storage_get_by_name(st_name); +// +// XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu", +// filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st)); +// +// /* Try to read for 10MB */ +// read = MSG_file_read(file, 10000000); +// XBT_INFO("\tHave read %llu from '%s'",read,filename); +// +// /* Write 100KB in file from the current position, i.e, end of file or 10MB */ +// write = MSG_file_write(file, 100000); +// XBT_INFO("\tHave written %llu in '%s'. Size now is: %llu",write,filename, +// MSG_file_get_size(file)); +// +// +// XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu", +// filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st)); +// +// /* rewind to the beginning of the file */ +// XBT_INFO("\tComing back to the beginning of the stream for file '%s'", +// filename); +// MSG_file_seek(file, 0, SEEK_SET); +// +// /* Try to read 110KB */ +// read = MSG_file_read(file, 110000); +// XBT_INFO("\tHave read %llu from '%s' (of size %llu)",read,filename, +// MSG_file_get_size(file)); +// +// /* rewind once again to the beginning of the file */ +// XBT_INFO("\tComing back to the beginning of the stream for file '%s'", +// filename); +// MSG_file_seek(file, 0, SEEK_SET); +// +// /* Write 110KB in file from the current position, i.e, end of file or 10MB */ +// write = MSG_file_write(file, 110000); +// XBT_INFO("\tHave written %llu in '%s'. Size now is: %llu", write,filename, +// MSG_file_get_size(file)); +// +// XBT_INFO("\tCapacity of the storage element '%s' is stored on: %llu / %llu", +// filename, MSG_storage_get_used_size(st), MSG_storage_get_size(st)); +// +// XBT_INFO("\tClose file '%s'",filename); +// MSG_file_close(file); +// +// +// return 0; +//} + +int main(int argc, char **argv) +{ + int res; + + MSG_init(&argc, argv); + MSG_create_environment(argv[1]); + MSG_function_register("host", host); + MSG_launch_application(argv[2]); + + res = MSG_main(); + + XBT_INFO("Simulation time %g", MSG_get_clock()); + if (res == MSG_OK) + return 0; + else + return 1; +} diff --git a/examples/msg/io/remote.tesh b/examples/msg/io/remote.tesh new file mode 100644 index 0000000000..73eacef8ba --- /dev/null +++ b/examples/msg/io/remote.tesh @@ -0,0 +1,4 @@ +#! ./tesh + +$ ${bindir:=.}/io/remote_io ${srcdir:=.}/examples/platforms/remote_io.xml \ +${srcdir:=.}/examples/platforms/deployment_remote_io.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" diff --git a/examples/platforms/deployment_remote_io.xml b/examples/platforms/deployment_remote_io.xml new file mode 100644 index 0000000000..d957aee6af --- /dev/null +++ b/examples/platforms/deployment_remote_io.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/examples/platforms/remote_io.xml b/examples/platforms/remote_io.xml new file mode 100644 index 0000000000..d6a2a764ba --- /dev/null +++ b/examples/platforms/remote_io.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/simdag/CMakeLists.txt b/examples/simdag/CMakeLists.txt index 6c679ab71c..7e89291d43 100644 --- a/examples/simdag/CMakeLists.txt +++ b/examples/simdag/CMakeLists.txt @@ -70,6 +70,7 @@ set(tesh_files ${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_typed_tasks.tesh ${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_avail.tesh ${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_fail.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_fail_notrace.tesh PARENT_SCOPE ) set(xml_files diff --git a/examples/simdag/dax/CMakeLists.txt b/examples/simdag/dax/CMakeLists.txt index 669dd41503..a824e281f7 100644 --- a/examples/simdag/dax/CMakeLists.txt +++ b/examples/simdag/dax/CMakeLists.txt @@ -15,6 +15,7 @@ set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/simple_dax_with_cycle.tesh ${CMAKE_CURRENT_SOURCE_DIR}/smalldax.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/smalldax_notrace.tesh PARENT_SCOPE ) set(xml_files diff --git a/examples/simdag/dax/smalldax_notrace.tesh b/examples/simdag/dax/smalldax_notrace.tesh new file mode 100644 index 0000000000..0021c0cc26 --- /dev/null +++ b/examples/simdag/dax/smalldax_notrace.tesh @@ -0,0 +1,123 @@ +#! ./tesh +p Test the DAX loader on a small DAX instance + +$ $SG_TEST_EXENV ${bindir:=.}/dax_test --log=no_loc ../2clusters.xml ./smalldax.xml +> [0.000000] [surf_workstation/INFO] surf_workstation_model_init_ptask_L07 +> [0.000000] [sd_daxparse/WARNING] Ignoring file o1 size redefinition from 1000000 to 304 +> [0.000000] [sd_daxparse/WARNING] Ignoring file o2 size redefinition from 1000000 to 304 +> [0.000000] [test/INFO] ------------------- Display all tasks of the loaded DAG --------------------------- +> [0.000000] [sd_task/INFO] Displaying task root +> [0.000000] [sd_task/INFO] - state: schedulable not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 0 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 0 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] root_i2_2@task2 +> [0.000000] [sd_task/INFO] root_i1_1@task1 +> [0.000000] [sd_task/INFO] Displaying task 1@task1 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 42000000000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root_i1_1@task1 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 3@task1 +> [0.000000] [sd_task/INFO] 1@task1_o1_3@task1 +> [0.000000] [sd_task/INFO] Displaying task 2@task2 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 42000000000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root_i2_2@task2 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 3@task1 +> [0.000000] [sd_task/INFO] 2@task2_o2_3@task1 +> [0.000000] [sd_task/INFO] Displaying task 3@task1 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 42000000000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 4 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 1@task1 +> [0.000000] [sd_task/INFO] 2@task2 +> [0.000000] [sd_task/INFO] 1@task1_o1_3@task1 +> [0.000000] [sd_task/INFO] 2@task2_o2_3@task1 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 3@task1_o3_end +> [0.000000] [sd_task/INFO] Displaying task root_i2_2@task2 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 1000000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 2@task2 +> [0.000000] [sd_task/INFO] Displaying task 1@task1_o1_3@task1 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 1000000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 1@task1 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 3@task1 +> [0.000000] [sd_task/INFO] Displaying task 2@task2_o2_3@task1 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 1000000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 2@task2 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 3@task1 +> [0.000000] [sd_task/INFO] Displaying task 3@task1_o3_end +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 4167312 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 3@task1 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] end +> [0.000000] [sd_task/INFO] Displaying task root_i1_1@task1 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 1000000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 1@task1 +> [0.000000] [sd_task/INFO] Displaying task end +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 0 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 3@task1_o3_end +> [0.000000] [test/INFO] ------------------- Schedule tasks --------------------------- +> [0.000000] [test/INFO] ------------------- Run the schedule --------------------------- +> [84.066238] [test/INFO] ------------------- Produce the trace file--------------------------- +> [84.066238] [test/INFO] Producing the trace of the run into ./smalldax.trace + +$ cat ./smalldax.trace +> [0.000000] C1-00 compute 0.000000 # root +> [0.016300] C1-01 compute 42000000000.000000 # 1@task1 +> [0.016300] C1-02 compute 42000000000.000000 # 2@task2 +> [42.032600] C1-03 compute 42000000000.000000 # 3@task1 +> [0.000000] C1-00 send C1-02 1000000.000000 # root_i2_2@task2 +> [0.016300] C1-02 recv C1-00 1000000.000000 # root_i2_2@task2 +> [42.016300] C1-01 send C1-03 1000000.000000 # 1@task1_o1_3@task1 +> [42.032600] C1-03 recv C1-01 1000000.000000 # 1@task1_o1_3@task1 +> [42.016300] C1-02 send C1-03 1000000.000000 # 2@task2_o2_3@task1 +> [42.032600] C1-03 recv C1-02 1000000.000000 # 2@task2_o2_3@task1 +> [84.032600] C1-03 send C1-00 4167312.000000 # 3@task1_o3_end +> [84.066238] C1-00 recv C1-03 4167312.000000 # 3@task1_o3_end +> [0.000000] C1-00 send C1-01 1000000.000000 # root_i1_1@task1 +> [0.016300] C1-01 recv C1-00 1000000.000000 # root_i1_1@task1 +> [84.066238] C1-00 compute 0.000000 # end + +$ cmake -E remove -f ./dax.dot ./smalldax.trace diff --git a/examples/simdag/dot/CMakeLists.txt b/examples/simdag/dot/CMakeLists.txt index d541688b01..302bdd625f 100644 --- a/examples/simdag/dot/CMakeLists.txt +++ b/examples/simdag/dot/CMakeLists.txt @@ -34,6 +34,7 @@ endif() set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_dotload.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/test_simdag_dotload_notrace.tesh PARENT_SCOPE ) set(xml_files diff --git a/examples/simdag/dot/test_simdag_dotload_notrace.tesh b/examples/simdag/dot/test_simdag_dotload_notrace.tesh new file mode 100644 index 0000000000..d764073ece --- /dev/null +++ b/examples/simdag/dot/test_simdag_dotload_notrace.tesh @@ -0,0 +1,466 @@ +#! ./tesh +p Test the loader of DAG written in the DOT format + +$ $SG_TEST_EXENV ./dot_test --log=no_loc ${srcdir:=.}/../2clusters.xml ${srcdir:=.}/dag.dot +> [0.000000] [surf_workstation/INFO] surf_workstation_model_init_ptask_L07 +> [0.000000] [test/INFO] ------------------- Display all tasks of the loaded DAG --------------------------- +> [0.000000] [sd_task/INFO] Displaying task root +> [0.000000] [sd_task/INFO] - state: schedulable not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 0 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 0 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] root->5 +> [0.000000] [sd_task/INFO] 0 +> [0.000000] [sd_task/INFO] Displaying task 0 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000129 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 0->1 +> [0.000000] [sd_task/INFO] Displaying task 1 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000131 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 0->1 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 1->2 +> [0.000000] [sd_task/INFO] Displaying task 2 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000121 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 1->2 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 2->3 +> [0.000000] [sd_task/INFO] Displaying task 3 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000231 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 2->3 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 4 +> [0.000000] [sd_task/INFO] Displaying task 4 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000005 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 3 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 4->5 +> [0.000000] [sd_task/INFO] Displaying task 5 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000046 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 4->5 +> [0.000000] [sd_task/INFO] root->5 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 6 +> [0.000000] [sd_task/INFO] Displaying task 6 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000092 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 5 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 6->7 +> [0.000000] [sd_task/INFO] Displaying task 7 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000041 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 6->7 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 7->8 +> [0.000000] [sd_task/INFO] 7->end +> [0.000000] [sd_task/INFO] Displaying task 8 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000250 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 7->8 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 9 +> [0.000000] [sd_task/INFO] Displaying task 9 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000079 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 8 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] end +> [0.000000] [sd_task/INFO] Displaying task 0->1 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10001 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 0 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 1 +> [0.000000] [sd_task/INFO] Displaying task 1->2 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10004 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 1 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 2 +> [0.000000] [sd_task/INFO] Displaying task 2->3 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10002 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 2 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 3 +> [0.000000] [sd_task/INFO] Displaying task 4->5 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10029 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 4 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 5 +> [0.000000] [sd_task/INFO] Displaying task 6->7 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10005 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 6 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 7 +> [0.000000] [sd_task/INFO] Displaying task 7->8 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 7 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 8 +> [0.000000] [sd_task/INFO] Displaying task 7->end +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10014000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 7 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] end +> [0.000000] [sd_task/INFO] Displaying task root->5 +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10014000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 5 +> [0.000000] [sd_task/INFO] Displaying task end +> [0.000000] [sd_task/INFO] - state: not scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000129 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 7->end +> [0.000000] [sd_task/INFO] 9 +> [0.000000] [test/INFO] ------------------- Schedule tasks --------------------------- +> [0.000000] [test/INFO] ------------------- Run the schedule --------------------------- +> [62.002281] [test/INFO] ------------------- Produce the trace file--------------------------- +> [62.002281] [test/INFO] Producing the trace of the run into dag.trace + +$ cat ${srcdir:=.}/dag.trace +> [0.000000->0.000000] C2-05 compute 0.000000 flops # root +> [0.000000->2.000000] C2-06 compute 10000000129.452715 flops # 0 +> [2.000380->4.000380] C2-07 compute 10000000131.133657 flops # 1 +> [4.000760->6.000760] C2-08 compute 10000000121.124870 flops # 2 +> [6.001140->8.001140] C2-09 compute 10000000230.608025 flops # 3 +> [8.001140->18.001140] C1-00 compute 10000000004.994019 flops # 4 +> [18.001520->28.001520] C1-01 compute 10000000046.016401 flops # 5 +> [28.001520->38.001521] C1-02 compute 10000000091.598791 flops # 6 +> [38.001901->48.001901] C1-03 compute 10000000040.679438 flops # 7 +> [48.002281->58.002281] C1-04 compute 10000000250.490017 flops # 8 +> [58.002281->60.002281] C2-05 compute 10000000079.267649 flops # 9 +> [2.000000 -> 2.000380] C2-06 -> C2-07 transfer of 10001 bytes # 0->1 +> [4.000380 -> 4.000760] C2-07 -> C2-08 transfer of 10004 bytes # 1->2 +> [6.000760 -> 6.001140] C2-08 -> C2-09 transfer of 10002 bytes # 2->3 +> [18.001140 -> 18.001520] C1-00 -> C1-01 transfer of 10029 bytes # 4->5 +> [38.001521 -> 38.001901] C1-02 -> C1-03 transfer of 10005 bytes # 6->7 +> [48.001901 -> 48.002281] C1-03 -> C1-04 transfer of 10000 bytes # 7->8 +> [48.001901 -> 48.294118] C1-03 -> C2-05 transfer of 10014000 bytes # 7->end +> [0.000000 -> 0.292217] C2-05 -> C1-01 transfer of 10014000 bytes # root->5 +> [60.002281->62.002281] C2-05 compute 10000000129.452715 flops # end + +$ rm -f dag.trace + +! expect return 2 +$ $SG_TEST_EXENV ./simulate_dot --log=no_loc "--log=sd_dotparse.thres:verbose" ${srcdir:=.}/../2clusters.xml ${srcdir:=.}/dag_with_bad_schedule.dot +> [0.000000] [surf_workstation/INFO] surf_workstation_model_init_ptask_L07 +> [0.000000] [sd_dotparse/VERBOSE] The schedule is ignored, the task end is not correctly scheduled +> [0.000000] [sd_dotparse/VERBOSE] The schedule is ignored, the task 1 is not correctly scheduled +> [0.000000] [sd_dotparse/VERBOSE] The task 0 starts on the computer 1 at the position : 1 like the task 2 +> [0.000000] [sd_dotparse/VERBOSE] The schedule is ignored, the task 3 is not correctly scheduled +> [0.000000] [sd_dotparse/VERBOSE] The schedule is ignored, the task root is not correctly scheduled +> [0.000000] [sd_dotparse/WARNING] The scheduling is ignored +> [0.000000] [test/CRITICAL] The dot file with the provided scheduling is wrong, more information with the option : --log=sd_dotparse.thres:verbose + +$ $SG_TEST_EXENV ./simulate_dot --log=no_loc ${srcdir:=.}/../2clusters.xml ${srcdir:=.}/dag_with_good_schedule.dot +> [0.000000] [surf_workstation/INFO] surf_workstation_model_init_ptask_L07 +> [0.000000] [test/INFO] ------------------- Display all tasks of the loaded DAG --------------------------- +> [0.000000] [sd_task/INFO] Displaying task root +> [0.000000] [sd_task/INFO] - state: runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 0 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 0 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] root->5 +> [0.000000] [sd_task/INFO] 0 +> [0.000000] [sd_task/INFO] 1 +> [0.000000] [sd_task/INFO] Displaying task 0 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000129 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 0->2 +> [0.000000] [sd_task/INFO] 2 +> [0.000000] [sd_task/INFO] Displaying task 1 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000131 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 1->2 +> [0.000000] [sd_task/INFO] 4 +> [0.000000] [sd_task/INFO] Displaying task 2 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000121 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 3 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 0->2 +> [0.000000] [sd_task/INFO] 1->2 +> [0.000000] [sd_task/INFO] 0 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 2->3 +> [0.000000] [sd_task/INFO] 3 +> [0.000000] [sd_task/INFO] Displaying task 3 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000231 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 2->3 +> [0.000000] [sd_task/INFO] 2 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 4 +> [0.000000] [sd_task/INFO] 8 +> [0.000000] [sd_task/INFO] Displaying task 4 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000005 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 3 +> [0.000000] [sd_task/INFO] 1 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 4->5 +> [0.000000] [sd_task/INFO] 5 +> [0.000000] [sd_task/INFO] Displaying task 5 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000046 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 3 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root->5 +> [0.000000] [sd_task/INFO] 4->5 +> [0.000000] [sd_task/INFO] 4 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 6 +> [0.000000] [sd_task/INFO] Displaying task 6 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000092 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 5 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 6->7 +> [0.000000] [sd_task/INFO] 7 +> [0.000000] [sd_task/INFO] Displaying task 7 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000041 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 6->7 +> [0.000000] [sd_task/INFO] 6 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 7->8 +> [0.000000] [sd_task/INFO] 7->end +> [0.000000] [sd_task/INFO] end +> [0.000000] [sd_task/INFO] Displaying task 8 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000250 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 2 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 7->8 +> [0.000000] [sd_task/INFO] 3 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 9 +> [0.000000] [sd_task/INFO] Displaying task 9 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000079 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 8 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] end +> [0.000000] [sd_task/INFO] Displaying task root->5 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10014000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] root +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 5 +> [0.000000] [sd_task/INFO] Displaying task 0->2 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10001 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 0 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 2 +> [0.000000] [sd_task/INFO] Displaying task 1->2 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10004 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 1 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 2 +> [0.000000] [sd_task/INFO] Displaying task 2->3 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10002 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 2 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 3 +> [0.000000] [sd_task/INFO] Displaying task 4->5 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10029 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 4 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 5 +> [0.000000] [sd_task/INFO] Displaying task 6->7 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10005 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 6 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 7 +> [0.000000] [sd_task/INFO] Displaying task 7->8 +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 7 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] 8 +> [0.000000] [sd_task/INFO] Displaying task 7->end +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: end-to-end communication +> [0.000000] [sd_task/INFO] - amount: 10014000 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 1 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 7 +> [0.000000] [sd_task/INFO] - post-dependencies: +> [0.000000] [sd_task/INFO] end +> [0.000000] [sd_task/INFO] Displaying task end +> [0.000000] [sd_task/INFO] - state: scheduled not runnable +> [0.000000] [sd_task/INFO] - kind: sequential computation +> [0.000000] [sd_task/INFO] - amount: 10000000129 +> [0.000000] [sd_task/INFO] - Dependencies to satisfy: 3 +> [0.000000] [sd_task/INFO] - pre-dependencies: +> [0.000000] [sd_task/INFO] 7->end +> [0.000000] [sd_task/INFO] 9 +> [0.000000] [sd_task/INFO] 7 +> [0.000000] [test/INFO] ------------------- Run the schedule --------------------------- +> [20.000866] [test/INFO] ------------------- Produce the trace file--------------------------- +> [20.000866] [test/INFO] Producing the trace of the run into dag_with_good_schedule.trace + +$ cat ${srcdir:=.}/dag_with_good_schedule.trace +> [0.000000->0.000000] C2-05 compute 0.000000 flops # root +> [0.000000->2.000000] C2-06 compute 10000000129.452715 flops # 0 +> [0.000000->2.000000] C2-05 compute 10000000131.133657 flops # 1 +> [2.000380->4.000380] C2-06 compute 10000000121.124870 flops # 2 +> [4.000415->6.000415] C2-06 compute 10000000230.608025 flops # 3 +> [6.000415->8.000415] C2-05 compute 10000000004.994019 flops # 4 +> [8.000450->10.000450] C2-05 compute 10000000046.016401 flops # 5 +> [10.000450->12.000450] C2-05 compute 10000000091.598791 flops # 6 +> [12.000485->14.000485] C2-05 compute 10000000040.679438 flops # 7 +> [14.000865->16.000866] C2-06 compute 10000000250.490017 flops # 8 +> [16.000866->18.000866] C2-06 compute 10000000079.267649 flops # 9 +> [0.000000 -> 0.020123] C2-05 -> C2-05 transfer of 10014000 bytes # root->5 +> [2.000000 -> 2.000035] C2-06 -> C2-06 transfer of 10001 bytes # 0->2 +> [2.000000 -> 2.000380] C2-05 -> C2-06 transfer of 10004 bytes # 1->2 +> [4.000380 -> 4.000415] C2-06 -> C2-06 transfer of 10002 bytes # 2->3 +> [8.000415 -> 8.000450] C2-05 -> C2-05 transfer of 10029 bytes # 4->5 +> [12.000450 -> 12.000485] C2-05 -> C2-05 transfer of 10005 bytes # 6->7 +> [14.000485 -> 14.000865] C2-05 -> C2-06 transfer of 10000 bytes # 7->8 +> [14.000485 -> 14.020609] C2-05 -> C2-05 transfer of 10014000 bytes # 7->end +> [18.000866->20.000866] C2-05 compute 10000000129.452715 flops # end + +$ rm -f ${srcdir:=.}/dag_with_good_schedule.trace + +! expect return 2 +$ $SG_TEST_EXENV ./dot_test --log=no_loc ${srcdir:=.}/../2clusters.xml ${srcdir:=.}/dag_with_cycle.dot +> [0.000000] [surf_workstation/INFO] surf_workstation_model_init_ptask_L07 +> [0.000000] [sd_daxparse/WARNING] the task root is not marked +> [0.000000] [sd_daxparse/WARNING] the task 0 is in a cycle +> [0.000000] [sd_daxparse/WARNING] the task 1 is in a cycle +> [0.000000] [sd_daxparse/WARNING] the task 2 is in a cycle +> [0.000000] [sd_daxparse/WARNING] the task 3 is in a cycle +> [0.000000] [sd_daxparse/WARNING] the task 4 is in a cycle +> [0.000000] [sd_daxparse/WARNING] the task 5 is in a cycle +> [0.000000] [sd_daxparse/WARNING] the task 6 is in a cycle +> [0.000000] [sd_dotparse/ERROR] The DOT described in dag_with_cycle.dot is not a DAG. It contains a cycle. +> [0.000000] [test/CRITICAL] No dot loaded. Do you have a cycle in your graph? diff --git a/examples/simdag/test_simdag_fail_notrace.tesh b/examples/simdag/test_simdag_fail_notrace.tesh new file mode 100644 index 0000000000..9d87dfce86 --- /dev/null +++ b/examples/simdag/test_simdag_fail_notrace.tesh @@ -0,0 +1,36 @@ +#! ./tesh + +p Test of the management of failed tasks simdag + +$ $SG_TEST_EXENV ${bindir:=.}/sd_fail +> [0.000000] [surf_workstation/INFO] surf_workstation_model_init_ptask_L07 +> [0.000000] [sd_fail/INFO] First test: COMP_SEQ task +> [0.000000] [sd_fail/INFO] Schedule task 'Poor task' on workstation 'Faulty Host' +> [10.000000] [sd_task/INFO] Displaying task Poor task +> [10.000000] [sd_task/INFO] - state: not runnable failed +> [10.000000] [sd_task/INFO] - kind: sequential computation +> [10.000000] [sd_task/INFO] - amount: 20000000000 +> [10.000000] [sd_task/INFO] - Dependencies to satisfy: 0 +> [10.000000] [sd_fail/INFO] Task 'Poor task' has failed. 20000000000 flops remain to be done +> [10.000000] [sd_fail/INFO] let's unschedule task 'Poor task' and reschedule it on the 'Safe Host' +> [10.000000] [sd_fail/INFO] Run the simulation again +> [50.000000] [sd_task/INFO] Displaying task Poor task +> [50.000000] [sd_task/INFO] - state: not runnable done +> [50.000000] [sd_task/INFO] - kind: sequential computation +> [50.000000] [sd_task/INFO] - amount: 20000000000 +> [50.000000] [sd_task/INFO] - Dependencies to satisfy: 0 +> [50.000000] [sd_fail/INFO] Task 'Poor task' start time: 10.000000, finish time: 50.000000 +> [50.000000] [sd_fail/INFO] Second test: NON TYPED task +> [50.000000] [sd_fail/INFO] Schedule task 'Poor parallel task' on workstation 'Faulty Host' +> [60.000000] [sd_task/INFO] Displaying task Poor parallel task +> [60.000000] [sd_task/INFO] - state: not runnable failed +> [60.000000] [sd_task/INFO] - amount: 20000000000 +> [60.000000] [sd_task/INFO] - Dependencies to satisfy: 0 +> [60.000000] [sd_fail/INFO] Task 'Poor parallel task' has failed. 20000000000 flops remain to be done +> [60.000000] [sd_fail/INFO] let's unschedule task 'Poor parallel task' and reschedule it on the 'Safe Host' +> [60.000000] [sd_fail/INFO] Run the simulation again +> [100.000000] [sd_task/INFO] Displaying task Poor parallel task +> [100.000000] [sd_task/INFO] - state: not runnable done +> [100.000000] [sd_task/INFO] - amount: 20000000000 +> [100.000000] [sd_task/INFO] - Dependencies to satisfy: 0 +> [100.000000] [sd_fail/INFO] Task 'Poor parallel task' start time: 60.000000, finish time: 100.000000 diff --git a/examples/smpi/energy/energy.tesh b/examples/smpi/energy/energy.tesh index f8b74fddb6..37603c6d25 100644 --- a/examples/smpi/energy/energy.tesh +++ b/examples/smpi/energy/energy.tesh @@ -1,6 +1,6 @@ p Test smpi bindings for dvfs functions (C example) $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/platform.xml --cfg=smpi/cpu_threshold:-1 ${bindir:=.}/se --cfg=plugin:Energy --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/examples/smpi/energy/f77/energy.tesh b/examples/smpi/energy/f77/energy.tesh index 9173c490ef..1f4b353a5e 100644 --- a/examples/smpi/energy/f77/energy.tesh +++ b/examples/smpi/energy/f77/energy.tesh @@ -1,7 +1,7 @@ p Test smpi bindings for dvfs functions (Fortran 77 example) ! output sort 1 $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/platform.xml --cfg=smpi/cpu_threshold:-1 ${bindir:=.}/f77/sef --cfg=plugin:Energy --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/examples/smpi/energy/f90/energy.tesh b/examples/smpi/energy/f90/energy.tesh index 799dffd98f..e78dff5b4e 100644 --- a/examples/smpi/energy/f90/energy.tesh +++ b/examples/smpi/energy/f90/energy.tesh @@ -1,7 +1,7 @@ p Test smpi bindings for dvfs functions (Fortran 90 example) ! output sort 1 $ ../../../smpi_script/bin/smpirun -np 2 -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/platform.xml --cfg=smpi/cpu_threshold:-1 ${bindir:=.}/f90/sef90 --cfg=plugin:Energy --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/examples/smpi/mc/bugged1.c b/examples/smpi/mc/bugged1.c index b319f0f460..92ddaea16e 100644 --- a/examples/smpi/mc/bugged1.c +++ b/examples/smpi/mc/bugged1.c @@ -23,8 +23,8 @@ int main(int argc, char **argv) exit(1); } - err = MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ - err = MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ + MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ + MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ if (size < 2) { printf("run this program with exactly 2 processes (-np 2)\n"); MPI_Finalize(); diff --git a/examples/smpi/mc/bugged1_liveness.c b/examples/smpi/mc/bugged1_liveness.c index 7305370368..68a5ef4671 100644 --- a/examples/smpi/mc/bugged1_liveness.c +++ b/examples/smpi/mc/bugged1_liveness.c @@ -53,9 +53,9 @@ int main(int argc, char **argv){ MC_ignore(&(status.count), sizeof(status.count)); /* Get number of processes */ - err = MPI_Comm_size(MPI_COMM_WORLD, &size); + MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get id of this process */ - err = MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); if(rank == 0){ /* Coordinator */ while(1){ diff --git a/examples/smpi/mc/bugged2.c b/examples/smpi/mc/bugged2.c index 42de583df8..1af27bea2e 100644 --- a/examples/smpi/mc/bugged2.c +++ b/examples/smpi/mc/bugged2.c @@ -23,8 +23,8 @@ int main(int argc, char **argv) exit(1); } - err = MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ - err = MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ + MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ + MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ if (size % 3 != 0) { printf("run this program with exactly 3*N processes \n"); MPI_Finalize(); diff --git a/examples/smpi/mc/mutual_exclusion.c b/examples/smpi/mc/mutual_exclusion.c index 8c7ab75f58..7ed894bb60 100644 --- a/examples/smpi/mc/mutual_exclusion.c +++ b/examples/smpi/mc/mutual_exclusion.c @@ -30,9 +30,9 @@ int main(int argc, char **argv){ MC_ignore(&(status.count), sizeof(status.count)); /* Get number of processes */ - err = MPI_Comm_size(MPI_COMM_WORLD, &size); + MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get id of this process */ - err = MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); if(rank == 0){ /* Coordinator */ while(1){ diff --git a/examples/smpi/mc/non_deterministic.c b/examples/smpi/mc/non_deterministic.c index b5fbcc000c..4a0c7dc7c3 100644 --- a/examples/smpi/mc/non_deterministic.c +++ b/examples/smpi/mc/non_deterministic.c @@ -23,8 +23,8 @@ int main(int argc, char **argv) exit(1); } - err = MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ - err = MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ + MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ + MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ if (size < 2) { printf("run this program with at least 2 processes \n"); MPI_Finalize(); diff --git a/examples/smpi/mc/send_deterministic.c b/examples/smpi/mc/send_deterministic.c index fe421068d4..048d75c508 100644 --- a/examples/smpi/mc/send_deterministic.c +++ b/examples/smpi/mc/send_deterministic.c @@ -23,8 +23,8 @@ int main(int argc, char **argv) exit(1); } - err = MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ - err = MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ + MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ + MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ if (size < 2) { printf("run this program with at least 2 processes \n"); MPI_Finalize(); diff --git a/examples/smpi/replay/actions_with_isend.txt b/examples/smpi/replay/actions_with_isend.txt index 3e1f455d95..fd5ea51fed 100644 --- a/examples/smpi/replay/actions_with_isend.txt +++ b/examples/smpi/replay/actions_with_isend.txt @@ -2,17 +2,23 @@ 1 init 2 init +0 compute 1e9 0 send 1 1e6 0 compute 1e9 0 recv 2 1e6 1 Irecv 0 1e6 -1 compute 1e9 +1 compute 5e8 +1 test +1 compute 5e8 1 wait 1 send 2 1e6 +2 compute 2e9 2 Irecv 1 1e6 -2 compute 5e8 +2 compute 2.5e8 +2 test +2 compute 2.5e8 2 wait 2 Isend 0 1e6 2 compute 5e8 diff --git a/examples/smpi/replay/smpi_replay.tesh b/examples/smpi/replay/smpi_replay.tesh index 048b46c61f..480018a895 100644 --- a/examples/smpi/replay/smpi_replay.tesh +++ b/examples/smpi/replay/smpi_replay.tesh @@ -9,7 +9,7 @@ $ mkfile replay/one_trace ! timeout 60 $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/cpu_threshold:-1 -np 3 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay replay/one_trace --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -40,7 +40,7 @@ p The same with tracing activated $ mkfile replay/one_trace $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=no_loc --cfg=tracing:yes --cfg=tracing/smpi:yes --cfg=tracing/smpi/computing:yes --cfg=smpi/cpu_threshold:-1 -np 3 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay replay/one_trace --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -216,12 +216,13 @@ $ tail -n +3 ./simgrid.trace > 12 19.695603 2 1 8 > 12 19.698548 2 2 8 > 12 19.699584 2 3 8 -> 13 19.703022 2 2 -> 7 19.703022 1 2 -> 13 19.703536 2 3 -> 7 19.703536 1 3 -> 13 19.703536 2 1 -> 7 19.703536 1 1 +> 13 19.699584 2 3 +> 7 19.699584 1 3 +> 13 19.699584 2 1 +> 7 19.699584 1 1 +> 13 19.699584 2 2 +> 7 19.699584 1 2 + $ rm -f ./simgrid.trace @@ -233,7 +234,7 @@ p Another test of trace replay with SMPI (one trace per process) $ mkfile ./split_traces_tesh $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/cpu_threshold:-1 -np 2 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay ./split_traces_tesh --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -257,7 +258,7 @@ p Test of barrier replay with SMPI (one trace for all processes) $ mkfile replay/one_trace $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/cpu_threshold:-1 -np 3 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay replay/one_trace --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -281,25 +282,30 @@ p Test of Isend replay with SMPI (one trace for all processes) $ mkfile replay/one_trace $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/cpu_threshold:-1 -np 3 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay replay/one_trace --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'smpi/cpu_threshold' to '-1' > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) > [Jupiter:1:(0) 0.000000] [smpi_replay/VERBOSE] 1 Irecv 0 1e6 0.000000 -> [Fafard:2:(0) 0.000000] [smpi_replay/VERBOSE] 2 Irecv 1 1e6 0.000000 -> [Tremblay:0:(0) 0.164463] [smpi_replay/VERBOSE] 0 send 1 1e6 0.164463 -> [Fafard:2:(0) 6.553424] [smpi_replay/VERBOSE] 2 compute 5e8 6.553424 -> [Tremblay:0:(0) 10.358662] [smpi_replay/VERBOSE] 0 compute 1e9 10.194200 -> [Jupiter:1:(0) 13.106847] [smpi_replay/VERBOSE] 1 compute 1e9 13.106847 +> [Jupiter:1:(0) 6.553424] [smpi_replay/VERBOSE] 1 compute 5e8 6.553424 +> [Jupiter:1:(0) 6.553424] [smpi_replay/VERBOSE] 1 test 0.000000 +> [Tremblay:0:(0) 10.194200] [smpi_replay/VERBOSE] 0 compute 1e9 10.194200 +> [Tremblay:0:(0) 10.358662] [smpi_replay/VERBOSE] 0 send 1 1e6 0.164463 +> [Jupiter:1:(0) 13.106847] [smpi_replay/VERBOSE] 1 compute 5e8 6.553424 > [Jupiter:1:(0) 13.106847] [smpi_replay/VERBOSE] 1 wait 0.000000 -> [Fafard:2:(0) 13.294318] [smpi_replay/VERBOSE] 2 wait 6.740894 -> [Jupiter:1:(0) 13.294318] [smpi_replay/VERBOSE] 1 send 2 1e6 0.187471 -> [Fafard:2:(0) 13.294318] [smpi_replay/VERBOSE] 2 Isend 0 1e6 0.000000 -> [Tremblay:0:(0) 13.447633] [smpi_replay/VERBOSE] 0 recv 2 1e6 3.088971 -> [Fafard:2:(0) 19.847741] [smpi_replay/VERBOSE] 2 compute 5e8 6.553424 -> [Fafard:2:(0) 19.847741] [smpi_replay/INFO] Simulation time 19.847741 +> [Tremblay:0:(0) 20.552862] [smpi_replay/VERBOSE] 0 compute 1e9 10.194200 +> [Fafard:2:(0) 26.213694] [smpi_replay/VERBOSE] 2 compute 2e9 26.213694 +> [Fafard:2:(0) 26.213694] [smpi_replay/VERBOSE] 2 Irecv 1 1e6 0.000000 +> [Jupiter:1:(0) 26.401165] [smpi_replay/VERBOSE] 1 send 2 1e6 13.294318 +> [Fafard:2:(0) 29.490406] [smpi_replay/VERBOSE] 2 compute 2.5e8 3.276712 +> [Fafard:2:(0) 29.490406] [smpi_replay/VERBOSE] 2 test 0.000000 +> [Fafard:2:(0) 32.767118] [smpi_replay/VERBOSE] 2 compute 2.5e8 3.276712 +> [Fafard:2:(0) 32.767118] [smpi_replay/VERBOSE] 2 Isend 0 1e6 0.000000 +> [Tremblay:0:(0) 32.920433] [smpi_replay/VERBOSE] 0 recv 2 1e6 12.367571 +> [Fafard:2:(0) 39.320541] [smpi_replay/VERBOSE] 2 compute 5e8 6.553424 +> [Fafard:2:(0) 39.320541] [smpi_replay/INFO] Simulation time 39.320541 $ rm -f replay/one_trace @@ -310,7 +316,7 @@ p Test of Isend replay with SMPI (one trace for all processes) $ mkfile replay/one_trace $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/cpu_threshold:-1 -np 3 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay replay/one_trace --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -332,7 +338,7 @@ p Test of AllToAll replay with SMPI (one trace for all processes) $ mkfile replay/one_trace $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/cpu_threshold:-1 -np 3 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay replay/one_trace --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -351,7 +357,7 @@ p Test of AllToAllv replay with SMPI (one trace for all processes) $ mkfile replay/one_trace $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/cpu_threshold:-1 -np 3 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay replay/one_trace --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -370,7 +376,7 @@ p Test of AllGatherv replay with SMPI (one trace for all processes) $ mkfile replay/one_trace $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/cpu_threshold:-1 -np 3 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay replay/one_trace --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -389,7 +395,7 @@ p Test of waitall replay with SMPI (one trace for all processes) $ mkfile replay/one_trace $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.thresh:critical --log=smpi_replay.thresh:verbose --log=no_loc --cfg=smpi/cpu_threshold:-1 -np 3 -platform ${srcdir:=.}/replay/replay_platform.xml -hostfile ${srcdir:=.}/hostfile ./smpi_replay replay/one_trace --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/examples/smpi/smpi_msg_masterslave/msg_smpi.tesh b/examples/smpi/smpi_msg_masterslave/msg_smpi.tesh index 96e33b83c7..541c76f66b 100644 --- a/examples/smpi/smpi_msg_masterslave/msg_smpi.tesh +++ b/examples/smpi/smpi_msg_masterslave/msg_smpi.tesh @@ -12,8 +12,8 @@ $ ./masterslave_mailbox_smpi ${srcdir:=.}/../../msg/small_platform_with_routers. > [Ginette:master_mpi:(3) 0.000000] [msg_test/INFO] After comm 0 > [Tremblay:master:(1) 0.002265] [msg_test/INFO] Sending "Task_1" (of 20) to mailbox "slave-0" > [Bourassa:master_mpi:(4) 0.016868] [msg_test/INFO] After comm 1 -> [Ginette:master_mpi:(3) 0.049112] [msg_test/INFO] After finalize 0 0 -> [Bourassa:master_mpi:(4) 0.049112] [msg_test/INFO] After finalize 1 0 +> [Bourassa:master_mpi:(4) 0.016868] [msg_test/INFO] After finalize 1 0 +> [Ginette:master_mpi:(3) 0.016868] [msg_test/INFO] After finalize 0 0 > [Ginette:alltoall_mpi:(5) 0.098642] [msg_test/INFO] after alltoall 0 > [Fafard:alltoall_mpi:(8) 0.099069] [msg_test/INFO] after alltoall 3 > [Bourassa:alltoall_mpi:(6) 0.127526] [msg_test/INFO] after alltoall 1 diff --git a/examples/smpi/tracing/smpi_traced.tesh b/examples/smpi/tracing/smpi_traced.tesh index 2b95b2397e..db51fbb4bd 100644 --- a/examples/smpi/tracing/smpi_traced.tesh +++ b/examples/smpi/tracing/smpi_traced.tesh @@ -9,7 +9,7 @@ $ ../../smpi_script/bin/smpirun -trace -trace-resource -trace-file smpi_traced.t > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes' -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -22,7 +22,7 @@ $ ../../smpi_script/bin/smpirun -trace -trace-resource -trace-file smpi_traced.t > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/categorized' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes' -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -30,7 +30,7 @@ $ ../../smpi_script/bin/smpirun -trace -trace-resource -trace-file smpi_traced.t p Testing without trace parameters $ ../../smpi_script/bin/smpirun -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../msg/tracing/platform.xml --cfg=path:${srcdir:=.}/../msg -np 3 ./smpi_traced_simple --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -42,7 +42,7 @@ $ ../../smpi_script/bin/smpirun -trace -trace-grouped -trace-file smpi_traced.tr > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'smpi_traced.trace' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/group' to 'yes' -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -57,17 +57,17 @@ $ ../../smpi_script/bin/smpirun -trace -trace-resource -trace-viva -trace-file s > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/uncategorized' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'viva/categorized' to 'smpi_cat.plist' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'viva/uncategorized' to 'smpi_uncat.plist' -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'smpi/cpu_threshold' to '-1' > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) -> [0.011914] [instr_config/INFO] No categories declared, ignoring generation of viva graph configuration +> [0.007962] [instr_config/INFO] No categories declared, ignoring generation of viva graph configuration p Testing with parameters but without activating them with the safe switch (-trace) $ ../../smpi_script/bin/smpirun -trace-resource -trace-viva -trace-file smpi_traced.trace -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../msg/tracing/platform.xml --cfg=path:${srcdir:=.}/../msg -np 3 ./smpi_traced_simple --log=smpi_kernel.thres:warning -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/include/msg/msg.h b/include/msg/msg.h index 9a585fd256..341afa20d8 100644 --- a/include/msg/msg.h +++ b/include/msg/msg.h @@ -75,6 +75,7 @@ XBT_PUBLIC(unsigned long int) MSG_get_sent_msg(void); /************************** Environment ***********************************/ XBT_PUBLIC(msg_as_t) MSG_environment_get_routing_root(void); XBT_PUBLIC(const char *) MSG_environment_as_get_name(msg_as_t as); +XBT_PUBLIC(msg_as_t) MSG_environment_as_get_by_name(const char * name); XBT_PUBLIC(xbt_dict_t) MSG_environment_as_get_routing_sons(msg_as_t as); XBT_PUBLIC(const char *) MSG_environment_as_get_property_value(msg_as_t as, const char *name); XBT_PUBLIC(const char *) MSG_environment_as_get_model(msg_as_t as); @@ -416,6 +417,17 @@ XBT_PUBLIC(void) MSG_sem_get_capacity(msg_sem_t sem); XBT_PUBLIC(void) MSG_sem_destroy(msg_sem_t sem); XBT_PUBLIC(int) MSG_sem_would_block(msg_sem_t sem); +/** @brief Opaque type representing a barrier identifier + * @ingroup msg_synchro + * @hideinitializer + */ + +#define MSG_BARRIER_SERIAL_PROCESS -1 +typedef struct s_xbt_bar *msg_bar_t; +XBT_PUBLIC(msg_bar_t) MSG_barrier_init( unsigned int count); +XBT_PUBLIC(void) MSG_barrier_destroy(msg_bar_t bar); +XBT_PUBLIC(int) MSG_barrier_wait(msg_bar_t bar); + /** @brief Opaque type describing a Virtual Machine. * @ingroup msg_VMs * diff --git a/include/smpi/mpi.h b/include/smpi/mpi.h index 4224e7ffbc..482fa7eba8 100644 --- a/include/smpi/mpi.h +++ b/include/smpi/mpi.h @@ -10,7 +10,6 @@ #define SEED 221238 #define sleep(x) smpi_sleep(x) -#define gettimeofday(x, y) smpi_gettimeofday(x) #include #include @@ -18,6 +17,8 @@ #include #include +#define gettimeofday(x, y) smpi_gettimeofday(x, NULL) + #ifdef HAVE_MC #undef assert #define assert(x) MC_assert(x) diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 314636085e..f9ebc00b78 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -7,6 +7,7 @@ #ifndef SMPI_H #define SMPI_H +#include #include #include #include @@ -161,6 +162,15 @@ typedef enum MPIR_Topo_type { typedef ptrdiff_t MPI_Aint; typedef long long MPI_Offset; +// To compile code that declare MPI_File variables +struct s_empty { +#if !defined(__GNUC__) || defined(__STRICT_ANSI__) + char empty; +#endif +}; +typedef struct s_empty *MPI_File; + + struct s_smpi_mpi_datatype; typedef struct s_smpi_mpi_datatype *MPI_Datatype; @@ -699,8 +709,9 @@ XBT_PUBLIC(int) smpi_get_host_nb_pstates(void); XBT_PUBLIC(void) smpi_set_host_power_peak_at(int pstate_index); XBT_PUBLIC(double) smpi_get_host_consumed_energy(void); +XBT_PUBLIC(int) smpi_usleep(useconds_t usecs); XBT_PUBLIC(unsigned int) smpi_sleep(unsigned int secs); -XBT_PUBLIC(int) smpi_gettimeofday(struct timeval *tv); +XBT_PUBLIC(int) smpi_gettimeofday(struct timeval *tv, void* tz); XBT_PUBLIC(unsigned long long) smpi_rastro_resolution (void); XBT_PUBLIC(unsigned long long) smpi_rastro_timestamp (void); XBT_PUBLIC(void) smpi_sample_1(int global, const char *file, int line, diff --git a/include/surf/simgrid_dtd.h b/include/surf/simgrid_dtd.h index 234928fac0..bea720bad5 100644 --- a/include/surf/simgrid_dtd.h +++ b/include/surf/simgrid_dtd.h @@ -108,598 +108,598 @@ XBT_PUBLIC(void) STag_surfxml_model___prop(void); XBT_PUBLIC(void) ETag_surfxml_model___prop(void); /* XML application data. */ -typedef int AT_surfxml_storage___type_content; -#define AU_surfxml_storage___type_content NULL -typedef int AT_surfxml_host___link_id; -#define AU_surfxml_host___link_id NULL -typedef int AT_surfxml_cabinet_bw; -#define AU_surfxml_cabinet_bw NULL -typedef enum { AU_surfxml_host_state, A_surfxml_host_state_ON,A_surfxml_host_state_OFF } AT_surfxml_host_state; -typedef enum { AU_surfxml_random_generator, A_surfxml_random_generator_DRAND48,A_surfxml_random_generator_RAND,A_surfxml_random_generator_RNGSTREAM,A_surfxml_random_generator_NONE } AT_surfxml_random_generator; -typedef int AT_surfxml_cluster_bb___bw; -#define AU_surfxml_cluster_bb___bw NULL -typedef enum { AU_surfxml_AS_routing, A_surfxml_AS_routing_Full,A_surfxml_AS_routing_Floyd,A_surfxml_AS_routing_Dijkstra,A_surfxml_AS_routing_DijkstraCache,A_surfxml_AS_routing_None,A_surfxml_AS_routing_Vivaldi,A_surfxml_AS_routing_Cluster,A_surfxml_AS_routing_Cluster___torus } AT_surfxml_AS_routing; -typedef int AT_surfxml_cluster_prefix; -#define AU_surfxml_cluster_prefix NULL -typedef int AT_surfxml_host_availability___file; -#define AU_surfxml_host_availability___file NULL -typedef int AT_surfxml_router_coordinates; -#define AU_surfxml_router_coordinates NULL +typedef int AT_surfxml_cluster_bb___lat; +#define AU_surfxml_cluster_bb___lat NULL typedef int AT_surfxml_random_max; #define AU_surfxml_random_max NULL -typedef int AT_surfxml_cluster_suffix; -#define AU_surfxml_cluster_suffix NULL -typedef int AT_surfxml_cluster_id; -#define AU_surfxml_cluster_id NULL -typedef int AT_surfxml_cluster_power; -#define AU_surfxml_cluster_power NULL -typedef int AT_surfxml_trace___connect_element; -#define AU_surfxml_trace___connect_element NULL -typedef int AT_surfxml_cluster_loopback___bw; -#define AU_surfxml_cluster_loopback___bw NULL -typedef int AT_surfxml_bypassRoute_dst; -#define AU_surfxml_bypassRoute_dst NULL -typedef int AT_surfxml_cluster_availability___file; -#define AU_surfxml_cluster_availability___file NULL -typedef int AT_surfxml_mount_name; -#define AU_surfxml_mount_name NULL -typedef int AT_surfxml_host_pstate; -#define AU_surfxml_host_pstate NULL -typedef int AT_surfxml_ASroute_dst; -#define AU_surfxml_ASroute_dst NULL -typedef int AT_surfxml_storage___type_content___type; -#define AU_surfxml_storage___type_content___type NULL -typedef int AT_surfxml_cluster_topo___parameters; -#define AU_surfxml_cluster_topo___parameters NULL -typedef int AT_surfxml_storage_id; -#define AU_surfxml_storage_id NULL -typedef int AT_surfxml_cluster_core; -#define AU_surfxml_cluster_core NULL -typedef int AT_surfxml_AS_id; -#define AU_surfxml_AS_id NULL -typedef int AT_surfxml_peer_lat; -#define AU_surfxml_peer_lat NULL -typedef int AT_surfxml_config_id; -#define AU_surfxml_config_id NULL -typedef int AT_surfxml_ASroute_gw___dst; -#define AU_surfxml_ASroute_gw___dst NULL +typedef int AT_surfxml_host_availability___file; +#define AU_surfxml_host_availability___file NULL +typedef int AT_surfxml_ASroute_src; +#define AU_surfxml_ASroute_src NULL +typedef int AT_surfxml_cabinet_id; +#define AU_surfxml_cabinet_id NULL +typedef int AT_surfxml_cabinet_prefix; +#define AU_surfxml_cabinet_prefix NULL typedef int AT_surfxml_process_function; #define AU_surfxml_process_function NULL -typedef int AT_surfxml_link___ctn_id; -#define AU_surfxml_link___ctn_id NULL -typedef int AT_surfxml_trace___connect_trace; -#define AU_surfxml_trace___connect_trace NULL -typedef int AT_surfxml_route_dst; -#define AU_surfxml_route_dst NULL -typedef int AT_surfxml_random_std___deviation; -#define AU_surfxml_random_std___deviation NULL -typedef int AT_surfxml_process_start___time; -#define AU_surfxml_process_start___time NULL -typedef int AT_surfxml_cluster_lat; -#define AU_surfxml_cluster_lat NULL -typedef int AT_surfxml_storage___type_id; -#define AU_surfxml_storage___type_id NULL -typedef int AT_surfxml_trace_id; -#define AU_surfxml_trace_id NULL -typedef int AT_surfxml_gpu_name; -#define AU_surfxml_gpu_name NULL -typedef enum { AU_surfxml_cluster_topology, A_surfxml_cluster_topology_FLAT,A_surfxml_cluster_topology_TORUS } AT_surfxml_cluster_topology; -typedef int AT_surfxml_cabinet_suffix; -#define AU_surfxml_cabinet_suffix NULL -typedef int AT_surfxml_peer_coordinates; -#define AU_surfxml_peer_coordinates NULL -typedef int AT_surfxml_cluster_state___file; -#define AU_surfxml_cluster_state___file NULL -typedef int AT_surfxml_bypassASroute_gw___dst; -#define AU_surfxml_bypassASroute_gw___dst NULL -typedef int AT_surfxml_storage_content___type; -#define AU_surfxml_storage_content___type NULL -typedef int AT_surfxml_process_host; -#define AU_surfxml_process_host NULL -typedef enum { AU_surfxml_ASroute_symmetrical, A_surfxml_ASroute_symmetrical_YES,A_surfxml_ASroute_symmetrical_NO } AT_surfxml_ASroute_symmetrical; -typedef int AT_surfxml_trace_periodicity; -#define AU_surfxml_trace_periodicity NULL +typedef int AT_surfxml_ASroute_gw___dst; +#define AU_surfxml_ASroute_gw___dst NULL +typedef int AT_surfxml_storage___type_content___type; +#define AU_surfxml_storage___type_content___type NULL typedef int AT_surfxml_include_file; #define AU_surfxml_include_file NULL -typedef int AT_surfxml_peer_bw___out; -#define AU_surfxml_peer_bw___out NULL -typedef int AT_surfxml_storage_attach; -#define AU_surfxml_storage_attach NULL -typedef int AT_surfxml_peer_power; -#define AU_surfxml_peer_power NULL -typedef int AT_surfxml_route_src; -#define AU_surfxml_route_src NULL typedef int AT_surfxml_link_bandwidth___file; #define AU_surfxml_link_bandwidth___file NULL -typedef int AT_surfxml_mount_storageId; -#define AU_surfxml_mount_storageId NULL -typedef int AT_surfxml_bypassASroute_dst; -#define AU_surfxml_bypassASroute_dst NULL -typedef int AT_surfxml_cabinet_power; -#define AU_surfxml_cabinet_power NULL -typedef int AT_surfxml_trace_file; -#define AU_surfxml_trace_file NULL -typedef enum { AU_surfxml_trace___connect_kind, A_surfxml_trace___connect_kind_HOST___AVAIL,A_surfxml_trace___connect_kind_POWER,A_surfxml_trace___connect_kind_LINK___AVAIL,A_surfxml_trace___connect_kind_BANDWIDTH,A_surfxml_trace___connect_kind_LATENCY } AT_surfxml_trace___connect_kind; -typedef int AT_surfxml_prop_value; -#define AU_surfxml_prop_value NULL -typedef enum { AU_surfxml_link___ctn_direction, A_surfxml_link___ctn_direction_UP,A_surfxml_link___ctn_direction_DOWN,A_surfxml_link___ctn_direction_NONE } AT_surfxml_link___ctn_direction; -typedef int AT_surfxml_random_radical; -#define AU_surfxml_random_radical NULL -typedef int AT_surfxml_host_coordinates; -#define AU_surfxml_host_coordinates NULL -typedef int AT_surfxml_prop_id; -#define AU_surfxml_prop_id NULL -typedef int AT_surfxml_host_id; -#define AU_surfxml_host_id NULL -typedef int AT_surfxml_host_availability; -#define AU_surfxml_host_availability NULL -typedef int AT_surfxml_storage___type_size; -#define AU_surfxml_storage___type_size NULL -typedef int AT_surfxml_cabinet_prefix; -#define AU_surfxml_cabinet_prefix NULL -typedef int AT_surfxml_host___link_up; -#define AU_surfxml_host___link_up NULL -typedef int AT_surfxml_cluster_limiter___link; -#define AU_surfxml_cluster_limiter___link NULL -typedef int AT_surfxml_peer_bw___in; -#define AU_surfxml_peer_bw___in NULL +typedef int AT_surfxml_process_kill___time; +#define AU_surfxml_process_kill___time NULL typedef int AT_surfxml_link_bandwidth; #define AU_surfxml_link_bandwidth NULL -typedef int AT_surfxml_random_seed; -#define AU_surfxml_random_seed NULL -typedef int AT_surfxml_cluster_bw; -#define AU_surfxml_cluster_bw NULL -typedef int AT_surfxml_cabinet_lat; -#define AU_surfxml_cabinet_lat NULL -typedef int AT_surfxml_bypassASroute_src; -#define AU_surfxml_bypassASroute_src NULL -typedef int AT_surfxml_random_min; -#define AU_surfxml_random_min NULL -typedef int AT_surfxml_cabinet_id; -#define AU_surfxml_cabinet_id NULL -typedef int AT_surfxml_bypassASroute_gw___src; -#define AU_surfxml_bypassASroute_gw___src NULL -typedef enum { AU_surfxml_process_on___failure, A_surfxml_process_on___failure_DIE,A_surfxml_process_on___failure_RESTART } AT_surfxml_process_on___failure; -typedef int AT_surfxml_platform_version; -#define AU_surfxml_platform_version NULL +typedef int AT_surfxml_trace_periodicity; +#define AU_surfxml_trace_periodicity NULL +typedef int AT_surfxml_storage_typeId; +#define AU_surfxml_storage_typeId NULL +typedef int AT_surfxml_cabinet_suffix; +#define AU_surfxml_cabinet_suffix NULL +typedef int AT_surfxml_link_latency___file; +#define AU_surfxml_link_latency___file NULL +typedef int AT_surfxml_link_id; +#define AU_surfxml_link_id NULL +typedef int AT_surfxml_trace_id; +#define AU_surfxml_trace_id NULL typedef enum { AU_surfxml_cluster_bb___sharing___policy, A_surfxml_cluster_bb___sharing___policy_SHARED,A_surfxml_cluster_bb___sharing___policy_FATPIPE } AT_surfxml_cluster_bb___sharing___policy; -typedef int AT_surfxml_backbone_id; -#define AU_surfxml_backbone_id NULL -typedef int AT_surfxml_model___prop_id; -#define AU_surfxml_model___prop_id NULL -typedef enum { AU_surfxml_cluster_sharing___policy, A_surfxml_cluster_sharing___policy_SHARED,A_surfxml_cluster_sharing___policy_FULLDUPLEX,A_surfxml_cluster_sharing___policy_FATPIPE } AT_surfxml_cluster_sharing___policy; -typedef int AT_surfxml_cluster_router___id; -#define AU_surfxml_cluster_router___id NULL -typedef int AT_surfxml_cluster_loopback___lat; -#define AU_surfxml_cluster_loopback___lat NULL -typedef int AT_surfxml_cluster_radical; -#define AU_surfxml_cluster_radical NULL -typedef int AT_surfxml_mstorage_name; -#define AU_surfxml_mstorage_name NULL +typedef int AT_surfxml_cabinet_radical; +#define AU_surfxml_cabinet_radical NULL +typedef int AT_surfxml_cluster_lat; +#define AU_surfxml_cluster_lat NULL +typedef int AT_surfxml_process_host; +#define AU_surfxml_process_host NULL +typedef int AT_surfxml_cluster_core; +#define AU_surfxml_cluster_core NULL typedef int AT_surfxml_peer_id; #define AU_surfxml_peer_id NULL -typedef int AT_surfxml_peer_availability___file; -#define AU_surfxml_peer_availability___file NULL -typedef enum { AU_surfxml_link_state, A_surfxml_link_state_ON,A_surfxml_link_state_OFF } AT_surfxml_link_state; +typedef int AT_surfxml_storage___type_content; +#define AU_surfxml_storage___type_content NULL +typedef enum { AU_surfxml_link___ctn_direction, A_surfxml_link___ctn_direction_UP,A_surfxml_link___ctn_direction_DOWN,A_surfxml_link___ctn_direction_NONE } AT_surfxml_link___ctn_direction; +typedef enum { AU_surfxml_random_generator, A_surfxml_random_generator_DRAND48,A_surfxml_random_generator_RAND,A_surfxml_random_generator_RNGSTREAM,A_surfxml_random_generator_NONE } AT_surfxml_random_generator; +typedef int AT_surfxml_bypassRoute_dst; +#define AU_surfxml_bypassRoute_dst NULL +typedef int AT_surfxml_cluster_loopback___lat; +#define AU_surfxml_cluster_loopback___lat NULL +typedef int AT_surfxml_bypassRoute_src; +#define AU_surfxml_bypassRoute_src NULL +typedef int AT_surfxml_cluster_limiter___link; +#define AU_surfxml_cluster_limiter___link NULL typedef int AT_surfxml_mstorage_typeId; #define AU_surfxml_mstorage_typeId NULL -typedef int AT_surfxml_storage_typeId; -#define AU_surfxml_storage_typeId NULL +typedef int AT_surfxml_random_seed; +#define AU_surfxml_random_seed NULL typedef int AT_surfxml_random_mean; #define AU_surfxml_random_mean NULL -typedef int AT_surfxml_backbone_bandwidth; -#define AU_surfxml_backbone_bandwidth NULL -typedef int AT_surfxml_cabinet_radical; -#define AU_surfxml_cabinet_radical NULL -typedef int AT_surfxml_argument_value; -#define AU_surfxml_argument_value NULL +typedef int AT_surfxml_link___ctn_id; +#define AU_surfxml_link___ctn_id NULL typedef int AT_surfxml_model___prop_value; #define AU_surfxml_model___prop_value NULL -typedef int AT_surfxml_host___link_down; -#define AU_surfxml_host___link_down NULL -typedef int AT_surfxml_host_power; -#define AU_surfxml_host_power NULL -typedef int AT_surfxml_process_kill___time; -#define AU_surfxml_process_kill___time NULL -typedef int AT_surfxml_bypassRoute_src; -#define AU_surfxml_bypassRoute_src NULL -typedef enum { AU_surfxml_route_symmetrical, A_surfxml_route_symmetrical_YES,A_surfxml_route_symmetrical_NO } AT_surfxml_route_symmetrical; -typedef int AT_surfxml_storage___type_model; -#define AU_surfxml_storage___type_model NULL -typedef int AT_surfxml_cluster_bb___lat; -#define AU_surfxml_cluster_bb___lat NULL -typedef int AT_surfxml_link_latency; -#define AU_surfxml_link_latency NULL -typedef int AT_surfxml_router_id; -#define AU_surfxml_router_id NULL -typedef int AT_surfxml_link_latency___file; -#define AU_surfxml_link_latency___file NULL -typedef int AT_surfxml_host_state___file; -#define AU_surfxml_host_state___file NULL -typedef int AT_surfxml_link_id; -#define AU_surfxml_link_id NULL -typedef int AT_surfxml_peer_state___file; -#define AU_surfxml_peer_state___file NULL +typedef int AT_surfxml_peer_bw___out; +#define AU_surfxml_peer_bw___out NULL +typedef int AT_surfxml_bypassASroute_src; +#define AU_surfxml_bypassASroute_src NULL +typedef int AT_surfxml_backbone_bandwidth; +#define AU_surfxml_backbone_bandwidth NULL +typedef int AT_surfxml_host___link_up; +#define AU_surfxml_host___link_up NULL +typedef enum { AU_surfxml_cluster_topology, A_surfxml_cluster_topology_FLAT,A_surfxml_cluster_topology_TORUS,A_surfxml_cluster_topology_FAT___TREE } AT_surfxml_cluster_topology; typedef int AT_surfxml_ASroute_gw___src; #define AU_surfxml_ASroute_gw___src NULL typedef int AT_surfxml_random_id; #define AU_surfxml_random_id NULL -typedef int AT_surfxml_backbone_latency; -#define AU_surfxml_backbone_latency NULL -typedef int AT_surfxml_link_state___file; -#define AU_surfxml_link_state___file NULL -typedef int AT_surfxml_ASroute_src; -#define AU_surfxml_ASroute_src NULL -typedef enum { AU_surfxml_link_sharing___policy, A_surfxml_link_sharing___policy_SHARED,A_surfxml_link_sharing___policy_FATPIPE,A_surfxml_link_sharing___policy_FULLDUPLEX } AT_surfxml_link_sharing___policy; -typedef int AT_surfxml_storage_content; -#define AU_surfxml_storage_content NULL +typedef int AT_surfxml_peer_power; +#define AU_surfxml_peer_power NULL +typedef enum { AU_surfxml_AS_routing, A_surfxml_AS_routing_Full,A_surfxml_AS_routing_Floyd,A_surfxml_AS_routing_Dijkstra,A_surfxml_AS_routing_DijkstraCache,A_surfxml_AS_routing_None,A_surfxml_AS_routing_Vivaldi,A_surfxml_AS_routing_Cluster,A_surfxml_AS_routing_Cluster___torus,A_surfxml_AS_routing_Cluster___fat___tree } AT_surfxml_AS_routing; +typedef int AT_surfxml_process_start___time; +#define AU_surfxml_process_start___time NULL +typedef int AT_surfxml_cluster_topo___parameters; +#define AU_surfxml_cluster_topo___parameters NULL +typedef int AT_surfxml_route_dst; +#define AU_surfxml_route_dst NULL +typedef int AT_surfxml_host_coordinates; +#define AU_surfxml_host_coordinates NULL +typedef int AT_surfxml_host___link_down; +#define AU_surfxml_host___link_down NULL +typedef int AT_surfxml_cluster_radical; +#define AU_surfxml_cluster_radical NULL +typedef int AT_surfxml_config_id; +#define AU_surfxml_config_id NULL +typedef int AT_surfxml_cabinet_power; +#define AU_surfxml_cabinet_power NULL +typedef int AT_surfxml_model___prop_id; +#define AU_surfxml_model___prop_id NULL +typedef int AT_surfxml_peer_coordinates; +#define AU_surfxml_peer_coordinates NULL +typedef int AT_surfxml_mstorage_name; +#define AU_surfxml_mstorage_name NULL +typedef int AT_surfxml_host___link_id; +#define AU_surfxml_host___link_id NULL +typedef int AT_surfxml_cluster_loopback___bw; +#define AU_surfxml_cluster_loopback___bw NULL +typedef int AT_surfxml_cluster_suffix; +#define AU_surfxml_cluster_suffix NULL +typedef int AT_surfxml_cluster_router___id; +#define AU_surfxml_cluster_router___id NULL +typedef int AT_surfxml_prop_id; +#define AU_surfxml_prop_id NULL +typedef int AT_surfxml_backbone_id; +#define AU_surfxml_backbone_id NULL +typedef int AT_surfxml_link_state___file; +#define AU_surfxml_link_state___file NULL +typedef int AT_surfxml_cabinet_lat; +#define AU_surfxml_cabinet_lat NULL +typedef int AT_surfxml_storage___type_id; +#define AU_surfxml_storage___type_id NULL +typedef int AT_surfxml_storage_content___type; +#define AU_surfxml_storage_content___type NULL +typedef int AT_surfxml_random_radical; +#define AU_surfxml_random_radical NULL +typedef int AT_surfxml_cluster_power; +#define AU_surfxml_cluster_power NULL +typedef int AT_surfxml_trace___connect_element; +#define AU_surfxml_trace___connect_element NULL +typedef int AT_surfxml_link_latency; +#define AU_surfxml_link_latency NULL +typedef enum { AU_surfxml_host_state, A_surfxml_host_state_ON,A_surfxml_host_state_OFF } AT_surfxml_host_state; typedef int AT_surfxml_host_core; #define AU_surfxml_host_core NULL +typedef int AT_surfxml_storage___type_size; +#define AU_surfxml_storage___type_size NULL +typedef int AT_surfxml_mount_name; +#define AU_surfxml_mount_name NULL +typedef int AT_surfxml_cluster_id; +#define AU_surfxml_cluster_id NULL +typedef int AT_surfxml_peer_state___file; +#define AU_surfxml_peer_state___file NULL +typedef int AT_surfxml_host_state___file; +#define AU_surfxml_host_state___file NULL +typedef int AT_surfxml_bypassASroute_dst; +#define AU_surfxml_bypassASroute_dst NULL +typedef enum { AU_surfxml_link_state, A_surfxml_link_state_ON,A_surfxml_link_state_OFF } AT_surfxml_link_state; +typedef int AT_surfxml_bypassASroute_gw___dst; +#define AU_surfxml_bypassASroute_gw___dst NULL +typedef int AT_surfxml_random_std___deviation; +#define AU_surfxml_random_std___deviation NULL +typedef int AT_surfxml_cluster_bb___bw; +#define AU_surfxml_cluster_bb___bw NULL +typedef int AT_surfxml_trace___connect_trace; +#define AU_surfxml_trace___connect_trace NULL +typedef int AT_surfxml_peer_lat; +#define AU_surfxml_peer_lat NULL +typedef int AT_surfxml_cabinet_bw; +#define AU_surfxml_cabinet_bw NULL +typedef int AT_surfxml_cluster_prefix; +#define AU_surfxml_cluster_prefix NULL +typedef int AT_surfxml_storage_attach; +#define AU_surfxml_storage_attach NULL +typedef int AT_surfxml_random_min; +#define AU_surfxml_random_min NULL +typedef enum { AU_surfxml_trace___connect_kind, A_surfxml_trace___connect_kind_HOST___AVAIL,A_surfxml_trace___connect_kind_POWER,A_surfxml_trace___connect_kind_LINK___AVAIL,A_surfxml_trace___connect_kind_BANDWIDTH,A_surfxml_trace___connect_kind_LATENCY } AT_surfxml_trace___connect_kind; +typedef int AT_surfxml_router_coordinates; +#define AU_surfxml_router_coordinates NULL +typedef int AT_surfxml_bypassASroute_gw___src; +#define AU_surfxml_bypassASroute_gw___src NULL +typedef int AT_surfxml_backbone_latency; +#define AU_surfxml_backbone_latency NULL +typedef int AT_surfxml_host_id; +#define AU_surfxml_host_id NULL +typedef int AT_surfxml_AS_id; +#define AU_surfxml_AS_id NULL +typedef int AT_surfxml_cluster_state___file; +#define AU_surfxml_cluster_state___file NULL +typedef int AT_surfxml_peer_bw___in; +#define AU_surfxml_peer_bw___in NULL +typedef int AT_surfxml_ASroute_dst; +#define AU_surfxml_ASroute_dst NULL +typedef int AT_surfxml_trace_file; +#define AU_surfxml_trace_file NULL +typedef int AT_surfxml_router_id; +#define AU_surfxml_router_id NULL +typedef int AT_surfxml_prop_value; +#define AU_surfxml_prop_value NULL +typedef int AT_surfxml_storage_id; +#define AU_surfxml_storage_id NULL +typedef int AT_surfxml_storage_content; +#define AU_surfxml_storage_content NULL +typedef enum { AU_surfxml_link_sharing___policy, A_surfxml_link_sharing___policy_SHARED,A_surfxml_link_sharing___policy_FATPIPE,A_surfxml_link_sharing___policy_FULLDUPLEX } AT_surfxml_link_sharing___policy; +typedef enum { AU_surfxml_process_on___failure, A_surfxml_process_on___failure_DIE,A_surfxml_process_on___failure_RESTART } AT_surfxml_process_on___failure; +typedef int AT_surfxml_host_power; +#define AU_surfxml_host_power NULL +typedef int AT_surfxml_cluster_availability___file; +#define AU_surfxml_cluster_availability___file NULL +typedef int AT_surfxml_platform_version; +#define AU_surfxml_platform_version NULL +typedef int AT_surfxml_host_availability; +#define AU_surfxml_host_availability NULL +typedef int AT_surfxml_mount_storageId; +#define AU_surfxml_mount_storageId NULL +typedef int AT_surfxml_host_pstate; +#define AU_surfxml_host_pstate NULL +typedef int AT_surfxml_cluster_bw; +#define AU_surfxml_cluster_bw NULL +typedef int AT_surfxml_argument_value; +#define AU_surfxml_argument_value NULL +typedef enum { AU_surfxml_route_symmetrical, A_surfxml_route_symmetrical_YES,A_surfxml_route_symmetrical_NO } AT_surfxml_route_symmetrical; +typedef int AT_surfxml_route_src; +#define AU_surfxml_route_src NULL +typedef int AT_surfxml_peer_availability___file; +#define AU_surfxml_peer_availability___file NULL +typedef enum { AU_surfxml_ASroute_symmetrical, A_surfxml_ASroute_symmetrical_YES,A_surfxml_ASroute_symmetrical_NO } AT_surfxml_ASroute_symmetrical; +typedef enum { AU_surfxml_cluster_sharing___policy, A_surfxml_cluster_sharing___policy_SHARED,A_surfxml_cluster_sharing___policy_FULLDUPLEX,A_surfxml_cluster_sharing___policy_FATPIPE } AT_surfxml_cluster_sharing___policy; +typedef int AT_surfxml_gpu_name; +#define AU_surfxml_gpu_name NULL +typedef int AT_surfxml_storage___type_model; +#define AU_surfxml_storage___type_model NULL /* FleXML-provided data. */ XBT_PUBLIC_DATA(int) surfxml_pcdata_ix; XBT_PUBLIC_DATA(char *) surfxml_bufferstack; #define surfxml_pcdata (surfxml_bufferstack + surfxml_pcdata_ix) +XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___lat) AX_surfxml_cluster_bb___lat; +#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat) +XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___lat_isset; +XBT_PUBLIC_DATA(AT_surfxml_random_max) AX_surfxml_random_max; +#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max) +XBT_PUBLIC_DATA(short int) surfxml_random_max_isset; +XBT_PUBLIC_DATA(AT_surfxml_host_availability___file) AX_surfxml_host_availability___file; +#define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file) +XBT_PUBLIC_DATA(short int) surfxml_host_availability___file_isset; +XBT_PUBLIC_DATA(AT_surfxml_ASroute_src) AX_surfxml_ASroute_src; +#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src) +XBT_PUBLIC_DATA(short int) surfxml_ASroute_src_isset; +XBT_PUBLIC_DATA(AT_surfxml_cabinet_id) AX_surfxml_cabinet_id; +#define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id) +XBT_PUBLIC_DATA(short int) surfxml_cabinet_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_cabinet_prefix) AX_surfxml_cabinet_prefix; +#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix) +XBT_PUBLIC_DATA(short int) surfxml_cabinet_prefix_isset; +XBT_PUBLIC_DATA(AT_surfxml_process_function) AX_surfxml_process_function; +#define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function) +XBT_PUBLIC_DATA(short int) surfxml_process_function_isset; +XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___dst) AX_surfxml_ASroute_gw___dst; +#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst) +XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___dst_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_include_file) AX_surfxml_include_file; +#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file) +XBT_PUBLIC_DATA(short int) surfxml_include_file_isset; +XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth___file) AX_surfxml_link_bandwidth___file; +#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file) +XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth___file_isset; +XBT_PUBLIC_DATA(AT_surfxml_process_kill___time) AX_surfxml_process_kill___time; +#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time) +XBT_PUBLIC_DATA(short int) surfxml_process_kill___time_isset; +XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth) AX_surfxml_link_bandwidth; +#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth) +XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth_isset; +XBT_PUBLIC_DATA(AT_surfxml_trace_periodicity) AX_surfxml_trace_periodicity; +#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity) +XBT_PUBLIC_DATA(short int) surfxml_trace_periodicity_isset; +XBT_PUBLIC_DATA(AT_surfxml_storage_typeId) AX_surfxml_storage_typeId; +#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId) +XBT_PUBLIC_DATA(short int) surfxml_storage_typeId_isset; +XBT_PUBLIC_DATA(AT_surfxml_cabinet_suffix) AX_surfxml_cabinet_suffix; +#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix) +XBT_PUBLIC_DATA(short int) surfxml_cabinet_suffix_isset; +XBT_PUBLIC_DATA(AT_surfxml_link_latency___file) AX_surfxml_link_latency___file; +#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file) +XBT_PUBLIC_DATA(short int) surfxml_link_latency___file_isset; +XBT_PUBLIC_DATA(AT_surfxml_link_id) AX_surfxml_link_id; +#define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id) +XBT_PUBLIC_DATA(short int) surfxml_link_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_trace_id) AX_surfxml_trace_id; +#define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id) +XBT_PUBLIC_DATA(short int) surfxml_trace_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___sharing___policy) AX_surfxml_cluster_bb___sharing___policy; +#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy +XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___sharing___policy_isset; +XBT_PUBLIC_DATA(AT_surfxml_cabinet_radical) AX_surfxml_cabinet_radical; +#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical) +XBT_PUBLIC_DATA(short int) surfxml_cabinet_radical_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_lat) AX_surfxml_cluster_lat; +#define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat) +XBT_PUBLIC_DATA(short int) surfxml_cluster_lat_isset; +XBT_PUBLIC_DATA(AT_surfxml_process_host) AX_surfxml_process_host; +#define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host) +XBT_PUBLIC_DATA(short int) surfxml_process_host_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_core) AX_surfxml_cluster_core; +#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core) +XBT_PUBLIC_DATA(short int) surfxml_cluster_core_isset; +XBT_PUBLIC_DATA(AT_surfxml_peer_id) AX_surfxml_peer_id; +#define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id) +XBT_PUBLIC_DATA(short int) surfxml_peer_id_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_host___link_id) AX_surfxml_host___link_id; -#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id) -XBT_PUBLIC_DATA(short int) surfxml_host___link_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_cabinet_bw) AX_surfxml_cabinet_bw; -#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw) -XBT_PUBLIC_DATA(short int) surfxml_cabinet_bw_isset; -XBT_PUBLIC_DATA(AT_surfxml_host_state) AX_surfxml_host_state; -#define A_surfxml_host_state AX_surfxml_host_state -XBT_PUBLIC_DATA(short int) surfxml_host_state_isset; +XBT_PUBLIC_DATA(AT_surfxml_link___ctn_direction) AX_surfxml_link___ctn_direction; +#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction +XBT_PUBLIC_DATA(short int) surfxml_link___ctn_direction_isset; XBT_PUBLIC_DATA(AT_surfxml_random_generator) AX_surfxml_random_generator; #define A_surfxml_random_generator AX_surfxml_random_generator XBT_PUBLIC_DATA(short int) surfxml_random_generator_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___bw) AX_surfxml_cluster_bb___bw; -#define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw) -XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___bw_isset; +XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_dst) AX_surfxml_bypassRoute_dst; +#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst) +XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_dst_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___lat) AX_surfxml_cluster_loopback___lat; +#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat) +XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___lat_isset; +XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_src) AX_surfxml_bypassRoute_src; +#define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src) +XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_src_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_limiter___link) AX_surfxml_cluster_limiter___link; +#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link) +XBT_PUBLIC_DATA(short int) surfxml_cluster_limiter___link_isset; +XBT_PUBLIC_DATA(AT_surfxml_mstorage_typeId) AX_surfxml_mstorage_typeId; +#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId) +XBT_PUBLIC_DATA(short int) surfxml_mstorage_typeId_isset; +XBT_PUBLIC_DATA(AT_surfxml_random_seed) AX_surfxml_random_seed; +#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed) +XBT_PUBLIC_DATA(short int) surfxml_random_seed_isset; +XBT_PUBLIC_DATA(AT_surfxml_random_mean) AX_surfxml_random_mean; +#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean) +XBT_PUBLIC_DATA(short int) surfxml_random_mean_isset; +XBT_PUBLIC_DATA(AT_surfxml_link___ctn_id) AX_surfxml_link___ctn_id; +#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id) +XBT_PUBLIC_DATA(short int) surfxml_link___ctn_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_model___prop_value) AX_surfxml_model___prop_value; +#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value) +XBT_PUBLIC_DATA(short int) surfxml_model___prop_value_isset; +XBT_PUBLIC_DATA(AT_surfxml_peer_bw___out) AX_surfxml_peer_bw___out; +#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out) +XBT_PUBLIC_DATA(short int) surfxml_peer_bw___out_isset; +XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_src) AX_surfxml_bypassASroute_src; +#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src) +XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_src_isset; +XBT_PUBLIC_DATA(AT_surfxml_backbone_bandwidth) AX_surfxml_backbone_bandwidth; +#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth) +XBT_PUBLIC_DATA(short int) surfxml_backbone_bandwidth_isset; +XBT_PUBLIC_DATA(AT_surfxml_host___link_up) AX_surfxml_host___link_up; +#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up) +XBT_PUBLIC_DATA(short int) surfxml_host___link_up_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_topology) AX_surfxml_cluster_topology; +#define A_surfxml_cluster_topology AX_surfxml_cluster_topology +XBT_PUBLIC_DATA(short int) surfxml_cluster_topology_isset; +XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___src) AX_surfxml_ASroute_gw___src; +#define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src) +XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___src_isset; +XBT_PUBLIC_DATA(AT_surfxml_random_id) AX_surfxml_random_id; +#define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id) +XBT_PUBLIC_DATA(short int) surfxml_random_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_peer_power) AX_surfxml_peer_power; +#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power) +XBT_PUBLIC_DATA(short int) surfxml_peer_power_isset; XBT_PUBLIC_DATA(AT_surfxml_AS_routing) AX_surfxml_AS_routing; #define A_surfxml_AS_routing AX_surfxml_AS_routing XBT_PUBLIC_DATA(short int) surfxml_AS_routing_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_prefix) AX_surfxml_cluster_prefix; -#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix) -XBT_PUBLIC_DATA(short int) surfxml_cluster_prefix_isset; -XBT_PUBLIC_DATA(AT_surfxml_host_availability___file) AX_surfxml_host_availability___file; -#define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file) -XBT_PUBLIC_DATA(short int) surfxml_host_availability___file_isset; -XBT_PUBLIC_DATA(AT_surfxml_router_coordinates) AX_surfxml_router_coordinates; -#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates) -XBT_PUBLIC_DATA(short int) surfxml_router_coordinates_isset; -XBT_PUBLIC_DATA(AT_surfxml_random_max) AX_surfxml_random_max; -#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max) -XBT_PUBLIC_DATA(short int) surfxml_random_max_isset; +XBT_PUBLIC_DATA(AT_surfxml_process_start___time) AX_surfxml_process_start___time; +#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time) +XBT_PUBLIC_DATA(short int) surfxml_process_start___time_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_topo___parameters) AX_surfxml_cluster_topo___parameters; +#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters) +XBT_PUBLIC_DATA(short int) surfxml_cluster_topo___parameters_isset; +XBT_PUBLIC_DATA(AT_surfxml_route_dst) AX_surfxml_route_dst; +#define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst) +XBT_PUBLIC_DATA(short int) surfxml_route_dst_isset; +XBT_PUBLIC_DATA(AT_surfxml_host_coordinates) AX_surfxml_host_coordinates; +#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates) +XBT_PUBLIC_DATA(short int) surfxml_host_coordinates_isset; +XBT_PUBLIC_DATA(AT_surfxml_host___link_down) AX_surfxml_host___link_down; +#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down) +XBT_PUBLIC_DATA(short int) surfxml_host___link_down_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_radical) AX_surfxml_cluster_radical; +#define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical) +XBT_PUBLIC_DATA(short int) surfxml_cluster_radical_isset; +XBT_PUBLIC_DATA(AT_surfxml_config_id) AX_surfxml_config_id; +#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id) +XBT_PUBLIC_DATA(short int) surfxml_config_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_cabinet_power) AX_surfxml_cabinet_power; +#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power) +XBT_PUBLIC_DATA(short int) surfxml_cabinet_power_isset; +XBT_PUBLIC_DATA(AT_surfxml_model___prop_id) AX_surfxml_model___prop_id; +#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id) +XBT_PUBLIC_DATA(short int) surfxml_model___prop_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_peer_coordinates) AX_surfxml_peer_coordinates; +#define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates) +XBT_PUBLIC_DATA(short int) surfxml_peer_coordinates_isset; +XBT_PUBLIC_DATA(AT_surfxml_mstorage_name) AX_surfxml_mstorage_name; +#define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name) +XBT_PUBLIC_DATA(short int) surfxml_mstorage_name_isset; +XBT_PUBLIC_DATA(AT_surfxml_host___link_id) AX_surfxml_host___link_id; +#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id) +XBT_PUBLIC_DATA(short int) surfxml_host___link_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___bw) AX_surfxml_cluster_loopback___bw; +#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw) +XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___bw_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_suffix) AX_surfxml_cluster_suffix; #define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix) XBT_PUBLIC_DATA(short int) surfxml_cluster_suffix_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_id) AX_surfxml_cluster_id; -#define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id) -XBT_PUBLIC_DATA(short int) surfxml_cluster_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_router___id) AX_surfxml_cluster_router___id; +#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id) +XBT_PUBLIC_DATA(short int) surfxml_cluster_router___id_isset; +XBT_PUBLIC_DATA(AT_surfxml_prop_id) AX_surfxml_prop_id; +#define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id) +XBT_PUBLIC_DATA(short int) surfxml_prop_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_backbone_id) AX_surfxml_backbone_id; +#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id) +XBT_PUBLIC_DATA(short int) surfxml_backbone_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_link_state___file) AX_surfxml_link_state___file; +#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file) +XBT_PUBLIC_DATA(short int) surfxml_link_state___file_isset; +XBT_PUBLIC_DATA(AT_surfxml_cabinet_lat) AX_surfxml_cabinet_lat; +#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat) +XBT_PUBLIC_DATA(short int) surfxml_cabinet_lat_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; +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_random_radical) AX_surfxml_random_radical; +#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical) +XBT_PUBLIC_DATA(short int) surfxml_random_radical_isset; XBT_PUBLIC_DATA(AT_surfxml_cluster_power) AX_surfxml_cluster_power; #define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power) XBT_PUBLIC_DATA(short int) surfxml_cluster_power_isset; XBT_PUBLIC_DATA(AT_surfxml_trace___connect_element) AX_surfxml_trace___connect_element; #define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element) XBT_PUBLIC_DATA(short int) surfxml_trace___connect_element_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___bw) AX_surfxml_cluster_loopback___bw; -#define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw) -XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___bw_isset; -XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_dst) AX_surfxml_bypassRoute_dst; -#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst) -XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_dst_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_availability___file) AX_surfxml_cluster_availability___file; -#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file) -XBT_PUBLIC_DATA(short int) surfxml_cluster_availability___file_isset; +XBT_PUBLIC_DATA(AT_surfxml_link_latency) AX_surfxml_link_latency; +#define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency) +XBT_PUBLIC_DATA(short int) surfxml_link_latency_isset; +XBT_PUBLIC_DATA(AT_surfxml_host_state) AX_surfxml_host_state; +#define A_surfxml_host_state AX_surfxml_host_state +XBT_PUBLIC_DATA(short int) surfxml_host_state_isset; +XBT_PUBLIC_DATA(AT_surfxml_host_core) AX_surfxml_host_core; +#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core) +XBT_PUBLIC_DATA(short int) surfxml_host_core_isset; +XBT_PUBLIC_DATA(AT_surfxml_storage___type_size) AX_surfxml_storage___type_size; +#define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size) +XBT_PUBLIC_DATA(short int) surfxml_storage___type_size_isset; XBT_PUBLIC_DATA(AT_surfxml_mount_name) AX_surfxml_mount_name; #define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name) XBT_PUBLIC_DATA(short int) surfxml_mount_name_isset; -XBT_PUBLIC_DATA(AT_surfxml_host_pstate) AX_surfxml_host_pstate; -#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate) -XBT_PUBLIC_DATA(short int) surfxml_host_pstate_isset; -XBT_PUBLIC_DATA(AT_surfxml_ASroute_dst) AX_surfxml_ASroute_dst; -#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst) -XBT_PUBLIC_DATA(short int) surfxml_ASroute_dst_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_cluster_topo___parameters) AX_surfxml_cluster_topo___parameters; -#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters) -XBT_PUBLIC_DATA(short int) surfxml_cluster_topo___parameters_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; -XBT_PUBLIC_DATA(AT_surfxml_cluster_core) AX_surfxml_cluster_core; -#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core) -XBT_PUBLIC_DATA(short int) surfxml_cluster_core_isset; -XBT_PUBLIC_DATA(AT_surfxml_AS_id) AX_surfxml_AS_id; -#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id) -XBT_PUBLIC_DATA(short int) surfxml_AS_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_peer_lat) AX_surfxml_peer_lat; -#define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat) -XBT_PUBLIC_DATA(short int) surfxml_peer_lat_isset; -XBT_PUBLIC_DATA(AT_surfxml_config_id) AX_surfxml_config_id; -#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id) -XBT_PUBLIC_DATA(short int) surfxml_config_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___dst) AX_surfxml_ASroute_gw___dst; -#define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst) -XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___dst_isset; -XBT_PUBLIC_DATA(AT_surfxml_process_function) AX_surfxml_process_function; -#define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function) -XBT_PUBLIC_DATA(short int) surfxml_process_function_isset; -XBT_PUBLIC_DATA(AT_surfxml_link___ctn_id) AX_surfxml_link___ctn_id; -#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id) -XBT_PUBLIC_DATA(short int) surfxml_link___ctn_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_trace___connect_trace) AX_surfxml_trace___connect_trace; -#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace) -XBT_PUBLIC_DATA(short int) surfxml_trace___connect_trace_isset; -XBT_PUBLIC_DATA(AT_surfxml_route_dst) AX_surfxml_route_dst; -#define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst) -XBT_PUBLIC_DATA(short int) surfxml_route_dst_isset; -XBT_PUBLIC_DATA(AT_surfxml_random_std___deviation) AX_surfxml_random_std___deviation; -#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation) -XBT_PUBLIC_DATA(short int) surfxml_random_std___deviation_isset; -XBT_PUBLIC_DATA(AT_surfxml_process_start___time) AX_surfxml_process_start___time; -#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time) -XBT_PUBLIC_DATA(short int) surfxml_process_start___time_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_lat) AX_surfxml_cluster_lat; -#define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat) -XBT_PUBLIC_DATA(short int) surfxml_cluster_lat_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; -XBT_PUBLIC_DATA(AT_surfxml_trace_id) AX_surfxml_trace_id; -#define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id) -XBT_PUBLIC_DATA(short int) surfxml_trace_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_gpu_name) AX_surfxml_gpu_name; -#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name) -XBT_PUBLIC_DATA(short int) surfxml_gpu_name_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_topology) AX_surfxml_cluster_topology; -#define A_surfxml_cluster_topology AX_surfxml_cluster_topology -XBT_PUBLIC_DATA(short int) surfxml_cluster_topology_isset; -XBT_PUBLIC_DATA(AT_surfxml_cabinet_suffix) AX_surfxml_cabinet_suffix; -#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix) -XBT_PUBLIC_DATA(short int) surfxml_cabinet_suffix_isset; -XBT_PUBLIC_DATA(AT_surfxml_peer_coordinates) AX_surfxml_peer_coordinates; -#define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates) -XBT_PUBLIC_DATA(short int) surfxml_peer_coordinates_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_state___file) AX_surfxml_cluster_state___file; -#define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file) -XBT_PUBLIC_DATA(short int) surfxml_cluster_state___file_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_id) AX_surfxml_cluster_id; +#define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id) +XBT_PUBLIC_DATA(short int) surfxml_cluster_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_peer_state___file) AX_surfxml_peer_state___file; +#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file) +XBT_PUBLIC_DATA(short int) surfxml_peer_state___file_isset; +XBT_PUBLIC_DATA(AT_surfxml_host_state___file) AX_surfxml_host_state___file; +#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file) +XBT_PUBLIC_DATA(short int) surfxml_host_state___file_isset; +XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_dst) AX_surfxml_bypassASroute_dst; +#define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst) +XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_dst_isset; +XBT_PUBLIC_DATA(AT_surfxml_link_state) AX_surfxml_link_state; +#define A_surfxml_link_state AX_surfxml_link_state +XBT_PUBLIC_DATA(short int) surfxml_link_state_isset; XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___dst) AX_surfxml_bypassASroute_gw___dst; #define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst) XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___dst_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_process_host) AX_surfxml_process_host; -#define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host) -XBT_PUBLIC_DATA(short int) surfxml_process_host_isset; -XBT_PUBLIC_DATA(AT_surfxml_ASroute_symmetrical) AX_surfxml_ASroute_symmetrical; -#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical -XBT_PUBLIC_DATA(short int) surfxml_ASroute_symmetrical_isset; -XBT_PUBLIC_DATA(AT_surfxml_trace_periodicity) AX_surfxml_trace_periodicity; -#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity) -XBT_PUBLIC_DATA(short int) surfxml_trace_periodicity_isset; -XBT_PUBLIC_DATA(AT_surfxml_include_file) AX_surfxml_include_file; -#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file) -XBT_PUBLIC_DATA(short int) surfxml_include_file_isset; -XBT_PUBLIC_DATA(AT_surfxml_peer_bw___out) AX_surfxml_peer_bw___out; -#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out) -XBT_PUBLIC_DATA(short int) surfxml_peer_bw___out_isset; +XBT_PUBLIC_DATA(AT_surfxml_random_std___deviation) AX_surfxml_random_std___deviation; +#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation) +XBT_PUBLIC_DATA(short int) surfxml_random_std___deviation_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___bw) AX_surfxml_cluster_bb___bw; +#define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw) +XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___bw_isset; +XBT_PUBLIC_DATA(AT_surfxml_trace___connect_trace) AX_surfxml_trace___connect_trace; +#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace) +XBT_PUBLIC_DATA(short int) surfxml_trace___connect_trace_isset; +XBT_PUBLIC_DATA(AT_surfxml_peer_lat) AX_surfxml_peer_lat; +#define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat) +XBT_PUBLIC_DATA(short int) surfxml_peer_lat_isset; +XBT_PUBLIC_DATA(AT_surfxml_cabinet_bw) AX_surfxml_cabinet_bw; +#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw) +XBT_PUBLIC_DATA(short int) surfxml_cabinet_bw_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_prefix) AX_surfxml_cluster_prefix; +#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix) +XBT_PUBLIC_DATA(short int) surfxml_cluster_prefix_isset; XBT_PUBLIC_DATA(AT_surfxml_storage_attach) AX_surfxml_storage_attach; #define A_surfxml_storage_attach (surfxml_bufferstack + AX_surfxml_storage_attach) XBT_PUBLIC_DATA(short int) surfxml_storage_attach_isset; -XBT_PUBLIC_DATA(AT_surfxml_peer_power) AX_surfxml_peer_power; -#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power) -XBT_PUBLIC_DATA(short int) surfxml_peer_power_isset; -XBT_PUBLIC_DATA(AT_surfxml_route_src) AX_surfxml_route_src; -#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src) -XBT_PUBLIC_DATA(short int) surfxml_route_src_isset; -XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth___file) AX_surfxml_link_bandwidth___file; -#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file) -XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth___file_isset; -XBT_PUBLIC_DATA(AT_surfxml_mount_storageId) AX_surfxml_mount_storageId; -#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId) -XBT_PUBLIC_DATA(short int) surfxml_mount_storageId_isset; -XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_dst) AX_surfxml_bypassASroute_dst; -#define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst) -XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_dst_isset; -XBT_PUBLIC_DATA(AT_surfxml_cabinet_power) AX_surfxml_cabinet_power; -#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power) -XBT_PUBLIC_DATA(short int) surfxml_cabinet_power_isset; -XBT_PUBLIC_DATA(AT_surfxml_trace_file) AX_surfxml_trace_file; -#define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file) -XBT_PUBLIC_DATA(short int) surfxml_trace_file_isset; +XBT_PUBLIC_DATA(AT_surfxml_random_min) AX_surfxml_random_min; +#define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min) +XBT_PUBLIC_DATA(short int) surfxml_random_min_isset; XBT_PUBLIC_DATA(AT_surfxml_trace___connect_kind) AX_surfxml_trace___connect_kind; #define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind XBT_PUBLIC_DATA(short int) surfxml_trace___connect_kind_isset; -XBT_PUBLIC_DATA(AT_surfxml_prop_value) AX_surfxml_prop_value; -#define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value) -XBT_PUBLIC_DATA(short int) surfxml_prop_value_isset; -XBT_PUBLIC_DATA(AT_surfxml_link___ctn_direction) AX_surfxml_link___ctn_direction; -#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction -XBT_PUBLIC_DATA(short int) surfxml_link___ctn_direction_isset; -XBT_PUBLIC_DATA(AT_surfxml_random_radical) AX_surfxml_random_radical; -#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical) -XBT_PUBLIC_DATA(short int) surfxml_random_radical_isset; -XBT_PUBLIC_DATA(AT_surfxml_host_coordinates) AX_surfxml_host_coordinates; -#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates) -XBT_PUBLIC_DATA(short int) surfxml_host_coordinates_isset; -XBT_PUBLIC_DATA(AT_surfxml_prop_id) AX_surfxml_prop_id; -#define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id) -XBT_PUBLIC_DATA(short int) surfxml_prop_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_router_coordinates) AX_surfxml_router_coordinates; +#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates) +XBT_PUBLIC_DATA(short int) surfxml_router_coordinates_isset; +XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___src) AX_surfxml_bypassASroute_gw___src; +#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src) +XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___src_isset; +XBT_PUBLIC_DATA(AT_surfxml_backbone_latency) AX_surfxml_backbone_latency; +#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency) +XBT_PUBLIC_DATA(short int) surfxml_backbone_latency_isset; XBT_PUBLIC_DATA(AT_surfxml_host_id) AX_surfxml_host_id; #define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id) XBT_PUBLIC_DATA(short int) surfxml_host_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_host_availability) AX_surfxml_host_availability; -#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability) -XBT_PUBLIC_DATA(short int) surfxml_host_availability_isset; -XBT_PUBLIC_DATA(AT_surfxml_storage___type_size) AX_surfxml_storage___type_size; -#define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size) -XBT_PUBLIC_DATA(short int) surfxml_storage___type_size_isset; -XBT_PUBLIC_DATA(AT_surfxml_cabinet_prefix) AX_surfxml_cabinet_prefix; -#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix) -XBT_PUBLIC_DATA(short int) surfxml_cabinet_prefix_isset; -XBT_PUBLIC_DATA(AT_surfxml_host___link_up) AX_surfxml_host___link_up; -#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up) -XBT_PUBLIC_DATA(short int) surfxml_host___link_up_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_limiter___link) AX_surfxml_cluster_limiter___link; -#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link) -XBT_PUBLIC_DATA(short int) surfxml_cluster_limiter___link_isset; +XBT_PUBLIC_DATA(AT_surfxml_AS_id) AX_surfxml_AS_id; +#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id) +XBT_PUBLIC_DATA(short int) surfxml_AS_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_state___file) AX_surfxml_cluster_state___file; +#define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file) +XBT_PUBLIC_DATA(short int) surfxml_cluster_state___file_isset; XBT_PUBLIC_DATA(AT_surfxml_peer_bw___in) AX_surfxml_peer_bw___in; #define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in) XBT_PUBLIC_DATA(short int) surfxml_peer_bw___in_isset; -XBT_PUBLIC_DATA(AT_surfxml_link_bandwidth) AX_surfxml_link_bandwidth; -#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth) -XBT_PUBLIC_DATA(short int) surfxml_link_bandwidth_isset; -XBT_PUBLIC_DATA(AT_surfxml_random_seed) AX_surfxml_random_seed; -#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed) -XBT_PUBLIC_DATA(short int) surfxml_random_seed_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_bw) AX_surfxml_cluster_bw; -#define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw) -XBT_PUBLIC_DATA(short int) surfxml_cluster_bw_isset; -XBT_PUBLIC_DATA(AT_surfxml_cabinet_lat) AX_surfxml_cabinet_lat; -#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat) -XBT_PUBLIC_DATA(short int) surfxml_cabinet_lat_isset; -XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_src) AX_surfxml_bypassASroute_src; -#define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src) -XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_src_isset; -XBT_PUBLIC_DATA(AT_surfxml_random_min) AX_surfxml_random_min; -#define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min) -XBT_PUBLIC_DATA(short int) surfxml_random_min_isset; -XBT_PUBLIC_DATA(AT_surfxml_cabinet_id) AX_surfxml_cabinet_id; -#define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id) -XBT_PUBLIC_DATA(short int) surfxml_cabinet_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_bypassASroute_gw___src) AX_surfxml_bypassASroute_gw___src; -#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src) -XBT_PUBLIC_DATA(short int) surfxml_bypassASroute_gw___src_isset; +XBT_PUBLIC_DATA(AT_surfxml_ASroute_dst) AX_surfxml_ASroute_dst; +#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst) +XBT_PUBLIC_DATA(short int) surfxml_ASroute_dst_isset; +XBT_PUBLIC_DATA(AT_surfxml_trace_file) AX_surfxml_trace_file; +#define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file) +XBT_PUBLIC_DATA(short int) surfxml_trace_file_isset; +XBT_PUBLIC_DATA(AT_surfxml_router_id) AX_surfxml_router_id; +#define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id) +XBT_PUBLIC_DATA(short int) surfxml_router_id_isset; +XBT_PUBLIC_DATA(AT_surfxml_prop_value) AX_surfxml_prop_value; +#define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value) +XBT_PUBLIC_DATA(short int) surfxml_prop_value_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; +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_link_sharing___policy) AX_surfxml_link_sharing___policy; +#define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy +XBT_PUBLIC_DATA(short int) surfxml_link_sharing___policy_isset; XBT_PUBLIC_DATA(AT_surfxml_process_on___failure) AX_surfxml_process_on___failure; #define A_surfxml_process_on___failure AX_surfxml_process_on___failure XBT_PUBLIC_DATA(short int) surfxml_process_on___failure_isset; +XBT_PUBLIC_DATA(AT_surfxml_host_power) AX_surfxml_host_power; +#define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power) +XBT_PUBLIC_DATA(short int) surfxml_host_power_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_availability___file) AX_surfxml_cluster_availability___file; +#define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file) +XBT_PUBLIC_DATA(short int) surfxml_cluster_availability___file_isset; XBT_PUBLIC_DATA(AT_surfxml_platform_version) AX_surfxml_platform_version; #define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version) XBT_PUBLIC_DATA(short int) surfxml_platform_version_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___sharing___policy) AX_surfxml_cluster_bb___sharing___policy; -#define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy -XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___sharing___policy_isset; -XBT_PUBLIC_DATA(AT_surfxml_backbone_id) AX_surfxml_backbone_id; -#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id) -XBT_PUBLIC_DATA(short int) surfxml_backbone_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_model___prop_id) AX_surfxml_model___prop_id; -#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id) -XBT_PUBLIC_DATA(short int) surfxml_model___prop_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_sharing___policy) AX_surfxml_cluster_sharing___policy; -#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy -XBT_PUBLIC_DATA(short int) surfxml_cluster_sharing___policy_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_router___id) AX_surfxml_cluster_router___id; -#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id) -XBT_PUBLIC_DATA(short int) surfxml_cluster_router___id_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_loopback___lat) AX_surfxml_cluster_loopback___lat; -#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat) -XBT_PUBLIC_DATA(short int) surfxml_cluster_loopback___lat_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_radical) AX_surfxml_cluster_radical; -#define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical) -XBT_PUBLIC_DATA(short int) surfxml_cluster_radical_isset; -XBT_PUBLIC_DATA(AT_surfxml_mstorage_name) AX_surfxml_mstorage_name; -#define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name) -XBT_PUBLIC_DATA(short int) surfxml_mstorage_name_isset; -XBT_PUBLIC_DATA(AT_surfxml_peer_id) AX_surfxml_peer_id; -#define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id) -XBT_PUBLIC_DATA(short int) surfxml_peer_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_peer_availability___file) AX_surfxml_peer_availability___file; -#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file) -XBT_PUBLIC_DATA(short int) surfxml_peer_availability___file_isset; -XBT_PUBLIC_DATA(AT_surfxml_link_state) AX_surfxml_link_state; -#define A_surfxml_link_state AX_surfxml_link_state -XBT_PUBLIC_DATA(short int) surfxml_link_state_isset; -XBT_PUBLIC_DATA(AT_surfxml_mstorage_typeId) AX_surfxml_mstorage_typeId; -#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId) -XBT_PUBLIC_DATA(short int) surfxml_mstorage_typeId_isset; -XBT_PUBLIC_DATA(AT_surfxml_storage_typeId) AX_surfxml_storage_typeId; -#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId) -XBT_PUBLIC_DATA(short int) surfxml_storage_typeId_isset; -XBT_PUBLIC_DATA(AT_surfxml_random_mean) AX_surfxml_random_mean; -#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean) -XBT_PUBLIC_DATA(short int) surfxml_random_mean_isset; -XBT_PUBLIC_DATA(AT_surfxml_backbone_bandwidth) AX_surfxml_backbone_bandwidth; -#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth) -XBT_PUBLIC_DATA(short int) surfxml_backbone_bandwidth_isset; -XBT_PUBLIC_DATA(AT_surfxml_cabinet_radical) AX_surfxml_cabinet_radical; -#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical) -XBT_PUBLIC_DATA(short int) surfxml_cabinet_radical_isset; +XBT_PUBLIC_DATA(AT_surfxml_host_availability) AX_surfxml_host_availability; +#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability) +XBT_PUBLIC_DATA(short int) surfxml_host_availability_isset; +XBT_PUBLIC_DATA(AT_surfxml_mount_storageId) AX_surfxml_mount_storageId; +#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId) +XBT_PUBLIC_DATA(short int) surfxml_mount_storageId_isset; +XBT_PUBLIC_DATA(AT_surfxml_host_pstate) AX_surfxml_host_pstate; +#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate) +XBT_PUBLIC_DATA(short int) surfxml_host_pstate_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_bw) AX_surfxml_cluster_bw; +#define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw) +XBT_PUBLIC_DATA(short int) surfxml_cluster_bw_isset; XBT_PUBLIC_DATA(AT_surfxml_argument_value) AX_surfxml_argument_value; #define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value) XBT_PUBLIC_DATA(short int) surfxml_argument_value_isset; -XBT_PUBLIC_DATA(AT_surfxml_model___prop_value) AX_surfxml_model___prop_value; -#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value) -XBT_PUBLIC_DATA(short int) surfxml_model___prop_value_isset; -XBT_PUBLIC_DATA(AT_surfxml_host___link_down) AX_surfxml_host___link_down; -#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down) -XBT_PUBLIC_DATA(short int) surfxml_host___link_down_isset; -XBT_PUBLIC_DATA(AT_surfxml_host_power) AX_surfxml_host_power; -#define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power) -XBT_PUBLIC_DATA(short int) surfxml_host_power_isset; -XBT_PUBLIC_DATA(AT_surfxml_process_kill___time) AX_surfxml_process_kill___time; -#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time) -XBT_PUBLIC_DATA(short int) surfxml_process_kill___time_isset; -XBT_PUBLIC_DATA(AT_surfxml_bypassRoute_src) AX_surfxml_bypassRoute_src; -#define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src) -XBT_PUBLIC_DATA(short int) surfxml_bypassRoute_src_isset; XBT_PUBLIC_DATA(AT_surfxml_route_symmetrical) AX_surfxml_route_symmetrical; #define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical XBT_PUBLIC_DATA(short int) surfxml_route_symmetrical_isset; +XBT_PUBLIC_DATA(AT_surfxml_route_src) AX_surfxml_route_src; +#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src) +XBT_PUBLIC_DATA(short int) surfxml_route_src_isset; +XBT_PUBLIC_DATA(AT_surfxml_peer_availability___file) AX_surfxml_peer_availability___file; +#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file) +XBT_PUBLIC_DATA(short int) surfxml_peer_availability___file_isset; +XBT_PUBLIC_DATA(AT_surfxml_ASroute_symmetrical) AX_surfxml_ASroute_symmetrical; +#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical +XBT_PUBLIC_DATA(short int) surfxml_ASroute_symmetrical_isset; +XBT_PUBLIC_DATA(AT_surfxml_cluster_sharing___policy) AX_surfxml_cluster_sharing___policy; +#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy +XBT_PUBLIC_DATA(short int) surfxml_cluster_sharing___policy_isset; +XBT_PUBLIC_DATA(AT_surfxml_gpu_name) AX_surfxml_gpu_name; +#define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name) +XBT_PUBLIC_DATA(short int) surfxml_gpu_name_isset; XBT_PUBLIC_DATA(AT_surfxml_storage___type_model) AX_surfxml_storage___type_model; #define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model) XBT_PUBLIC_DATA(short int) surfxml_storage___type_model_isset; -XBT_PUBLIC_DATA(AT_surfxml_cluster_bb___lat) AX_surfxml_cluster_bb___lat; -#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat) -XBT_PUBLIC_DATA(short int) surfxml_cluster_bb___lat_isset; -XBT_PUBLIC_DATA(AT_surfxml_link_latency) AX_surfxml_link_latency; -#define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency) -XBT_PUBLIC_DATA(short int) surfxml_link_latency_isset; -XBT_PUBLIC_DATA(AT_surfxml_router_id) AX_surfxml_router_id; -#define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id) -XBT_PUBLIC_DATA(short int) surfxml_router_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_link_latency___file) AX_surfxml_link_latency___file; -#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file) -XBT_PUBLIC_DATA(short int) surfxml_link_latency___file_isset; -XBT_PUBLIC_DATA(AT_surfxml_host_state___file) AX_surfxml_host_state___file; -#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file) -XBT_PUBLIC_DATA(short int) surfxml_host_state___file_isset; -XBT_PUBLIC_DATA(AT_surfxml_link_id) AX_surfxml_link_id; -#define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id) -XBT_PUBLIC_DATA(short int) surfxml_link_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_peer_state___file) AX_surfxml_peer_state___file; -#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file) -XBT_PUBLIC_DATA(short int) surfxml_peer_state___file_isset; -XBT_PUBLIC_DATA(AT_surfxml_ASroute_gw___src) AX_surfxml_ASroute_gw___src; -#define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src) -XBT_PUBLIC_DATA(short int) surfxml_ASroute_gw___src_isset; -XBT_PUBLIC_DATA(AT_surfxml_random_id) AX_surfxml_random_id; -#define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id) -XBT_PUBLIC_DATA(short int) surfxml_random_id_isset; -XBT_PUBLIC_DATA(AT_surfxml_backbone_latency) AX_surfxml_backbone_latency; -#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency) -XBT_PUBLIC_DATA(short int) surfxml_backbone_latency_isset; -XBT_PUBLIC_DATA(AT_surfxml_link_state___file) AX_surfxml_link_state___file; -#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file) -XBT_PUBLIC_DATA(short int) surfxml_link_state___file_isset; -XBT_PUBLIC_DATA(AT_surfxml_ASroute_src) AX_surfxml_ASroute_src; -#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src) -XBT_PUBLIC_DATA(short int) surfxml_ASroute_src_isset; -XBT_PUBLIC_DATA(AT_surfxml_link_sharing___policy) AX_surfxml_link_sharing___policy; -#define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy -XBT_PUBLIC_DATA(short int) surfxml_link_sharing___policy_isset; -XBT_PUBLIC_DATA(AT_surfxml_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_host_core) AX_surfxml_host_core; -#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core) -XBT_PUBLIC_DATA(short int) surfxml_host_core_isset; /* XML application utilities. */ XBT_PUBLIC(int) surfxml_element_context(int); diff --git a/include/xbt.h b/include/xbt.h index 21dd04cdd3..33a913098d 100644 --- a/include/xbt.h +++ b/include/xbt.h @@ -33,5 +33,6 @@ #include #include +#include #endif /* xbt_H */ diff --git a/include/xbt/graphxml.h b/include/xbt/graphxml.h index fe4e654081..671ec3bbbd 100644 --- a/include/xbt/graphxml.h +++ b/include/xbt/graphxml.h @@ -56,70 +56,70 @@ XBT_PUBLIC(void) STag_graphxml_edge(void); XBT_PUBLIC(void) ETag_graphxml_edge(void); /* XML application data. */ -typedef int AT_graphxml_node_position___x; -#define AU_graphxml_node_position___x NULL -typedef int AT_graphxml_node_data; -#define AU_graphxml_node_data NULL typedef int AT_graphxml_edge_source; #define AU_graphxml_edge_source NULL +typedef int AT_graphxml_node_name; +#define AU_graphxml_node_name NULL +typedef int AT_graphxml_node_data; +#define AU_graphxml_node_data NULL typedef int AT_graphxml_node_position___y; #define AU_graphxml_node_position___y NULL typedef enum { AU_graphxml_graph_isDirected, A_graphxml_graph_isDirected_true,A_graphxml_graph_isDirected_false } AT_graphxml_graph_isDirected; -typedef int AT_graphxml_edge_label; -#define AU_graphxml_edge_label NULL -typedef int AT_graphxml_edge_length; -#define AU_graphxml_edge_length NULL -typedef int AT_graphxml_node_name; -#define AU_graphxml_node_name NULL -typedef int AT_graphxml_edge_name; -#define AU_graphxml_edge_name NULL typedef int AT_graphxml_edge_data; #define AU_graphxml_edge_data NULL -typedef int AT_graphxml_edge_target; -#define AU_graphxml_edge_target NULL +typedef int AT_graphxml_edge_name; +#define AU_graphxml_edge_name NULL +typedef int AT_graphxml_edge_length; +#define AU_graphxml_edge_length NULL +typedef int AT_graphxml_edge_label; +#define AU_graphxml_edge_label NULL +typedef int AT_graphxml_node_position___x; +#define AU_graphxml_node_position___x NULL typedef int AT_graphxml_node_label; #define AU_graphxml_node_label NULL +typedef int AT_graphxml_edge_target; +#define AU_graphxml_edge_target NULL /* FleXML-provided data. */ XBT_PUBLIC_DATA(int) graphxml_pcdata_ix; XBT_PUBLIC_DATA(char *) graphxml_bufferstack; #define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix) -XBT_PUBLIC_DATA(AT_graphxml_node_position___x) AX_graphxml_node_position___x; -#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x) -XBT_PUBLIC_DATA(short int) graphxml_node_position___x_isset; -XBT_PUBLIC_DATA(AT_graphxml_node_data) AX_graphxml_node_data; -#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data) -XBT_PUBLIC_DATA(short int) graphxml_node_data_isset; XBT_PUBLIC_DATA(AT_graphxml_edge_source) AX_graphxml_edge_source; #define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source) XBT_PUBLIC_DATA(short int) graphxml_edge_source_isset; +XBT_PUBLIC_DATA(AT_graphxml_node_name) AX_graphxml_node_name; +#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name) +XBT_PUBLIC_DATA(short int) graphxml_node_name_isset; +XBT_PUBLIC_DATA(AT_graphxml_node_data) AX_graphxml_node_data; +#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data) +XBT_PUBLIC_DATA(short int) graphxml_node_data_isset; XBT_PUBLIC_DATA(AT_graphxml_node_position___y) AX_graphxml_node_position___y; #define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y) XBT_PUBLIC_DATA(short int) graphxml_node_position___y_isset; XBT_PUBLIC_DATA(AT_graphxml_graph_isDirected) AX_graphxml_graph_isDirected; #define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected XBT_PUBLIC_DATA(short int) graphxml_graph_isDirected_isset; -XBT_PUBLIC_DATA(AT_graphxml_edge_label) AX_graphxml_edge_label; -#define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label) -XBT_PUBLIC_DATA(short int) graphxml_edge_label_isset; -XBT_PUBLIC_DATA(AT_graphxml_edge_length) AX_graphxml_edge_length; -#define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length) -XBT_PUBLIC_DATA(short int) graphxml_edge_length_isset; -XBT_PUBLIC_DATA(AT_graphxml_node_name) AX_graphxml_node_name; -#define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name) -XBT_PUBLIC_DATA(short int) graphxml_node_name_isset; -XBT_PUBLIC_DATA(AT_graphxml_edge_name) AX_graphxml_edge_name; -#define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name) -XBT_PUBLIC_DATA(short int) graphxml_edge_name_isset; XBT_PUBLIC_DATA(AT_graphxml_edge_data) AX_graphxml_edge_data; #define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data) XBT_PUBLIC_DATA(short int) graphxml_edge_data_isset; -XBT_PUBLIC_DATA(AT_graphxml_edge_target) AX_graphxml_edge_target; -#define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target) -XBT_PUBLIC_DATA(short int) graphxml_edge_target_isset; +XBT_PUBLIC_DATA(AT_graphxml_edge_name) AX_graphxml_edge_name; +#define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name) +XBT_PUBLIC_DATA(short int) graphxml_edge_name_isset; +XBT_PUBLIC_DATA(AT_graphxml_edge_length) AX_graphxml_edge_length; +#define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length) +XBT_PUBLIC_DATA(short int) graphxml_edge_length_isset; +XBT_PUBLIC_DATA(AT_graphxml_edge_label) AX_graphxml_edge_label; +#define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label) +XBT_PUBLIC_DATA(short int) graphxml_edge_label_isset; +XBT_PUBLIC_DATA(AT_graphxml_node_position___x) AX_graphxml_node_position___x; +#define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x) +XBT_PUBLIC_DATA(short int) graphxml_node_position___x_isset; XBT_PUBLIC_DATA(AT_graphxml_node_label) AX_graphxml_node_label; #define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label) XBT_PUBLIC_DATA(short int) graphxml_node_label_isset; +XBT_PUBLIC_DATA(AT_graphxml_edge_target) AX_graphxml_edge_target; +#define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target) +XBT_PUBLIC_DATA(short int) graphxml_edge_target_isset; /* XML application utilities. */ XBT_PUBLIC(int) graphxml_element_context(int); diff --git a/include/xbt/mmalloc.h b/include/xbt/mmalloc.h index f7c6f4ac41..fcf2fecb3b 100644 --- a/include/xbt/mmalloc.h +++ b/include/xbt/mmalloc.h @@ -64,13 +64,12 @@ void mmalloc_set_current_heap(xbt_mheap_t new_heap); xbt_mheap_t mmalloc_get_current_heap(void); struct s_mc_snapshot; - -typedef struct s_dw_type *dw_type_t; +struct s_dw_type; int mmalloc_compare_heap(struct s_mc_snapshot* snapshot1, struct s_mc_snapshot* snapshot2, xbt_mheap_t heap1, xbt_mheap_t heap2); int mmalloc_linear_compare_heap(xbt_mheap_t heap1, xbt_mheap_t heap2); int init_heap_information(xbt_mheap_t heap1, xbt_mheap_t heap2, xbt_dynar_t to_ignore1, xbt_dynar_t to_ignore2); -int compare_heap_area(void *area1, void* area2, struct s_mc_snapshot* snapshot1, struct s_mc_snapshot* snapshot2, xbt_dynar_t previous, dw_type_t type, int pointer_level); +int compare_heap_area(void *area1, void* area2, struct s_mc_snapshot* snapshot1, struct s_mc_snapshot* snapshot2, xbt_dynar_t previous, struct s_dw_type *type, int pointer_level); void reset_heap_information(void); size_t mmalloc_get_bytes_used(xbt_mheap_t); diff --git a/include/xbt/synchro_core.h b/include/xbt/synchro_core.h index c41c26c648..d4274884c7 100644 --- a/include/xbt/synchro_core.h +++ b/include/xbt/synchro_core.h @@ -106,6 +106,13 @@ XBT_PUBLIC(void) xbt_cond_broadcast(xbt_cond_t cond); /** @brief Destroys the given mutex variable */ XBT_PUBLIC(void) xbt_cond_destroy(xbt_cond_t cond); + +#define XBT_BARRIER_SERIAL_PROCESS -1 +typedef struct s_xbt_bar_ *xbt_bar_t; +XBT_PUBLIC(xbt_bar_t) xbt_barrier_init( unsigned int count); +XBT_PUBLIC(void) xbt_barrier_destroy(xbt_bar_t bar); +XBT_PUBLIC(int) xbt_barrier_wait(xbt_bar_t bar); + /** @} */ SG_END_DECL() diff --git a/src/include/xbt/xbt_os_time.h b/include/xbt/xbt_os_time.h similarity index 87% rename from src/include/xbt/xbt_os_time.h rename to include/xbt/xbt_os_time.h index 90b1304ee1..0b1341aa29 100644 --- a/src/include/xbt/xbt_os_time.h +++ b/include/xbt/xbt_os_time.h @@ -1,5 +1,4 @@ -/* xbt/xbt_portability.h -- all system dependency */ -/* Private portability layer */ +/* xbt/xbt_os_timer.h -- system dependency on time functions */ /* Copyright (c) 2007, 2009-2010, 2012-2014. The SimGrid Team. * All rights reserved. */ @@ -7,8 +6,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_PORTABILITY_H -#define _XBT_PORTABILITY_H +#ifndef _XBT_OS_TIMER_H +#define _XBT_OS_TIMER_H #include /* XBT_PUBLIC */ diff --git a/src/bindings/java/jmsg_host.c b/src/bindings/java/jmsg_host.c index 81ed7f7340..a7d54a38b0 100644 --- a/src/bindings/java/jmsg_host.c +++ b/src/bindings/java/jmsg_host.c @@ -69,11 +69,11 @@ Java_org_simgrid_msg_Host_getByName(JNIEnv * env, jclass cls, jobject jhost; /* global reference to the java host instance returned */ /* get the C string from the java string */ - const char *name = (*env)->GetStringUTFChars(env, jname, 0); - if (name == NULL) { + if (jname == NULL) { jxbt_throw_null(env,bprintf("No host can have a null name")); return NULL; } + const char *name = (*env)->GetStringUTFChars(env, jname, 0); /* get the host by name (the hosts are created during the grid resolution) */ host = MSG_get_host_by_name(name); diff --git a/src/bindings/java/org/simgrid/surf/CpuModel.java b/src/bindings/java/org/simgrid/surf/CpuModel.java index 466308afbf..b5572a836a 100644 --- a/src/bindings/java/org/simgrid/surf/CpuModel.java +++ b/src/bindings/java/org/simgrid/surf/CpuModel.java @@ -81,13 +81,9 @@ public class CpuModel extends Model { * @return The new Cpu * @see Cpu */ - public Cpu createResource(String name, double[] power_peak, int pstate, double power_scale, TmgrTrace power_trace, int core, ResourceState state_initial, TmgrTrace state_trace, XbtDict cpu_properties) { - long cPtr = SurfJNI.CpuModel_createResource(swigCPtr, this, name, power_peak, pstate, power_scale, TmgrTrace.getCPtr(power_trace), power_trace, core, state_initial.swigValue(), TmgrTrace.getCPtr(state_trace), state_trace, XbtDict.getCPtr(cpu_properties), cpu_properties); + public Cpu createCpu(String name, double[] power_peak, int pstate, double power_scale, TmgrTrace power_trace, int core, ResourceState state_initial, TmgrTrace state_trace, XbtDict cpu_properties) { + long cPtr = SurfJNI.CpuModel_createCpu(swigCPtr, this, name, power_peak, pstate, power_scale, TmgrTrace.getCPtr(power_trace), power_trace, core, state_initial.swigValue(), TmgrTrace.getCPtr(state_trace), state_trace, XbtDict.getCPtr(cpu_properties), cpu_properties); return (Cpu)Surf.getCpuDirector(cPtr); } - public void addTraces() { - SurfJNI.CpuModel_addTraces(swigCPtr, this); - } - } diff --git a/src/bindings/java/org/simgrid/surf/Model.java b/src/bindings/java/org/simgrid/surf/Model.java index f1caaa3cbc..3e6e7f8eb3 100644 --- a/src/bindings/java/org/simgrid/surf/Model.java +++ b/src/bindings/java/org/simgrid/surf/Model.java @@ -46,15 +46,6 @@ public class Model { } - /** - * Model constructor - * @param name The name of the model - */ - public Model(String name) { - this(SurfJNI.new_Model(name), true); - } - - /** * @return The name of the model */ @@ -107,4 +98,8 @@ public class Model { return (cPtr == 0) ? null : new ActionList(cPtr, false); } + public void addTraces() { + SurfJNI.Model_addTraces(swigCPtr, this); + } + } diff --git a/src/bindings/java/org/simgrid/surf/SurfJNI.java b/src/bindings/java/org/simgrid/surf/SurfJNI.java index 040ca882d3..53cc07e823 100644 --- a/src/bindings/java/org/simgrid/surf/SurfJNI.java +++ b/src/bindings/java/org/simgrid/surf/SurfJNI.java @@ -71,7 +71,6 @@ public class SurfJNI { public final static native void delete_TmgrTrace(long jarg1); public final static native long TmgrTraceEvent_getIdx(long jarg1, TmgrTraceEvent jarg1_); public final static native void delete_TmgrTraceEvent(long jarg1); - public final static native long new_Model(String jarg1); public final static native String Model_getName(long jarg1, Model jarg1_); public final static native double Model_shareResources(long jarg1, Model jarg1_, double jarg2); public final static native double Model_shareResourcesLazy(long jarg1, Model jarg1_, double jarg2); @@ -80,11 +79,11 @@ public class SurfJNI { public final static native void Model_updateActionsStateLazy(long jarg1, Model jarg1_, double jarg2, double jarg3); public final static native void Model_updateActionsStateFull(long jarg1, Model jarg1_, double jarg2, double jarg3); public final static native long Model_getRunningActionSet(long jarg1, Model jarg1_); + public final static native void Model_addTraces(long jarg1, Model jarg1_); public final static native void delete_Model(long jarg1); public final static native long new_CpuModel(String jarg1); public final static native void delete_CpuModel(long jarg1); - public final static native long CpuModel_createResource(long jarg1, CpuModel jarg1_, String jarg2, double[] jarg3, int jarg4, double jarg5, long jarg6, TmgrTrace jarg6_, int jarg7, int jarg8, long jarg9, TmgrTrace jarg9_, long jarg10, XbtDict jarg10_); - public final static native void CpuModel_addTraces(long jarg1, CpuModel jarg1_); + public final static native long CpuModel_createCpu(long jarg1, CpuModel jarg1_, String jarg2, double[] jarg3, int jarg4, double jarg5, long jarg6, TmgrTrace jarg6_, int jarg7, int jarg8, long jarg9, TmgrTrace jarg9_, long jarg10, XbtDict jarg10_); public final static native void CpuModel_director_connect(CpuModel obj, long cptr, boolean mem_own, boolean weak_global); public final static native void CpuModel_change_ownership(CpuModel obj, long cptr, boolean take_or_release); public final static native String Resource_getName(long jarg1, Resource jarg1_); @@ -208,12 +207,12 @@ public class SurfJNI { public static long SwigDirector_CpuModel_getRunningActionSet(CpuModel self) { return ActionList.getCPtr(self.getRunningActionSet()); } - public static long SwigDirector_CpuModel_createResource(CpuModel self, String name, double[] power_peak, int pstate, double power_scale, long power_trace, int core, int state_initial, long state_trace, long cpu_properties) { - return Cpu.getCPtr(self.createResource(name, power_peak, pstate, power_scale, (power_trace == 0) ? null : new TmgrTrace(power_trace, false), core, ResourceState.swigToEnum(state_initial), (state_trace == 0) ? null : new TmgrTrace(state_trace, false), (cpu_properties == 0) ? null : new XbtDict(cpu_properties, false))); - } public static void SwigDirector_CpuModel_addTraces(CpuModel self) { self.addTraces(); } + public static long SwigDirector_CpuModel_createCpu(CpuModel self, String name, double[] power_peak, int pstate, double power_scale, long power_trace, int core, int state_initial, long state_trace, long cpu_properties) { + return Cpu.getCPtr(self.createCpu(name, power_peak, pstate, power_scale, (power_trace == 0) ? null : new TmgrTrace(power_trace, false), core, ResourceState.swigToEnum(state_initial), (state_trace == 0) ? null : new TmgrTrace(state_trace, false), (cpu_properties == 0) ? null : new XbtDict(cpu_properties, false))); + } public static boolean SwigDirector_Cpu_isUsed(Cpu self) { return self.isUsed(); } diff --git a/src/bindings/java/surf.i b/src/bindings/java/surf.i index 70006b3936..1c61df50a5 100644 --- a/src/bindings/java/surf.i +++ b/src/bindings/java/surf.i @@ -246,6 +246,8 @@ public: virtual void updateActionsStateFull(double now, double delta); virtual ActionList *getRunningActionSet(); + + virtual void addTraces()=0; }; %feature("director") CpuModel; @@ -253,13 +255,12 @@ class CpuModel : public Model { public: CpuModel(const char *name); virtual ~CpuModel(); - virtual Cpu *createResource(const char *name, DoubleDynar power_peak, + virtual Cpu *createCpu(const char *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace *state_trace, s_xbt_dict *cpu_properties)=0; - virtual void addTraces()=0; }; class Resource { diff --git a/src/bindings/java/surfJAVA_wrap.cxx b/src/bindings/java/surfJAVA_wrap.cxx index ee52a22e1a..32b867520f 100644 --- a/src/bindings/java/surfJAVA_wrap.cxx +++ b/src/bindings/java/surfJAVA_wrap.cxx @@ -1514,12 +1514,31 @@ ActionList *SwigDirector_CpuModel::getRunningActionSet() { return c_result; } +void SwigDirector_CpuModel::addTraces() { + JNIEnvWrapper swigjnienv(this) ; + JNIEnv * jenv = swigjnienv.getJNIEnv() ; + jobject swigjobj = (jobject) NULL ; + + if (!swig_override[7]) { + SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method CpuModel::addTraces."); + return; + } + swigjobj = swig_get_self(jenv); + if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) { + jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[16], swigjobj); + if (jenv->ExceptionCheck() == JNI_TRUE) return ; + } else { + SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object"); + } + if (swigjobj) jenv->DeleteLocalRef(swigjobj); +} + SwigDirector_CpuModel::~SwigDirector_CpuModel() { swig_disconnect_director_self("swigDirectorDisconnect"); } -Cpu *SwigDirector_CpuModel::createResource(char const *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace *state_trace, s_xbt_dict *cpu_properties) { +Cpu *SwigDirector_CpuModel::createCpu(char const *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace *state_trace, s_xbt_dict *cpu_properties) { Cpu *c_result = 0 ; jlong jresult = 0 ; JNIEnvWrapper swigjnienv(this) ; @@ -1535,8 +1554,8 @@ Cpu *SwigDirector_CpuModel::createResource(char const *name, DoubleDynar power_p jlong jstate_trace = 0 ; jlong jcpu_properties = 0 ; - if (!swig_override[7]) { - SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method CpuModel::createResource."); + if (!swig_override[8]) { + SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method CpuModel::createCpu."); return c_result; } swigjobj = swig_get_self(jenv); @@ -1560,7 +1579,7 @@ Cpu *SwigDirector_CpuModel::createResource(char const *name, DoubleDynar power_p jstate_initial = (jint) state_initial; *((tmgr_trace **)&jstate_trace) = (tmgr_trace *) state_trace; *((s_xbt_dict **)&jcpu_properties) = (s_xbt_dict *) cpu_properties; - jresult = (jlong) jenv->CallStaticLongMethod(Swig::jclass_SurfJNI, Swig::director_methids[16], swigjobj, jname, jpower_peak, jpstate, jpower_scale, jpower_trace, jcore, jstate_initial, jstate_trace, jcpu_properties); + jresult = (jlong) jenv->CallStaticLongMethod(Swig::jclass_SurfJNI, Swig::director_methids[17], swigjobj, jname, jpower_peak, jpstate, jpower_scale, jpower_trace, jcore, jstate_initial, jstate_trace, jcpu_properties); if (jenv->ExceptionCheck() == JNI_TRUE) return c_result; c_result = *(Cpu **)&jresult; } else { @@ -1570,25 +1589,6 @@ Cpu *SwigDirector_CpuModel::createResource(char const *name, DoubleDynar power_p return c_result; } -void SwigDirector_CpuModel::addTraces() { - JNIEnvWrapper swigjnienv(this) ; - JNIEnv * jenv = swigjnienv.getJNIEnv() ; - jobject swigjobj = (jobject) NULL ; - - if (!swig_override[8]) { - SWIG_JavaThrowException(JNIEnvWrapper(this).getJNIEnv(), SWIG_JavaDirectorPureVirtual, "Attempted to invoke pure virtual method CpuModel::addTraces."); - return; - } - swigjobj = swig_get_self(jenv); - if (swigjobj && jenv->IsSameObject(swigjobj, NULL) == JNI_FALSE) { - jenv->CallStaticVoidMethod(Swig::jclass_SurfJNI, Swig::director_methids[17], swigjobj); - if (jenv->ExceptionCheck() == JNI_TRUE) return ; - } else { - SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "null upcall object"); - } - if (swigjobj) jenv->DeleteLocalRef(swigjobj); -} - void SwigDirector_CpuModel::swig_connect_director(JNIEnv *jenv, jobject jself, jclass jcls, bool swig_mem_own, bool weak_global) { static struct { const char *mname; @@ -1617,10 +1617,10 @@ void SwigDirector_CpuModel::swig_connect_director(JNIEnv *jenv, jobject jself, j "getRunningActionSet", "()Lorg/simgrid/surf/ActionList;", NULL }, { - "createResource", "(Ljava/lang/String;[DIDLorg/simgrid/surf/TmgrTrace;ILorg/simgrid/surf/ResourceState;Lorg/simgrid/surf/TmgrTrace;Lorg/simgrid/surf/XbtDict;)Lorg/simgrid/surf/Cpu;", NULL + "addTraces", "()V", NULL }, { - "addTraces", "()V", NULL + "createCpu", "(Ljava/lang/String;[DIDLorg/simgrid/surf/TmgrTrace;ILorg/simgrid/surf/ResourceState;Lorg/simgrid/surf/TmgrTrace;Lorg/simgrid/surf/XbtDict;)Lorg/simgrid/surf/Cpu;", NULL } }; @@ -2809,27 +2809,6 @@ SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1TmgrTraceEvent(JNI } -SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_new_1Model(JNIEnv *jenv, jclass jcls, jstring jarg1) { - jlong jresult = 0 ; - char *arg1 = (char *) 0 ; - Model *result = 0 ; - - (void)jenv; - (void)jcls; - arg1 = 0; - if (jarg1) { - arg1 = (char *)jenv->GetStringUTFChars(jarg1, 0); - if (!arg1) return 0; - } - result = (Model *)new Model((char const *)arg1); - *(Model **)&jresult = result; - { - - } - return jresult; -} - - SWIGEXPORT jstring JNICALL Java_org_simgrid_surf_SurfJNI_Model_1getName(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { jstring jresult = 0 ; Model *arg1 = (Model *) 0 ; @@ -2956,6 +2935,17 @@ SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_Model_1getRunningActionSe } +SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_Model_1addTraces(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { + Model *arg1 = (Model *) 0 ; + + (void)jenv; + (void)jcls; + (void)jarg1_; + arg1 = *(Model **)&jarg1; + (arg1)->addTraces(); +} + + SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1Model(JNIEnv *jenv, jclass jcls, jlong jarg1) { Model *arg1 = (Model *) 0 ; @@ -2997,7 +2987,7 @@ SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_delete_1CpuModel(JNIEnv *j } -SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_CpuModel_1createResource(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jdoubleArray jarg3, jint jarg4, jdouble jarg5, jlong jarg6, jobject jarg6_, jint jarg7, jint jarg8, jlong jarg9, jobject jarg9_, jlong jarg10, jobject jarg10_) { +SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_CpuModel_1createCpu(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_, jstring jarg2, jdoubleArray jarg3, jint jarg4, jdouble jarg5, jlong jarg6, jobject jarg6_, jint jarg7, jint jarg8, jlong jarg9, jobject jarg9_, jlong jarg10, jobject jarg10_) { jlong jresult = 0 ; CpuModel *arg1 = (CpuModel *) 0 ; char *arg2 = (char *) 0 ; @@ -3037,7 +3027,7 @@ SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_CpuModel_1createResource( arg8 = (e_surf_resource_state_t)jarg8; arg9 = *(tmgr_trace **)&jarg9; arg10 = *(s_xbt_dict **)&jarg10; - result = (Cpu *)(arg1)->createResource((char const *)arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10); + result = (Cpu *)(arg1)->createCpu((char const *)arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10); *(Cpu **)&jresult = result; { @@ -3046,17 +3036,6 @@ SWIGEXPORT jlong JNICALL Java_org_simgrid_surf_SurfJNI_CpuModel_1createResource( } -SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_CpuModel_1addTraces(JNIEnv *jenv, jclass jcls, jlong jarg1, jobject jarg1_) { - CpuModel *arg1 = (CpuModel *) 0 ; - - (void)jenv; - (void)jcls; - (void)jarg1_; - arg1 = *(CpuModel **)&jarg1; - (arg1)->addTraces(); -} - - SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_CpuModel_1director_1connect(JNIEnv *jenv, jclass jcls, jobject jself, jlong objarg, jboolean jswig_mem_own, jboolean jweak_global) { CpuModel *obj = *((CpuModel **)&objarg); (void)jcls; @@ -4141,10 +4120,10 @@ SWIGEXPORT void JNICALL Java_org_simgrid_surf_SurfJNI_swig_1module_1init(JNIEnv "SwigDirector_CpuModel_getRunningActionSet", "(Lorg/simgrid/surf/CpuModel;)J" }, { - "SwigDirector_CpuModel_createResource", "(Lorg/simgrid/surf/CpuModel;Ljava/lang/String;[DIDJIIJJ)J" + "SwigDirector_CpuModel_addTraces", "(Lorg/simgrid/surf/CpuModel;)V" }, { - "SwigDirector_CpuModel_addTraces", "(Lorg/simgrid/surf/CpuModel;)V" + "SwigDirector_CpuModel_createCpu", "(Lorg/simgrid/surf/CpuModel;Ljava/lang/String;[DIDJIIJJ)J" }, { "SwigDirector_Cpu_isUsed", "(Lorg/simgrid/surf/Cpu;)Z" diff --git a/src/bindings/java/surfJAVA_wrap.h b/src/bindings/java/surfJAVA_wrap.h index cb0143b501..065713a2d6 100644 --- a/src/bindings/java/surfJAVA_wrap.h +++ b/src/bindings/java/surfJAVA_wrap.h @@ -46,9 +46,9 @@ public: virtual void updateActionsStateLazy(double now, double delta); virtual void updateActionsStateFull(double now, double delta); virtual ActionList *getRunningActionSet(); - virtual ~SwigDirector_CpuModel(); - virtual Cpu *createResource(char const *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace *state_trace, s_xbt_dict *cpu_properties); virtual void addTraces(); + virtual ~SwigDirector_CpuModel(); + virtual Cpu *createCpu(char const *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace *state_trace, s_xbt_dict *cpu_properties); public: bool swig_overrides(int n) { return (n < 9 ? swig_override[n] : false); diff --git a/src/bindings/java/surf_swig.cpp b/src/bindings/java/surf_swig.cpp index afff2a9a8a..fef1748289 100644 --- a/src/bindings/java/surf_swig.cpp +++ b/src/bindings/java/surf_swig.cpp @@ -26,7 +26,7 @@ static void java_cpu_model_init_preparse() { surf_cpu_model_pm = java_cpu_model; xbt_dynar_push(model_list, &java_cpu_model); xbt_dynar_push(model_list_invoke, &java_cpu_model); - sg_platf_host_add_cb(parse_cpu_init); + sg_platf_host_add_cb(cpu_parse_init); } void setCpuModel(CpuModel *cpuModel){ diff --git a/src/bindings/java/surfdoc.i b/src/bindings/java/surfdoc.i index d88734c3c9..bea7464112 100644 --- a/src/bindings/java/surfdoc.i +++ b/src/bindings/java/surfdoc.i @@ -68,7 +68,7 @@ public"; -%javamethodmodifiers CpuModel::createResource(const char *name, DoubleDynar power_peak, +%javamethodmodifiers CpuModel::createCpu(const char *name, DoubleDynar power_peak, int pstate, double power_scale, tmgr_trace *power_trace, int core, e_surf_resource_state_t state_initial, diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 1da385d818..8c10321c38 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -1198,7 +1198,7 @@ XBT_PUBLIC_DATA(s_surf_model_description_t) * Such model is subject to modification with warning in the ChangeLog so monitor it! * */ -XBT_PUBLIC(void) surf_vm_workstation_model_init_current_default(void); +XBT_PUBLIC(void) surf_vm_workstation_model_init_HL13(void); /** \ingroup SURF_models * \brief The list of all available vm workstation model models @@ -1229,6 +1229,7 @@ XBT_PUBLIC(xbt_dict_t) watched_hosts_lib; /*******************************************/ XBT_PUBLIC_DATA(AS_t) surf_AS_get_routing_root(void); XBT_PUBLIC_DATA(const char *) surf_AS_get_name(AS_t as); +XBT_PUBLIC_DATA(AS_t) surf_AS_get_by_name(const char * name); XBT_PUBLIC_DATA(xbt_dict_t) surf_AS_get_routing_sons(AS_t as); XBT_PUBLIC_DATA(const char *) surf_AS_get_model(AS_t as); XBT_PUBLIC_DATA(xbt_dynar_t) surf_AS_get_hosts(AS_t as); diff --git a/src/instr/instr_TI_trace.c b/src/instr/instr_TI_trace.c index 29754729df..ef558321b1 100644 --- a/src/instr/instr_TI_trace.c +++ b/src/instr/instr_TI_trace.c @@ -149,6 +149,9 @@ void print_TIPushState(paje_event_t event) 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; @@ -209,6 +212,9 @@ void print_TIPushState(paje_event_t event) 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 (i = 0; i < extra->num_processes; i++) diff --git a/src/instr/instr_config.c b/src/instr/instr_config.c index e01762519b..ffc5da464f 100644 --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@ -19,6 +19,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration"); #define OPT_TRACING_SMPI "tracing/smpi" #define OPT_TRACING_SMPI_GROUP "tracing/smpi/group" #define OPT_TRACING_SMPI_COMPUTING "tracing/smpi/computing" +#define OPT_TRACING_SMPI_SLEEPING "tracing/smpi/sleeping" #define OPT_TRACING_SMPI_INTERNALS "tracing/smpi/internals" #define OPT_TRACING_DISPLAY_SIZES "tracing/smpi/display_sizes" #define OPT_TRACING_FORMAT "tracing/smpi/format" @@ -45,6 +46,7 @@ static int trace_platform_topology; static int trace_smpi_enabled; static int trace_smpi_grouped; static int trace_smpi_computing; +static int trace_smpi_sleeping; static int trace_view_internals; static int trace_categorized; static int trace_uncategorized; @@ -71,6 +73,7 @@ static void TRACE_getopts(void) trace_smpi_enabled = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_SMPI); trace_smpi_grouped = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_SMPI_GROUP); trace_smpi_computing = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING); + trace_smpi_sleeping = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_SMPI_SLEEPING); trace_view_internals = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_SMPI_INTERNALS); trace_categorized = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_CATEGORIZED); trace_uncategorized = xbt_cfg_get_boolean(_sg_cfg_set, OPT_TRACING_UNCATEGORIZED); @@ -259,6 +262,11 @@ int TRACE_smpi_is_computing(void) return trace_smpi_computing; } +int TRACE_smpi_is_sleeping(void) +{ + return trace_smpi_sleeping; +} + int TRACE_smpi_view_internals(void) { return trace_view_internals; @@ -388,6 +396,13 @@ void TRACE_global_init(int *argc, char **argv) xbt_cfgelm_boolean, 1, 1, NULL, NULL); xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING, "no"); +/* smpi sleeping */ + xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_SLEEPING, + "Generate states for timing out of SMPI parts of the application", + xbt_cfgelm_boolean, 1, 1, NULL, NULL); + xbt_cfg_setdefault_boolean(_sg_cfg_set, OPT_TRACING_SMPI_SLEEPING, "no"); + + /* smpi internals */ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_INTERNALS, "View internal messages sent by Collective communications in SMPI", @@ -553,6 +568,10 @@ void TRACE_help (int detailed) " This option aims at tracing computations in the application, outside SMPI\n" " to allow further study of simulated or real computation time", detailed); + print_line (OPT_TRACING_SMPI_SLEEPING, "Generates a \" Sleeping \" State", + " This option aims at tracing sleeps in the application, outside SMPI\n" + " to allow further study of simulated or real sleep time", + detailed); print_line (OPT_TRACING_SMPI_INTERNALS, "Generates tracing events corresponding", " to point-to-point messages sent by collective communications", detailed); diff --git a/src/instr/instr_private.h b/src/instr/instr_private.h index 908ecd6cc3..dd531af82e 100644 --- a/src/instr/instr_private.h +++ b/src/instr/instr_private.h @@ -297,6 +297,7 @@ void instr_resume_tracing (void); XBT_PUBLIC(int) TRACE_smpi_is_enabled(void); XBT_PUBLIC(int) TRACE_smpi_is_grouped(void); XBT_PUBLIC(int) TRACE_smpi_is_computing(void); +XBT_PUBLIC(int) TRACE_smpi_is_sleeping(void); XBT_PUBLIC(int) TRACE_smpi_view_internals(void); /* from resource_utilization.c */ @@ -421,6 +422,7 @@ typedef enum{ TRACING_RECV, TRACING_IRECV, TRACING_SENDRECV, + TRACING_TEST, TRACING_WAIT, TRACING_WAITALL, TRACING_WAITANY, @@ -438,6 +440,7 @@ typedef enum{ TRACING_ALLGATHERV, TRACING_REDUCE_SCATTER, TRACING_COMPUTING, + TRACING_SLEEPING, TRACING_SCAN, TRACING_EXSCAN } e_caller_type ; @@ -449,6 +452,7 @@ typedef struct s_instr_extra_data { int send_size; int recv_size; double comp_size; + double sleep_duration; int src; int dst; int root; diff --git a/src/mc/mc_compare.c b/src/mc/mc_compare.c index f1cbfa4246..bf8dac435d 100644 --- a/src/mc/mc_compare.c +++ b/src/mc/mc_compare.c @@ -454,7 +454,9 @@ int snapshot_compare(void *state1, void *state2){ /* Stacks comparison */ unsigned int cursor = 0; int diff_local = 0; +#ifdef MC_DEBUG is_diff = 0; +#endif mc_snapshot_stack_t stack1, stack2; while(cursor < xbt_dynar_length(s1->stacks)){ diff --git a/src/msg/instr_msg_vm.c b/src/msg/instr_msg_vm.c index 481d26bba2..3171f4d5b1 100644 --- a/src/msg/instr_msg_vm.c +++ b/src/msg/instr_msg_vm.c @@ -46,7 +46,7 @@ void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host, msg_host_t new_h PJ_container_free(existing_container); //create new container on the new_host location - msg = PJ_container_new(instr_vm_id(vm, str, len), INSTR_MSG_VM, PJ_container_get(SIMIX_host_get_name(new_host))); + PJ_container_new(instr_vm_id(vm, str, len), INSTR_MSG_VM, PJ_container_get(SIMIX_host_get_name(new_host))); //end link msg = PJ_container_get(instr_vm_id(vm, str, len)); diff --git a/src/msg/msg_actions.c b/src/msg/msg_actions.c index 6ebb52218d..434b254cdb 100644 --- a/src/msg/msg_actions.c +++ b/src/msg/msg_actions.c @@ -44,8 +44,8 @@ msg_error_t MSG_action_trace_run(char *path) action_fp=NULL; if (path) { action_fp = fopen(path, "r"); - xbt_assert(action_fp != NULL, "Cannot open %s: %s", path, - strerror(errno)); + if (action_fp == NULL) + xbt_die("Cannot open %s: %s", path, strerror(errno)); } res = MSG_main(); diff --git a/src/msg/msg_environment.c b/src/msg/msg_environment.c index 74fc81b9e6..fef3604341 100644 --- a/src/msg/msg_environment.c +++ b/src/msg/msg_environment.c @@ -64,6 +64,10 @@ const char *MSG_environment_as_get_name(msg_as_t as) { return surf_AS_get_name(as); } +msg_as_t MSG_environment_as_get_by_name(const char * name) { + return surf_AS_get_by_name(name); +} + xbt_dict_t MSG_environment_as_get_routing_sons(msg_as_t as) { xbt_dict_t res = surf_AS_get_routing_sons(as); return res; diff --git a/src/msg/msg_io.c b/src/msg/msg_io.c index d5e169091b..d4a0d4e4bb 100644 --- a/src/msg/msg_io.c +++ b/src/msg/msg_io.c @@ -187,13 +187,15 @@ sg_size_t MSG_file_write(msg_file_t fd, sg_size_t size) */ msg_file_t MSG_file_open(const char* fullpath, void* data) { + char name[2048]; msg_file_priv_t priv = xbt_new(s_msg_file_priv_t, 1); priv->data = data; priv->fullpath = xbt_strdup(fullpath); priv->simdata = xbt_new0(s_simdata_file_t,1); priv->simdata->smx_file = simcall_file_open(fullpath, MSG_host_self()); - xbt_lib_set(file_lib, fullpath, MSG_FILE_LEVEL, priv); - msg_file_t fd = (msg_file_t) xbt_lib_get_elm_or_null(file_lib, fullpath); + sprintf(name, "%s:%s",MSG_host_get_name(MSG_host_self()),fullpath); + xbt_lib_set(file_lib, name, MSG_FILE_LEVEL, priv); + msg_file_t fd = (msg_file_t) xbt_lib_get_elm_or_null(file_lib, name); __MSG_file_get_info(fd); return fd; @@ -216,9 +218,11 @@ void __MSG_file_priv_free(msg_file_priv_t priv) */ int MSG_file_close(msg_file_t fd) { + char name[2048]; msg_file_priv_t priv = MSG_file_priv(fd); int res = simcall_file_close(priv->simdata->smx_file, MSG_host_self()); - xbt_lib_unset(file_lib, priv->fullpath, MSG_FILE_LEVEL, 1); + sprintf(name, "%s:%s",MSG_host_get_name(MSG_host_self()),priv->fullpath); + xbt_lib_unset(file_lib, name, MSG_FILE_LEVEL, 1); return res; } diff --git a/src/msg/msg_process.c b/src/msg/msg_process.c index d28d07338c..a14e8828be 100644 --- a/src/msg/msg_process.c +++ b/src/msg/msg_process.c @@ -7,6 +7,7 @@ #include "msg_private.h" #include "xbt/sysdep.h" #include "xbt/log.h" +#include "simix/smx_process_private.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_process, msg, "Logging specific to MSG (process)"); @@ -172,7 +173,7 @@ msg_process_t MSG_process_create_with_environment(const char *name, argc, argv, properties,0); #ifdef HAVE_TRACING - TRACE_msg_process_create(name, simcall_process_get_PID(process), host); + TRACE_msg_process_create(name, SIMIX_process_get_PID(process), host); #endif if (!process) { diff --git a/src/msg/msg_synchro.c b/src/msg/msg_synchro.c index 8c3fa8d28a..70f13837fc 100644 --- a/src/msg/msg_synchro.c +++ b/src/msg/msg_synchro.c @@ -6,6 +6,7 @@ #include "msg_private.h" #include "xbt/sysdep.h" +#include "xbt/synchro_core.h" #include "xbt/log.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_synchro, msg, @@ -55,7 +56,7 @@ void MSG_sem_get_capacity(msg_sem_t sem) { void MSG_sem_destroy(msg_sem_t sem) { simcall_sem_destroy(sem); } -/** @brief returns a boolean indicating it this semaphore would block at this very specific time +/** @brief returns a boolean indicating if this semaphore would block at this very specific time * * Note that the returned value may be wrong right after the function call, when you try to use it... * But that's a classical semaphore issue, and SimGrid's semaphore are not different to usual ones here. @@ -64,4 +65,22 @@ int MSG_sem_would_block(msg_sem_t sem) { return simcall_sem_would_block(sem); } +/** @brief Initializes a barrier, with count elements */ +msg_bar_t MSG_barrier_init(unsigned int count) { + return (msg_bar_t)xbt_barrier_init(count); +} + +/** @brief Initializes a barrier, with count elements */ +void MSG_barrier_destroy(msg_bar_t bar) { + xbt_barrier_destroy((xbt_bar_t)bar); +} + +/** @brief Performs a barrier already initialized */ +int MSG_barrier_wait(msg_bar_t bar) { + if(xbt_barrier_wait((xbt_bar_t)bar) == XBT_BARRIER_SERIAL_PROCESS) + return MSG_BARRIER_SERIAL_PROCESS; + else + return 0; +} + /**@}*/ diff --git a/src/msg/msg_task.c b/src/msg/msg_task.c index 7c775a4e59..56fbb1e4f5 100644 --- a/src/msg/msg_task.c +++ b/src/msg/msg_task.c @@ -309,8 +309,8 @@ msg_error_t MSG_task_cancel(msg_task_t task) simcall_host_execution_cancel(task->simdata->compute); } else if (task->simdata->comm) { - simcall_comm_cancel(task->simdata->comm); simdata_task_t simdata = task->simdata; + simcall_comm_cancel(simdata->comm); if (msg_global->debug_multiple_use && simdata->isused!=0) xbt_ex_free(*(xbt_ex_t*)simdata->isused); simdata->isused = 0; diff --git a/src/msg/msg_vm.c b/src/msg/msg_vm.c index c45ad9c064..7972de267b 100644 --- a/src/msg/msg_vm.c +++ b/src/msg/msg_vm.c @@ -503,7 +503,7 @@ void MSG_host_add_task(msg_host_t host, msg_task_t task) { msg_host_priv_t priv = msg_host_resource_priv(host); double remaining = MSG_task_get_remaining_computation(task); - char *key = bprintf("%s-%lld", task->name, task->counter); + char *key = bprintf("%s-%p", task->name, task); dirty_page_t dp = xbt_new0(s_dirty_page, 1); dp->task = task; @@ -525,7 +525,7 @@ void MSG_host_del_task(msg_host_t host, msg_task_t task) { msg_host_priv_t priv = msg_host_resource_priv(host); - char *key = bprintf("%s-%lld", task->name, task->counter); + char *key = bprintf("%s-%p", task->name, task); dirty_page_t dp = xbt_dict_get_or_null(priv->dp_objs, key); xbt_assert(dp->task == task); diff --git a/src/simdag/dax_dtd.c b/src/simdag/dax_dtd.c index 83641a2099..43e90c9293 100644 --- a/src/simdag/dax_dtd.c +++ b/src/simdag/dax_dtd.c @@ -27,7 +27,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 39 +#define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -160,15 +160,7 @@ typedef unsigned int flex_uint32_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k. - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. - * Ditto for the __ia64__ case accordingly. - */ -#define YY_BUF_SIZE 32768 -#else #define YY_BUF_SIZE 16384 -#endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. @@ -207,13 +199,6 @@ extern FILE *dax_in, *dax_out; if ( dax_text[yyl] == '\n' )\ --dax_lineno;\ }while(0) - #define YY_LINENO_REWIND_TO(dst) \ - do {\ - const char *p;\ - for ( p = yy_cp-1; p >= (dst); --p)\ - if ( *p == '\n' )\ - --dax_lineno;\ - }while(0) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ @@ -1344,81 +1329,81 @@ const char dax__flexml_version[] = "1.9.6"; int dax__pcdata_ix; extern char *dax__bufferstack; #define dax__pcdata (dax__bufferstack + dax__pcdata_ix) -AT_dax__uses_optional AX_dax__uses_optional; -#define A_dax__uses_optional AX_dax__uses_optional -short int dax__uses_optional_isset; -AT_dax__job_name AX_dax__job_name; -#define A_dax__job_name (dax__bufferstack + AX_dax__job_name) -short int dax__job_name_isset; -AT_dax__job_namespace AX_dax__job_namespace; -#define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace) -short int dax__job_namespace_isset; -AT_dax__adag_fileCount AX_dax__adag_fileCount; -#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount) -short int dax__adag_fileCount_isset; +AT_dax__uses_type AX_dax__uses_type; +#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type) +short int dax__uses_type_isset; +AT_dax__adag_count AX_dax__adag_count; +#define A_dax__adag_count (dax__bufferstack + AX_dax__adag_count) +short int dax__adag_count_isset; +AT_dax__adag_xmlns_c_xsi AX_dax__adag_xmlns_c_xsi; +#define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi) +short int dax__adag_xmlns_c_xsi_isset; +AT_dax__adag_xmlns AX_dax__adag_xmlns; +#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns) +short int dax__adag_xmlns_isset; AT_dax__parent_ref AX_dax__parent_ref; #define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref) short int dax__parent_ref_isset; -AT_dax__uses_transfer AX_dax__uses_transfer; -#define A_dax__uses_transfer AX_dax__uses_transfer -short int dax__uses_transfer_isset; +AT_dax__job_namespace AX_dax__job_namespace; +#define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace) +short int dax__job_namespace_isset; +AT_dax__adag_xsi_c_schemaLocation AX_dax__adag_xsi_c_schemaLocation; +#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation) +short int dax__adag_xsi_c_schemaLocation_isset; AT_dax__adag_childCount AX_dax__adag_childCount; #define A_dax__adag_childCount (dax__bufferstack + AX_dax__adag_childCount) short int dax__adag_childCount_isset; -AT_dax__uses_link AX_dax__uses_link; -#define A_dax__uses_link AX_dax__uses_link -short int dax__uses_link_isset; -AT_dax__adag_xmlns_c_xsi AX_dax__adag_xmlns_c_xsi; -#define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi) -short int dax__adag_xmlns_c_xsi_isset; -AT_dax__job_id AX_dax__job_id; -#define A_dax__job_id (dax__bufferstack + AX_dax__job_id) -short int dax__job_id_isset; +AT_dax__uses_transfer AX_dax__uses_transfer; +#define A_dax__uses_transfer AX_dax__uses_transfer +short int dax__uses_transfer_isset; +AT_dax__uses_file AX_dax__uses_file; +#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file) +short int dax__uses_file_isset; +AT_dax__adag_name AX_dax__adag_name; +#define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name) +short int dax__adag_name_isset; +AT_dax__uses_optional AX_dax__uses_optional; +#define A_dax__uses_optional AX_dax__uses_optional +short int dax__uses_optional_isset; +AT_dax__child_ref AX_dax__child_ref; +#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref) +short int dax__child_ref_isset; AT_dax__job_level AX_dax__job_level; #define A_dax__job_level (dax__bufferstack + AX_dax__job_level) short int dax__job_level_isset; -AT_dax__job_runtime AX_dax__job_runtime; -#define A_dax__job_runtime (dax__bufferstack + AX_dax__job_runtime) -short int dax__job_runtime_isset; +AT_dax__job_id AX_dax__job_id; +#define A_dax__job_id (dax__bufferstack + AX_dax__job_id) +short int dax__job_id_isset; AT_dax__uses_size AX_dax__uses_size; #define A_dax__uses_size (dax__bufferstack + AX_dax__uses_size) short int dax__uses_size_isset; -AT_dax__child_ref AX_dax__child_ref; -#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref) -short int dax__child_ref_isset; -AT_dax__adag_index AX_dax__adag_index; -#define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index) -short int dax__adag_index_isset; -AT_dax__adag_count AX_dax__adag_count; -#define A_dax__adag_count (dax__bufferstack + AX_dax__adag_count) -short int dax__adag_count_isset; +AT_dax__job_runtime AX_dax__job_runtime; +#define A_dax__job_runtime (dax__bufferstack + AX_dax__job_runtime) +short int dax__job_runtime_isset; +AT_dax__job_name AX_dax__job_name; +#define A_dax__job_name (dax__bufferstack + AX_dax__job_name) +short int dax__job_name_isset; +AT_dax__uses_link AX_dax__uses_link; +#define A_dax__uses_link AX_dax__uses_link +short int dax__uses_link_isset; +AT_dax__adag_version AX_dax__adag_version; +#define A_dax__adag_version (dax__bufferstack + AX_dax__adag_version) +short int dax__adag_version_isset; AT_dax__uses_register AX_dax__uses_register; #define A_dax__uses_register AX_dax__uses_register short int dax__uses_register_isset; -AT_dax__adag_jobCount AX_dax__adag_jobCount; -#define A_dax__adag_jobCount (dax__bufferstack + AX_dax__adag_jobCount) -short int dax__adag_jobCount_isset; -AT_dax__uses_file AX_dax__uses_file; -#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file) -short int dax__uses_file_isset; +AT_dax__adag_index AX_dax__adag_index; +#define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index) +short int dax__adag_index_isset; AT_dax__job_version AX_dax__job_version; #define A_dax__job_version (dax__bufferstack + AX_dax__job_version) short int dax__job_version_isset; -AT_dax__adag_xmlns AX_dax__adag_xmlns; -#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns) -short int dax__adag_xmlns_isset; -AT_dax__adag_xsi_c_schemaLocation AX_dax__adag_xsi_c_schemaLocation; -#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation) -short int dax__adag_xsi_c_schemaLocation_isset; -AT_dax__adag_name AX_dax__adag_name; -#define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name) -short int dax__adag_name_isset; -AT_dax__uses_type AX_dax__uses_type; -#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type) -short int dax__uses_type_isset; -AT_dax__adag_version AX_dax__adag_version; -#define A_dax__adag_version (dax__bufferstack + AX_dax__adag_version) -short int dax__adag_version_isset; +AT_dax__adag_fileCount AX_dax__adag_fileCount; +#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount) +short int dax__adag_fileCount_isset; +AT_dax__adag_jobCount AX_dax__adag_jobCount; +#define A_dax__adag_jobCount (dax__bufferstack + AX_dax__adag_jobCount) +short int dax__adag_jobCount_isset; /* XML state. */ #ifdef FLEX_DEBUG @@ -1692,12 +1677,7 @@ static int input (void ); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k */ -#define YY_READ_BUF_SIZE 16384 -#else #define YY_READ_BUF_SIZE 8192 -#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -1798,34 +1778,6 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! dax_in ) - dax_in = stdin; - - 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 ); - } - - dax__load_buffer_state( ); - } - - { - /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */ SET(PROLOG); reset_dax__parse_err_msg(); @@ -1888,6 +1840,32 @@ YY_DECL /* COMMENTS and PIs: handled uniformly for efficiency. */ + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! dax_in ) + dax_in = stdin; + + 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 ); + } + + dax__load_buffer_state( ); + } + while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); @@ -1904,7 +1882,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + register 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; @@ -2212,11 +2190,11 @@ case 44: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",dax_text[0]); YY_BREAK -case YY_STATE_EOF(S_dax__adag_5): +case YY_STATE_EOF(S_dax__adag_1): case YY_STATE_EOF(S_dax__adag): -case YY_STATE_EOF(S_dax__adag_3): case YY_STATE_EOF(E_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: `' expected."); YY_BREAK @@ -2359,9 +2337,9 @@ case 65: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",dax_text[0]); YY_BREAK -case YY_STATE_EOF(S_dax__job_2): -case YY_STATE_EOF(E_dax__job): case YY_STATE_EOF(S_dax__job): +case YY_STATE_EOF(E_dax__job): +case YY_STATE_EOF(S_dax__job_2): FAIL("Premature EOF: `' expected."); YY_BREAK @@ -2495,7 +2473,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; ETag_dax__uses(); popbuffer(); /* attribute */ switch (YY_START) { - case S_dax__job_1: case S_dax__job: case S_dax__job_2: SET(S_dax__job_2); break; + case S_dax__job: case S_dax__job_2: case S_dax__job_1: SET(S_dax__job_2); break; } } YY_BREAK @@ -2519,7 +2497,7 @@ YY_RULE_SETUP ETag_dax__uses(); popbuffer(); /* attribute */ switch (YY_START) { - case S_dax__job_1: case S_dax__job: case S_dax__job_2: SET(S_dax__job_2); break; + case S_dax__job: case S_dax__job_2: case S_dax__job_1: SET(S_dax__job_2); break; } } YY_BREAK @@ -2574,7 +2552,7 @@ 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; ETag_dax__child(); popbuffer(); /* attribute */ switch (YY_START) { - case S_dax__adag: case S_dax__adag_5: case S_dax__adag_4: case S_dax__adag_1: case S_dax__adag_3: SET(S_dax__adag_5); break; + case S_dax__adag_5: case S_dax__adag_4: case S_dax__adag_3: case S_dax__adag: case S_dax__adag_1: SET(S_dax__adag_5); break; } } YY_BREAK @@ -2598,7 +2576,7 @@ YY_RULE_SETUP ETag_dax__child(); popbuffer(); /* attribute */ switch (YY_START) { - case S_dax__adag: case S_dax__adag_5: case S_dax__adag_4: case S_dax__adag_1: case S_dax__adag_3: SET(S_dax__adag_5); break; + case S_dax__adag_5: case S_dax__adag_4: case S_dax__adag_3: case S_dax__adag: case S_dax__adag_1: SET(S_dax__adag_5); break; } } YY_BREAK @@ -2612,8 +2590,8 @@ YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",dax_text[0]); YY_BREAK case YY_STATE_EOF(E_dax__child): -case YY_STATE_EOF(S_dax__child_2): case YY_STATE_EOF(S_dax__child): +case YY_STATE_EOF(S_dax__child_2): FAIL("Premature EOF: `' expected."); YY_BREAK @@ -2655,7 +2633,7 @@ 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; ETag_dax__parent(); popbuffer(); /* attribute */ switch (YY_START) { - case S_dax__child: case S_dax__child_2: case S_dax__child_1: SET(S_dax__child_2); break; + case S_dax__child_1: case S_dax__child_2: case S_dax__child: SET(S_dax__child_2); break; } } YY_BREAK @@ -2679,7 +2657,7 @@ YY_RULE_SETUP ETag_dax__parent(); popbuffer(); /* attribute */ switch (YY_START) { - case S_dax__child: case S_dax__child_2: case S_dax__child_1: SET(S_dax__child_2); break; + case S_dax__child_1: case S_dax__child_2: case S_dax__child: SET(S_dax__child_2); break; } } YY_BREAK @@ -2949,7 +2927,6 @@ case YY_STATE_EOF(IMPOSSIBLE): "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 diff --git a/src/simdag/dax_dtd.h b/src/simdag/dax_dtd.h index c1cf38fa03..e570088638 100644 --- a/src/simdag/dax_dtd.h +++ b/src/simdag/dax_dtd.h @@ -60,132 +60,132 @@ XBT_PUBLIC(void) STag_dax__parent(void); XBT_PUBLIC(void) ETag_dax__parent(void); /* XML application data. */ -typedef int AT_dax__adag_childCount; -#define AU_dax__adag_childCount NULL -typedef int AT_dax__parent_ref; -#define AU_dax__parent_ref NULL -typedef enum { AU_dax__uses_register, A_dax__uses_register_false,A_dax__uses_register_true } AT_dax__uses_register; -typedef int AT_dax__uses_size; -#define AU_dax__uses_size NULL -typedef int AT_dax__adag_fileCount; -#define AU_dax__adag_fileCount NULL -typedef int AT_dax__adag_xmlns; -#define AU_dax__adag_xmlns NULL -typedef enum { AU_dax__uses_transfer, A_dax__uses_transfer_false,A_dax__uses_transfer_true } AT_dax__uses_transfer; +typedef int AT_dax__job_id; +#define AU_dax__job_id NULL typedef int AT_dax__adag_index; #define AU_dax__adag_index NULL -typedef int AT_dax__job_namespace; -#define AU_dax__job_namespace NULL -typedef int AT_dax__job_version; -#define AU_dax__job_version NULL -typedef int AT_dax__child_ref; -#define AU_dax__child_ref NULL -typedef int AT_dax__adag_version; -#define AU_dax__adag_version NULL -typedef enum { AU_dax__uses_optional, A_dax__uses_optional_false,A_dax__uses_optional_true } AT_dax__uses_optional; -typedef int AT_dax__adag_name; -#define AU_dax__adag_name NULL +typedef enum { AU_dax__uses_transfer, A_dax__uses_transfer_false,A_dax__uses_transfer_true } AT_dax__uses_transfer; +typedef int AT_dax__adag_fileCount; +#define AU_dax__adag_fileCount NULL typedef int AT_dax__adag_jobCount; #define AU_dax__adag_jobCount NULL -typedef int AT_dax__adag_xsi_c_schemaLocation; -#define AU_dax__adag_xsi_c_schemaLocation NULL typedef int AT_dax__job_level; #define AU_dax__job_level NULL -typedef int AT_dax__uses_file; -#define AU_dax__uses_file NULL +typedef int AT_dax__adag_name; +#define AU_dax__adag_name NULL +typedef enum { AU_dax__uses_register, A_dax__uses_register_false,A_dax__uses_register_true } AT_dax__uses_register; typedef int AT_dax__adag_count; #define AU_dax__adag_count NULL +typedef int AT_dax__parent_ref; +#define AU_dax__parent_ref NULL +typedef int AT_dax__job_version; +#define AU_dax__job_version NULL +typedef int AT_dax__adag_xmlns; +#define AU_dax__adag_xmlns NULL +typedef int AT_dax__adag_childCount; +#define AU_dax__adag_childCount NULL +typedef int AT_dax__adag_xsi_c_schemaLocation; +#define AU_dax__adag_xsi_c_schemaLocation NULL +typedef int AT_dax__job_runtime; +#define AU_dax__job_runtime NULL +typedef int AT_dax__uses_file; +#define AU_dax__uses_file NULL typedef enum { AU_dax__uses_link, A_dax__uses_link_input,A_dax__uses_link_output } AT_dax__uses_link; -typedef int AT_dax__uses_type; -#define AU_dax__uses_type NULL typedef int AT_dax__adag_xmlns_c_xsi; #define AU_dax__adag_xmlns_c_xsi NULL -typedef int AT_dax__job_runtime; -#define AU_dax__job_runtime NULL -typedef int AT_dax__job_id; -#define AU_dax__job_id NULL typedef int AT_dax__job_name; #define AU_dax__job_name NULL +typedef int AT_dax__child_ref; +#define AU_dax__child_ref NULL +typedef int AT_dax__job_namespace; +#define AU_dax__job_namespace NULL +typedef int AT_dax__adag_version; +#define AU_dax__adag_version NULL +typedef enum { AU_dax__uses_optional, A_dax__uses_optional_false,A_dax__uses_optional_true } AT_dax__uses_optional; +typedef int AT_dax__uses_type; +#define AU_dax__uses_type NULL +typedef int AT_dax__uses_size; +#define AU_dax__uses_size NULL /* FleXML-provided data. */ XBT_PUBLIC_DATA(int) dax__pcdata_ix; XBT_PUBLIC_DATA(char *) dax__bufferstack; #define dax__pcdata (dax__bufferstack + dax__pcdata_ix) -XBT_PUBLIC_DATA(AT_dax__adag_childCount) AX_dax__adag_childCount; -#define A_dax__adag_childCount (dax__bufferstack + AX_dax__adag_childCount) -XBT_PUBLIC_DATA(short int) dax__adag_childCount_isset; -XBT_PUBLIC_DATA(AT_dax__parent_ref) AX_dax__parent_ref; -#define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref) -XBT_PUBLIC_DATA(short int) dax__parent_ref_isset; -XBT_PUBLIC_DATA(AT_dax__uses_register) AX_dax__uses_register; -#define A_dax__uses_register AX_dax__uses_register -XBT_PUBLIC_DATA(short int) dax__uses_register_isset; -XBT_PUBLIC_DATA(AT_dax__uses_size) AX_dax__uses_size; -#define A_dax__uses_size (dax__bufferstack + AX_dax__uses_size) -XBT_PUBLIC_DATA(short int) dax__uses_size_isset; -XBT_PUBLIC_DATA(AT_dax__adag_fileCount) AX_dax__adag_fileCount; -#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount) -XBT_PUBLIC_DATA(short int) dax__adag_fileCount_isset; -XBT_PUBLIC_DATA(AT_dax__adag_xmlns) AX_dax__adag_xmlns; -#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns) -XBT_PUBLIC_DATA(short int) dax__adag_xmlns_isset; -XBT_PUBLIC_DATA(AT_dax__uses_transfer) AX_dax__uses_transfer; -#define A_dax__uses_transfer AX_dax__uses_transfer -XBT_PUBLIC_DATA(short int) dax__uses_transfer_isset; +XBT_PUBLIC_DATA(AT_dax__job_id) AX_dax__job_id; +#define A_dax__job_id (dax__bufferstack + AX_dax__job_id) +XBT_PUBLIC_DATA(short int) dax__job_id_isset; XBT_PUBLIC_DATA(AT_dax__adag_index) AX_dax__adag_index; #define A_dax__adag_index (dax__bufferstack + AX_dax__adag_index) XBT_PUBLIC_DATA(short int) dax__adag_index_isset; -XBT_PUBLIC_DATA(AT_dax__job_namespace) AX_dax__job_namespace; -#define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace) -XBT_PUBLIC_DATA(short int) dax__job_namespace_isset; -XBT_PUBLIC_DATA(AT_dax__job_version) AX_dax__job_version; -#define A_dax__job_version (dax__bufferstack + AX_dax__job_version) -XBT_PUBLIC_DATA(short int) dax__job_version_isset; -XBT_PUBLIC_DATA(AT_dax__child_ref) AX_dax__child_ref; -#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref) -XBT_PUBLIC_DATA(short int) dax__child_ref_isset; -XBT_PUBLIC_DATA(AT_dax__adag_version) AX_dax__adag_version; -#define A_dax__adag_version (dax__bufferstack + AX_dax__adag_version) -XBT_PUBLIC_DATA(short int) dax__adag_version_isset; -XBT_PUBLIC_DATA(AT_dax__uses_optional) AX_dax__uses_optional; -#define A_dax__uses_optional AX_dax__uses_optional -XBT_PUBLIC_DATA(short int) dax__uses_optional_isset; -XBT_PUBLIC_DATA(AT_dax__adag_name) AX_dax__adag_name; -#define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name) -XBT_PUBLIC_DATA(short int) dax__adag_name_isset; +XBT_PUBLIC_DATA(AT_dax__uses_transfer) AX_dax__uses_transfer; +#define A_dax__uses_transfer AX_dax__uses_transfer +XBT_PUBLIC_DATA(short int) dax__uses_transfer_isset; +XBT_PUBLIC_DATA(AT_dax__adag_fileCount) AX_dax__adag_fileCount; +#define A_dax__adag_fileCount (dax__bufferstack + AX_dax__adag_fileCount) +XBT_PUBLIC_DATA(short int) dax__adag_fileCount_isset; XBT_PUBLIC_DATA(AT_dax__adag_jobCount) AX_dax__adag_jobCount; #define A_dax__adag_jobCount (dax__bufferstack + AX_dax__adag_jobCount) XBT_PUBLIC_DATA(short int) dax__adag_jobCount_isset; -XBT_PUBLIC_DATA(AT_dax__adag_xsi_c_schemaLocation) AX_dax__adag_xsi_c_schemaLocation; -#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation) -XBT_PUBLIC_DATA(short int) dax__adag_xsi_c_schemaLocation_isset; XBT_PUBLIC_DATA(AT_dax__job_level) AX_dax__job_level; #define A_dax__job_level (dax__bufferstack + AX_dax__job_level) XBT_PUBLIC_DATA(short int) dax__job_level_isset; -XBT_PUBLIC_DATA(AT_dax__uses_file) AX_dax__uses_file; -#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file) -XBT_PUBLIC_DATA(short int) dax__uses_file_isset; +XBT_PUBLIC_DATA(AT_dax__adag_name) AX_dax__adag_name; +#define A_dax__adag_name (dax__bufferstack + AX_dax__adag_name) +XBT_PUBLIC_DATA(short int) dax__adag_name_isset; +XBT_PUBLIC_DATA(AT_dax__uses_register) AX_dax__uses_register; +#define A_dax__uses_register AX_dax__uses_register +XBT_PUBLIC_DATA(short int) dax__uses_register_isset; XBT_PUBLIC_DATA(AT_dax__adag_count) AX_dax__adag_count; #define A_dax__adag_count (dax__bufferstack + AX_dax__adag_count) XBT_PUBLIC_DATA(short int) dax__adag_count_isset; +XBT_PUBLIC_DATA(AT_dax__parent_ref) AX_dax__parent_ref; +#define A_dax__parent_ref (dax__bufferstack + AX_dax__parent_ref) +XBT_PUBLIC_DATA(short int) dax__parent_ref_isset; +XBT_PUBLIC_DATA(AT_dax__job_version) AX_dax__job_version; +#define A_dax__job_version (dax__bufferstack + AX_dax__job_version) +XBT_PUBLIC_DATA(short int) dax__job_version_isset; +XBT_PUBLIC_DATA(AT_dax__adag_xmlns) AX_dax__adag_xmlns; +#define A_dax__adag_xmlns (dax__bufferstack + AX_dax__adag_xmlns) +XBT_PUBLIC_DATA(short int) dax__adag_xmlns_isset; +XBT_PUBLIC_DATA(AT_dax__adag_childCount) AX_dax__adag_childCount; +#define A_dax__adag_childCount (dax__bufferstack + AX_dax__adag_childCount) +XBT_PUBLIC_DATA(short int) dax__adag_childCount_isset; +XBT_PUBLIC_DATA(AT_dax__adag_xsi_c_schemaLocation) AX_dax__adag_xsi_c_schemaLocation; +#define A_dax__adag_xsi_c_schemaLocation (dax__bufferstack + AX_dax__adag_xsi_c_schemaLocation) +XBT_PUBLIC_DATA(short int) dax__adag_xsi_c_schemaLocation_isset; +XBT_PUBLIC_DATA(AT_dax__job_runtime) AX_dax__job_runtime; +#define A_dax__job_runtime (dax__bufferstack + AX_dax__job_runtime) +XBT_PUBLIC_DATA(short int) dax__job_runtime_isset; +XBT_PUBLIC_DATA(AT_dax__uses_file) AX_dax__uses_file; +#define A_dax__uses_file (dax__bufferstack + AX_dax__uses_file) +XBT_PUBLIC_DATA(short int) dax__uses_file_isset; XBT_PUBLIC_DATA(AT_dax__uses_link) AX_dax__uses_link; #define A_dax__uses_link AX_dax__uses_link XBT_PUBLIC_DATA(short int) dax__uses_link_isset; -XBT_PUBLIC_DATA(AT_dax__uses_type) AX_dax__uses_type; -#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type) -XBT_PUBLIC_DATA(short int) dax__uses_type_isset; XBT_PUBLIC_DATA(AT_dax__adag_xmlns_c_xsi) AX_dax__adag_xmlns_c_xsi; #define A_dax__adag_xmlns_c_xsi (dax__bufferstack + AX_dax__adag_xmlns_c_xsi) XBT_PUBLIC_DATA(short int) dax__adag_xmlns_c_xsi_isset; -XBT_PUBLIC_DATA(AT_dax__job_runtime) AX_dax__job_runtime; -#define A_dax__job_runtime (dax__bufferstack + AX_dax__job_runtime) -XBT_PUBLIC_DATA(short int) dax__job_runtime_isset; -XBT_PUBLIC_DATA(AT_dax__job_id) AX_dax__job_id; -#define A_dax__job_id (dax__bufferstack + AX_dax__job_id) -XBT_PUBLIC_DATA(short int) dax__job_id_isset; XBT_PUBLIC_DATA(AT_dax__job_name) AX_dax__job_name; #define A_dax__job_name (dax__bufferstack + AX_dax__job_name) XBT_PUBLIC_DATA(short int) dax__job_name_isset; +XBT_PUBLIC_DATA(AT_dax__child_ref) AX_dax__child_ref; +#define A_dax__child_ref (dax__bufferstack + AX_dax__child_ref) +XBT_PUBLIC_DATA(short int) dax__child_ref_isset; +XBT_PUBLIC_DATA(AT_dax__job_namespace) AX_dax__job_namespace; +#define A_dax__job_namespace (dax__bufferstack + AX_dax__job_namespace) +XBT_PUBLIC_DATA(short int) dax__job_namespace_isset; +XBT_PUBLIC_DATA(AT_dax__adag_version) AX_dax__adag_version; +#define A_dax__adag_version (dax__bufferstack + AX_dax__adag_version) +XBT_PUBLIC_DATA(short int) dax__adag_version_isset; +XBT_PUBLIC_DATA(AT_dax__uses_optional) AX_dax__uses_optional; +#define A_dax__uses_optional AX_dax__uses_optional +XBT_PUBLIC_DATA(short int) dax__uses_optional_isset; +XBT_PUBLIC_DATA(AT_dax__uses_type) AX_dax__uses_type; +#define A_dax__uses_type (dax__bufferstack + AX_dax__uses_type) +XBT_PUBLIC_DATA(short int) dax__uses_type_isset; +XBT_PUBLIC_DATA(AT_dax__uses_size) AX_dax__uses_size; +#define A_dax__uses_size (dax__bufferstack + AX_dax__uses_size) +XBT_PUBLIC_DATA(short int) dax__uses_size_isset; /* XML application utilities. */ XBT_PUBLIC(int) dax__element_context(int); diff --git a/src/simdag/sd_workstation.c b/src/simdag/sd_workstation.c index 911d596f2d..428c71a2ea 100644 --- a/src/simdag/sd_workstation.c +++ b/src/simdag/sd_workstation.c @@ -11,6 +11,7 @@ #include "xbt/sysdep.h" #include "surf/surf.h" #include "surf/surf_resource.h" +#include "msg/msg.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_workstation, sd, "Logging specific to SimDag (workstation)"); diff --git a/src/simgrid/sg_config.c b/src/simgrid/sg_config.c index bd6c7e2ef1..8e456dcc29 100644 --- a/src/simgrid/sg_config.c +++ b/src/simgrid/sg_config.c @@ -765,6 +765,11 @@ void sg_config_init(int *argc, char **argv) xbt_cfgelm_boolean, 1, 1, NULL, NULL); xbt_cfg_setdefault_boolean(_sg_cfg_set, "smpi/display_timing", "no"); + xbt_cfg_register(&_sg_cfg_set, "smpi/simulate_computation", + "Boolean indicating whether the computational part of the simulated application should be simulated.", + xbt_cfgelm_boolean, 1, 1, NULL, NULL); + xbt_cfg_setdefault_boolean(_sg_cfg_set, "smpi/simulate_computation", "yes"); + xbt_cfg_register(&_sg_cfg_set, "smpi/use_shared_malloc", "Boolean indicating whether we should use shared memory when using SMPI_SHARED_MALLOC. Allows user to disable it for debug purposes.", xbt_cfgelm_boolean, 1, 1, NULL, NULL); @@ -819,10 +824,12 @@ void sg_config_init(int *argc, char **argv) "Small messages timings (MPI_Recv minimum time for small messages)", xbt_cfgelm_string, 1, 1, NULL, NULL); xbt_cfg_setdefault_string(_sg_cfg_set, "smpi/or", "1:0:0:0:0"); + xbt_cfg_register(&_sg_cfg_set, "smpi/iprobe", "Minimum time to inject inside a call to MPI_Iprobe", xbt_cfgelm_double, 1, 1, NULL, NULL); xbt_cfg_setdefault_double(_sg_cfg_set, "smpi/iprobe", 1e-4); + xbt_cfg_register(&_sg_cfg_set, "smpi/coll_selector", "Which collective selector to use", xbt_cfgelm_string, 1, 1, NULL, NULL); diff --git a/src/simix/smx_context_sysv.c b/src/simix/smx_context_sysv.c index cb5b022074..7fc7f6f13d 100644 --- a/src/simix/smx_context_sysv.c +++ b/src/simix/smx_context_sysv.c @@ -240,54 +240,70 @@ static void smx_ctx_sysv_stop_parallel(smx_context_t context) smx_ctx_sysv_suspend_parallel(context); } -static void smx_ctx_sysv_suspend_parallel(smx_context_t context) -{ +/* This function is called by maestro at the beginning of a scheduling round to get all working threads executing some stuff + * It is much easier to understand what happens if you see the working threads as bodies that swap their soul for the + * ones of the simulated processes that must run. + */ +static void smx_ctx_sysv_runall_parallel(void) { +#ifdef CONTEXT_THREADS + sysv_threads_working = 0; + // parmap_apply ensures that every working thread get an index in the process_to_run array (through an atomic fetch_and_add), + // and runs the smx_ctx_sysv_resume_parallel function on that index + xbt_parmap_apply(sysv_parmap, (void_f_pvoid_t) smx_ctx_sysv_resume_parallel, + simix_global->process_to_run); +#else + xbt_die("You asked for a parallel execution, but you don't have any threads."); +#endif +} + +/* This function is in charge of running one particular simulated process on the current thread */ +static void smx_ctx_sysv_resume_parallel(smx_process_t simulated_process_to_run) { +#ifdef CONTEXT_THREADS + unsigned long worker_id = __sync_fetch_and_add(&sysv_threads_working, 1); // what is my containing body? + xbt_os_thread_set_specific(sysv_worker_id_key, (void*) worker_id); // Store the number of my containing body in os-thread-specific area + smx_ctx_sysv_t worker_context = (smx_ctx_sysv_t)SIMIX_context_self(); // get my current soul + sysv_workers_context[worker_id] = worker_context; // write down that this soul is hosted in that body (for now) + ucontext_t* worker_stack = &worker_context->uc; // retrieves the system-level info that fuels this soul + + smx_context_t context = simulated_process_to_run->context; // That's the first soul that I should become + SIMIX_context_set_current(context); // write in simix that I switched my soul + swapcontext(worker_stack, &((smx_ctx_sysv_t) context)->uc); // actually do that using the relevant syscall + // No body runs that soul anymore at this point. Instead the current body took the soul of simulated process + // The simulated process wakes back after the call to "SIMIX_context_suspend(self->context);" within smx_process.c::SIMIX_process_yield() + + // From now on, the simulated processes will change their soul with the next soul to execute (in suspend_parallel, below). + // When nobody is to be executed in this scheduling round, the last simulated process will take back the initial soul of the current working thread +#endif +} + +/* This function is called when a simulated process wants to yield back to the maestro in a blocking simcall. + * This naturally occurs within SIMIX_context_suspend(self->context), called from SIMIX_process_yield() + * Actually, it does not really yield back to maestro, but into the next process that must be executed. + * If no one is to be executed, then it yields to the initial soul that was in this working thread (that was saved in resume_parallel). + */ +static void smx_ctx_sysv_suspend_parallel(smx_context_t context) { #ifdef CONTEXT_THREADS /* determine the next context */ - smx_process_t next_work = xbt_parmap_next(sysv_parmap); + smx_process_t next_work = xbt_parmap_next(sysv_parmap); // get the next soul to embody now smx_context_t next_context; - ucontext_t* next_stack; + ucontext_t* next_stack; // will contain the next soul to run, either simulated or initial minion's one - if (next_work != NULL) { - /* there is a next process to resume */ + if (next_work != NULL) { // there is a next soul to embody (ie, a next process to resume) XBT_DEBUG("Run next process"); next_context = next_work->context; - next_stack = &((smx_ctx_sysv_t) next_context)->uc; } else { /* all processes were run, go to the barrier */ XBT_DEBUG("No more processes to run"); - unsigned long worker_id = + unsigned long worker_id = // Get back the identity of my body that was stored when starting the scheduling round (unsigned long) xbt_os_thread_get_specific(sysv_worker_id_key); - next_context = (smx_context_t)sysv_workers_context[worker_id]; - next_stack = &((smx_ctx_sysv_t)next_context)->uc; + next_context = (smx_context_t)sysv_workers_context[worker_id]; // deduce the initial soul of that body + // When given that soul, the body will wait for the next scheduling round } - SIMIX_context_set_current(next_context); - swapcontext(&((smx_ctx_sysv_t) context)->uc, next_stack); -#endif -} - -static void smx_ctx_sysv_resume_parallel(smx_process_t first_process) -{ -#ifdef CONTEXT_THREADS - unsigned long worker_id = __sync_fetch_and_add(&sysv_threads_working, 1); - xbt_os_thread_set_specific(sysv_worker_id_key, (void*) worker_id); - smx_ctx_sysv_t worker_context = (smx_ctx_sysv_t)SIMIX_context_self(); - sysv_workers_context[worker_id] = worker_context; - ucontext_t* worker_stack = &worker_context->uc; + next_stack = &((smx_ctx_sysv_t)next_context)->uc; - smx_context_t context = first_process->context; - SIMIX_context_set_current(context); - swapcontext(worker_stack, &((smx_ctx_sysv_t) context)->uc); -#endif -} - -static void smx_ctx_sysv_runall_parallel(void) -{ -#ifdef CONTEXT_THREADS - sysv_threads_working = 0; - xbt_parmap_apply(sysv_parmap, (void_f_pvoid_t) smx_ctx_sysv_resume_parallel, - simix_global->process_to_run); + SIMIX_context_set_current(next_context); + swapcontext(&((smx_ctx_sysv_t) context)->uc, next_stack); // get that next soul #endif } diff --git a/src/simix/smx_process.c b/src/simix/smx_process.c index da0f7d22fb..32c7075fe2 100644 --- a/src/simix/smx_process.c +++ b/src/simix/smx_process.c @@ -293,10 +293,8 @@ void SIMIX_process_create(smx_process_t *process, xbt_swag_insert(*process, simix_global->process_list); XBT_DEBUG("Inserting %s(%s) in the to_run list", (*process)->name, sg_host_name(host)); xbt_dynar_push_as(simix_global->process_to_run, smx_process_t, *process); - } - if (kill_time > SIMIX_get_clock()) { - if (simix_global->kill_process_function) { + if (kill_time > SIMIX_get_clock() && simix_global->kill_process_function) { XBT_DEBUG("Process %s(%s) will be kill at time %f", (*process)->name, sg_host_name((*process)->smx_host), kill_time); SIMIX_timer_set(kill_time, simix_global->kill_process_function, *process); @@ -702,9 +700,10 @@ static int SIMIX_process_join_finish(smx_process_exit_status_t status, smx_actio SIMIX_simcall_answer(simcall); } } - - SIMIX_process_sleep_destroy(action); + surf_action_unref(action->sleep.surf_sleep); + action->sleep.surf_sleep = NULL; } + xbt_mallocator_release(simix_global->action_mallocator, action); return 0; } diff --git a/src/smpi/colls/allgatherv-ompi-bruck.c b/src/smpi/colls/allgatherv-ompi-bruck.c index d554938460..dc5d2fb477 100644 --- a/src/smpi/colls/allgatherv-ompi-bruck.c +++ b/src/smpi/colls/allgatherv-ompi-bruck.c @@ -123,9 +123,6 @@ int smpi_coll_tuned_allgatherv_ompi_bruck(void *sbuf, int scount, - blockcount doubles until the last step when only the remaining data is exchanged. */ - blockcount = 1; - tmpsend = (char*) rbuf; - new_rcounts = (int*) calloc(4*size, sizeof(int)); new_rdispls = new_rcounts + size; new_scounts = new_rdispls + size; diff --git a/src/smpi/colls/allreduce-rab1.c b/src/smpi/colls/allreduce-rab1.c index 2e80e45f6f..2cfab0a9fb 100644 --- a/src/smpi/colls/allreduce-rab1.c +++ b/src/smpi/colls/allreduce-rab1.c @@ -32,7 +32,6 @@ int smpi_coll_tuned_allreduce_rab1(void *sbuff, void *rbuff, pof2 <<= 1; pof2 >>= 1; - mask = 1; send_idx = recv_idx = 0; // uneven count diff --git a/src/smpi/colls/allreduce-smp-rsag-rab.c b/src/smpi/colls/allreduce-smp-rsag-rab.c index 370935777d..ff921155ab 100644 --- a/src/smpi/colls/allreduce-smp-rsag-rab.c +++ b/src/smpi/colls/allreduce-smp-rsag-rab.c @@ -91,19 +91,14 @@ int smpi_coll_tuned_allreduce_smp_rsag_rab(void *sbuf, void *rbuf, int count, recv_chunk = extent * count / (comm_size / num_core); mask = 1; - i = 0; curr_count = count / 2; int phase = 0; base_offset = 0; - send_base_offset = 0; - recv_base_offset = 0; while (mask < (comm_size / num_core)) { dst = inter_rank ^ mask; // compute offsets - send_base_offset = base_offset; - // right-handside if (inter_rank & mask) { recv_base_offset = base_offset + curr_count; diff --git a/src/smpi/colls/alltoall-2dmesh.c b/src/smpi/colls/alltoall-2dmesh.c index 4ac05755ee..287014f875 100644 --- a/src/smpi/colls/alltoall-2dmesh.c +++ b/src/smpi/colls/alltoall-2dmesh.c @@ -92,8 +92,6 @@ int smpi_coll_tuned_alltoall_2dmesh(void *send_buff, int send_count, req_ptr = reqs; - send_offset = recv_offset = (rank % Y) * block_size * num_procs; - count = send_count * num_procs; for (i = 0; i < Y; i++) { diff --git a/src/smpi/colls/alltoall-3dmesh.c b/src/smpi/colls/alltoall-3dmesh.c index e0224b2106..6f43a425a4 100644 --- a/src/smpi/colls/alltoall-3dmesh.c +++ b/src/smpi/colls/alltoall-3dmesh.c @@ -90,7 +90,7 @@ int smpi_coll_tuned_alltoall_3dmesh(void *send_buff, int send_count, req_ptr = reqs; - send_offset = recv_offset = (rank % two_dsize) * block_size * num_procs; + recv_offset = (rank % two_dsize) * block_size * num_procs; smpi_mpi_sendrecv(send_buff, send_count * num_procs, send_type, rank, tag, tmp_buff1 + recv_offset, num_procs * recv_count, diff --git a/src/smpi/colls/alltoallv-bruck.c b/src/smpi/colls/alltoallv-bruck.c index f7ca532f73..d7d0c37a76 100644 --- a/src/smpi/colls/alltoallv-bruck.c +++ b/src/smpi/colls/alltoallv-bruck.c @@ -30,8 +30,8 @@ int smpi_coll_tuned_alltoallv_bruck(void *sendbuf, int *sendcounts, int *senddis size = smpi_comm_size(comm); XBT_DEBUG("<%d> algorithm alltoall_bruck() called.", rank); - err = smpi_datatype_extent(sendtype, &lb, &sendext); - err = smpi_datatype_extent(recvtype, &lb, &recvext); + smpi_datatype_extent(sendtype, &lb, &sendext); + smpi_datatype_extent(recvtype, &lb, &recvext); /* Local copy from self */ err = smpi_datatype_copy((char *)sendbuf + senddisps[rank] * sendext, diff --git a/src/smpi/colls/gather-ompi.c b/src/smpi/colls/gather-ompi.c index 06a9488aac..7b4bd61fa0 100644 --- a/src/smpi/colls/gather-ompi.c +++ b/src/smpi/colls/gather-ompi.c @@ -280,7 +280,6 @@ smpi_coll_tuned_gather_ompi_linear_sync(void *sbuf, int scount, COLL_TUNED_COMPUTED_SEGCOUNT( (size_t)first_segment_size, typelng, first_segment_count ); - ptmp = (char *) rbuf; for (i = 0; i < size; ++i) { if (i == rank) { /* skip myself */ @@ -319,6 +318,7 @@ smpi_coll_tuned_gather_ompi_linear_sync(void *sbuf, int scount, /* wait all second segments to complete */ ret = smpi_mpi_waitall(size, reqs, MPI_STATUSES_IGNORE); + if (ret != MPI_SUCCESS) { line = __LINE__; goto error_hndl; } free(reqs); } diff --git a/src/smpi/colls/reduce-arrival-pattern-aware.c b/src/smpi/colls/reduce-arrival-pattern-aware.c index 3c20887666..920a15c836 100644 --- a/src/smpi/colls/reduce-arrival-pattern-aware.c +++ b/src/smpi/colls/reduce-arrival-pattern-aware.c @@ -179,8 +179,7 @@ int smpi_coll_tuned_reduce_arrival_pattern_aware(void *buf, void *rbuf, to = header_buf[myordering + 1]; } from = header_buf[myordering - 1]; - smpi_mpi_recv(tmp_buf, count, datatype, header_buf[myordering - 1], tag, - comm, &status); + smpi_mpi_recv(tmp_buf, count, datatype, from, tag, comm, &status); smpi_op_apply(op, tmp_buf, rbuf, &count, &datatype); smpi_mpi_send(rbuf, count, datatype, to, tag, comm); } diff --git a/src/smpi/colls/scatter-ompi.c b/src/smpi/colls/scatter-ompi.c index 130ec40932..2d3dacd2cf 100644 --- a/src/smpi/colls/scatter-ompi.c +++ b/src/smpi/colls/scatter-ompi.c @@ -127,8 +127,7 @@ smpi_coll_tuned_scatter_ompi_binomial(void *sbuf, int scount, smpi_mpi_recv(ptmp, rcount*size, rdtype, bmtree->tree_prev, COLL_TAG_SCATTER, comm, &status); /* local copy to rbuf */ - err = smpi_datatype_copy(ptmp, scount, sdtype, - rbuf, rcount, rdtype); + smpi_datatype_copy(ptmp, scount, sdtype, rbuf, rcount, rdtype); } /* send to children on all non-leaf */ for (i = 0; i < bmtree->tree_nextsize; i++) { diff --git a/src/smpi/instr_smpi.c b/src/smpi/instr_smpi.c index a097ed6dbf..cd5a306fa5 100644 --- a/src/smpi/instr_smpi.c +++ b/src/smpi/instr_smpi.c @@ -26,6 +26,7 @@ static const char *smpi_colors[] ={ "wait", "1 1 0", "waitall", "0.78 0.78 0", "waitany", "0.78 0.78 0.58", + "test", "0.52 0.52 0", "allgather", "1 0 0", "allgatherv", "1 0.52 0.52", @@ -42,7 +43,10 @@ static const char *smpi_colors[] ={ "exscan", "1 0.54 0.25", "scatterv", "0.52 0 0.52", "scatter", "1 0.74 0.54", + "computing", "0 1 1", + "sleeping", "0 0.5 0.5", + "init", "0 1 0", "finalize", "0 1 0", NULL, NULL, @@ -281,6 +285,75 @@ void TRACE_smpi_computing_out(int rank) new_pajePopState (SIMIX_get_clock(), container, type); } +void TRACE_smpi_sleeping_init(int rank) +{ + //first use, initialize the color in the trace + //TODO : check with lucas and Pierre how to generalize this approach + //to avoid unnecessary access to the color array + if (!TRACE_smpi_is_enabled() || !TRACE_smpi_is_sleeping()) 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 ("sleeping"); + val_t value = PJ_value_get_or_new ("sleeping", color, type); + new_pajePushState (SIMIX_get_clock(), container, type, value); +} + +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; + } + + 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); + val_t value = PJ_value_get_or_new ("sleeping", NULL, type); + new_pajePushStateWithExtra (SIMIX_get_clock(), container, type, value, (void*)extra); +} + +void TRACE_smpi_sleeping_out(int rank) +{ + if (!TRACE_smpi_is_enabled()|| !TRACE_smpi_is_sleeping()) 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); + new_pajePopState (SIMIX_get_clock(), container, type); +} + + +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; + } + + 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); + val_t value = PJ_value_get_or_new ("test", NULL, type); + new_pajePushStateWithExtra (SIMIX_get_clock(), container, type, value, (void*)extra); +} + +void TRACE_smpi_testing_out(int rank) +{ + if (!TRACE_smpi_is_enabled()) 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); + new_pajePopState (SIMIX_get_clock(), container, type); +} + void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation, instr_extra_data extra) { if (!TRACE_smpi_is_enabled()) { diff --git a/src/smpi/private.h b/src/smpi/private.h index 2c53164f74..d8b00f08bb 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -10,6 +10,7 @@ #include "internal_config.h" #include "xbt.h" #include "xbt/xbt_os_time.h" +#include "xbt/synchro_core.h" #include "simgrid/simix.h" #include "smpi/smpi_interface.h" #include "smpi/smpi.h" @@ -143,7 +144,8 @@ double smpi_process_simulated_elapsed(void); void smpi_process_set_sampling(int s); int smpi_process_get_sampling(void); -MPI_Comm* smpi_deployment_register_process(const char* instance_id, int rank, int index); +void smpi_deployment_register_process(const char* instance_id, int rank, int index, MPI_Comm**, xbt_bar_t*); +void smpi_deployment_cleanup_instances(void); void smpi_comm_copy_buffer_callback(smx_action_t comm, void *buff, size_t buff_size); @@ -591,6 +593,8 @@ void mpi_comm_spawn_multiple_ ( int* count, char *array_of_commands, char** arra int* comm, int*intercomm, int* array_of_errcodes, int* ierr); void mpi_comm_get_parent_ ( int*parent, int* ierr); + +#ifdef HAVE_TRACING /********** Tracing **********/ /* from smpi_instr.c */ void TRACE_internal_smpi_set_category (const char *category); @@ -600,6 +604,11 @@ void TRACE_smpi_collective_out(int rank, int root, const char *operation); void TRACE_smpi_computing_init(int rank); void TRACE_smpi_computing_out(int rank); void TRACE_smpi_computing_in(int rank, instr_extra_data extra); +void TRACE_smpi_sleeping_init(int rank); +void TRACE_smpi_sleeping_out(int rank); +void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra); +void TRACE_smpi_testing_out(int rank); +void TRACE_smpi_testing_in(int rank, instr_extra_data extra); void TRACE_smpi_alloc(void); void TRACE_smpi_release(void); void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation, instr_extra_data extra); @@ -608,7 +617,7 @@ void TRACE_smpi_send(int rank, int src, int dst, int size); void TRACE_smpi_recv(int rank, int src, int dst); void TRACE_smpi_init(int rank); void TRACE_smpi_finalize(int rank); - +#endif const char* encode_datatype(MPI_Datatype datatype); diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index 4b5fe095d1..cc9e4097d8 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -260,8 +260,8 @@ void smpi_action_trace_run(char *path) action_fp=NULL; if (path) { action_fp = fopen(path, "r"); - xbt_assert(action_fp != NULL, "Cannot open %s: %s", path, - strerror(errno)); + if (action_fp == NULL) + xbt_die("Cannot open %s: %s", path, strerror(errno)); } if (!xbt_dict_is_empty(action_queues)) { diff --git a/src/smpi/smpi_bench.c b/src/smpi/smpi_bench.c index f7464dbd2a..8b37cab4ae 100644 --- a/src/smpi/smpi_bench.c +++ b/src/smpi/smpi_bench.c @@ -206,28 +206,46 @@ void smpi_bench_end(void) xbt_backtrace_display_current(); xbt_die("Aborting."); } - smpi_execute(xbt_os_timer_elapsed(timer)); + // Simulate the benchmarked computation unless disabled via command-line argument + if (sg_cfg_get_boolean("smpi/simulate_computation")) { + smpi_execute(xbt_os_timer_elapsed(timer)); + } } -unsigned int smpi_sleep(unsigned int secs) +/* Private sleep function used by smpi_sleep() and smpi_usleep() */ +static unsigned int private_sleep(double secs) { - smx_action_t action; - smpi_bench_end(); - double flops = (double) secs*simcall_host_get_speed(SIMIX_host_self()); - XBT_DEBUG("Sleep for: %f flops", flops); - action = simcall_host_execute("computation", SIMIX_host_self(), flops, 1, 0, 0); + XBT_DEBUG("Sleep for: %lf secs", secs); #ifdef HAVE_TRACING - simcall_set_category (action, TRACE_internal_smpi_get_category()); - #endif - simcall_host_execution_wait(action); + int rank = smpi_comm_rank(MPI_COMM_WORLD); + instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); + extra->type=TRACING_SLEEPING; + extra->sleep_duration=secs; + TRACE_smpi_sleeping_in(rank, extra); +#endif + simcall_process_sleep(secs); +#ifdef HAVE_TRACING + TRACE_smpi_sleeping_out(rank); +#endif smpi_bench_begin(); - return secs; + return 0; } -int smpi_gettimeofday(struct timeval *tv) +unsigned int smpi_sleep(unsigned int secs) +{ + return private_sleep((double)secs); +} + +int smpi_usleep(useconds_t usecs) +{ + return (int)private_sleep((double)usecs / 1000000.0); +} + + +int smpi_gettimeofday(struct timeval *tv, void* tz) { double now; smpi_bench_end(); diff --git a/src/smpi/smpi_coll.c b/src/smpi/smpi_coll.c index 688121eacd..3bca49dbb4 100644 --- a/src/smpi/smpi_coll.c +++ b/src/smpi/smpi_coll.c @@ -403,8 +403,8 @@ int smpi_coll_tuned_alltoall_bruck(void *sendbuf, int sendcount, rank = smpi_comm_rank(comm); size = smpi_comm_size(comm); XBT_DEBUG("<%d> algorithm alltoall_bruck() called.", rank); - err = smpi_datatype_extent(sendtype, &lb, &sendext); - err = smpi_datatype_extent(recvtype, &lb, &recvext); + smpi_datatype_extent(sendtype, &lb, &sendext); + smpi_datatype_extent(recvtype, &lb, &recvext); /* Local copy from self */ err = smpi_datatype_copy((char *)sendbuf + rank * sendcount * sendext, @@ -469,8 +469,8 @@ int smpi_coll_tuned_alltoall_basic_linear(void *sendbuf, int sendcount, rank = smpi_comm_rank(comm); size = smpi_comm_size(comm); XBT_DEBUG("<%d> algorithm alltoall_basic_linear() called.", rank); - err = smpi_datatype_extent(sendtype, &lb, &sendext); - err = smpi_datatype_extent(recvtype, &lb, &recvext); + smpi_datatype_extent(sendtype, &lb, &sendext); + smpi_datatype_extent(recvtype, &lb, &recvext); /* simple optimization */ err = smpi_datatype_copy((char *)sendbuf + rank * sendcount * sendext, sendcount, sendtype, @@ -525,8 +525,8 @@ int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts, rank = smpi_comm_rank(comm); size = smpi_comm_size(comm); XBT_DEBUG("<%d> algorithm basic_alltoallv() called.", rank); - err = smpi_datatype_extent(sendtype, &lb, &sendext); - err = smpi_datatype_extent(recvtype, &lb, &recvext); + smpi_datatype_extent(sendtype, &lb, &sendext); + smpi_datatype_extent(recvtype, &lb, &recvext); /* Local copy from self */ err = smpi_datatype_copy((char *)sendbuf + senddisps[rank] * sendext, diff --git a/src/smpi/smpi_deployment.c b/src/smpi/smpi_deployment.c index 42f679f482..55daf3bea6 100644 --- a/src/smpi/smpi_deployment.c +++ b/src/smpi/smpi_deployment.c @@ -6,6 +6,7 @@ #include "private.h" #include "xbt/sysdep.h" +#include "xbt/synchro_core.h" #include "xbt/log.h" #include "xbt/dict.h" @@ -19,6 +20,7 @@ typedef struct s_smpi_mpi_instance{ int present_processes; int index; MPI_Comm comm_world; + xbt_bar_t finalization_barrier; } s_smpi_mpi_instance_t; @@ -42,6 +44,8 @@ void SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_ instance->present_processes = 0; instance->index = process_count; instance->comm_world = MPI_COMM_NULL; + instance->finalization_barrier=xbt_barrier_init(num_processes); + process_count+=num_processes; if(!smpi_instances){ @@ -54,11 +58,13 @@ void SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_ //get the index of the process in the process_data array -MPI_Comm* smpi_deployment_register_process(const char* instance_id, int rank, int index){ +void smpi_deployment_register_process(const char* instance_id, int rank, int index,MPI_Comm** comm, xbt_bar_t* bar){ if(!smpi_instances){//no instance registered, we probably used smpirun. - index_to_process_data[index]=index; - return NULL; + index_to_process_data[index]=index; + *bar = NULL; + *comm = NULL; + return; } s_smpi_mpi_instance_t* instance = xbt_dict_get_or_null(smpi_instances, instance_id); @@ -72,5 +78,19 @@ MPI_Comm* smpi_deployment_register_process(const char* instance_id, int rank, in instance->present_processes++; index_to_process_data[index]=instance->index+rank; smpi_group_set_mapping(smpi_comm_group(instance->comm_world), index, rank); - return & instance->comm_world; + *bar = instance->finalization_barrier; + *comm = &instance->comm_world; + return; +} + +void smpi_deployment_cleanup_instances(){ + xbt_dict_cursor_t cursor = NULL; + s_smpi_mpi_instance_t* instance = NULL; + char *name = NULL; + xbt_dict_foreach(smpi_instances, cursor, name, instance) { + while (smpi_group_unuse(smpi_comm_group(instance->comm_world)) > 0); + xbt_free(instance->comm_world); + xbt_barrier_destroy(instance->finalization_barrier); + } + xbt_dict_free(&smpi_instances); } diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c index 1ac052ffae..02d4a9f729 100644 --- a/src/smpi/smpi_global.c +++ b/src/smpi/smpi_global.c @@ -34,6 +34,7 @@ typedef struct s_smpi_process_data { char state; int sampling; /* inside an SMPI_SAMPLE_ block? */ char* instance_id; + xbt_bar_t finalization_barrier; } s_smpi_process_data_t; static smpi_process_data_t *process_data = NULL; @@ -84,11 +85,15 @@ void smpi_process_init(int *argc, char ***argv) if(!index_to_process_data){ index_to_process_data=(int*)xbt_malloc(SIMIX_process_count()*sizeof(int)); } - MPI_Comm* temp_comm_world = smpi_deployment_register_process(instance_id, rank, index); + MPI_Comm* temp_comm_world; + xbt_bar_t temp_bar; + smpi_deployment_register_process(instance_id, rank, index, &temp_comm_world ,&temp_bar); data = smpi_process_remote_data(index); data->comm_world = temp_comm_world; + if(temp_bar != NULL) data->finalization_barrier = temp_bar; data->index = index; data->instance_id = instance_id; + xbt_free(simcall_process_get_data(proc)); simcall_process_set_data(proc, data); if (*argc > 3) { free((*argv)[1]); @@ -128,44 +133,10 @@ void smpi_process_destroy(void) */ void smpi_process_finalize(void) { - if(MC_is_active()){ + int index = smpi_process_index(); // wait for all pending asynchronous comms to finish - while (SIMIX_process_has_pending_comms(SIMIX_process_self())) { - simcall_process_sleep(0.01); - } - }else{ - int i; - int size = smpi_comm_size(MPI_COMM_WORLD); - int rank = smpi_comm_rank(MPI_COMM_WORLD); - /* All non-root send & receive zero-length message. */ - if (rank > 0) { - smpi_mpi_ssend (NULL, 0, MPI_BYTE, 0, - COLL_TAG_BARRIER, - MPI_COMM_WORLD); - smpi_mpi_recv (NULL, 0, MPI_BYTE, 0, - COLL_TAG_BARRIER, - MPI_COMM_WORLD, MPI_STATUS_IGNORE); - } - /* The root collects and broadcasts the messages. */ - else { - MPI_Request* requests; - requests = (MPI_Request*)malloc( size * sizeof(MPI_Request) ); - for (i = 1; i < size; ++i) { - requests[i] = smpi_mpi_irecv(NULL, 0, MPI_BYTE, MPI_ANY_SOURCE, - COLL_TAG_BARRIER, MPI_COMM_WORLD - ); - } - smpi_mpi_waitall( size-1, requests+1, MPI_STATUSES_IGNORE ); - for (i = 1; i < size; ++i) { - requests[i] = smpi_mpi_issend(NULL, 0, MPI_BYTE, i, - COLL_TAG_BARRIER, - MPI_COMM_WORLD - ); - } - smpi_mpi_waitall( size-1, requests+1, MPI_STATUSES_IGNORE ); - free( requests ); - } - } + xbt_barrier_wait(process_data[index_to_process_data[index]]->finalization_barrier); + } /** @@ -441,6 +412,7 @@ void smpi_global_init(void) process_data[i]->comm_world = NULL; process_data[i]->state = SMPI_UNINITIALIZED; process_data[i]->sampling = 0; + process_data[i]->finalization_barrier = NULL; } //if the process was launched through smpirun script //we generate a global mpi_comm_world @@ -449,9 +421,12 @@ void smpi_global_init(void) if(smpirun){ group = smpi_group_new(process_count); MPI_COMM_WORLD = smpi_comm_new(group, NULL); + xbt_bar_t bar=xbt_barrier_init(process_count); + MPI_UNIVERSE_SIZE = smpi_comm_size(MPI_COMM_WORLD); for (i = 0; i < process_count; i++) { smpi_group_set_mapping(group, i, i); + process_data[i]->finalization_barrier = bar; } } } @@ -465,6 +440,9 @@ void smpi_global_destroy(void) if (MPI_COMM_WORLD != MPI_COMM_UNINITIALIZED){ while (smpi_group_unuse(smpi_comm_group(MPI_COMM_WORLD)) > 0); xbt_free(MPI_COMM_WORLD); + xbt_barrier_destroy(process_data[0]->finalization_barrier); + }else{ + smpi_deployment_cleanup_instances(); } MPI_COMM_WORLD = MPI_COMM_NULL; for (i = 0; i < count; i++) { diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index b42f6a623f..573575b20b 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -923,7 +923,7 @@ int PMPI_Start(MPI_Request * request) smpi_bench_end(); if (request == NULL || *request == MPI_REQUEST_NULL) { - retval = MPI_ERR_ARG; + retval = MPI_ERR_REQUEST; } else { smpi_mpi_start(*request); retval = MPI_SUCCESS; @@ -934,14 +934,21 @@ int PMPI_Start(MPI_Request * request) int PMPI_Startall(int count, MPI_Request * requests) { - int retval = 0; - + int retval; + int i = 0; smpi_bench_end(); if (requests == NULL) { retval = MPI_ERR_ARG; } else { - smpi_mpi_startall(count, requests); retval = MPI_SUCCESS; + for (i = 0 ; i < count ; i++) { + if(requests[i] == MPI_REQUEST_NULL) { + retval = MPI_ERR_REQUEST; + } + } + if(retval != MPI_ERR_REQUEST) { + smpi_mpi_startall(count, requests); + } } smpi_bench_begin(); return retval; @@ -1362,7 +1369,6 @@ int PMPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype, int PMPI_Test(MPI_Request * request, int *flag, MPI_Status * status) { int retval = 0; - smpi_bench_end(); if (request == NULL || flag == NULL) { retval = MPI_ERR_ARG; @@ -1371,7 +1377,19 @@ int PMPI_Test(MPI_Request * request, int *flag, MPI_Status * status) smpi_empty_status(status); retval = MPI_ERR_REQUEST; } else { +#ifdef HAVE_TRACING + int rank = request && (*request)->comm != MPI_COMM_NULL + ? smpi_process_index() + : -1; + + instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); + extra->type = TRACING_TEST; + TRACE_smpi_testing_in(rank, extra); +#endif *flag = smpi_mpi_test(request, status); +#ifdef HAVE_TRACING + TRACE_smpi_testing_out(rank); +#endif retval = MPI_SUCCESS; } smpi_bench_begin(); diff --git a/src/smpi/smpi_replay.c b/src/smpi/smpi_replay.c index 9e00ae97bd..df4f3f5b27 100644 --- a/src/smpi/smpi_replay.c +++ b/src/smpi/smpi_replay.c @@ -313,6 +313,35 @@ static void action_Irecv(const char *const *action) log_timed_action (action, clock); } +static void action_test(const char *const *action){ + double clock = smpi_process_simulated_elapsed(); + MPI_Request request; + MPI_Status status; + int flag = TRUE; + + request = xbt_dynar_pop_as(reqq[smpi_comm_rank(MPI_COMM_WORLD)],MPI_Request); + xbt_assert(request != NULL, "found null request in reqq"); + +#ifdef HAVE_TRACING + int rank = smpi_comm_rank(MPI_COMM_WORLD); + instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1); + extra->type=TRACING_TEST; + TRACE_smpi_testing_in(rank, extra); +#endif + flag = smpi_mpi_test(&request, &status); + XBT_DEBUG("MPI_Test result: %d", flag); + /* push back request in dynar to be caught by a subsequent wait. if the test + * did succeed, the request is now NULL. + */ + xbt_dynar_push_as(reqq[smpi_comm_rank(MPI_COMM_WORLD)],MPI_Request, request); + +#ifdef HAVE_TRACING + TRACE_smpi_testing_out(rank); +#endif + + log_timed_action (action, clock); +} + static void action_wait(const char *const *action){ double clock = smpi_process_simulated_elapsed(); MPI_Request request; @@ -322,7 +351,14 @@ static void action_wait(const char *const *action){ "action wait not preceded by any irecv or isend: %s", xbt_str_join_array(action," ")); request = xbt_dynar_pop_as(reqq[smpi_comm_rank(MPI_COMM_WORLD)],MPI_Request); - xbt_assert(request != NULL, "found null request in reqq"); + + if (!request){ + /* Assuming that the trace is well formed, this mean the comm might have + * been caught by a MPI_test. Then just return. + */ + return; + } + #ifdef HAVE_TRACING int rank = request->comm != MPI_COMM_NULL ? smpi_comm_rank(request->comm) @@ -955,6 +991,7 @@ void smpi_replay_init(int *argc, char***argv){ xbt_replay_action_register("Isend", action_Isend); xbt_replay_action_register("recv", action_recv); xbt_replay_action_register("Irecv", action_Irecv); + xbt_replay_action_register("test", action_test); xbt_replay_action_register("wait", action_wait); xbt_replay_action_register("waitAll", action_waitall); xbt_replay_action_register("barrier", action_barrier); diff --git a/src/smpi/smpi_topo.c b/src/smpi/smpi_topo.c index 56622b867e..fdc5f7709d 100644 --- a/src/smpi/smpi_topo.c +++ b/src/smpi/smpi_topo.c @@ -453,7 +453,6 @@ getfactors(int num, int *nfactors, int **factors) { (*factors)[i++] = 2; } /* determine all occurences of uneven prime numbers up to sqrt(num) */ - d = 3; for(d = 3; (num > 1) && (d < sqrtnum); d += 2) { while((num % d) == 0) { num /= d; diff --git a/src/smpi/smpicxx.in b/src/smpi/smpicxx.in new file mode 100755 index 0000000000..1f2cb32a12 --- /dev/null +++ b/src/smpi/smpicxx.in @@ -0,0 +1,57 @@ +#! /bin/sh + +# Copyright (c) 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. + +CC=@CMAKE_CXX_COMPILER@ + +INCLUDEARGS="@includeflag@" +CMAKE_LINKARGS="-L@libdir@" + +@SMPITOOLS_SH@ + +list_set CFLAGS +list_set LINKARGS +if [ "@WIN32@" != "1" ]; then + list_add CFLAGS "-Dmain=smpi_simulated_main_" + list_add LINKARGS "-lsimgrid" +else + list_add CFLAGS "-include" "@includedir@/smpi/smpi_main.h" + list_add LINKARGS "@libdir@\libsimgrid.dll" +fi + +list_set CMDARGS +while [ $# -gt 0 ]; do + ARG="$1" + shift + case "${ARG}" in + -c) + CMAKE_LINKARGS="" + LINKARGS="" + list_add CMDARGS "-c" + ;; + *.c) + SRCFILE="$(readlink -f ${ARG} 2>/dev/null)" + if [ -z "$SRCFILE" ] ; then + SRCFILE="$ARG" + fi + list_add CMDARGS "${SRCFILE}" + ;; + *) + list_add CMDARGS "${ARG}" + ;; + esac +done + +list_set CMDLINE "${CC}" +list_add_not_empty CMDLINE "${CFLAGS}" +list_add_not_empty CMDLINE ${INCLUDEARGS} +list_add_not_empty CMDLINE ${CMAKE_LINKARGS} +list_add_not_empty CMDLINE "${CMDARGS}" +list_add_not_empty CMDLINE "${LINKARGS}" + +eval $(list_get CMDLINE) +"$@" diff --git a/src/smpi/smpirun.in b/src/smpi/smpirun.in index 9882e0692a..a27daaa4cf 100755 --- a/src/smpi/smpirun.in +++ b/src/smpi/smpirun.in @@ -21,7 +21,7 @@ NETWORK_BANDWIDTH="${DEFAULT_NETWORK_BANDWIDTH}" NETWORK_LATENCY="${DEFAULT_NETWORK_LATENCY}" POWER="${DEFAULT_POWER}" -SIMOPTS="--cfg=maxmin/precision:1e-9 --cfg=surf/precision:1e-9 --cfg=network/model:SMPI --cfg=network/TCP_gamma:4194304" +SIMOPTS="--cfg=maxmin/precision:1e-3 --cfg=surf/precision:1e-9 --cfg=network/model:SMPI --cfg=network/TCP_gamma:4194304" #usage to print the way this script should be called usage () { diff --git a/src/surf/cpu_cas01.cpp b/src/surf/cpu_cas01.cpp index 3c6662dda7..b58815c16a 100644 --- a/src/surf/cpu_cas01.cpp +++ b/src/surf/cpu_cas01.cpp @@ -19,8 +19,8 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_cpu_cas, surf_cpu, static void cpu_define_callbacks() { - sg_platf_host_add_cb(parse_cpu_init); - sg_platf_postparse_add_cb(add_traces_cpu); + sg_platf_host_add_cb(cpu_parse_init); + sg_platf_postparse_add_cb(cpu_add_traces); } /********* @@ -42,8 +42,8 @@ void surf_cpu_model_init_Cas01() surf_cpu_model_vm = new CpuCas01Model(); cpu_define_callbacks(); - ModelPtr model_pm = static_cast(surf_cpu_model_pm); - ModelPtr model_vm = static_cast(surf_cpu_model_vm); + ModelPtr model_pm = surf_cpu_model_pm; + ModelPtr model_vm = surf_cpu_model_vm; xbt_dynar_push(model_list, &model_pm); xbt_dynar_push(model_list, &model_vm); } @@ -106,20 +106,7 @@ CpuCas01Model::~CpuCas01Model() delete p_cpuRunningActionSetThatDoesNotNeedBeingChecked; } -void CpuCas01Model::parseInit(sg_platf_host_cbarg_t host) -{ - createResource(host->id, - host->power_peak, - host->pstate, - host->power_scale, - host->power_trace, - host->core_amount, - host->initial_state, - host->state_trace, - host->properties); -} - -CpuPtr CpuCas01Model::createResource(const char *name, xbt_dynar_t power_peak, +CpuPtr CpuCas01Model::createCpu(const char *name, xbt_dynar_t power_peak, int pstate, double power_scale, tmgr_trace_t power_trace, int core, e_surf_resource_state_t state_initial, @@ -135,7 +122,7 @@ CpuPtr CpuCas01Model::createResource(const char *name, xbt_dynar_t power_peak, xbt_assert(core > 0, "Invalid number of cores %d", core); cpu = new CpuCas01(this, name, power_peak, pstate, power_scale, power_trace, core, state_initial, state_trace, cpu_properties); - xbt_lib_set(host_lib, name, SURF_CPU_LEVEL, static_cast(cpu)); + xbt_lib_set(host_lib, name, SURF_CPU_LEVEL, cpu); return cpu; } @@ -163,7 +150,7 @@ void CpuCas01Model::addTraces() xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); - host->setStateEvent(tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(host))); + host->setStateEvent(tmgr_history_add_trace(history, trace, 0.0, 0, host)); } xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) { @@ -173,7 +160,7 @@ void CpuCas01Model::addTraces() xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); - host->setPowerEvent(tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(host))); + host->setPowerEvent(tmgr_history_add_trace(history, trace, 0.0, 0, host)); } } @@ -196,10 +183,10 @@ CpuCas01::CpuCas01(CpuCas01ModelPtr model, const char *name, xbt_dynar_t powerPe m_core = core; setState(stateInitial); if (powerTrace) - p_powerEvent = tmgr_history_add_trace(history, powerTrace, 0.0, 0, static_cast(this)); + p_powerEvent = tmgr_history_add_trace(history, powerTrace, 0.0, 0, this); if (stateTrace) - p_stateEvent = tmgr_history_add_trace(history, stateTrace, 0.0, 0, static_cast(this)); + p_stateEvent = tmgr_history_add_trace(history, stateTrace, 0.0, 0, this); } CpuCas01::~CpuCas01(){ @@ -251,7 +238,7 @@ void CpuCas01::updateState(tmgr_trace_event_t event_type, double value, double d #endif while ((var = lmm_get_var_from_cnst (getModel()->getMaxminSystem(), getConstraint(), &elem))) { - CpuCas01ActionPtr action = static_cast(static_cast(lmm_variable_id(var))); + CpuCas01ActionPtr action = static_cast(lmm_variable_id(var)); lmm_update_variable_bound(getModel()->getMaxminSystem(), action->getVariable(), @@ -373,7 +360,7 @@ void CpuCas01::setPowerPeakAt(int pstate_index) CpuCas01Action::CpuCas01Action(ModelPtr model, double cost, bool failed, double power, lmm_constraint_t constraint) : CpuAction(model, cost, failed, - lmm_variable_new(model->getMaxminSystem(), static_cast(this), + lmm_variable_new(model->getMaxminSystem(), this, 1.0, power, 1)) { m_suspended = 0; diff --git a/src/surf/cpu_cas01.hpp b/src/surf/cpu_cas01.hpp index 438f3c2ff4..0993fea896 100644 --- a/src/surf/cpu_cas01.hpp +++ b/src/surf/cpu_cas01.hpp @@ -29,14 +29,13 @@ public: double (CpuCas01Model::*shareResources)(double now); void (CpuCas01Model::*updateActionsState)(double now, double delta); - void parseInit(sg_platf_host_cbarg_t host); - CpuPtr createResource(const char *name, xbt_dynar_t power_peak, int pstate, + CpuPtr createCpu(const char *name, xbt_dynar_t power_peak, int pstate, double power_scale, tmgr_trace_t power_trace, int core, e_surf_resource_state_t state_initial, tmgr_trace_t state_trace, xbt_dict_t cpu_properties); - double shareResourcesFull(double now); + double shareResourcesFull(double now); void addTraces(); ActionListPtr p_cpuRunningActionSetThatDoesNotNeedBeingChecked; }; diff --git a/src/surf/cpu_interface.cpp b/src/surf/cpu_interface.cpp index 1a08d36e34..7dc2d1a599 100644 --- a/src/surf/cpu_interface.cpp +++ b/src/surf/cpu_interface.cpp @@ -30,20 +30,9 @@ surf_callback(void, CpuPtr) cpuDestructedCallbacks; surf_callback(void, CpuPtr, e_surf_resource_state_t, e_surf_resource_state_t) cpuStateChangedCallbacks; surf_callback(void, CpuActionPtr, e_surf_action_state_t, e_surf_action_state_t) cpuActionStateChangedCallbacks; -void parse_cpu_init(sg_platf_host_cbarg_t host){ - surf_cpu_model_pm->parseInit(host); -} - -void add_traces_cpu(){ - surf_cpu_model_pm->addTraces(); -} - -/********* - * Model * - *********/ -void CpuModel::parseInit(sg_platf_host_cbarg_t host) -{ - createResource(host->id, +void cpu_parse_init(sg_platf_host_cbarg_t host){ + surf_cpu_model_pm->createCpu( + host->id, host->power_peak, host->pstate, host->power_scale, @@ -54,12 +43,19 @@ void CpuModel::parseInit(sg_platf_host_cbarg_t host) host->properties); } +void cpu_add_traces(){ + surf_cpu_model_pm->addTraces(); +} + +/********* + * Model * + *********/ void CpuModel::updateActionsStateLazy(double now, double /*delta*/) { CpuActionPtr action; while ((xbt_heap_size(getActionHeap()) > 0) && (double_equals(xbt_heap_maxkey(getActionHeap()), now, sg_surf_precision))) { - action = static_cast(static_cast(xbt_heap_pop(getActionHeap()))); + action = static_cast(xbt_heap_pop(getActionHeap())); XBT_CDEBUG(surf_kernel, "Something happened to action %p", action); #ifdef HAVE_TRACING if (TRACE_is_enabled()) { diff --git a/src/surf/cpu_interface.hpp b/src/surf/cpu_interface.hpp index b2f4e8a709..f877b1ffab 100644 --- a/src/surf/cpu_interface.hpp +++ b/src/surf/cpu_interface.hpp @@ -54,9 +54,9 @@ XBT_PUBLIC_DATA( surf_callback(void, CpuPtr, e_surf_resource_state_t, e_surf_res */ XBT_PUBLIC_DATA( surf_callback(void, CpuActionPtr, e_surf_action_state_t, e_surf_action_state_t)) cpuActionStateChangedCallbacks; -XBT_PUBLIC(void) parse_cpu_init(sg_platf_host_cbarg_t host); +XBT_PUBLIC(void) cpu_parse_init(sg_platf_host_cbarg_t host); -XBT_PUBLIC(void) add_traces_cpu(); +XBT_PUBLIC(void) cpu_add_traces(); /********* * Model * @@ -80,9 +80,7 @@ public: * * @param host [TODO] */ - void parseInit(sg_platf_host_cbarg_t host); - - virtual CpuPtr createResource(const char *name, xbt_dynar_t power_peak, + virtual CpuPtr createCpu(const char *name, xbt_dynar_t power_peak, int pstate, double power_scale, tmgr_trace_t power_trace, int core, e_surf_resource_state_t state_initial, @@ -91,8 +89,6 @@ public: void updateActionsStateLazy(double now, double delta); void updateActionsStateFull(double now, double delta); - - virtual void addTraces() =0; }; /************ diff --git a/src/surf/cpu_ti.cpp b/src/surf/cpu_ti.cpp index 5c083d5929..10f16cf52e 100644 --- a/src/surf/cpu_ti.cpp +++ b/src/surf/cpu_ti.cpp @@ -381,8 +381,8 @@ int CpuTiTrace::binarySearch(double *array, double a, int low, int high) static void cpu_ti_define_callbacks() { - sg_platf_host_add_cb(parse_cpu_init); - sg_platf_postparse_add_cb(add_traces_cpu); + sg_platf_host_add_cb(cpu_parse_init); + sg_platf_postparse_add_cb(cpu_add_traces); } /********* @@ -406,12 +406,9 @@ void surf_cpu_model_init_ti() CpuTiModel::CpuTiModel() : CpuModel("cpu_ti") { - CpuTiPtr cpu = NULL; - p_runningActionSetThatDoesNotNeedBeingChecked = new ActionList(); - p_modifiedCpu = - xbt_swag_new(xbt_swag_offset(*cpu, p_modifiedCpuHookup)); + p_modifiedCpu = new CpuTiList(); p_tiActionHeap = xbt_heap_new(8, NULL); xbt_heap_set_update_callback(p_tiActionHeap, @@ -421,13 +418,12 @@ CpuTiModel::CpuTiModel() : CpuModel("cpu_ti") CpuTiModel::~CpuTiModel() { surf_cpu_model_pm = NULL; - delete p_runningActionSetThatDoesNotNeedBeingChecked; - xbt_swag_free(p_modifiedCpu); + delete p_modifiedCpu; xbt_heap_free(p_tiActionHeap); } -CpuPtr CpuTiModel::createResource(const char *name, +CpuPtr CpuTiModel::createCpu(const char *name, xbt_dynar_t powerPeak, int pstate, double powerScale, @@ -449,13 +445,16 @@ CpuPtr CpuTiModel::createResource(const char *name, double CpuTiModel::shareResources(double now) { - void *_cpu, *_cpu_next; double min_action_duration = -1; /* iterates over modified cpus to update share resources */ - xbt_swag_foreach_safe(_cpu, _cpu_next, p_modifiedCpu) { - static_cast(_cpu)->updateActionsFinishTime(now); + for(CpuTiList::iterator it(p_modifiedCpu->begin()), itend(p_modifiedCpu->end()) + ; it != itend ;) { + CpuTiPtr ti = &*it; + ++it; + ti->updateActionsFinishTime(now); } + /* get the min next event if heap not empty */ if (xbt_heap_size(p_tiActionHeap) > 0) min_action_duration = xbt_heap_maxkey(p_tiActionHeap) - now; @@ -505,7 +504,7 @@ void CpuTiModel::addTraces() continue; } XBT_DEBUG("Add state trace: %s to CPU(%s)", trace_name, elm); - cpu->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(cpu)); + cpu->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, cpu); } xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) { @@ -531,7 +530,7 @@ void CpuTiModel::addTraces() empty_trace = tmgr_empty_trace_new(); cpu->p_powerEvent = tmgr_history_add_trace(history, empty_trace, - cpu->p_availTrace->m_lastTime, 0, static_cast(cpu)); + cpu->p_availTrace->m_lastTime, 0, cpu); } } } @@ -556,21 +555,16 @@ CpuTi::CpuTi(CpuTiModelPtr model, const char *name, xbt_dynar_t powerPeak, XBT_DEBUG("power scale %f", powerScale); p_availTrace = new CpuTiTgmr(powerTrace, powerScale); - CpuTiActionPtr action = NULL; - p_actionSet = xbt_swag_new(xbt_swag_offset(*action, p_cpuListHookup)); + p_actionSet = new ActionTiList(); m_lastUpdate = 0; xbt_dynar_get_cpy(powerPeak, 0, &m_powerPeak); xbt_dynar_free(&powerPeak); /* kill memory leak */ - m_pstate = pstate; - XBT_DEBUG("CPU create: peak=%f, pstate=%d", m_powerPeak, m_pstate); - - p_modifiedCpuHookup.prev = 0; - p_modifiedCpuHookup.next = 0; + XBT_DEBUG("CPU create: peak=%f", m_powerPeak); if (stateTrace) - p_stateEvent = tmgr_history_add_trace(history, stateTrace, 0.0, 0, static_cast(this)); + p_stateEvent = tmgr_history_add_trace(history, stateTrace, 0.0, 0, this); if (powerTrace && xbt_dynar_length(powerTrace->s_list.event_list) > 1) { // add a fake trace event if periodicity == 0 xbt_dynar_get_cpy(powerTrace->s_list.event_list, @@ -579,20 +573,20 @@ CpuTi::CpuTi(CpuTiModelPtr model, const char *name, xbt_dynar_t powerPeak, empty_trace = tmgr_empty_trace_new(); p_powerEvent = tmgr_history_add_trace(history, empty_trace, - p_availTrace->m_lastTime, 0, static_cast(this)); + p_availTrace->m_lastTime, 0, this); } } }; CpuTi::~CpuTi(){ -delete p_availTrace; -xbt_swag_free(p_actionSet); + modified(false); + delete p_availTrace; + delete p_actionSet; } void CpuTi::updateState(tmgr_trace_event_t event_type, double value, double date) { - void *_action; CpuTiActionPtr action; if (event_type == p_powerEvent) { @@ -604,7 +598,8 @@ void CpuTi::updateState(tmgr_trace_event_t event_type, value, date); /* update remaining of actions and put in modified cpu swag */ updateRemainingAmount(date); - xbt_swag_insert(this, reinterpret_cast(getModel())->p_modifiedCpu); + + modified(true); power_trace = p_availTrace->p_powerTrace; xbt_dynar_get_cpy(power_trace->s_list.event_list, @@ -630,8 +625,9 @@ void CpuTi::updateState(tmgr_trace_event_t event_type, setState(SURF_RESOURCE_OFF); /* put all action running on cpu to failed */ - xbt_swag_foreach(_action, p_actionSet) { - action = static_cast(_action); + for(ActionTiList::iterator it(p_actionSet->begin()), itend(p_actionSet->end()) + ; it != itend ; ++it) { + action = &*it; if (action->getState() == SURF_ACTION_RUNNING || action->getState() == SURF_ACTION_READY || action->getState() == SURF_ACTION_NOT_IN_THE_SYSTEM) { @@ -639,7 +635,7 @@ void CpuTi::updateState(tmgr_trace_event_t event_type, action->setState(SURF_ACTION_FAILED); if (action->m_indexHeap >= 0) { CpuTiActionPtr heap_act = (CpuTiActionPtr) - xbt_heap_remove(reinterpret_cast(getModel())->p_tiActionHeap, action->m_indexHeap); + xbt_heap_remove(static_cast(getModel())->p_tiActionHeap, action->m_indexHeap); if (heap_act != action) DIE_IMPOSSIBLE; } @@ -658,15 +654,15 @@ void CpuTi::updateState(tmgr_trace_event_t event_type, void CpuTi::updateActionsFinishTime(double now) { - void *_action; CpuTiActionPtr action; double sum_priority = 0.0, total_area, min_finish = -1; /* update remaning amount of actions */ updateRemainingAmount(now); - xbt_swag_foreach(_action, p_actionSet) { - action = static_cast(_action); + for(ActionTiList::iterator it(p_actionSet->begin()), itend(p_actionSet->end()) + ; it != itend ; ++it) { + action = &*it; /* action not running, skip it */ if (action->getStateSet() != surf_cpu_model_pm->getRunningActionSet()) @@ -684,8 +680,9 @@ updateRemainingAmount(now); } m_sumPriority = sum_priority; - xbt_swag_foreach(_action, p_actionSet) { - action = static_cast(_action); + for(ActionTiList::iterator it(p_actionSet->begin()), itend(p_actionSet->end()) + ; it != itend ; ++it) { + action = &*it; min_finish = -1; /* action not running, skip it */ if (action->getStateSet() != @@ -717,12 +714,12 @@ updateRemainingAmount(now); XBT_DEBUG("action(%p) index %d", action, action->m_indexHeap); if (action->m_indexHeap >= 0) { CpuTiActionPtr heap_act = (CpuTiActionPtr) - xbt_heap_remove(reinterpret_cast(getModel())->p_tiActionHeap, action->m_indexHeap); + xbt_heap_remove(static_cast(getModel())->p_tiActionHeap, action->m_indexHeap); if (heap_act != action) DIE_IMPOSSIBLE; } if (min_finish != NO_MAX_DURATION) - xbt_heap_push(reinterpret_cast(getModel())->p_tiActionHeap, action, min_finish); + xbt_heap_push(static_cast(getModel())->p_tiActionHeap, action, min_finish); XBT_DEBUG ("Update finish time: Cpu(%s) Action: %p, Start Time: %f Finish Time: %f Max duration %f", @@ -731,16 +728,14 @@ updateRemainingAmount(now); action->getMaxDuration()); } /* remove from modified cpu */ - xbt_swag_remove(this, reinterpret_cast(getModel())->p_modifiedCpu); + modified(false); } bool CpuTi::isUsed() { - return xbt_swag_size(p_actionSet); + return !p_actionSet->empty(); } - - double CpuTi::getAvailableSpeed() { m_powerScale = p_availTrace->getPowerScale(surf_get_clock()); @@ -755,7 +750,6 @@ double CpuTi::getAvailableSpeed() void CpuTi::updateRemainingAmount(double now) { double area_total; - void* _action; CpuTiActionPtr action; /* already updated */ @@ -767,8 +761,9 @@ void CpuTi::updateRemainingAmount(double now) XBT_DEBUG("Flops total: %f, Last update %f", area_total, m_lastUpdate); - xbt_swag_foreach(_action, p_actionSet) { - action = static_cast(_action); + for(ActionTiList::iterator it(p_actionSet->begin()), itend(p_actionSet->end()) + ; it != itend ; ++it) { + action = &*it; /* action not running, skip it */ if (action->getStateSet() != getModel()->getRunningActionSet()) @@ -804,7 +799,7 @@ CpuActionPtr CpuTi::execute(double size) XBT_IN("(%s,%g)", getName(), size); CpuTiActionPtr action = new CpuTiAction(static_cast(getModel()), size, getState() != SURF_RESOURCE_ON, this); - xbt_swag_insert(action, p_actionSet); + p_actionSet->push_back(*action); XBT_OUT(); return action; @@ -825,16 +820,29 @@ CpuActionPtr CpuTi::sleep(double duration) /* Move to the *end* of the corresponding action set. This convention is used to speed up update_resource_state */ action->getStateSet()->erase(action->getStateSet()->iterator_to(*action)); - action->p_stateSet = reinterpret_cast(getModel())->p_runningActionSetThatDoesNotNeedBeingChecked; - action->getStateSet()->push_back(*static_cast(action)); + action->p_stateSet = static_cast(getModel())->p_runningActionSetThatDoesNotNeedBeingChecked; + action->getStateSet()->push_back(*action); } - xbt_swag_insert(action, p_actionSet); + p_actionSet->push_back(*action); XBT_OUT(); return action; } +void CpuTi::modified(bool modified){ + CpuTiListPtr modifiedCpu = static_cast(getModel())->p_modifiedCpu; + if (modified) { + if (!is_linked()) { + modifiedCpu->push_back(*this); + } + } else { + if (is_linked()) { + modifiedCpu->erase(modifiedCpu->iterator_to(*this)); + } + } +} + /********** * Action * **********/ @@ -848,14 +856,11 @@ CpuTiAction::CpuTiAction(CpuTiModelPtr model_, double cost, bool failed, CpuTiPtr cpu) : CpuAction(model_, cost, failed) { - p_cpuListHookup.next = 0; - p_cpuListHookup.prev = 0; - m_suspended = 0; /* Should be useless because of the calloc but it seems to help valgrind... */ p_cpu = cpu; m_indexHeap = -1; - xbt_swag_insert(cpu, reinterpret_cast(getModel())->p_modifiedCpu); + p_cpu->modified(true); } void CpuTiAction::updateIndexHeap(int i) @@ -866,7 +871,7 @@ void CpuTiAction::updateIndexHeap(int i) void CpuTiAction::setState(e_surf_action_state_t state) { CpuAction::setState(state); - xbt_swag_insert(p_cpu, reinterpret_cast(getModel())->p_modifiedCpu); + p_cpu->modified(true); } int CpuTiAction::unref() @@ -876,10 +881,11 @@ int CpuTiAction::unref() if (actionHook::is_linked()) getStateSet()->erase(getStateSet()->iterator_to(*this)); /* remove from action_set */ - xbt_swag_remove(this, p_cpu->p_actionSet); + if (actionTiHook::is_linked()) + p_cpu->p_actionSet->erase(p_cpu->p_actionSet->iterator_to(*this)); /* remove from heap */ - xbt_heap_remove(reinterpret_cast(getModel())->p_tiActionHeap, this->m_indexHeap); - xbt_swag_insert(p_cpu, reinterpret_cast(getModel())->p_modifiedCpu); + xbt_heap_remove(static_cast(getModel())->p_tiActionHeap, this->m_indexHeap); + p_cpu->modified(true); delete this; return 1; } @@ -890,7 +896,7 @@ void CpuTiAction::cancel() { this->setState(SURF_ACTION_FAILED); xbt_heap_remove(getModel()->getActionHeap(), this->m_indexHeap); - xbt_swag_insert(p_cpu, reinterpret_cast(getModel())->p_modifiedCpu); + p_cpu->modified(true); return; } @@ -905,7 +911,7 @@ void CpuTiAction::suspend() if (m_suspended != 2) { m_suspended = 1; xbt_heap_remove(getModel()->getActionHeap(), m_indexHeap); - xbt_swag_insert(p_cpu, reinterpret_cast(getModel())->p_modifiedCpu); + p_cpu->modified(true); } XBT_OUT(); } @@ -915,7 +921,7 @@ void CpuTiAction::resume() XBT_IN("(%p)", this); if (m_suspended != 2) { m_suspended = 0; - xbt_swag_insert(p_cpu, reinterpret_cast(getModel())->p_modifiedCpu); + p_cpu->modified(true); } XBT_OUT(); } @@ -955,7 +961,7 @@ void CpuTiAction::setPriority(double priority) { XBT_IN("(%p,%g)", this, priority); m_priority = priority; - xbt_swag_insert(p_cpu, reinterpret_cast(getModel())->p_modifiedCpu); + p_cpu->modified(true); XBT_OUT(); } diff --git a/src/surf/cpu_ti.hpp b/src/surf/cpu_ti.hpp index 1361b0ef4b..83d176e4ad 100644 --- a/src/surf/cpu_ti.hpp +++ b/src/surf/cpu_ti.hpp @@ -29,6 +29,15 @@ typedef CpuTi *CpuTiPtr; class CpuTiAction; typedef CpuTiAction *CpuTiActionPtr; +typedef boost::intrusive::list CpuTiList; +typedef CpuTiList* CpuTiListPtr; +typedef boost::intrusive::list_base_hook<> cpuTiHook; + +struct tiTag; +typedef boost::intrusive::list > > > ActionTiList; +typedef ActionTiList* ActionTiListPtr; +typedef boost::intrusive::list_base_hook > actionTiHook; + /********* * Trace * *********/ @@ -84,9 +93,7 @@ class CpuTiModel : public CpuModel { public: CpuTiModel(); ~CpuTiModel(); - - void parseInit(sg_platf_host_cbarg_t host); - CpuPtr createResource(const char *name, xbt_dynar_t powerPeak, + CpuPtr createCpu(const char *name, xbt_dynar_t powerPeak, int pstate, double power_scale, tmgr_trace_t power_trace, int core, e_surf_resource_state_t state_initial, @@ -97,7 +104,7 @@ public: void addTraces(); ActionListPtr p_runningActionSetThatDoesNotNeedBeingChecked; - xbt_swag_t p_modifiedCpu; + CpuTiListPtr p_modifiedCpu; xbt_heap_t p_tiActionHeap; protected: @@ -112,7 +119,7 @@ protected: /************ * Resource * ************/ -class CpuTi : public Cpu { +class CpuTi : public cpuTiHook, public Cpu { public: CpuTi() {}; CpuTi(CpuTiModelPtr model, const char *name, xbt_dynar_t powerPeak, @@ -133,16 +140,15 @@ public: double getPowerPeakAt(int /*pstate_index*/) {THROW_UNIMPLEMENTED;}; int getNbPstates() {THROW_UNIMPLEMENTED;}; void setPowerPeakAt(int /*pstate_index*/) {THROW_UNIMPLEMENTED;}; + void modified(bool modified); CpuTiTgmrPtr p_availTrace; /*< Structure with data needed to integrate trace file */ tmgr_trace_event_t p_stateEvent; /*< trace file with states events (ON or OFF) */ tmgr_trace_event_t p_powerEvent; /*< trace file with availability events */ - xbt_swag_t p_actionSet; /*< set with all actions running on cpu */ - s_xbt_swag_hookup_t p_modifiedCpuHookup; /*< hookup to swag that indicates whether share resources must be recalculated or not */ + ActionTiListPtr p_actionSet; /*< set with all actions running on cpu */ double m_sumPriority; /*< the sum of actions' priority that are running on cpu */ double m_lastUpdate; /*< last update of actions' remaining amount done */ - int m_pstate; /*< Current pstate (index in the power_peak_list)*/ double current_frequency; void updateRemainingAmount(double now); @@ -152,7 +158,7 @@ public: * Action * **********/ -class CpuTiAction: public CpuAction { +class CpuTiAction: public actionTiHook, public CpuAction { friend CpuActionPtr CpuTi::execute(double size); friend CpuActionPtr CpuTi::sleep(double duration); friend void CpuTi::updateActionsFinishTime(double now);//FIXME @@ -177,7 +183,6 @@ public: CpuTiPtr p_cpu; int m_indexHeap; - s_xbt_swag_hookup_t p_cpuListHookup; int m_suspended; private: }; diff --git a/src/surf/instr_routing.c b/src/surf/instr_routing.c index 50c5769720..0b0a772363 100644 --- a/src/surf/instr_routing.c +++ b/src/surf/instr_routing.c @@ -245,7 +245,7 @@ static void instr_routing_parse_start_link (sg_platf_link_cbarg_t link) if (TRACE_uncategorized()){ type_t bandwidth_used = PJ_type_get_or_null ("bandwidth_used", new->type); if (bandwidth_used == NULL){ - bandwidth_used = PJ_type_variable_new ("bandwidth_used", "0.5 0.5 0.5", new->type); + PJ_type_variable_new ("bandwidth_used", "0.5 0.5 0.5", new->type); } } } @@ -271,7 +271,7 @@ static void instr_routing_parse_start_host (sg_platf_host_cbarg_t host) if (TRACE_uncategorized()){ type_t power_used = PJ_type_get_or_null ("power_used", new->type); if (power_used == NULL){ - power_used = PJ_type_variable_new ("power_used", "0.5 0.5 0.5", new->type); + PJ_type_variable_new ("power_used", "0.5 0.5 0.5", new->type); } } diff --git a/src/surf/lagrange.cpp b/src/surf/lagrange.cpp index 64fc0ad39a..ad8eabcc46 100644 --- a/src/surf/lagrange.cpp +++ b/src/surf/lagrange.cpp @@ -397,7 +397,6 @@ static double dichotomy(double init, double diff(double, void *), min = max = 0.5; } - min_diff = max_diff = middle_diff = 0.0; overall_error = 1; if ((diff_0 = diff(1e-16, var_cnst)) >= 0) { diff --git a/src/surf/network_cm02.cpp b/src/surf/network_cm02.cpp index 73bc407998..278dacd1c5 100644 --- a/src/surf/network_cm02.cpp +++ b/src/surf/network_cm02.cpp @@ -22,95 +22,10 @@ int sg_network_crosstraffic = 0; * CallBacks * *************/ -static void net_parse_link_init(sg_platf_link_cbarg_t link){ - if (link->policy == SURF_LINK_FULLDUPLEX) { - char *link_id; - link_id = bprintf("%s_UP", link->id); - surf_network_model->createResource(link_id, - link->bandwidth, - link->bandwidth_trace, - link->latency, - link->latency_trace, - link->state, - link->state_trace, link->policy, link->properties); - xbt_free(link_id); - link_id = bprintf("%s_DOWN", link->id); - surf_network_model->createResource(link_id, - link->bandwidth, - link->bandwidth_trace, - link->latency, - link->latency_trace, - link->state, - link->state_trace, link->policy, link->properties); - xbt_free(link_id); - } else { - surf_network_model->createResource(link->id, - link->bandwidth, - link->bandwidth_trace, - link->latency, - link->latency_trace, - link->state, - link->state_trace, link->policy, link->properties); - } -} - -static void net_add_traces(void){ - xbt_dict_cursor_t cursor = NULL; - char *trace_name, *elm; - - static int called = 0; - if (called) - return; - called = 1; - - /* connect all traces relative to network */ - xbt_dict_foreach(trace_connect_list_link_avail, cursor, trace_name, elm) { - tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - NetworkCm02LinkPtr link = static_cast( - xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)); - - xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", - trace_name, elm); - xbt_assert(trace, - "Cannot connect trace %s to link %s: trace undefined", - trace_name, elm); - - link->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(link)); - } - - xbt_dict_foreach(trace_connect_list_bandwidth, cursor, trace_name, elm) { - tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - NetworkCm02LinkPtr link = static_cast( - xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)); - - xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", - trace_name, elm); - xbt_assert(trace, - "Cannot connect trace %s to link %s: trace undefined", - trace_name, elm); - - link->p_power.event = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(link)); - } - - xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) { - tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); - NetworkCm02LinkPtr link = static_cast( - xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)); - - xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", - trace_name, elm); - xbt_assert(trace, - "Cannot connect trace %s to link %s: trace undefined", - trace_name, elm); - - link->p_latEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(link)); - } -} - void net_define_callbacks(void) { /* Figuring out the network links */ - sg_platf_link_add_cb(net_parse_link_init); + sg_platf_link_add_cb(netlink_parse_init); sg_platf_postparse_add_cb(net_add_traces); } @@ -139,7 +54,7 @@ void surf_network_model_init_LegrandVelho(void) surf_network_model = new NetworkCm02Model(); net_define_callbacks(); - ModelPtr model = static_cast(surf_network_model); + ModelPtr model = surf_network_model; xbt_dynar_push(model_list, &model); xbt_cfg_setdefault_double(_sg_cfg_set, "network/latency_factor", @@ -168,7 +83,7 @@ void surf_network_model_init_CM02(void) surf_network_model = new NetworkCm02Model(); net_define_callbacks(); - ModelPtr model = static_cast(surf_network_model); + ModelPtr model = surf_network_model; xbt_dynar_push(model_list, &model); xbt_cfg_setdefault_double(_sg_cfg_set, "network/latency_factor", 1.0); @@ -194,7 +109,7 @@ void surf_network_model_init_Reno(void) surf_network_model = new NetworkCm02Model(); net_define_callbacks(); - ModelPtr model = static_cast(surf_network_model); + ModelPtr model = surf_network_model; xbt_dynar_push(model_list, &model); lmm_set_default_protocol_function(func_reno_f, func_reno_fp, func_reno_fpi); @@ -214,7 +129,7 @@ void surf_network_model_init_Reno2(void) surf_network_model = new NetworkCm02Model(); net_define_callbacks(); - ModelPtr model = static_cast(surf_network_model); + ModelPtr model = surf_network_model; xbt_dynar_push(model_list, &model); lmm_set_default_protocol_function(func_reno2_f, func_reno2_fp, func_reno2_fpi); @@ -234,7 +149,7 @@ void surf_network_model_init_Vegas(void) surf_network_model = new NetworkCm02Model(); net_define_callbacks(); - ModelPtr model = static_cast(surf_network_model); + ModelPtr model = surf_network_model; xbt_dynar_push(model_list, &model); lmm_set_default_protocol_function(func_vegas_f, func_vegas_fp, func_vegas_fpi); @@ -271,10 +186,10 @@ void NetworkCm02Model::initialize() p_maxminSystem = lmm_system_new(m_selectiveUpdate); const char* lb_name = "__loopback__"; - routing_model_create(static_cast(createResource(lb_name, + routing_model_create(createNetworkLink(lb_name, 498000000, NULL, 0.000015, NULL, SURF_RESOURCE_ON, NULL, - SURF_LINK_FATPIPE, NULL))); + SURF_LINK_FATPIPE, NULL)); if (p_updateMechanism == UM_LAZY) { p_actionHeap = xbt_heap_new(8, NULL); @@ -286,7 +201,7 @@ void NetworkCm02Model::initialize() m_haveGap = false; } -NetworkLinkPtr NetworkCm02Model::createResource(const char *name, +NetworkLinkPtr NetworkCm02Model::createNetworkLink(const char *name, double bw_initial, tmgr_trace_t bw_trace, double lat_initial, @@ -305,7 +220,7 @@ NetworkLinkPtr NetworkCm02Model::createResource(const char *name, state_initial, state_trace, bw_initial, bw_trace, lat_initial, lat_trace, policy); - xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast(nw_link)); + xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, nw_link); XBT_DEBUG("Create link '%s'",name); return nw_link; @@ -449,7 +364,7 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, constraints_per_variable += xbt_dynar_length(back_route); if (action->m_latency > 0) { - action->p_variable = lmm_variable_new(p_maxminSystem, static_cast(action), 0.0, -1.0, + action->p_variable = lmm_variable_new(p_maxminSystem, action, 0.0, -1.0, constraints_per_variable); if (p_updateMechanism == UM_LAZY) { // add to the heap the event when the latency is payed @@ -458,7 +373,7 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, action->heapInsert(p_actionHeap, action->m_latency + action->m_lastUpdate, xbt_dynar_is_empty(route) ? NORMAL : LATENCY); } } else - action->p_variable = lmm_variable_new(p_maxminSystem, static_cast(action), 1.0, -1.0, constraints_per_variable); + action->p_variable = lmm_variable_new(p_maxminSystem, action, 1.0, -1.0, constraints_per_variable); if (action->m_rate < 0) { lmm_update_variable_bound(p_maxminSystem, action->getVariable(), (action->m_latCurrent > 0) ? sg_tcp_gamma / (2.0 * action->m_latCurrent) : -1.0); @@ -486,7 +401,58 @@ ActionPtr NetworkCm02Model::communicate(RoutingEdgePtr src, RoutingEdgePtr dst, return action; } +void NetworkCm02Model::addTraces(){ + xbt_dict_cursor_t cursor = NULL; + char *trace_name, *elm; + + static int called = 0; + if (called) + return; + called = 1; + + /* connect all traces relative to network */ + xbt_dict_foreach(trace_connect_list_link_avail, cursor, trace_name, elm) { + tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); + NetworkCm02LinkPtr link = static_cast( + xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)); + + xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", + trace_name, elm); + xbt_assert(trace, + "Cannot connect trace %s to link %s: trace undefined", + trace_name, elm); + + link->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, link); + } + + xbt_dict_foreach(trace_connect_list_bandwidth, cursor, trace_name, elm) { + tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); + NetworkCm02LinkPtr link = static_cast( + xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)); + + xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", + trace_name, elm); + xbt_assert(trace, + "Cannot connect trace %s to link %s: trace undefined", + trace_name, elm); + + link->p_power.event = tmgr_history_add_trace(history, trace, 0.0, 0, link); + } + xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) { + tmgr_trace_t trace = (tmgr_trace_t) xbt_dict_get_or_null(traces_set_list, trace_name); + NetworkCm02LinkPtr link = static_cast( + xbt_lib_get_or_null(link_lib, elm, SURF_LINK_LEVEL)); + + xbt_assert(link, "Cannot connect trace %s to link %s: link undefined", + trace_name, elm); + xbt_assert(trace, + "Cannot connect trace %s to link %s: trace undefined", + trace_name, elm); + + link->p_latEvent = tmgr_history_add_trace(history, trace, 0.0, 0, link); + } +} /************ * Resource * @@ -509,13 +475,13 @@ NetworkCm02Link::NetworkCm02Link(NetworkCm02ModelPtr model, const char *name, xb p_power.scale = 1.0; p_power.peak = metric_peak; if (metric_trace) - p_power.event = tmgr_history_add_trace(history, metric_trace, 0.0, 0, static_cast(this)); + p_power.event = tmgr_history_add_trace(history, metric_trace, 0.0, 0, this); else p_power.event = NULL; m_latCurrent = lat_initial; if (lat_trace) - p_latEvent = tmgr_history_add_trace(history, lat_trace, 0.0, 0, static_cast(this)); + p_latEvent = tmgr_history_add_trace(history, lat_trace, 0.0, 0, this); if (policy == SURF_LINK_FATPIPE) lmm_constraint_shared(getConstraint()); diff --git a/src/surf/network_cm02.hpp b/src/surf/network_cm02.hpp index c31c1c99b6..dc0028f061 100644 --- a/src/surf/network_cm02.hpp +++ b/src/surf/network_cm02.hpp @@ -48,7 +48,7 @@ public: } ~NetworkCm02Model() { } - NetworkLinkPtr createResource(const char *name, + NetworkLinkPtr createNetworkLink(const char *name, double bw_initial, tmgr_trace_t bw_trace, double lat_initial, @@ -57,6 +57,7 @@ public: tmgr_trace_t state_trace, e_surf_link_sharing_policy_t policy, xbt_dict_t properties); + void addTraces(); void updateActionsStateLazy(double now, double delta); ActionPtr communicate(RoutingEdgePtr src, RoutingEdgePtr dst, double size, double rate); diff --git a/src/surf/network_constant.cpp b/src/surf/network_constant.cpp index c331629c13..b3cd6f9c8a 100644 --- a/src/surf/network_constant.cpp +++ b/src/surf/network_constant.cpp @@ -24,7 +24,7 @@ void surf_network_model_init_Constant() sg_platf_host_add_cb(netcste_count_hosts); - ModelPtr model = static_cast(surf_network_model); + ModelPtr model = surf_network_model; xbt_dynar_push(model_list, &model); } diff --git a/src/surf/network_constant.hpp b/src/surf/network_constant.hpp index 46ac808b14..e793ac3725 100644 --- a/src/surf/network_constant.hpp +++ b/src/surf/network_constant.hpp @@ -36,7 +36,6 @@ public: ActionPtr communicate(RoutingEdgePtr src, RoutingEdgePtr dst, double size, double rate); void gapRemove(ActionPtr action); - //FIXME:virtual void addTraces() =0; }; /************ diff --git a/src/surf/network_interface.cpp b/src/surf/network_interface.cpp index 39195ef072..4694f9ddbe 100644 --- a/src/surf/network_interface.cpp +++ b/src/surf/network_interface.cpp @@ -23,6 +23,42 @@ surf_callback(void, NetworkLinkPtr, e_surf_resource_state_t, e_surf_resource_sta surf_callback(void, NetworkActionPtr, e_surf_action_state_t, e_surf_action_state_t) networkActionStateChangedCallbacks; surf_callback(void, NetworkActionPtr, RoutingEdgePtr src, RoutingEdgePtr dst, double size, double rate) networkCommunicateCallbacks; +void netlink_parse_init(sg_platf_link_cbarg_t link){ + if (link->policy == SURF_LINK_FULLDUPLEX) { + char *link_id; + link_id = bprintf("%s_UP", link->id); + surf_network_model->createNetworkLink(link_id, + link->bandwidth, + link->bandwidth_trace, + link->latency, + link->latency_trace, + link->state, + link->state_trace, link->policy, link->properties); + xbt_free(link_id); + link_id = bprintf("%s_DOWN", link->id); + surf_network_model->createNetworkLink(link_id, + link->bandwidth, + link->bandwidth_trace, + link->latency, + link->latency_trace, + link->state, + link->state_trace, link->policy, link->properties); + xbt_free(link_id); + } else { + surf_network_model->createNetworkLink(link->id, + link->bandwidth, + link->bandwidth_trace, + link->latency, + link->latency_trace, + link->state, + link->state_trace, link->policy, link->properties); + } +} + +void net_add_traces(){ + surf_network_model->addTraces(); +} + /********* * Model * *********/ @@ -61,7 +97,7 @@ NetworkLink::NetworkLink(NetworkModelPtr model, const char *name, xbt_dict_t pro { surf_callback_emit(networkLinkCreatedCallbacks, this); if (state_trace) - p_stateEvent = tmgr_history_add_trace(history, state_trace, 0.0, 0, static_cast(this)); + p_stateEvent = tmgr_history_add_trace(history, state_trace, 0.0, 0, this); } NetworkLink::~NetworkLink() diff --git a/src/surf/network_interface.hpp b/src/surf/network_interface.hpp index f85abe1ab3..46cd1a4b98 100644 --- a/src/surf/network_interface.hpp +++ b/src/surf/network_interface.hpp @@ -3,13 +3,14 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ - +#include "xbt/fifo.h" #include "surf_interface.hpp" #include "surf_routing.hpp" #ifndef SURF_NETWORK_INTERFACE_HPP_ #define SURF_NETWORK_INTERFACE_HPP_ + /*********** * Classes * ***********/ @@ -59,8 +60,9 @@ XBT_PUBLIC_DATA( surf_callback(void, NetworkActionPtr, RoutingEdgePtr src, Routi /********* * Tools * *********/ +XBT_PUBLIC(void) netlink_parse_init(sg_platf_link_cbarg_t link); -void net_define_callbacks(void); +XBT_PUBLIC(void) net_add_traces(); /********* * Model * @@ -113,7 +115,7 @@ public: * @param properties Dictionary of properties associated to this Resource * @return The created NetworkLink */ - virtual NetworkLinkPtr createResource(const char *name, + virtual NetworkLinkPtr createNetworkLink(const char *name, double bw_initial, tmgr_trace_t bw_trace, double lat_initial, @@ -123,7 +125,6 @@ public: e_surf_link_sharing_policy_t policy, xbt_dict_t properties)=0; - virtual void gapAppend(double /*size*/, const NetworkLinkPtr /*link*/, NetworkActionPtr /*action*/) {}; /** diff --git a/src/surf/network_ns3.cpp b/src/surf/network_ns3.cpp index f5663678a3..403e1a5814 100644 --- a/src/surf/network_ns3.cpp +++ b/src/surf/network_ns3.cpp @@ -57,7 +57,7 @@ static void parse_ns3_add_link(sg_platf_link_cbarg_t link) if(!IPV4addr) IPV4addr = xbt_dynar_new(sizeof(char*),free); - NetworkLinkPtr net_link = surf_network_model->createResource(link->id, + NetworkLinkPtr net_link = surf_network_model->createNetworkLink(link->id, link->bandwidth, link->bandwidth_trace, link->latency, @@ -294,7 +294,7 @@ NetworkNS3Model::~NetworkNS3Model() { xbt_dict_free(&dict_socket); } -NetworkLinkPtr NetworkNS3Model::createResource(const char *name, +NetworkLinkPtr NetworkNS3Model::createNetworkLink(const char *name, double bw_initial, tmgr_trace_t bw_trace, double lat_initial, diff --git a/src/surf/network_ns3.hpp b/src/surf/network_ns3.hpp index 2b28eed178..dbd11326f4 100644 --- a/src/surf/network_ns3.hpp +++ b/src/surf/network_ns3.hpp @@ -37,7 +37,7 @@ public: NetworkNS3Model(); ~NetworkNS3Model(); - NetworkLinkPtr createResource(const char *name, + NetworkLinkPtr createNetworkLink(const char *name, double bw_initial, tmgr_trace_t bw_trace, double lat_initial, @@ -51,6 +51,7 @@ public: double size, double rate); double shareResources(double now); void updateActionsState(double now, double delta); + void addTraces(){DIE_IMPOSSIBLE;} }; /************ diff --git a/src/surf/platf_generator.c b/src/surf/platf_generator.c index fadf745abb..feaf4ff09f 100644 --- a/src/surf/platf_generator.c +++ b/src/surf/platf_generator.c @@ -399,7 +399,6 @@ int platf_graph_is_connected(void) { do { //Get the next node xbt_dynar_get_cpy(connected_nodes, iterator, &graph_node); - node_data = xbt_graph_node_get_data(graph_node); //add all the linked nodes to the connected node array outgoing_edges = xbt_graph_node_get_outedges(graph_node); diff --git a/src/surf/simgrid.dtd b/src/surf/simgrid.dtd index 15d00b15d2..d0cb94bef1 100644 --- a/src/surf/simgrid.dtd +++ b/src/surf/simgrid.dtd @@ -27,7 +27,7 @@ - + @@ -80,7 +80,7 @@ - + diff --git a/src/surf/simgrid_dtd.c b/src/surf/simgrid_dtd.c index 8c24d7e19f..385fafbe65 100644 --- a/src/surf/simgrid_dtd.c +++ b/src/surf/simgrid_dtd.c @@ -27,7 +27,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 39 +#define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -160,15 +160,7 @@ typedef unsigned int flex_uint32_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k. - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. - * Ditto for the __ia64__ case accordingly. - */ -#define YY_BUF_SIZE 32768 -#else #define YY_BUF_SIZE 16384 -#endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. @@ -207,13 +199,6 @@ extern FILE *surf_parse_in, *surf_parse_out; if ( surf_parse_text[yyl] == '\n' )\ --surf_parse_lineno;\ }while(0) - #define YY_LINENO_REWIND_TO(dst) \ - do {\ - const char *p;\ - for ( p = yy_cp-1; p >= (dst); --p)\ - if ( *p == '\n' )\ - --surf_parse_lineno;\ - }while(0) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ @@ -410,8 +395,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 591 -#define YY_END_OF_BUFFER 592 +#define YY_NUM_RULES 595 +#define YY_END_OF_BUFFER 596 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -419,7 +404,7 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[3469] = +static yyconst flex_int16_t yy_accept[3503] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -449,359 +434,364 @@ static yyconst flex_int16_t yy_accept[3469] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 592, 590, 15, 10, 10, 15, 15, 570, - 10, 570, 5, 6, 5, 8, 9, 8, 586, 578, - 579, 587, 584, 587, 585, 589, 578, 579, 589, 590, + 0, 0, 596, 594, 15, 10, 10, 15, 15, 574, + 10, 574, 5, 6, 5, 8, 9, 8, 590, 582, + 583, 591, 588, 591, 589, 593, 582, 583, 593, 594, 22, 10, 22, 22, 22, 20, 22, 26, 10, 26, - 26, 590, 26, 590, 590, 26, 33, 10, 33, 33, + 26, 594, 26, 594, 594, 26, 33, 10, 33, 33, 33, 31, 33, 37, 10, 37, 37, 48, 10, 48, - 48, 48, 46, 48, 48, 48, 587, 586, 78, 10, + 48, 48, 46, 48, 48, 48, 591, 590, 78, 10, 78, 78, 78, 76, 78, 78, 78, 78, 78, 82, 10, 82, 101, 10, 101, 101, 101, 99, 101, 101, - 101, 105, 10, 105, 128, 10, 128, 128, 128, 126, - 128, 128, 132, 10, 132, 132, 590, 132, 590, 132, - 132, 590, 590, 132, 590, 132, 590, 132, 147, 10, - 147, 147, 147, 145, 147, 147, 147, 147, 151, 10, - 151, 590, 151, 160, 10, 160, 160, 160, 158, 160, - - 160, 164, 10, 164, 173, 10, 173, 173, 173, 171, - 173, 173, 177, 10, 177, 202, 10, 202, 202, 202, - 200, 202, 202, 202, 202, 202, 206, 10, 206, 590, - 206, 221, 10, 221, 221, 221, 219, 221, 221, 221, - 221, 225, 10, 225, 225, 232, 10, 232, 232, 232, - 230, 232, 236, 10, 236, 247, 10, 247, 247, 247, - 245, 247, 247, 247, 251, 10, 251, 304, 10, 304, - 304, 304, 302, 304, 304, 304, 304, 304, 304, 304, - 304, 304, 308, 10, 308, 308, 327, 10, 327, 327, - 327, 325, 327, 327, 327, 327, 327, 327, 331, 10, - - 331, 352, 10, 352, 352, 352, 350, 352, 352, 352, - 352, 352, 352, 352, 356, 10, 356, 365, 10, 365, - 365, 365, 363, 365, 365, 369, 10, 369, 380, 10, - 380, 380, 380, 378, 380, 380, 380, 384, 10, 384, - 411, 10, 411, 411, 411, 409, 411, 411, 411, 411, - 415, 10, 415, 415, 428, 10, 428, 428, 428, 426, - 428, 428, 432, 10, 432, 590, 432, 449, 10, 449, - 449, 449, 447, 449, 449, 449, 453, 10, 453, 453, - 466, 10, 466, 466, 466, 464, 466, 466, 470, 10, - 470, 479, 10, 479, 479, 479, 477, 479, 479, 483, - - 10, 483, 483, 496, 10, 496, 496, 496, 494, 496, - 496, 496, 500, 10, 500, 500, 517, 10, 517, 517, - 517, 515, 517, 517, 517, 517, 517, 521, 10, 521, - 590, 521, 528, 10, 528, 528, 528, 526, 528, 532, - 10, 532, 539, 10, 539, 539, 539, 537, 539, 543, - 10, 543, 543, 552, 10, 552, 552, 552, 550, 552, - 552, 556, 10, 556, 565, 10, 565, 565, 565, 563, - 565, 565, 569, 10, 569, 10, 0, 2, 2, 0, - 4, 7, 581, 580, 0, 0, 0, 0, 0, 0, + 101, 105, 10, 105, 130, 10, 130, 130, 130, 128, + 130, 130, 134, 10, 134, 134, 594, 134, 594, 134, + 134, 594, 594, 134, 594, 134, 594, 134, 149, 10, + 149, 149, 149, 147, 149, 149, 149, 149, 153, 10, + 153, 594, 153, 162, 10, 162, 162, 162, 160, 162, + + 162, 166, 10, 166, 175, 10, 175, 175, 175, 173, + 175, 175, 179, 10, 179, 204, 10, 204, 204, 204, + 202, 204, 204, 204, 204, 204, 208, 10, 208, 594, + 208, 223, 10, 223, 223, 223, 221, 223, 223, 223, + 223, 227, 10, 227, 227, 234, 10, 234, 234, 234, + 232, 234, 238, 10, 238, 249, 10, 249, 249, 249, + 247, 249, 249, 249, 253, 10, 253, 308, 10, 308, + 308, 308, 306, 308, 308, 308, 308, 308, 308, 308, + 308, 308, 312, 10, 312, 312, 331, 10, 331, 331, + 331, 329, 331, 331, 331, 331, 331, 331, 335, 10, + + 335, 356, 10, 356, 356, 356, 354, 356, 356, 356, + 356, 356, 356, 356, 360, 10, 360, 369, 10, 369, + 369, 369, 367, 369, 369, 373, 10, 373, 384, 10, + 384, 384, 384, 382, 384, 384, 384, 388, 10, 388, + 415, 10, 415, 415, 415, 413, 415, 415, 415, 415, + 419, 10, 419, 419, 432, 10, 432, 432, 432, 430, + 432, 432, 436, 10, 436, 594, 436, 453, 10, 453, + 453, 453, 451, 453, 453, 453, 457, 10, 457, 457, + 470, 10, 470, 470, 470, 468, 470, 470, 474, 10, + 474, 483, 10, 483, 483, 483, 481, 483, 483, 487, + + 10, 487, 487, 500, 10, 500, 500, 500, 498, 500, + 500, 500, 504, 10, 504, 504, 521, 10, 521, 521, + 521, 519, 521, 521, 521, 521, 521, 525, 10, 525, + 594, 525, 532, 10, 532, 532, 532, 530, 532, 536, + 10, 536, 543, 10, 543, 543, 543, 541, 543, 547, + 10, 547, 547, 556, 10, 556, 556, 556, 554, 556, + 556, 560, 10, 560, 569, 10, 569, 569, 569, 567, + 569, 569, 573, 10, 573, 10, 0, 2, 2, 0, + 4, 7, 585, 584, 0, 0, 0, 0, 0, 0, 0, 21, 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 34, 0, 47, 49, 49, 49, 49, 0, 0, 0, 77, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 0, 100, 102, 102, 102, 102, 0, 127, 129, 129, - 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 100, 102, 102, 102, 102, 0, 129, 131, 131, + 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 146, 148, 148, 148, 148, 148, 0, 0, 159, 161, - 161, 161, 0, 172, 174, 174, 174, 0, 201, 203, - 203, 203, 203, 203, 203, 203, 0, 0, 220, 222, - - 222, 222, 222, 222, 0, 231, 233, 233, 0, 246, - 248, 248, 248, 248, 0, 303, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 0, 326, 328, 328, 328, 328, 328, - 328, 328, 328, 0, 351, 353, 353, 353, 353, 353, - 353, 353, 353, 0, 364, 366, 366, 366, 0, 379, - 381, 381, 381, 381, 0, 410, 412, 412, 412, 412, - 412, 412, 0, 427, 429, 429, 429, 429, 0, 0, - 448, 450, 450, 450, 450, 450, 0, 465, 467, 467, - 467, 0, 478, 480, 480, 480, 0, 495, 497, 497, - - 497, 497, 0, 516, 518, 518, 518, 518, 518, 518, - 0, 0, 527, 529, 529, 0, 538, 540, 540, 0, - 551, 553, 553, 553, 0, 564, 566, 566, 566, 0, + 148, 150, 150, 150, 150, 150, 0, 0, 161, 163, + 163, 163, 0, 174, 176, 176, 176, 0, 203, 205, + 205, 205, 205, 205, 205, 205, 0, 0, 222, 224, + + 224, 224, 224, 224, 0, 233, 235, 235, 0, 248, + 250, 250, 250, 250, 0, 307, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 0, 330, 332, 332, 332, 332, 332, + 332, 332, 332, 0, 355, 357, 357, 357, 357, 357, + 357, 357, 357, 0, 368, 370, 370, 370, 0, 383, + 385, 385, 385, 385, 0, 414, 416, 416, 416, 416, + 416, 416, 0, 431, 433, 433, 433, 433, 0, 0, + 452, 454, 454, 454, 454, 454, 0, 469, 471, 471, + 471, 0, 482, 484, 484, 484, 0, 499, 501, 501, + + 501, 501, 0, 520, 522, 522, 522, 522, 522, 522, + 0, 0, 531, 533, 533, 0, 542, 544, 544, 0, + 555, 557, 557, 557, 0, 568, 570, 570, 570, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, - 0, 0, 588, 0, 23, 0, 0, 107, 0, 0, + 0, 0, 592, 0, 23, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 34, 0, 0, 49, - 0, 0, 49, 0, 0, 0, 583, 79, 0, 0, + 0, 0, 49, 0, 0, 0, 587, 79, 0, 0, 79, 79, 79, 79, 79, 79, 0, 0, 102, 102, - 102, 0, 0, 0, 0, 129, 0, 0, 107, 0, + 102, 0, 0, 0, 0, 131, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, - 0, 0, 148, 0, 0, 148, 148, 0, 0, 0, - 161, 161, 0, 0, 174, 174, 0, 0, 203, 203, - 203, 0, 0, 203, 203, 203, 0, 0, 0, 0, - 222, 222, 0, 0, 222, 0, 0, 233, 0, 0, - 248, 0, 0, 0, 0, 0, 0, 305, 305, 0, - 0, 305, 0, 0, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 0, 0, 0, 0, 0, - 0, 328, 328, 328, 328, 328, 0, 0, 353, 353, - - 353, 0, 0, 353, 353, 353, 0, 0, 366, 0, - 0, 0, 0, 381, 0, 0, 381, 0, 0, 412, - 0, 0, 412, 412, 412, 0, 0, 429, 429, 429, - 0, 0, 0, 450, 450, 450, 450, 0, 0, 467, - 0, 0, 0, 0, 480, 480, 0, 0, 497, 497, - 497, 0, 0, 518, 518, 518, 518, 518, 0, 0, - 0, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 553, 0, 0, 0, 0, 566, 0, 0, 0, 14, - 1, 0, 0, 576, 0, 0, 0, 573, 572, 0, + 0, 0, 150, 0, 0, 150, 150, 0, 0, 0, + 163, 163, 0, 0, 176, 176, 0, 0, 205, 205, + 205, 0, 0, 205, 205, 205, 0, 0, 0, 0, + 224, 224, 0, 0, 224, 0, 0, 235, 0, 0, + 250, 0, 0, 0, 0, 0, 0, 309, 309, 0, + 0, 309, 0, 0, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 0, 0, 0, 0, 0, + 0, 332, 332, 332, 332, 332, 0, 0, 357, 357, + + 357, 0, 0, 357, 357, 357, 0, 0, 370, 0, + 0, 0, 0, 385, 0, 0, 385, 0, 0, 416, + 0, 0, 416, 416, 416, 0, 0, 433, 433, 433, + 0, 0, 0, 454, 454, 454, 454, 0, 0, 471, + 0, 0, 0, 0, 484, 484, 0, 0, 501, 501, + 501, 0, 0, 522, 522, 522, 522, 522, 0, 0, + 0, 533, 0, 0, 0, 0, 0, 0, 0, 0, + 557, 0, 0, 0, 0, 570, 0, 0, 0, 14, + 1, 0, 0, 580, 0, 0, 0, 577, 576, 0, 0, 23, 0, 0, 25, 0, 107, 0, 0, 0, - 0, 0, 0, 0, 226, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 34, 0, 0, 36, 0, 49, 0, 41, 40, 49, 0, 0, 0, 51, 0, 79, 0, 55, 54, 0, 0, 79, 0, 0, 79, 79, 79, 0, 0, 81, 0, 102, 102, - 102, 0, 0, 104, 0, 0, 109, 108, 129, 0, - 0, 131, 0, 0, 0, 0, 227, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 148, 0, 136, 135, - 148, 148, 0, 0, 150, 0, 0, 161, 161, 0, - - 0, 163, 0, 174, 174, 0, 0, 176, 0, 203, - 203, 203, 0, 181, 180, 203, 203, 203, 0, 0, - 205, 0, 0, 0, 222, 222, 0, 210, 209, 222, - 0, 0, 224, 0, 233, 0, 0, 235, 0, 248, - 0, 240, 239, 0, 242, 241, 0, 0, 250, 0, - 305, 305, 305, 305, 0, 267, 266, 305, 0, 255, - 254, 0, 0, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 0, 0, 307, 0, 0, 322, 321, - 0, 312, 311, 0, 0, 328, 328, 328, 328, 0, - 0, 330, 0, 353, 353, 353, 353, 0, 335, 334, - - 0, 0, 353, 353, 0, 0, 355, 0, 366, 0, - 360, 359, 0, 0, 368, 0, 381, 0, 373, 372, - 381, 0, 0, 383, 0, 412, 0, 388, 387, 412, - 412, 412, 0, 0, 414, 0, 0, 0, 0, 0, - 429, 0, 0, 431, 0, 0, 0, 0, 450, 450, - 0, 0, 450, 0, 0, 452, 0, 467, 0, 457, - 456, 0, 0, 469, 0, 0, 0, 0, 0, 0, - 0, 482, 0, 0, 0, 497, 497, 0, 0, 0, - 0, 499, 0, 518, 518, 518, 518, 518, 0, 0, - 520, 0, 0, 529, 0, 0, 531, 0, 0, 536, - - 535, 0, 0, 542, 0, 0, 547, 546, 553, 0, - 0, 555, 0, 0, 560, 559, 566, 0, 0, 568, - 0, 0, 0, 577, 571, 0, 0, 0, 23, 0, - 0, 0, 0, 0, 0, 0, 0, 226, 178, 0, - 385, 0, 0, 0, 333, 0, 0, 544, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, + 102, 0, 0, 104, 0, 0, 109, 108, 131, 0, + 0, 133, 0, 0, 0, 0, 229, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 150, 0, 138, 137, + 150, 150, 0, 0, 152, 0, 0, 163, 163, 0, + + 0, 165, 0, 176, 176, 0, 0, 178, 0, 205, + 205, 205, 0, 183, 182, 205, 205, 205, 0, 0, + 207, 0, 0, 0, 224, 224, 0, 212, 211, 224, + 0, 0, 226, 0, 235, 0, 0, 237, 0, 250, + 0, 242, 241, 0, 244, 243, 0, 0, 252, 0, + 309, 309, 309, 309, 0, 269, 268, 309, 0, 257, + 256, 0, 0, 309, 309, 309, 309, 309, 309, 309, + 309, 309, 309, 0, 0, 311, 0, 0, 326, 325, + 0, 316, 315, 0, 0, 332, 332, 332, 332, 0, + 0, 334, 0, 357, 357, 357, 357, 0, 339, 338, + + 0, 0, 357, 357, 0, 0, 359, 0, 370, 0, + 364, 363, 0, 0, 372, 0, 385, 0, 377, 376, + 385, 0, 0, 387, 0, 416, 0, 392, 391, 416, + 416, 416, 0, 0, 418, 0, 0, 0, 0, 0, + 433, 0, 0, 435, 0, 0, 0, 0, 454, 454, + 0, 0, 454, 0, 0, 456, 0, 471, 0, 461, + 460, 0, 0, 473, 0, 0, 0, 0, 0, 0, + 0, 486, 0, 0, 0, 501, 501, 0, 0, 0, + 0, 503, 0, 522, 522, 522, 522, 522, 0, 0, + 524, 0, 0, 533, 0, 0, 535, 0, 0, 540, + + 539, 0, 0, 546, 0, 0, 551, 550, 557, 0, + 0, 559, 0, 0, 564, 563, 570, 0, 0, 572, + 0, 0, 0, 581, 575, 0, 0, 0, 23, 0, + 0, 0, 0, 0, 0, 0, 0, 228, 180, 0, + 389, 0, 0, 0, 337, 0, 0, 548, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 336, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 79, 0, 59, 58, 0, 0, 0, 57, 56, 79, 0, 0, - 79, 0, 102, 0, 0, 102, 0, 129, 0, 130, - 0, 0, 0, 227, 179, 386, 545, 0, 0, 0, - - 0, 0, 0, 148, 148, 0, 0, 0, 0, 0, - 0, 161, 0, 0, 0, 174, 0, 203, 203, 0, - 0, 203, 203, 203, 0, 0, 0, 222, 222, 222, - 0, 0, 0, 0, 0, 0, 0, 305, 305, 305, - 305, 0, 0, 0, 269, 268, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 0, 0, 324, - 323, 328, 328, 328, 328, 0, 353, 353, 353, 353, - 0, 343, 342, 353, 353, 0, 366, 0, 381, 381, - 0, 412, 412, 412, 412, 0, 0, 421, 420, 0, - 419, 418, 429, 0, 385, 0, 438, 437, 450, 450, - - 0, 436, 435, 450, 0, 467, 0, 0, 476, 475, - 0, 474, 473, 0, 0, 489, 488, 497, 497, 0, - 487, 486, 0, 518, 0, 0, 518, 518, 518, 0, - 0, 529, 0, 0, 553, 0, 566, 0, 0, 0, - 0, 12, 0, 574, 575, 0, 23, 0, 0, 0, - 0, 0, 0, 0, 0, 178, 0, 0, 385, 0, - 0, 152, 0, 333, 0, 0, 544, 0, 416, 0, - 39, 0, 0, 0, 0, 0, 332, 0, 38, 0, + 79, 0, 102, 0, 0, 102, 0, 131, 0, 132, + 0, 0, 0, 229, 181, 390, 549, 0, 0, 0, + + 0, 0, 0, 150, 150, 0, 0, 0, 0, 0, + 0, 163, 0, 0, 0, 176, 0, 205, 205, 0, + 0, 205, 205, 205, 0, 0, 0, 224, 224, 224, + 0, 0, 0, 0, 0, 0, 0, 309, 309, 309, + 309, 0, 0, 0, 271, 270, 309, 309, 309, 309, + 309, 309, 309, 309, 309, 309, 309, 0, 0, 328, + 327, 332, 332, 332, 332, 0, 357, 357, 357, 357, + 0, 347, 346, 357, 357, 0, 370, 0, 385, 385, + 0, 416, 416, 416, 416, 0, 0, 425, 424, 0, + 423, 422, 433, 0, 389, 0, 442, 441, 454, 454, + + 0, 440, 439, 454, 0, 471, 0, 0, 480, 479, + 0, 478, 477, 0, 0, 493, 492, 501, 501, 0, + 491, 490, 0, 522, 0, 0, 522, 522, 522, 0, + 0, 533, 0, 0, 557, 0, 570, 0, 0, 0, + 0, 12, 0, 578, 579, 0, 23, 0, 0, 0, + 0, 0, 0, 0, 0, 180, 0, 0, 389, 0, + 0, 154, 0, 337, 0, 0, 548, 0, 420, 0, + 39, 0, 0, 0, 0, 0, 336, 0, 38, 0, 30, 29, 0, 0, 43, 42, 49, 0, 0, 79, 0, 61, 60, 79, 0, 65, 64, 79, 0, 102, - 0, 0, 0, 0, 0, 0, 129, 0, 0, 0, - 179, 0, 386, 545, 417, 0, 0, 0, 417, 416, - 148, 0, 0, 0, 140, 139, 0, 0, 0, 157, - 156, 161, 0, 0, 170, 169, 174, 0, 203, 203, - 0, 185, 184, 0, 0, 203, 0, 0, 203, 0, - 153, 0, 222, 222, 222, 0, 0, 229, 228, 0, - 234, 0, 244, 243, 0, 305, 0, 0, 305, 305, - 0, 265, 264, 305, 305, 0, 0, 305, 305, 305, - 305, 305, 305, 305, 305, 0, 0, 0, 328, 328, - 328, 0, 353, 0, 0, 353, 353, 0, 0, 353, - - 0, 366, 0, 381, 381, 0, 412, 412, 412, 0, - 0, 412, 0, 429, 0, 0, 450, 450, 450, 0, - 467, 0, 0, 497, 497, 0, 518, 0, 504, 503, - 518, 518, 518, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 131, 0, 0, 0, + 181, 0, 390, 549, 421, 0, 0, 0, 421, 420, + 150, 0, 0, 0, 142, 141, 0, 0, 0, 159, + 158, 163, 0, 0, 172, 171, 176, 0, 205, 205, + 0, 187, 186, 0, 0, 205, 0, 0, 205, 0, + 155, 0, 224, 224, 224, 0, 0, 231, 230, 0, + 236, 0, 246, 245, 0, 309, 0, 0, 309, 309, + 0, 267, 266, 309, 309, 0, 0, 309, 309, 309, + 309, 309, 309, 309, 309, 0, 0, 0, 332, 332, + 332, 0, 357, 0, 0, 357, 357, 0, 0, 357, + + 0, 370, 0, 385, 385, 0, 416, 416, 416, 0, + 0, 416, 0, 433, 0, 0, 454, 454, 454, 0, + 471, 0, 0, 501, 501, 0, 522, 0, 508, 507, + 522, 522, 522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, - 23, 0, 0, 0, 0, 0, 0, 0, 534, 0, - 0, 0, 0, 152, 0, 0, 0, 53, 416, 357, - 0, 39, 0, 533, 52, 0, 0, 0, 0, 38, + 23, 0, 0, 0, 0, 0, 0, 0, 538, 0, + 0, 0, 0, 154, 0, 0, 0, 53, 420, 361, + 0, 39, 0, 537, 52, 0, 0, 0, 0, 38, 0, 0, 49, 0, 0, 79, 79, 79, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 95, 0, 129, 0, 0, 0, 0, 417, 358, 0, - 0, 0, 148, 0, 138, 137, 0, 0, 161, 0, - 0, 0, 0, 203, 203, 0, 183, 182, 0, 0, - 0, 0, 0, 203, 0, 204, 153, 0, 0, 0, - 222, 0, 0, 0, 0, 305, 0, 283, 282, 0, - 0, 305, 305, 305, 0, 263, 262, 0, 0, 305, - 305, 305, 305, 0, 0, 305, 305, 0, 0, 320, - 319, 0, 0, 328, 0, 0, 0, 353, 0, 339, - 338, 0, 0, 353, 0, 337, 336, 353, 0, 354, - 366, 0, 381, 381, 0, 412, 412, 412, 0, 0, - - 0, 412, 0, 413, 429, 0, 0, 0, 0, 0, - 0, 450, 0, 467, 0, 0, 0, 0, 0, 0, - 0, 518, 518, 518, 518, 0, 0, 0, 525, 524, - 0, 0, 0, 549, 548, 0, 554, 0, 562, 561, - 0, 0, 0, 0, 0, 0, 0, 0, 433, 0, - 0, 0, 0, 310, 253, 534, 0, 28, 0, 0, - 0, 0, 502, 53, 357, 207, 0, 533, 52, 309, - 252, 27, 501, 0, 0, 49, 0, 0, 50, 79, + 95, 0, 131, 0, 0, 0, 0, 421, 362, 0, + 0, 0, 150, 0, 140, 139, 0, 0, 163, 0, + 0, 0, 0, 205, 205, 0, 185, 184, 0, 0, + 0, 0, 0, 205, 0, 206, 155, 0, 0, 0, + 224, 0, 0, 0, 0, 309, 0, 287, 286, 0, + 0, 309, 309, 309, 0, 265, 264, 0, 0, 309, + 309, 309, 309, 0, 0, 309, 309, 0, 0, 324, + 323, 0, 0, 332, 0, 0, 0, 357, 0, 343, + 342, 0, 0, 357, 0, 341, 340, 357, 0, 358, + 370, 0, 385, 385, 0, 416, 416, 416, 0, 0, + + 0, 416, 0, 417, 433, 0, 0, 0, 0, 0, + 0, 454, 0, 471, 0, 0, 0, 0, 0, 0, + 0, 522, 522, 522, 522, 0, 0, 0, 529, 528, + 0, 0, 0, 553, 552, 0, 558, 0, 566, 565, + 0, 0, 0, 0, 0, 0, 0, 0, 437, 0, + 0, 0, 0, 314, 255, 538, 0, 28, 0, 0, + 0, 0, 506, 53, 361, 209, 0, 537, 52, 313, + 254, 27, 505, 0, 0, 49, 0, 0, 50, 79, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 434, - - 0, 0, 0, 0, 358, 208, 0, 0, 148, 0, - 0, 161, 0, 162, 0, 168, 167, 0, 203, 203, - 0, 199, 198, 0, 0, 203, 0, 0, 218, 217, - 0, 0, 222, 0, 212, 211, 0, 0, 305, 0, - 285, 284, 305, 305, 305, 0, 257, 256, 0, 0, - 305, 305, 305, 0, 259, 258, 305, 305, 0, 0, - 314, 313, 0, 0, 0, 316, 315, 0, 353, 0, - 341, 340, 353, 353, 366, 0, 381, 0, 0, 0, - 412, 0, 0, 412, 412, 0, 0, 412, 429, 0, - 430, 0, 0, 442, 441, 0, 440, 439, 450, 0, - - 467, 0, 0, 0, 493, 492, 0, 491, 490, 0, - 518, 518, 518, 518, 0, 0, 0, 0, 0, 0, - 0, 0, 17, 0, 19, 18, 0, 433, 522, 370, - 0, 0, 310, 253, 0, 28, 454, 0, 165, 16, - 502, 207, 0, 0, 309, 252, 27, 501, 0, 0, - 49, 582, 79, 0, 67, 66, 79, 0, 80, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 438, + + 0, 0, 0, 0, 362, 210, 0, 0, 150, 0, + 0, 163, 0, 164, 0, 170, 169, 0, 205, 205, + 0, 201, 200, 0, 0, 205, 0, 0, 220, 219, + 0, 0, 224, 0, 214, 213, 0, 0, 309, 0, + 289, 288, 309, 309, 309, 0, 259, 258, 0, 0, + 309, 309, 309, 0, 261, 260, 309, 309, 0, 0, + 318, 317, 0, 0, 0, 320, 319, 0, 357, 0, + 345, 344, 357, 357, 370, 0, 385, 0, 0, 0, + 416, 0, 0, 416, 416, 0, 0, 416, 433, 0, + 434, 0, 0, 446, 445, 0, 444, 443, 454, 0, + + 471, 0, 0, 0, 497, 496, 0, 495, 494, 0, + 522, 522, 522, 522, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 0, 19, 18, 0, 437, 526, 374, + 0, 0, 314, 255, 0, 28, 458, 0, 167, 16, + 506, 209, 0, 0, 313, 254, 27, 505, 0, 0, + 49, 586, 79, 0, 67, 66, 79, 0, 80, 0, 98, 97, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 434, 371, 0, 0, - 0, 208, 0, 0, 142, 141, 148, 0, 0, 161, - 0, 203, 203, 0, 0, 0, 0, 203, 166, 0, - - 214, 213, 222, 0, 0, 305, 305, 305, 305, 0, - 261, 260, 305, 305, 305, 305, 0, 0, 0, 0, - 318, 317, 0, 353, 353, 353, 366, 0, 367, 381, - 0, 377, 376, 0, 412, 0, 394, 393, 412, 412, - 0, 0, 0, 0, 412, 429, 455, 450, 0, 467, - 0, 0, 0, 0, 0, 518, 518, 518, 0, 523, - 0, 0, 541, 0, 0, 0, 0, 17, 0, 522, - 370, 0, 0, 237, 454, 0, 165, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 438, 375, 0, 0, + 0, 210, 0, 0, 144, 143, 150, 0, 0, 163, + 0, 205, 205, 0, 0, 0, 0, 205, 168, 0, + + 216, 215, 224, 0, 0, 309, 309, 309, 309, 0, + 263, 262, 309, 309, 309, 309, 0, 0, 0, 0, + 322, 321, 0, 357, 357, 357, 370, 0, 371, 385, + 0, 381, 380, 0, 416, 0, 398, 397, 416, 416, + 0, 0, 0, 0, 416, 433, 459, 454, 0, 471, + 0, 0, 0, 0, 0, 522, 522, 522, 0, 527, + 0, 0, 545, 0, 0, 0, 0, 17, 0, 526, + 374, 0, 0, 239, 458, 0, 167, 16, 0, 0, 0, 0, 35, 49, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 371, 0, - 0, 238, 0, 148, 0, 0, 0, 0, 0, 203, - 203, 0, 191, 0, 190, 203, 166, 222, 0, 223, - 0, 305, 305, 305, 305, 305, 0, 0, 305, 305, - 305, 0, 0, 0, 0, 306, 0, 329, 353, 353, - 353, 366, 0, 0, 0, 0, 0, 412, 412, 412, - 0, 398, 0, 397, 412, 429, 455, 450, 0, 451, - 0, 0, 0, 0, 0, 0, 506, 505, 0, 0, - 518, 518, 0, 519, 523, 0, 0, 0, 0, 0, - 0, 24, 0, 0, 237, 557, 0, 0, 0, 49, + 0, 0, 0, 0, 0, 0, 0, 0, 375, 0, + 0, 240, 0, 150, 0, 0, 0, 0, 0, 205, + 205, 0, 193, 0, 192, 205, 168, 224, 0, 225, + 0, 309, 309, 309, 309, 309, 0, 0, 309, 309, + 309, 0, 0, 0, 0, 310, 0, 333, 357, 357, + 357, 370, 0, 0, 0, 0, 0, 416, 416, 416, + 0, 402, 0, 401, 416, 433, 459, 454, 0, 455, + 0, 0, 0, 0, 0, 0, 510, 509, 0, 0, + 522, 522, 0, 523, 527, 0, 0, 0, 0, 0, + 0, 24, 0, 0, 239, 561, 0, 0, 0, 49, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 238, - 0, 148, 0, 558, 0, 155, 154, 0, 175, 203, - 203, 193, 192, 0, 0, 222, 0, 305, 305, 305, - 305, 305, 0, 295, 294, 305, 0, 0, 305, 0, - 0, 0, 0, 353, 353, 0, 0, 366, 0, 375, - 374, 0, 382, 0, 390, 389, 412, 412, 412, 400, - 399, 0, 0, 429, 450, 0, 0, 0, 0, 468, - 0, 0, 0, 510, 509, 0, 0, 0, 0, 0, - - 530, 0, 0, 0, 0, 0, 471, 557, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, + 0, 150, 0, 562, 0, 157, 156, 0, 177, 205, + 205, 195, 194, 0, 0, 224, 0, 309, 309, 309, + 309, 309, 0, 299, 298, 309, 0, 0, 309, 0, + 0, 0, 0, 357, 357, 0, 0, 370, 0, 379, + 378, 0, 386, 0, 394, 393, 416, 416, 416, 404, + 403, 0, 0, 433, 454, 0, 0, 0, 0, 472, + 0, 0, 0, 514, 513, 0, 0, 0, 0, 0, + + 534, 0, 0, 0, 0, 0, 475, 561, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 88, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 472, 0, 148, 0, 558, 203, - 0, 0, 0, 195, 194, 222, 0, 249, 305, 305, - 305, 0, 0, 305, 305, 0, 293, 292, 305, 0, - 0, 0, 0, 353, 0, 0, 0, 349, 348, 0, - 0, 412, 412, 412, 0, 402, 401, 0, 0, 0, + 0, 0, 0, 0, 476, 0, 150, 0, 562, 205, + 0, 0, 0, 197, 196, 224, 0, 251, 309, 309, + 309, 0, 0, 309, 309, 0, 297, 296, 309, 0, + 0, 0, 0, 0, 0, 357, 0, 0, 0, 353, + 352, 0, 0, 416, 416, 416, 0, 406, 405, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 508, 507, 0, 0, 0, 0, 0, - 471, 133, 0, 0, 0, 45, 44, 0, 0, 0, - 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 512, 511, 0, 0, 0, + 0, 0, 475, 135, 0, 0, 0, 45, 44, 0, + 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 472, 134, - 0, 0, 0, 0, 0, 203, 0, 197, 196, 0, - 0, 305, 305, 0, 0, 0, 299, 298, 0, 0, - 305, 305, 0, 0, 0, 0, 353, 0, 345, 344, - 0, 362, 361, 412, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 476, 136, 0, 0, 0, 0, 0, 205, 0, 199, + 198, 0, 0, 309, 309, 0, 0, 0, 303, 302, + 0, 0, 309, 309, 0, 0, 0, 0, 0, 0, + 357, 0, 349, 348, 0, 366, 365, 416, 0, 0, + 416, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 567, 0, 0, 0, - 0, 484, 133, 84, 83, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, - 0, 93, 0, 0, 0, 0, 0, 111, 119, 0, - 0, 0, 0, 110, 118, 0, 485, 134, 0, 144, - 143, 0, 0, 187, 186, 203, 0, 216, 215, 305, - 305, 0, 297, 296, 0, 301, 300, 305, 305, 0, - 0, 0, 0, 353, 412, 0, 396, 395, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, - 0, 0, 458, 0, 481, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 484, 84, 83, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 63, 62, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, - 0, 0, 0, 112, 0, 485, 0, 149, 203, 305, - 305, 0, 0, 305, 277, 0, 276, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 571, 0, 0, 0, 0, 488, 135, 84, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 75, 71, 0, - 0, 74, 70, 0, 92, 0, 0, 91, 0, 0, - 0, 103, 0, 0, 0, 0, 0, 0, 203, 305, - - 305, 0, 0, 0, 0, 0, 279, 278, 353, 0, - 392, 391, 0, 0, 0, 425, 0, 424, 0, 446, - 0, 445, 0, 461, 463, 460, 462, 0, 498, 512, - 0, 511, 0, 0, 0, 0, 12, 0, 12, 0, + 0, 94, 0, 0, 0, 93, 0, 0, 0, 0, + 0, 111, 119, 0, 0, 0, 0, 110, 118, 0, + 489, 136, 0, 146, 145, 0, 0, 189, 188, 205, + 0, 218, 217, 309, 309, 0, 301, 300, 0, 305, + 304, 309, 309, 0, 0, 0, 0, 0, 0, 357, + 416, 0, 400, 399, 416, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 463, 0, 0, 462, 0, + + 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 488, 84, 83, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 63, 62, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 113, 0, 0, 0, 112, + 0, 489, 0, 151, 205, 309, 309, 0, 0, 309, + 0, 279, 0, 0, 278, 0, 357, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 75, 71, 0, 0, 74, + 70, 0, 92, 0, 0, 91, 0, 0, 0, 103, + + 0, 0, 0, 0, 0, 0, 205, 309, 309, 0, + 0, 0, 0, 0, 0, 281, 0, 280, 357, 0, + 396, 395, 0, 0, 0, 429, 0, 428, 0, 450, + 0, 449, 0, 465, 467, 464, 466, 0, 502, 516, + 0, 515, 0, 0, 0, 0, 12, 0, 12, 0, 0, 0, 0, 0, 86, 90, 85, 89, 123, 0, - 0, 121, 122, 0, 0, 120, 203, 305, 305, 0, - 0, 0, 0, 0, 281, 280, 353, 0, 0, 0, - 0, 423, 422, 444, 443, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, - 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 121, 122, 0, 0, 120, 205, 309, 309, 0, + 0, 0, 0, 0, 285, 284, 0, 0, 357, 0, + 0, 0, 0, 427, 426, 448, 447, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 115, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 69, 0, 68, 0, - 0, 0, 0, 0, 0, 189, 188, 0, 291, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 347, 346, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 69, 0, 68, 0, 0, 0, 0, 0, + 0, 0, 0, 191, 190, 0, 295, 294, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 283, 282, 0, + 351, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 514, 513, 0, 73, 72, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 518, 517, 0, 73, + 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 125, 117, 124, 116, 0, 0, 0, 0, 0, - 0, 271, 0, 0, 270, 0, 0, 404, 0, 0, - 403, 0, 0, 0, 0, 0, 275, 0, 274, 0, - 406, 0, 405, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 287, 0, 286, 0, 0, - 0, 0, 0, 0, 289, 288, 273, 272, 408, 407, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 125, 117, + 0, 124, 116, 0, 0, 0, 0, 0, 0, 273, + 0, 0, 272, 0, 0, 408, 0, 0, 407, 0, + 0, 0, 0, 0, 0, 0, 277, 0, 276, 0, + 410, 0, 409, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 127, 126, 0, 291, + + 0, 290, 0, 0, 0, 0, 0, 0, 293, 292, + 275, 274, 412, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 13, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -848,7 +838,7 @@ static yyconst flex_int32_t yy_meta[75] = 5, 5, 5, 5 } ; -static yyconst flex_int16_t yy_base[3981] = +static yyconst flex_int16_t yy_base[4015] = { 0, 0, 0, 0, 3, 6, 9, 12, 29, 16, 19, 14, 17, 33, 36, 49, 55, 45, 61, 66, 72, @@ -878,147 +868,147 @@ static yyconst flex_int16_t yy_base[3981] = 2333, 2336, 2339, 2343, 2346, 2393, 2396, 2399, 3351, 3421, 2403, 2406, 3491, 3548, 2453, 2456, 2459, 2463, 2466, 2520, 2523, 2526, 3605, 3675, 2530, 2533, 3745, 3815, 2587, 2590, - 0, 0, 9426,12639,12639, 95, 100, 29, 41,12639, - 103, 51,12639,12639, 9415,12639,12639, 9404,12639, 9415, - 9415, 202,12639,12639,12639,12639, 9413, 9409, 9364, 153, - 12639, 161, 9390, 0, 145,12639, 9352,12639, 165, 3881, - - 73, 2599, 315, 357, 9392, 9339,12639, 168, 9378, 0, - 152,12639, 9340,12639, 261, 9384, 31,12639, 266, 9371, - 0, 245,12639, 9333, 9337, 9331, 421, 9336,12639, 269, - 9362, 0, 340,12639, 9324, 9324, 271, 9326, 238,12639, - 441, 484,12639, 504, 9350, 0, 401,12639, 9309, 9311, - 9297,12639, 561, 548,12639, 571, 9342, 0, 481,12639, - 9309, 9293,12639, 628, 3945, 9291, 163, 2533, 567, 206, - 38, 9342, 954, 2607, 639, 907, 437, 79,12639, 634, - 9329, 0, 546,12639, 9285, 9295, 9279, 9284,12639, 638, - 313, 559, 368,12639, 697, 9320, 0, 549,12639, 9286, - - 9266,12639, 704, 750,12639, 707, 9313, 0, 747,12639, - 9279, 9254,12639, 771, 758,12639, 774, 9306, 0, 748, - 12639, 9251, 9257, 9267, 251, 9246,12639, 831, 429, 9252, - 497,12639, 837, 9292, 0, 815,12639, 9239, 9243, 9253, - 8660,12639, 840, 530, 564,12639, 906, 8712, 0, 816, - 12639, 8681,12639, 914, 891,12639, 977, 8709, 0, 825, - 12639, 8665, 8675, 8662,12639, 981, 965,12639, 1021, 8705, - 0, 881,12639, 8654, 203, 8659, 8669, 970, 85, 429, - 972, 8656,12639, 1040, 814, 833,12639, 1044, 8691, 0, - 953,12639, 8639, 8656, 8651, 157, 8649, 8628,12639, 1048, - - 1092,12639, 1105, 8675, 0, 966,12639, 8620, 8618, 8624, - 8629, 8630, 8612, 8605,12639, 1108, 1093,12639, 1116, 8652, - 0, 1032,12639, 8599, 8599,12639, 1172, 1159,12639, 1175, - 8630, 0, 1033,12639, 8591, 8587, 8588,12639, 1179, 1226, - 12639, 1183, 8609, 0, 1095,12639, 8578, 8572, 8573, 15, - 12639, 1239, 899, 1074,12639, 1242, 8597, 0, 1167,12639, - 8549, 181,12639, 1246, 1242, 367, 303,12639, 1307, 8585, - 0, 1234,12639, 8537, 8527, 299,12639, 1310, 1310, 350, - 12639, 1313, 8572, 0, 1302,12639, 8529, 8533,12639, 1358, - 1363,12639, 1377, 8557, 0, 1362,12639, 8509, 8508,12639, - - 1383, 1430, 370,12639, 1425, 8549, 0, 1426,12639, 8501, - 8495, 8491,12639, 1442, 1436, 488,12639, 1448, 8534, 0, - 1432,12639, 8482, 8469, 8474, 8467, 8456,12639, 1509, 1445, - 560, 1103,12639, 1515, 8502, 0, 1494,12639, 8472,12639, - 1518, 1558,12639, 1521, 8499, 0, 1559,12639, 8453,12639, - 1579, 1141, 1344,12639, 1583, 8484, 0, 1567,12639, 8441, - 8443,12639, 1587, 1632,12639, 1590, 8468, 0, 1629,12639, - 8434, 8436,12639, 1645, 1633, 1707, 677, 8412,12639, 8472, - 8461,12639,12639,12639, 1700, 375, 8411, 8404, 8398, 8446, - 8404,12639, 0, 8389, 8390, 8413, 8377, 104, 1328, 8374, - - 8361, 8356, 8360, 621, 1646, 695, 8347, 8330, 1701, 912, - 8352, 1719, 8328, 1709, 8313, 1724, 1777, 1778,12639, 0, - 8318, 8319,12639, 0, 8315, 2098, 8307, 666, 8300, 8337, - 12639, 0, 8292, 2165, 8276, 8297, 8281, 8289, 8284, 8283, - 8258,12639, 0, 8270, 8255, 8267, 8235,12639, 0, 2232, - 8233, 8278, 8256, 172, 8230, 8229, 8229, 1788, 1171, 8216, - 1789, 8241, 707, 814, 841, 1022, 1577, 1913, 1639, 1179, - 12639, 0, 8216, 2289, 8225, 8201, 8200, 889,12639, 0, - 8203, 8196, 8197,12639, 0, 8185, 8181, 8182,12639, 0, - 8174, 826, 2596, 8151, 8151, 8167, 8158, 897,12639, 0, - - 8143, 8127, 2614, 8124, 8119,12639, 0, 8119, 8123,12639, - 0, 8102, 2656, 2666, 8116,12639, 0, 8121, 8114, 2674, - 8095, 2680, 8091, 8092, 8088, 8075, 8092, 8091, 8066, 8085, - 8079, 8072, 8061, 8072,12639, 0, 2721, 2724, 8050, 8042, - 8057, 8053, 8050, 8042,12639, 0, 8043, 8042, 8022, 2727, - 8016, 8007, 8028, 8002,12639, 0, 7982, 2730, 7977,12639, - 0, 7963, 2733, 7950, 7967,12639, 0, 7953, 2788, 7935, - 7953, 7943, 7931,12639, 0, 7913, 7929, 7909, 7903, 7910, - 12639, 0, 7890, 7908, 7900, 7889, 7926,12639, 0, 7874, - 2791, 7879,12639, 0, 7869, 7881, 7881,12639, 0, 7858, - - 7853, 7849, 7848,12639, 0, 7831, 7825, 7828, 7839, 7831, - 7791, 7787,12639, 0, 7789, 7796,12639, 0, 2794, 7792, - 12639, 0, 2797, 7782, 7760,12639, 0, 2800, 7763, 7752, - 7792, 7800, 1615, 7741,12639, 1970, 0, 7737, 7736, 7781, - 7779, 7731,12639, 7744, 7724, 2600, 2855, 1714, 7722, 7725, - 7710, 7723, 7702, 7708, 7699, 7689, 7704, 7683, 458, 7676, - 7689, 7684, 7669, 7668, 7656, 7661, 7669, 7655, 7653, 1990, - 7657, 7637, 7650, 7647, 7631, 7640, 7634, 2858, 2863, 7632, - 2866, 2048, 7627, 7658, 2869, 2914,12639, 7624, 2917, 2117, - 2924, 7614, 2927, 7611, 7615, 7617, 2920, 2983, 7603, 7610, - - 7610, 2969, 2972, 2975, 2184, 7587, 2979, 3037, 2363, 7596, - 7582, 7575, 7572, 7576, 7559, 7552, 7553, 2423, 7551, 7549, - 7529, 7528, 7514, 3040, 2550, 7528, 7526, 3044, 3047, 868, - 7525, 7501, 3050, 3103, 7513, 7508, 3106, 3114, 7503, 7492, - 7496, 3109, 2621, 7495, 7496, 7476, 3117, 3129, 1204, 7474, - 7486, 7459, 3170, 2685, 7472, 3173, 3180, 7470, 3183, 3242, - 7460, 3176, 2755, 3237, 2822, 3247, 3250, 7463, 1993, 3255, - 3002, 7462, 3305, 3069, 3308, 7457, 7439, 7449, 7443, 7439, - 7426, 7419, 7407, 7411, 7393, 3312, 3315, 3318, 3137, 3374, - 3204, 3377, 3384, 3397, 3387, 3453, 3443, 3467, 7397, 37, - - 7387, 3446, 3405, 3456, 7398, 7373, 3511, 3519, 7373, 3515, - 3474, 3522, 3525, 7386, 3571, 3574, 7375, 3582, 3625, 7372, - 3628, 3594, 7369, 7355, 7342, 3633, 3640, 3636, 3646, 3654, - 3696, 3704, 7346, 3699, 3709, 3723, 3770, 3766, 3775, 7350, + 0, 0, 9512,12639,12639, 95, 100, 29, 41,12639, + 103, 51,12639,12639, 9493,12639,12639, 9482,12639, 9497, + 9493, 202,12639,12639,12639,12639, 9491, 9491, 9442, 153, + 12639, 161, 9468, 0, 145,12639, 9434,12639, 165, 3881, + + 73, 2599, 315, 357, 9470, 9417,12639, 168, 9460, 0, + 152,12639, 9418,12639, 261, 9462, 31,12639, 266, 9453, + 0, 245,12639, 9411, 9415, 9413, 421, 9414,12639, 269, + 9440, 0, 340,12639, 9406, 9402, 271, 9404, 238,12639, + 441, 484,12639, 504, 9432, 0, 401,12639, 9387, 9389, + 9379,12639, 561, 548,12639, 571, 9420, 0, 481,12639, + 9387, 9375,12639, 628, 3945, 9369, 163, 2533, 567, 206, + 38, 9420, 954, 2607, 639, 907, 437, 79,12639, 634, + 9411, 0, 546,12639, 9363, 9373, 9361, 9362,12639, 638, + 313, 559, 368,12639, 697, 9398, 0, 549,12639, 9368, + + 9344,12639, 704, 750,12639, 707, 9391, 0, 747,12639, + 9361, 9332,12639, 771, 758,12639, 774, 9384, 0, 748, + 12639, 9333, 9335, 9345, 251, 9328,12639, 831, 429, 9330, + 497,12639, 837, 9370, 0, 815,12639, 9321, 9321, 9331, + 9309,12639, 840, 530, 564,12639, 906, 9357, 0, 816, + 12639, 9327,12639, 914, 891,12639, 977, 9355, 0, 825, + 12639, 9307, 9317, 9304,12639, 981, 965,12639, 1021, 9343, + 0, 881,12639, 9292, 203, 9298, 9304, 970, 85, 429, + 972, 9292,12639, 1040, 814, 833,12639, 1044, 9334, 0, + 953,12639, 9278, 9296, 9298, 157, 9293, 9272,12639, 1048, + + 1092,12639, 1105, 9320, 0, 966,12639, 9265, 9263, 9270, + 9276, 9278, 9263, 9253,12639, 1108, 1093,12639, 1116, 9300, + 0, 1032,12639, 9256, 9262,12639, 1172, 1159,12639, 1175, + 9293, 0, 1033,12639, 9263, 9255, 9257,12639, 1179, 1226, + 12639, 1183, 9285, 0, 1095,12639, 8684, 8680, 8681, 15, + 12639, 1239, 899, 1074,12639, 1242, 8709, 0, 1167,12639, + 8661, 181,12639, 1246, 1242, 367, 303,12639, 1307, 8707, + 0, 1234,12639, 8659, 8654, 299,12639, 1310, 1310, 350, + 12639, 1313, 8704, 0, 1302,12639, 8665, 8669,12639, 1358, + 1363,12639, 1377, 8699, 0, 1362,12639, 8644, 8644,12639, + + 1383, 1430, 370,12639, 1425, 8688, 0, 1426,12639, 8633, + 8627, 8631,12639, 1442, 1436, 488,12639, 1448, 8675, 0, + 1432,12639, 8621, 8626, 8630, 8619, 8611,12639, 1509, 1445, + 560, 1103,12639, 1515, 8655, 0, 1494,12639, 8624,12639, + 1518, 1558,12639, 1521, 8652, 0, 1559,12639, 8610,12639, + 1579, 1141, 1344,12639, 1583, 8631, 0, 1567,12639, 8598, + 8591,12639, 1587, 1632,12639, 1590, 8619, 0, 1629,12639, + 8585, 8580,12639, 1645, 1633, 1707, 677, 8555,12639, 8614, + 8602,12639,12639,12639, 1700, 375, 8549, 8548, 8536, 8584, + 8538,12639, 0, 8526, 8522, 8546, 8511, 104, 1328, 8512, + + 8511, 8507, 8511, 621, 1646, 695, 8498, 8491, 1701, 912, + 8515, 1719, 8489, 1709, 8466, 1724, 1777, 1778,12639, 0, + 8471, 8472,12639, 0, 8464, 2098, 8456, 666, 8453, 8499, + 12639, 0, 8443, 2165, 8432, 8444, 8430, 8436, 8433, 8433, + 8418,12639, 0, 8429, 8419, 8430, 8404,12639, 0, 2232, + 8398, 8444, 8425, 172, 8391, 8391, 8395, 1788, 1171, 8375, + 1789, 8399, 707, 814, 841, 1022, 1577, 1913, 1639, 1179, + 12639, 0, 8362, 2289, 8366, 8343, 8348, 889,12639, 0, + 8335, 8328, 8329,12639, 0, 8318, 8314, 8315,12639, 0, + 8326, 826, 2596, 8302, 8300, 8308, 8298, 897,12639, 0, + + 8280, 8284, 2614, 8279, 8274,12639, 0, 8276, 8280,12639, + 0, 8253, 2656, 2666, 8267,12639, 0, 8268, 8268, 2674, + 8237, 2680, 8234, 8239, 8232, 8223, 8239, 8234, 8215, 8231, + 8229, 8223, 8211, 8216,12639, 0, 2721, 2724, 8196, 8188, + 8205, 8194, 8191, 8192,12639, 0, 8174, 8174, 8156, 2727, + 8148, 8143, 8162, 8125,12639, 0, 8125, 2730, 8120,12639, + 0, 8118, 2733, 8110, 8123,12639, 0, 8110, 2788, 8102, + 8113, 8112, 8099,12639, 0, 8085, 8100, 8085, 8079, 8086, + 12639, 0, 8067, 8086, 8077, 8065, 8103,12639, 0, 8057, + 2791, 8058,12639, 0, 8045, 8059, 8055,12639, 0, 8036, + + 8045, 8041, 8040,12639, 0, 8023, 8017, 8018, 8029, 8017, + 7981, 7977,12639, 0, 7965, 7969,12639, 0, 2794, 7966, + 12639, 0, 2797, 7955, 7939,12639, 0, 2800, 7942, 7931, + 7971, 7971, 1615, 7919,12639, 1970, 0, 7906, 7906, 7950, + 7941, 7893,12639, 7902, 7883, 2600, 2855, 1714, 7893, 7889, + 7875, 7887, 7863, 7869, 7857, 7834, 7849, 7836, 458, 7825, + 7839, 7839, 7824, 7818, 7786, 7790, 7800, 7783, 7781, 1990, + 7792, 7755, 7772, 7760, 7749, 7761, 7749, 2858, 2863, 7748, + 2866, 2048, 7742, 7774, 2869, 2914,12639, 7743, 2917, 2117, + 2924, 7732, 2927, 7736, 7739, 7729, 2920, 2983, 7715, 7722, + + 7722, 2969, 2972, 2975, 2184, 7703, 2979, 3037, 2363, 7719, + 7704, 7687, 7688, 7683, 7681, 7673, 7670, 2423, 7668, 7666, + 7656, 7655, 7650, 3040, 2550, 7664, 7662, 3044, 3047, 868, + 7654, 7640, 3050, 3103, 7648, 7647, 3106, 3114, 7637, 7623, + 7634, 3109, 2621, 7632, 7635, 7614, 3117, 3129, 1204, 7609, + 7627, 7600, 3170, 2685, 7614, 3173, 3180, 7612, 3183, 3242, + 7602, 3176, 2755, 3237, 2822, 3247, 3250, 7605, 1993, 3255, + 3002, 7608, 3305, 3069, 3308, 7598, 7583, 7593, 7590, 7582, + 7570, 7556, 7553, 7562, 7552, 3312, 3315, 3318, 3137, 3374, + 3204, 3377, 3384, 3397, 3387, 3453, 3443, 3467, 7556, 37, + + 7532, 3446, 3405, 3456, 7544, 7514, 3511, 3519, 7515, 3515, + 3474, 3522, 3525, 7527, 3571, 3574, 7525, 3582, 3625, 7515, + 3628, 3594, 7513, 7495, 7492, 3633, 3640, 3636, 3646, 3654, + 3696, 3704, 7496, 3699, 3709, 3723, 3770, 3766, 3775, 7496, 3778, 3727, 3781, 3835, 3838, 3841, 3844, 3847, 3850, 3872, - 3875, 3878, 3885, 7351, 7312, 7318, 7322, 7308, 3893, 3897, - 7317, 7302, 3905, 3908, 3949, 3735, 3952, 3957, 3967, 3801, - 7300, 3977, 3987, 3980, 3912, 7299, 4012, 4015, 7346,12639, - 12639, 1141, 7275,12639, 7317, 7310, 7259,12639,12639, 7250, - 7245, 7248, 4019, 4022,12639, 4025, 1848, 7240, 7228, 7237, - - 7245, 7235, 7224, 7221, 2250, 7205, 7209, 7209, 7213, 7188, - 7185, 7176, 7173, 1450, 7187, 7170, 7167, 7181, 7167, 7168, - 2307, 7157, 7146, 7151, 7137, 1782, 7150, 4044, 4034, 4047, - 12639, 4053, 4056, 4062,12639,12639, 4077, 7170, 4080, 4083, - 12639, 4086, 7127, 4089,12639,12639, 4105, 4108, 4117, 4123, - 4128, 7131, 4141, 7129, 4144, 4147,12639, 4150, 7123, 4153, - 7121, 4159, 4171,12639, 4174, 4178,12639,12639, 7116, 4186, - 4193,12639, 4196, 7108, 7104, 7113, 2483, 7092, 7100, 2054, - 7088, 7088, 7101, 7089, 7069, 7063, 7076, 4199,12639,12639, - 7067, 4207, 4215, 4218,12639, 4225, 7073, 4228, 4237, 4240, - - 4246,12639, 4249, 4255, 4259, 4273, 4277,12639, 4280, 7041, - 7048, 4268, 4292,12639,12639, 7029, 7026, 7039, 4288, 4300, - 12639, 4303, 7018, 7016, 7021, 7018, 4307,12639,12639, 7039, + 3875, 3878, 3885, 7497, 7477, 7484, 7488, 7469, 3893, 3897, + 7472, 7456, 3905, 3908, 3949, 3735, 3952, 3957, 3967, 3801, + 7454, 3977, 3987, 3980, 3912, 7453, 4012, 4015, 7500,12639, + 12639, 1141, 7455,12639, 7497, 7486, 7435,12639,12639, 7429, + 7428, 7437, 4019, 4022,12639, 4025, 1848, 7422, 7406, 7406, + + 7407, 7397, 7386, 7397, 2250, 7373, 7379, 7379, 7375, 7362, + 7359, 7355, 7342, 1450, 7356, 7335, 7336, 7329, 7324, 7324, + 2307, 7317, 7305, 7311, 7303, 1782, 7317, 4044, 4034, 4047, + 12639, 4053, 4056, 4062,12639,12639, 4077, 7341, 4080, 4083, + 12639, 4086, 7269, 4089,12639,12639, 4105, 4108, 4117, 4123, + 4128, 7283, 4141, 7275, 4144, 4147,12639, 4150, 7273, 4153, + 7265, 4159, 4171,12639, 4174, 4178,12639,12639, 7256, 4186, + 4193,12639, 4196, 7242, 7244, 7248, 2483, 7228, 7235, 2054, + 7224, 7225, 7226, 7224, 7201, 7200, 7213, 4199,12639,12639, + 7190, 4207, 4215, 4218,12639, 4225, 7195, 4228, 4237, 4240, + + 4246,12639, 4249, 4255, 4259, 4273, 4277,12639, 4280, 7182, + 7189, 4268, 4292,12639,12639, 7173, 7170, 7180, 4288, 4300, + 12639, 4303, 7170, 7158, 7169, 7161, 4307,12639,12639, 7183, 4322, 4325,12639, 4329, 4332, 4335, 4354,12639, 4357, 4350, 4362,12639,12639, 4376,12639,12639, 4384, 4387,12639, 4391, - 6992, 6979, 6997, 6985, 4394,12639,12639, 4406, 4410,12639, - 12639, 4418, 4425, 6971, 6984, 6967, 6974, 6966, 6941, 6936, - 6931, 6919, 637, 4436, 4439,12639, 4442, 4445,12639,12639, - 4461,12639,12639, 4469, 4472, 6909, 6916, 6921, 6900, 4480, - 4483,12639, 4487, 6896, 6891, 6878, 6893, 4490,12639,12639, - - 4502, 4506, 6878, 6866, 4514, 4520,12639, 4523, 6866, 4526, - 12639,12639, 4542, 4545,12639, 4548, 6841, 4551,12639,12639, - 6848, 4567, 4570,12639, 4575, 6830, 4579,12639,12639, 6838, - 6833, 6831, 4589, 4594,12639, 4598, 4601, 4604, 4619, 4625, - 6828, 4633, 4637,12639, 4641, 6819, 4644, 4662, 6801, 6732, - 4648, 4670, 6695, 4678, 4681,12639, 4684, 6689, 4687,12639, + 7143, 7130, 7146, 7137, 4394,12639,12639, 4406, 4410,12639, + 12639, 4418, 4425, 7113, 7126, 7108, 7116, 7120, 7109, 7103, + 7106, 7099, 637, 4436, 4439,12639, 4442, 4445,12639,12639, + 4461,12639,12639, 4469, 4472, 7088, 7081, 7086, 7074, 4480, + 4483,12639, 4487, 7069, 7030, 7011, 7020, 4490,12639,12639, + + 4502, 4506, 6984, 6993, 4514, 4520,12639, 4523, 6989, 4526, + 12639,12639, 4542, 4545,12639, 4548, 6963, 4551,12639,12639, + 6969, 4567, 4570,12639, 4575, 6946, 4579,12639,12639, 6914, + 6916, 6919, 4589, 4594,12639, 4598, 4601, 4604, 4619, 4625, + 6900, 4633, 4637,12639, 4641, 6859, 4644, 4662, 6823, 6812, + 4648, 4670, 6767, 4678, 4681,12639, 4684, 6711, 4687,12639, 12639, 4703, 4709,12639, 4712, 4715, 4718, 4733, 4736, 4744, - 4751,12639, 4755, 4758, 4763, 6598, 6595, 4776, 4779, 4787, - 4790,12639, 4794, 6536, 4797, 6555, 6552, 6520, 4800, 4809, - 12639, 4819, 6517, 6481, 4822, 4828,12639, 4831, 4834,12639, - - 12639, 4842, 4850,12639, 4853, 4857,12639,12639, 6475, 4865, - 4872,12639, 4875, 4885,12639,12639, 6450, 4894, 4897,12639, - 4900, 1280, 4903,12639,12639, 6462, 6436, 6398, 6335, 4906, - 6250, 6247, 6246, 6167, 6159, 6038, 6019, 2492, 2495, 20, + 4751,12639, 4755, 4758, 4763, 6679, 6663, 4776, 4779, 4787, + 4790,12639, 4794, 6650, 4797, 6637, 6613, 6541, 4800, 4809, + 12639, 4819, 6534, 6537, 4822, 4828,12639, 4831, 4834,12639, + + 12639, 4842, 4850,12639, 4853, 4857,12639,12639, 6530, 4865, + 4872,12639, 4875, 4885,12639,12639, 6481, 4894, 4897,12639, + 4900, 1280, 4903,12639,12639, 6511, 6486, 6430, 6416, 4906, + 6352, 6338, 6269, 6235, 6235, 6164, 6154, 2492, 2495, 20, 2559, 134, 249, 294, 2562, 345, 352, 2662, 383, 444, 450, 497, 561, 580, 667, 697, 698, 2693, 744, 759, 4909, 4927, 4937, 4940, 4944, 771, 802, 4952, 782, 4958, @@ -1141,604 +1131,614 @@ static yyconst flex_int16_t yy_base[3981] = 4031, 4033, 4055, 4053, 4062, 4061, 4058, 4060, 4080, 7622, 4074, 4086, 7625, 7628, 7631,12639,12639, 7639,12639, 4068, 7647,12639,12639, 7650, 7654, 4105, 7668, 4086, 4101, 4107, - 7671, 4100, 7677,12639,12639, 4112, 7689, 7693, 4103, 4150, - 4149, 4153, 4156, 4120, 7701, 7707, 7710, 7719, 7725,12639, - 12639, 7733,12639, 7737,12639,12639, 4147, 4154, 4157,12639, + 7671, 4100, 7677,12639,12639, 4112, 7689, 7693, 4103, 4171, + 4147, 4192, 4149, 4113, 7701, 7707, 7710, 7719, 7725,12639, + 12639, 7733,12639, 7737,12639,12639, 4135, 4154, 4158,12639, 12639, 7745, 7748, 7756, 7759, 7763, 4305, 4425, 7777,12639, 7780, 7783, 7786,12639,12639, 7802, 7805, 7813, 7816, 7824, - 12639, 7827, 4205, 4253, 4279, 4147, 7831, 7834, 4171, 4182, - 4183, 7837, 7848, 4198, 4201, 4233, 4208, 4228, 4328, 4203, - 4242, 4243, 4267, 4272,12639, 4292, 4277, 4276, 4280,12639, - 7856, 4276, 4285, 4274, 4302, 4314, 4323, 4306, 4316, 4303, - 4321, 4330, 4335, 4331, 7859, 4348, 7862, 7865, 7868, 7871, - 7875, 7880, 7893,12639,12639, 7901, 7904,12639, 4354, 4342, - 7908, 7911, 7919, 7914, 4355, 7932,12639,12639, 4362, 4395, - 4380, 4401, 4386, 4382, 7940, 7943, 7951,12639,12639, 7959, - 7962, 4372, 7970, 4382, 7973,12639,12639, 7981, 7984, 7992, - 7995, 4399, 4400, 4415, 4417, 4419, 4420, 8003, 8006, 8010, - - 4476, 4495, 8018,12639,12639, 8026, 4493, 4511, 8029, 4408, - 8032, 8035, 4400, 4401, 8038,12639,12639, 4455, 4444, 4445, - 4467, 4475, 4463, 4467, 4491, 8048, 4496, 4516, 4533, 4519, - 4502, 4534, 4549, 4537, 8051, 4495, 4497, 4515, 4569, 4574, - 4524, 4518, 4522, 4542, 4590, 4602, 4552, 4562, 8055, 8058, - 8061, 8070, 8066, 8079, 8085, 4562, 8097,12639,12639, 8093, - 8105, 4565, 4564, 8113, 8118, 8127,12639,12639, 8135, 8138, - 4552, 4564, 4592, 4592, 4602, 4608, 4604, 8146,12639,12639, - 8154,12639,12639, 4606, 8162, 8165, 4589, 8173, 4657, 4664, - 8181, 4696, 4698, 4626, 4635, 4669, 4634, 4643, 4685, 8189, - - 8192, 4665, 4671, 4670, 4677, 8195,12639, 4764, 8198, 8201, - 8204, 8223, 8226, 8229, 8232, 4673, 4699, 4701, 4689, 4695, - 4718, 4724, 4712, 8235, 8238, 4727, 4733,12639, 4738, 4741, - 4743,12639, 4746, 8246, 4733, 4719, 4799,12639,12639, 4754, - 4755, 4741, 4806,12639,12639, 4765, 8249, 8253, 8259,12639, - 12639, 8267, 8270,12639,12639, 4770, 8279,12639,12639, 4771, - 4784, 8287,12639,12639, 8295,12639,12639, 8303, 4780, 4843, - 4811, 4855, 4826, 4814, 8306, 8309,12639,12639, 8317, 4836, - 4854, 4845, 4857, 4848, 4864, 4857, 4890, 4883, 4893,12639, - 4886, 4896,12639, 8324,12639, 8327, 4899, 4888, 4906, 4895, - - 4915, 8330, 8336, 8349, 8380, 8427, 8357, 8360, 8363, 4912, - 4939, 4943, 4911, 4933, 4954, 4956, 4926, 8368,12639,12639, - 4965, 4940, 4947, 4972, 4950, 4951, 8391, 4923, 4925,12639, - 4935, 4935, 4938,12639, 4952, 8400, 8403,12639, 4950, 4958, - 4969, 8406, 8410, 8418,12639, 5015,12639, 5014, 4968, 8438, - 8447, 8456, 8459, 5040, 5008, 5040, 5011, 5046, 5015, 5046, - 5023, 5057, 5068, 5067, 5068, 8467, 5078, 5052, 5085, 5055, - 5095, 8474, 5096, 5124, 8494, 8541, 5083,12639,12639, 5072, - 5098,12639,12639, 5075,12639, 5122, 5128,12639, 5132, 5133, - 8487,12639, 5191, 5101, 5145, 5156, 5118, 5161, 5118, 5120, - - 5111, 8514, 5163, 5220, 8506, 8524,12639,12639, 5135, 8561, - 12639,12639, 8569, 5247, 5250,12639, 5190,12639, 5196,12639, - 5210,12639, 5209,12639,12639,12639,12639, 8532,12639,12639, - 5197,12639, 5218, 5285, 5267, 5235, 5242, 5274, 5249, 8535, - 5269, 5274, 5288, 5285,12639,12639,12639,12639,12639, 5244, - 5316,12639,12639, 5252, 5328,12639, 8577, 8580, 8587, 5304, - 5294, 5332, 5310, 8591,12639,12639, 8599, 5333, 5333, 5341, - 5342,12639,12639,12639,12639, 5338, 5350, 8605, 5383, 5376, - 5391, 8608, 5396, 5385, 5421, 5411, 5372,12639, 5391, 5379, - 12639, 5394, 8611, 8617, 8629, 8632, 8640, 8643, 5411, 5419, - - 5432, 5416, 5427, 5440, 8651, 8654, 5425, 5434, 5453, 5437, - 5445, 5462, 5446, 5449, 8662, 5473,12639, 5461,12639, 5464, - 5438, 5455, 5441, 5461, 8665,12639,12639, 8674,12639,12639, - 8682, 5492, 5499, 5480, 5487, 5487, 5507, 5512, 5515, 8690, - 12639,12639, 5523, 5529, 5525, 5531, 5548, 5544, 5581, 5584, - 5574,12639, 5597, 5595, 5537, 5551, 5547, 5562, 5605, 5600, - 5608, 5613, 5614, 5620, 5621, 5618, 5626, 5636, 5640, 5647, - 5648, 5645, 5655, 5661,12639,12639, 5668,12639,12639, 5626, - 5643, 5642, 5657, 5672, 5691, 5675, 5695, 5690, 5687, 5713, - 5702, 5704, 5721, 5720, 5721, 5739, 5730, 5727, 5745, 5770, - - 5781, 5782, 5782, 5784, 5757, 5764, 5777, 5778, 5793, 5783, - 5816, 5797, 5794, 5823, 5814, 5805, 5838, 5819, 5810, 5839, - 5894,12639,12639,12639,12639, 5825, 5850, 5847, 5855, 5878, - 5852,12639, 5885, 5871,12639, 5921, 5896,12639, 5921, 5899, - 12639, 5945, 5898, 5911, 5917, 5930,12639, 5931,12639, 5933, - 12639, 5934,12639, 5936, 8700, 5938, 5971, 5954, 5976, 5943, - 5960, 5961, 6004, 8703, 6054,12639, 6052,12639, 6060, 6059, - 6063, 6065, 6057, 6059,12639,12639,12639,12639,12639,12639, - 6107, 6113, 6127, 6152, 6077, 6096, 6158, 6215, 6137, 6180, - 6182, 6191, 6198, 6209, 6193, 6231, 6067, 6119, 6087, 6242, - - 6228, 6305, 6233, 6338, 6212, 6365, 6282, 6370, 6359, 6376, - 6105, 6255, 6357, 6423, 6367, 6427, 6379, 6401, 6157, 6396, - 6467, 6486, 6451, 6452, 6307, 6403, 6509, 6557, 6589, 6639, - 6271, 6435, 6570, 6653, 6591, 6623, 6563, 6596, 6667, 6686, - 6601, 6698, 6647, 6709, 6701, 6718, 6665, 6721, 6767, 6775, - 6743, 6777, 6726, 6764, 6800, 6828, 6794, 6797, 6793, 6811, - 6839, 6844, 6856, 6080, 8711, 8714,12639,12639, 8734, 8743, - 8752, 8761, 8770, 8779, 8788, 8797, 8806, 8815, 8824, 8833, - 8842, 8851, 8860, 8869, 8878, 8887, 8896, 8905, 8914, 8923, - 8932, 8941, 8950, 8959, 8968, 8977, 8986, 8995, 9004, 9013, - - 9022, 9031, 9040, 9049, 9058, 9067, 9076, 9085, 9094, 9103, - 9112, 9121, 9130, 9139, 9148, 9157, 9166, 9175, 9184, 9193, - 9202, 9211, 9220, 9229, 9238, 9247, 9256, 9265, 9274, 9283, - 9292, 9299, 9306, 9313, 9320, 9327, 9334, 9341, 9348, 9355, - 9362, 9369, 9376, 9383, 9390, 9397, 9404, 9411, 9418, 9425, - 9432, 9439, 9446, 9453, 9460, 9467, 9474, 9481, 9488, 9495, - 9504, 9511, 9516, 9523, 9528, 9535, 9540, 9547, 9552, 9559, - 9564, 9571, 9576, 9583, 9588, 9595, 9600, 9607, 9612, 9619, - 9624, 9631, 9636, 9643, 9648, 9655, 9660, 9667, 9672, 9679, - 9684, 9691, 9696, 9703, 9708, 9715, 9720, 9727, 9732, 9739, - - 9744, 9751, 9756, 9763, 9768, 9775, 9780, 9787, 9792, 9799, - 9804, 9811, 9816, 9823, 9828, 9835, 9840, 9847, 9852, 9861, - 9867, 9874, 9882, 9889, 9897, 9904, 9912, 9919, 9927, 9934, - 9942, 9949, 9957, 9964, 9972, 9979, 9987, 9994,10002,10009, - 10017,10024,10032,10039,10047,10054,10062,10069,10077,10085, - 10093,10100,10108,10115,10123,10130,10138,10145,10153,10161, - 10169,10177,10185,10192,10200,10208,10216,10224,10232,10239, - 10247,10254,10262,10270,10277,10285,10292,10300,10309,10315, - 10322,10330,10338,10346,10354,10362,10369,10377,10384,10392, - 10399,10407,10414,10422,10430,10438,10446,10454,10461,10469, - - 10476,10484,10492,10500,10508,10516,10523,10531,10538,10546, - 10553,10561,10568,10576,10583,10591,10598,10606,10613,10621, - 10628,10636,10643,10651,10659,10666,10674,10681,10689,10696, - 10704,10712,10719,10727,10734,10742,10751,10760,10767,10775, - 10783,10790,10798,10805,10813,10820,10828,10835,10842,10850, - 10857,10865,10872,10880,10887,10895,10902,10910,10918,10926, - 10933,10941,10949,10957,10964,10972,10979,10987,10994,11002, - 11009,11017,11024,11032,11039,11047,11054,11062,11070,11077, - 11085,11092,11100,11108,11116,11124,11132,11140,11148,11156, - 11165,11174,11181,11189,11197,11204,11212,11219,11227,11234, - - 11242,11249,11256,11264,11271,11279,11287,11295,11302,11310, - 11318,11326,11334,11341,11349,11357,11365,11372,11380,11387, - 11395,11402,11410,11417,11425,11432,11440,11448,11456,11463, - 11471,11479,11487,11495,11502,11510,11518,11526,11534,11542, - 11551,11560,11568,11576,11584,11591,11599,11606,11614,11622, - 11630,11638,11646,11654,11661,11669,11677,11684,11692,11700, - 11708,11715,11723,11731,11739,11746,11753,11761,11768,11776, - 11783,11790,11798,11805,11813,11820,11828,11836,11844,11851, - 11859,11867,11875,11883,11892,11901,11909,11917,11924,11931, - 11939,11947,11954,11962,11969,11977,11984,11991,11999,12007, - - 12014,12022,12030,12037,12044,12052,12059,12067,12074,12081, - 12088,12096,12103,12111,12119,12127,12135,12143,12151,12159, - 12167,12176,12185,12193,12201,12208,12216,12224,12231,12239, - 12247,12255,12262,12269,12277,12285,12292,12300,12308,12315, - 12322,12330,12338,12346,12353,12360,12368,12376,12384,12392, - 12400,12408,12416,12424,12432,12441,12450,12458,12465,12472, - 12480,12487,12495,12503,12510,12517,12525,12532,12539,12546, - 12554,12561,12568,12575,12584,12593,12602,12611,12620,12629 + 12639, 7827, 4216, 4253, 4279, 4156, 7831, 7834, 4180, 4183, + 4186, 7837, 7848, 4208, 4218, 4233, 4226, 4231, 4328, 4223, + 4287, 4272, 4272, 4277,12639, 4296, 4280, 4298, 4302,12639, + 7856, 4280, 4303, 4294, 4312, 4320, 4326, 4309, 4322, 4310, + 4324, 4346, 4352, 4334, 7859, 4352, 7862, 7865, 7868, 7871, + 7875, 7880, 7893,12639,12639, 7901, 7904,12639, 4358, 4352, + 7908, 7911, 7919, 7914, 4366, 7932,12639,12639, 4365, 4383, + 4402, 4392, 4392, 4411, 4397, 4388, 7940, 7943, 7951,12639, + 12639, 7959, 7962, 4392, 7970, 4402, 7973,12639,12639, 7981, + 7984, 7992, 7995, 4419, 4421, 4424, 4432, 4433, 4440, 8003, + + 8006, 8010, 4476, 4495, 8018,12639,12639, 8026, 4493, 4511, + 8029, 4426, 8032, 8035, 4412, 4427, 8038,12639,12639, 4475, + 4463, 4467, 4491, 4514, 4503, 4504, 4513, 8048, 4502, 4534, + 4552, 4537, 4523, 4542, 4558, 4553, 8051, 4512, 4517, 4534, + 4583, 4588, 4539, 4543, 4545, 4563, 4607, 4610, 4564, 4572, + 8055, 8058, 8061, 8070, 8066, 8079, 8085, 4576, 8097,12639, + 12639, 8093, 8105, 4578, 4573, 8113, 8118, 8127,12639,12639, + 8135, 8138, 4569, 4583, 4610, 4619, 4621, 4621, 4630, 4634, + 4623, 8146,12639,12639, 8154,12639,12639, 4625, 8162, 8165, + 4619, 8173, 4664, 4696, 8181, 4698, 4728, 4651, 4660, 4691, + + 4657, 4667, 4694, 8189, 8192, 4678, 4699, 4696, 4702, 8195, + 12639, 4764, 8198, 8201, 8204, 8223, 8226, 8229, 8232, 4695, + 4718, 4724, 4712, 4721, 4742, 4745, 4737, 8235, 8238, 4757, + 4757,12639, 4775, 4777, 4778,12639, 4779, 8246, 4762, 4749, + 4821,12639,12639, 4776, 4788, 4779, 4840,12639,12639, 4798, + 8249, 8253, 8259,12639,12639, 8267, 8270,12639,12639, 4807, + 8279,12639,12639, 4808, 4814, 8287,12639,12639, 8295,12639, + 12639, 8303, 4805, 4840, 4875, 4844, 4844, 4881, 4854, 4859, + 8306, 8309,12639,12639, 8317, 4882, 4893, 4885, 4896, 4889, + 4901, 4896, 4908, 4900, 4911,12639, 4910, 4923,12639, 8324, + + 12639, 8327, 4925, 4919, 4937, 4926, 4946, 8330, 8336, 8349, + 8380, 8427, 8357, 8360, 8363, 4946, 4967, 4972, 4940, 4956, + 4974, 4975, 4949, 8368,12639,12639, 4985, 4959, 4968, 4995, + 4977, 4985, 8391, 4954, 4955,12639, 4966, 4962, 4980,12639, + 4990, 8400, 8403,12639, 4989, 4990, 5001, 8406, 8410, 8418, + 5016,12639, 5049, 5024,12639, 5054, 5014, 8438, 8447, 8456, + 8459, 5070, 5038, 5075, 5053, 5088, 5056, 5088, 5063, 5104, + 5106, 5104, 5106, 8467, 5110, 5088, 5124, 5094, 5122, 8474, + 5145, 5141, 8494, 8541, 5127,12639,12639, 5106, 5153,12639, + 12639, 5132,12639, 5165, 5167,12639, 5175, 5181, 8487,12639, + + 5191, 5147, 5196, 5207, 5155, 5196, 5165, 5166, 5167, 8514, + 5220, 5247, 8506, 8524, 5222,12639, 5230,12639, 5205, 8561, + 12639,12639, 8569, 5250, 5273,12639, 5267,12639, 5274,12639, + 5278,12639, 5278,12639,12639,12639,12639, 8532,12639,12639, + 5272,12639, 5281, 5285, 5317, 5319, 5305, 5343, 5311, 8535, + 5307, 5300, 5330, 5328,12639,12639,12639,12639,12639, 5308, + 5349,12639,12639, 5320, 5373,12639, 8577, 8580, 8587, 5411, + 5342, 5413, 5360, 8591,12639,12639, 5374, 5376, 8599, 5421, + 5378, 5434, 5401,12639,12639,12639,12639, 5402, 5404, 8605, + 5445, 5439, 5456, 8608, 5461, 5455, 5469, 5462, 5437, 5426, + + 12639, 5444, 5446, 5435,12639, 5455, 8611, 8617, 8629, 8632, + 8640, 8643, 5466, 5474, 5490, 5477, 5486, 5498, 5519, 5517, + 8651, 8654, 5491, 5505, 5522, 5505, 5520, 5538, 5522, 5523, + 8662, 5548,12639, 5547,12639, 5548, 5519, 5527, 5543, 5535, + 5538, 5555, 8665,12639,12639, 8674,12639,12639, 8682, 5580, + 5591, 5579, 5594, 5591, 5605, 5611, 5607,12639,12639, 8690, + 12639,12639, 5610, 5615, 5613, 5625, 5637, 5634, 5668, 5666, + 5667,12639, 5674, 5679, 5645, 5627, 5651, 5661, 5641, 5657, + 5693, 5688, 5705, 5699, 5708, 5714, 5719, 5716, 5732, 5736, + 5734, 5742, 5742, 5740, 5762, 5762,12639,12639, 5771,12639, + + 12639, 5722, 5726, 5741, 5734, 5747, 5763, 5779, 5798, 5782, + 5801, 5794, 5791, 5815, 5805, 5803, 5820, 5810, 5807, 5830, + 5839, 5836, 5856, 5864, 5819, 5888, 5908, 5854, 5918, 5920, + 5893, 5894, 5898, 5898, 5928, 5918, 5951, 5933, 5923, 5953, + 5938, 5928, 5971, 5953, 5943, 5976, 6040, 5934,12639,12639, + 5951,12639,12639, 5975, 6022, 6031, 6042, 6063, 6041,12639, + 6067, 6044,12639, 6073, 6054,12639, 6080, 6064,12639, 6093, + 6047, 6053, 6070, 6090, 6079, 6100,12639, 6102,12639, 6107, + 12639, 6113,12639, 6115, 8700, 6136, 6138, 6123, 6151, 6133, + 6151, 6128, 6130, 6131, 6133, 8703,12639,12639, 6172,12639, + + 6171,12639, 6175, 6183, 6188, 6186, 6209, 6271,12639,12639, + 12639,12639,12639,12639, 6180, 6182, 6183, 6349, 6198, 6200, + 6215, 6274, 6201, 6276, 6359, 6365, 6367, 6376, 6338, 6396, + 6214, 6370, 6378, 6394, 6427, 6509, 6451, 6452, 6256, 6273, + 6445, 6467, 6400, 6561, 6432, 6557, 6190, 6566, 6601, 6700, + 6568, 6641, 6626, 6645, 6486, 6648, 6684, 6743, 6361, 6581, + 6718, 6745, 6756, 6759, 6657, 6797, 6653, 6767, 6667, 6777, + 6775, 6813, 6728, 6856, 6794, 6814, 6839, 6844, 6584, 6778, + 6829, 6890, 6927, 7013, 6899, 6937, 6892, 7019, 6880, 6964, + 7049, 7074, 7032, 7143, 7075, 7130, 6842, 6300, 8711, 8714, + + 12639,12639, 8734, 8743, 8752, 8761, 8770, 8779, 8788, 8797, + 8806, 8815, 8824, 8833, 8842, 8851, 8860, 8869, 8878, 8887, + 8896, 8905, 8914, 8923, 8932, 8941, 8950, 8959, 8968, 8977, + 8986, 8995, 9004, 9013, 9022, 9031, 9040, 9049, 9058, 9067, + 9076, 9085, 9094, 9103, 9112, 9121, 9130, 9139, 9148, 9157, + 9166, 9175, 9184, 9193, 9202, 9211, 9220, 9229, 9238, 9247, + 9256, 9265, 9274, 9283, 9292, 9299, 9306, 9313, 9320, 9327, + 9334, 9341, 9348, 9355, 9362, 9369, 9376, 9383, 9390, 9397, + 9404, 9411, 9418, 9425, 9432, 9439, 9446, 9453, 9460, 9467, + 9474, 9481, 9488, 9495, 9504, 9511, 9516, 9523, 9528, 9535, + + 9540, 9547, 9552, 9559, 9564, 9571, 9576, 9583, 9588, 9595, + 9600, 9607, 9612, 9619, 9624, 9631, 9636, 9643, 9648, 9655, + 9660, 9667, 9672, 9679, 9684, 9691, 9696, 9703, 9708, 9715, + 9720, 9727, 9732, 9739, 9744, 9751, 9756, 9763, 9768, 9775, + 9780, 9787, 9792, 9799, 9804, 9811, 9816, 9823, 9828, 9835, + 9840, 9847, 9852, 9861, 9867, 9874, 9882, 9889, 9897, 9904, + 9912, 9919, 9927, 9934, 9942, 9949, 9957, 9964, 9972, 9979, + 9987, 9994,10002,10009,10017,10024,10032,10039,10047,10054, + 10062,10069,10077,10085,10093,10100,10108,10115,10123,10130, + 10138,10145,10153,10161,10169,10177,10185,10192,10200,10208, + + 10216,10224,10232,10239,10247,10254,10262,10270,10277,10285, + 10292,10300,10309,10315,10322,10330,10338,10346,10354,10362, + 10369,10377,10384,10392,10399,10407,10414,10422,10430,10438, + 10446,10454,10461,10469,10476,10484,10492,10500,10508,10516, + 10523,10531,10538,10546,10553,10561,10568,10576,10583,10591, + 10598,10606,10613,10621,10628,10636,10643,10651,10659,10666, + 10674,10681,10689,10696,10704,10712,10719,10727,10734,10742, + 10751,10760,10767,10775,10783,10790,10798,10805,10813,10820, + 10828,10835,10842,10850,10857,10865,10872,10880,10887,10895, + 10902,10910,10918,10926,10933,10941,10949,10957,10964,10972, + + 10979,10987,10994,11002,11009,11017,11024,11032,11039,11047, + 11054,11062,11070,11077,11085,11092,11100,11108,11116,11124, + 11132,11140,11148,11156,11165,11174,11181,11189,11197,11204, + 11212,11219,11227,11234,11242,11249,11256,11264,11271,11279, + 11287,11295,11302,11310,11318,11326,11334,11341,11349,11357, + 11365,11372,11380,11387,11395,11402,11410,11417,11425,11432, + 11440,11448,11456,11463,11471,11479,11487,11495,11502,11510, + 11518,11526,11534,11542,11551,11560,11568,11576,11584,11591, + 11599,11606,11614,11622,11630,11638,11646,11654,11661,11669, + 11677,11684,11692,11700,11708,11715,11723,11731,11739,11746, + + 11753,11761,11768,11776,11783,11790,11798,11805,11813,11820, + 11828,11836,11844,11851,11859,11867,11875,11883,11892,11901, + 11909,11917,11924,11931,11939,11947,11954,11962,11969,11977, + 11984,11991,11999,12007,12014,12022,12030,12037,12044,12052, + 12059,12067,12074,12081,12088,12096,12103,12111,12119,12127, + 12135,12143,12151,12159,12167,12176,12185,12193,12201,12208, + 12216,12224,12231,12239,12247,12255,12262,12269,12277,12285, + 12292,12300,12308,12315,12322,12330,12338,12346,12353,12360, + 12368,12376,12384,12392,12400,12408,12416,12424,12432,12441, + 12450,12458,12465,12472,12480,12487,12495,12503,12510,12517, + + 12525,12532,12539,12546,12554,12561,12568,12575,12584,12593, + 12602,12611,12620,12629 } ; -static yyconst flex_int16_t yy_def[3981] = +static yyconst flex_int16_t yy_def[4015] = { 0, - 3469, 3469, 3470, 3470, 3470, 3470, 3471, 3471, 3472, 3472, - 3473, 3473, 3474, 3474, 3474, 3474, 3475, 3475, 3469, 3469, - 3476, 3476, 3477, 3477, 3477, 3477, 3469, 3469, 3477, 3477, - 3477, 3477, 3469, 3469, 3477, 3477, 3469, 3469, 3477, 3477, - 3477, 3477, 3478, 3478, 3479, 3479, 3469, 3469, 3479, 3479, - 3479, 3479, 3480, 3480, 3474, 3474, 3481, 3481, 3482, 3482, - 3483, 3483, 3484, 3484, 3485, 3485, 3486, 3486, 3486, 3486, - 3469, 3469, 3486, 3486, 3486, 3486, 3469, 3469, 3486, 3486, - 3486, 3486, 3469, 3469, 3486, 3486, 3469, 3469, 3486, 3486, - 3486, 3486, 3469, 3469, 3486, 3486, 3469, 3469, 3486, 3486, - - 3486, 3486, 3487, 3487, 3488, 3488, 3469, 3469, 3488, 3488, - 3488, 3488, 3489, 3489, 3490, 3490, 3491, 3491, 3492, 3492, - 3493, 3493, 3494, 3494, 3469, 3469, 3494, 3494, 3494, 3494, - 3495, 3495, 3496, 3496, 3469, 3469, 3496, 3496, 3496, 3496, - 3497, 3497, 3498, 3498, 3499, 3499, 3500, 3500, 3468, 149, - 3501, 3501, 3469, 3469, 3501, 3501, 3501, 3501, 3502, 3502, - 3503, 3503, 3504, 3504, 3505, 3505, 3506, 3506, 3507, 3507, - 3508, 3508, 3509, 3509, 3510, 3510, 3511, 3511, 3469, 3469, - 3511, 3511, 3511, 3511, 3512, 3512, 3513, 3513, 3469, 3469, - 3513, 3513, 3513, 3513, 3514, 3514, 3515, 3515, 3469, 3469, - - 3515, 3515, 3515, 3515, 3516, 3516, 3517, 3517, 3518, 3518, - 3519, 3519, 3469, 3469, 3519, 3519, 3519, 3519, 3520, 3520, - 3521, 3521, 3469, 3469, 3521, 3521, 3521, 3521, 3522, 3522, - 3523, 3523, 3469, 3469, 3523, 3523, 3523, 3523, 3524, 3524, - 3525, 3525, 3526, 3526, 3527, 3527, 3469, 3469, 3527, 3527, - 3527, 3527, 3528, 3528, 3529, 3529, 3530, 3530, 3531, 3531, - 3469, 3469, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3532, 3468, 3468, 3532, 3468, 3468, 3468, - - 300, 300, 302, 300, 303, 303, 3468, 3468, 3468, 3533, - 3468, 3468, 3533, 3468, 3468, 304, 303, 3468, 3468, 3468, - 3534, 3468, 3468, 3534, 3534, 3534, 3468, 3468, 3468, 3468, - 3468, 3535, 3468, 3468, 3535, 3535, 3535, 3535, 3535, 3468, - 3468, 3468, 3468, 3468, 3468, 3536, 3468, 3468, 3536, 3536, - 3536, 3468, 3468, 3468, 3468, 3468, 3468, 3537, 3468, 3468, - 3537, 3537, 3468, 3468, 3468, 365, 303, 303, 304, 369, - 368, 368, 368, 368, 369, 375, 373, 373, 3468, 3468, - 3468, 3538, 3468, 3468, 3538, 3538, 3538, 3538, 3468, 3468, - 303, 303, 303, 3468, 3468, 3468, 3539, 3468, 3468, 3539, - - 3539, 3468, 3468, 3468, 3468, 3468, 3468, 3540, 3468, 3468, - 3540, 3540, 3468, 3468, 3468, 3468, 3468, 3468, 3541, 3468, - 3468, 3541, 3541, 3541, 3541, 3541, 3468, 3468, 392, 392, - 303, 3468, 3468, 3468, 3542, 3468, 3468, 3542, 3542, 3542, - 3542, 3468, 3468, 303, 303, 3468, 3468, 3468, 3543, 3468, - 3468, 3543, 3468, 3468, 3468, 3468, 3468, 3468, 3544, 3468, - 3468, 3544, 3544, 3544, 3468, 3468, 3468, 3468, 3468, 3468, - 3545, 3468, 3468, 3545, 3545, 3545, 3545, 3545, 3545, 3545, - 3545, 3545, 3468, 3468, 303, 303, 3468, 3468, 3468, 3546, - 3468, 3468, 3546, 3546, 3546, 3546, 3546, 3546, 3468, 3468, - - 3468, 3468, 3468, 3468, 3547, 3468, 3468, 3547, 3547, 3547, - 3547, 3547, 3547, 3547, 3468, 3468, 3468, 3468, 3468, 3468, - 3548, 3468, 3468, 3548, 3548, 3468, 3468, 3468, 3468, 3468, - 3468, 3549, 3468, 3468, 3549, 3549, 3549, 3468, 3468, 3468, - 3468, 3468, 3468, 3550, 3468, 3468, 3550, 3550, 3550, 3550, - 3468, 3468, 303, 303, 3468, 3468, 3468, 3551, 3468, 3468, - 3551, 3551, 3468, 3468, 303, 373, 373, 3468, 3468, 3468, - 3552, 3468, 3468, 3552, 3552, 3552, 3468, 3468, 373, 373, - 3468, 3468, 3468, 3553, 3468, 3468, 3553, 3553, 3468, 3468, - 3468, 3468, 3468, 3468, 3554, 3468, 3468, 3554, 3554, 3468, - - 3468, 373, 373, 3468, 3468, 3468, 3555, 3468, 3468, 3555, - 3555, 3555, 3468, 3468, 373, 373, 3468, 3468, 3468, 3556, - 3468, 3468, 3556, 3556, 3556, 3556, 3556, 3468, 3468, 303, - 392, 303, 3468, 3468, 3468, 3557, 3468, 3468, 3557, 3468, - 3468, 3468, 3468, 3468, 3468, 3558, 3468, 3468, 3558, 3468, - 3468, 303, 303, 3468, 3468, 3468, 3559, 3468, 3468, 3559, - 3559, 3468, 3468, 3468, 3468, 3468, 3468, 3560, 3468, 3468, - 3560, 3560, 3468, 3468, 3468, 3468, 3561, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3562, 3562, 3563, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3564, - 3564, 3565, 3468, 3566, 3566, 3566, 3566, 3468, 3567, 3468, - 3468, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, 3568, - 3569, 3468, 3570, 3570, 3570, 3570, 3571, 3468, 3572, 3572, - 3572, 3573, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3574, 3574, 3574, 3574, 3574, 3575, 3468, 3468, 3576, - 3576, 3576, 3577, 3468, 3578, 3578, 3578, 3579, 3468, 3580, - 3580, 3580, 3580, 3580, 3580, 3580, 3581, 3468, 3468, 3582, - - 3582, 3582, 3582, 3582, 3583, 3468, 3584, 3584, 3585, 3468, - 3586, 3586, 3586, 3586, 3587, 3468, 3588, 3588, 3588, 3588, - 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, 3588, - 3588, 3588, 3588, 3589, 3468, 3590, 3590, 3590, 3590, 3590, - 3590, 3590, 3590, 3591, 3468, 3592, 3592, 3592, 3592, 3592, - 3592, 3592, 3592, 3593, 3468, 3594, 3594, 3594, 3595, 3468, - 3596, 3596, 3596, 3596, 3597, 3468, 3598, 3598, 3598, 3598, - 3598, 3598, 3599, 3468, 3600, 3600, 3600, 3600, 3601, 3468, - 3468, 3602, 3602, 3602, 3602, 3602, 3603, 3468, 3604, 3604, - 3604, 3605, 3468, 3606, 3606, 3606, 3607, 3468, 3608, 3608, - - 3608, 3608, 3609, 3468, 3610, 3610, 3610, 3610, 3610, 3610, - 3611, 3468, 3468, 3612, 3612, 3613, 3468, 3614, 3614, 3615, - 3468, 3616, 3616, 3616, 3617, 3468, 3618, 3618, 3618, 3619, - 3620, 3468, 3620, 3468, 3468, 3468, 3621, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3622, 3623, 3623, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3624, 3625, 3625, 3626, - 3468, 3468, 3626, 3468, 3627, 3627, 3468, 3628, 3468, 3468, - 3628, 3628, 3628, 3628, 3628, 3628, 3629, 3629, 3630, 3630, - - 3630, 3631, 3631, 3468, 3468, 3632, 3633, 3633, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3634, 3468, 3468, 3634, 3634, 3635, 3635, 3468, - 3636, 3636, 3637, 3637, 3638, 3638, 3639, 3639, 3640, 3640, - 3640, 3468, 3468, 3640, 3640, 3640, 3641, 3641, 3468, 3468, - 3642, 3642, 3468, 3468, 3642, 3643, 3643, 3644, 3645, 3645, - 3646, 3468, 3468, 3468, 3468, 3647, 3647, 3648, 3648, 3468, - 3468, 3648, 3468, 3468, 3648, 3648, 3648, 3648, 3648, 3648, - 3648, 3648, 3648, 3648, 3648, 3649, 3649, 3468, 3468, 3468, - 3468, 3650, 3650, 3650, 3650, 3650, 3651, 3651, 3652, 3652, - - 3652, 3468, 3468, 3652, 3652, 3652, 3653, 3653, 3654, 3468, - 3468, 3655, 3655, 3656, 3468, 3468, 3656, 3657, 3657, 3658, - 3468, 3468, 3658, 3658, 3658, 3659, 3659, 3660, 3660, 3660, - 3661, 3661, 3468, 3662, 3662, 3662, 3662, 3663, 3663, 3664, - 3468, 3468, 3665, 3665, 3666, 3666, 3667, 3667, 3668, 3668, - 3668, 3669, 3669, 3670, 3670, 3670, 3670, 3670, 3671, 3671, - 3468, 3672, 3673, 3673, 3468, 3468, 3674, 3674, 3468, 3468, - 3675, 3676, 3676, 3468, 3468, 3677, 3678, 3678, 3679, 3468, - 3468, 3679, 3468, 3468, 3680, 3468, 3468, 3468, 3468, 3468, - 3468, 3681, 3468, 3682, 3468, 3682, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3683, 3468, 3684, - 3468, 3684, 3685, 3468, 3468, 3468, 3685, 3468, 3468, 3686, - 3468, 3686, 3687, 3468, 3468, 3468, 3468, 3468, 3687, 3468, - 3468, 3687, 3687, 3687, 3468, 3688, 3468, 3688, 3689, 3689, - 3689, 3468, 3690, 3468, 3690, 3468, 3468, 3468, 3691, 3468, - 3692, 3468, 3692, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3693, 3468, 3468, 3468, - 3693, 3693, 3468, 3694, 3468, 3694, 3468, 3695, 3695, 3468, - - 3696, 3468, 3696, 3697, 3697, 3468, 3698, 3468, 3698, 3699, - 3699, 3699, 3468, 3468, 3468, 3699, 3699, 3699, 3468, 3700, - 3468, 3700, 3468, 3468, 3701, 3701, 3468, 3468, 3468, 3701, - 3468, 3702, 3468, 3702, 3703, 3468, 3704, 3468, 3704, 3705, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3706, 3468, 3706, - 3707, 3707, 3707, 3707, 3468, 3468, 3468, 3707, 3468, 3468, - 3468, 3468, 3468, 3707, 3707, 3707, 3707, 3707, 3707, 3707, - 3707, 3707, 3707, 3468, 3708, 3468, 3708, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3709, 3709, 3709, 3709, 3468, - 3710, 3468, 3710, 3711, 3711, 3711, 3711, 3468, 3468, 3468, - - 3468, 3468, 3711, 3711, 3468, 3712, 3468, 3712, 3713, 3468, - 3468, 3468, 3468, 3714, 3468, 3714, 3715, 3468, 3468, 3468, - 3715, 3468, 3716, 3468, 3716, 3717, 3468, 3468, 3468, 3717, - 3717, 3717, 3468, 3718, 3468, 3718, 3468, 3468, 3468, 3468, - 3719, 3468, 3720, 3468, 3720, 3468, 3468, 3468, 3721, 3721, - 3468, 3468, 3721, 3468, 3722, 3468, 3722, 3723, 3468, 3468, - 3468, 3468, 3724, 3468, 3724, 3468, 3468, 3468, 3468, 3468, - 3725, 3468, 3725, 3468, 3468, 3726, 3726, 3468, 3468, 3468, - 3727, 3468, 3727, 3728, 3728, 3728, 3728, 3728, 3468, 3729, - 3468, 3729, 3468, 3730, 3468, 3731, 3468, 3731, 3468, 3468, - - 3468, 3468, 3732, 3468, 3732, 3468, 3468, 3468, 3733, 3468, - 3734, 3468, 3734, 3468, 3468, 3468, 3735, 3468, 3736, 3468, - 3736, 3737, 3738, 3468, 3468, 3468, 3468, 3468, 3739, 3740, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3741, 3468, 3468, 3742, 3468, 3743, 3744, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3744, 3468, 3468, - 3744, 3745, 3746, 3468, 3468, 3746, 3747, 3748, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3749, 3749, 3468, 3468, 3750, 3468, 3468, - 3468, 3751, 3752, 3468, 3468, 3753, 3754, 3755, 3755, 3468, - 3468, 3755, 3755, 3755, 3756, 3468, 3468, 3757, 3757, 3757, - 3758, 3468, 3468, 3759, 3468, 3468, 3760, 3761, 3761, 3761, - 3761, 3468, 3468, 3468, 3468, 3468, 3761, 3761, 3761, 3761, - 3761, 3761, 3761, 3761, 3761, 3761, 3761, 3762, 3468, 3468, - 3468, 3763, 3763, 3763, 3763, 3764, 3765, 3765, 3765, 3765, - 3468, 3468, 3468, 3765, 3765, 3766, 3767, 3768, 3769, 3769, - 3770, 3771, 3771, 3771, 3771, 3772, 3468, 3468, 3468, 3468, - 3468, 3468, 3773, 3774, 3468, 3468, 3468, 3468, 3775, 3775, - - 3468, 3468, 3468, 3775, 3776, 3777, 3778, 3468, 3468, 3468, - 3468, 3468, 3468, 3779, 3468, 3468, 3468, 3780, 3780, 3468, - 3468, 3468, 3781, 3782, 3468, 3468, 3782, 3782, 3782, 3783, - 3468, 3784, 3785, 3786, 3787, 3788, 3789, 3790, 3791, 3792, - 3792, 3468, 3792, 3468, 3468, 3468, 3793, 3794, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3795, 3468, 3468, 3468, 3796, 3468, 3797, 3798, - 3468, 3468, 3468, 3798, 3468, 3468, 3468, 3798, 3799, 3800, - - 3468, 3468, 3468, 3468, 3468, 3801, 3802, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3803, 3468, 3468, 3468, 3468, 3468, 3804, 3468, 3468, 3468, - 3468, 3805, 3806, 3468, 3468, 3468, 3807, 3808, 3809, 3809, - 3468, 3468, 3468, 3468, 3468, 3809, 3468, 3468, 3809, 3810, - 3468, 3468, 3811, 3811, 3811, 3812, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3813, 3814, 3468, 3468, 3814, 3814, - 3468, 3468, 3468, 3814, 3814, 3468, 3468, 3814, 3814, 3814, - 3814, 3814, 3814, 3814, 3814, 3815, 3468, 3468, 3816, 3816, - 3816, 3817, 3818, 3468, 3468, 3818, 3818, 3468, 3468, 3818, - - 3819, 3820, 3821, 3822, 3822, 3823, 3824, 3824, 3824, 3468, - 3468, 3824, 3825, 3826, 3827, 3468, 3828, 3828, 3828, 3829, - 3830, 3831, 3832, 3833, 3833, 3834, 3835, 3468, 3468, 3468, - 3835, 3835, 3835, 3836, 3468, 3468, 3468, 3837, 3838, 3468, - 3468, 3839, 3468, 3468, 3840, 3841, 3842, 3842, 3468, 3468, - 3843, 3844, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3845, 3846, 3468, 3847, 3848, 3848, 3848, 3849, 3850, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3851, 3852, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3853, 3468, 3468, 3468, 3854, 3468, 3855, 3856, - 3468, 3468, 3857, 3858, 3858, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3858, 3468, 3468, 3468, 3468, 3468, 3468, - 3859, 3468, 3468, 3860, 3861, 3862, 3468, 3468, 3468, 3468, - 3468, 3862, 3862, 3862, 3468, 3468, 3468, 3468, 3468, 3862, - 3862, 3862, 3862, 3468, 3468, 3862, 3862, 3863, 3468, 3468, - 3468, 3468, 3468, 3864, 3468, 3468, 3865, 3866, 3468, 3468, - 3468, 3468, 3468, 3866, 3468, 3468, 3468, 3866, 3468, 3468, - 3867, 3868, 3869, 3869, 3870, 3871, 3871, 3871, 3468, 3468, - - 3468, 3871, 3468, 3468, 3872, 3873, 3468, 3468, 3468, 3468, - 3468, 3874, 3875, 3876, 3877, 3878, 3468, 3468, 3468, 3468, - 3879, 3880, 3880, 3880, 3880, 3881, 3468, 3468, 3468, 3468, - 3882, 3883, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3884, 3885, 3886, 3886, 3468, 3468, 3468, 3887, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3888, 3889, 3468, 3468, 3468, 3890, - 3468, 3468, 3890, 3891, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3892, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3893, 3894, - 3468, 3895, 3468, 3468, 3468, 3468, 3468, 3896, 3897, 3897, - 3468, 3468, 3468, 3468, 3468, 3897, 3468, 3468, 3468, 3468, - 3468, 3468, 3898, 3468, 3468, 3468, 3899, 3900, 3901, 3468, - 3468, 3468, 3901, 3901, 3901, 3468, 3468, 3468, 3468, 3468, - 3901, 3901, 3901, 3468, 3468, 3468, 3901, 3901, 3902, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3903, 3904, 3468, - 3468, 3468, 3904, 3904, 3905, 3906, 3907, 3468, 3468, 3908, - 3909, 3468, 3468, 3909, 3909, 3468, 3468, 3909, 3910, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3911, 3912, - - 3913, 3914, 3915, 3468, 3468, 3468, 3468, 3468, 3468, 3916, - 3917, 3917, 3917, 3917, 3918, 3468, 3919, 3920, 3921, 3922, - 3923, 3923, 3468, 3468, 3468, 3468, 3924, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3925, - 3926, 3468, 3927, 3468, 3468, 3468, 3927, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3928, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3929, 3930, 3468, 3931, - 3932, 3933, 3933, 3468, 3468, 3468, 3468, 3933, 3468, 3468, - - 3468, 3468, 3934, 3935, 3936, 3937, 3937, 3937, 3937, 3468, - 3468, 3468, 3937, 3937, 3937, 3937, 3468, 3468, 3938, 3468, - 3468, 3468, 3939, 3940, 3940, 3940, 3941, 3468, 3468, 3942, - 3468, 3468, 3468, 3943, 3944, 3468, 3468, 3468, 3944, 3944, - 3468, 3468, 3468, 3468, 3944, 3945, 3468, 3946, 3947, 3948, - 3949, 3950, 3951, 3468, 3468, 3952, 3952, 3952, 3953, 3468, - 3954, 3468, 3468, 3955, 3956, 3957, 3957, 3468, 3958, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3959, 3468, 3468, 3960, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3961, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3962, 3963, 3468, 3468, 3468, 3964, 3965, - 3965, 3468, 3468, 3468, 3468, 3965, 3468, 3966, 3468, 3468, - 3967, 3968, 3968, 3968, 3968, 3968, 3468, 3468, 3968, 3968, - 3968, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3969, 3969, - 3969, 3970, 3468, 3468, 3971, 3468, 3468, 3972, 3972, 3972, - 3468, 3468, 3468, 3468, 3972, 3973, 3468, 3974, 3468, 3468, - 3468, 3468, 3949, 3950, 3951, 3468, 3468, 3468, 3468, 3468, - 3952, 3952, 3468, 3468, 3468, 3954, 3955, 3956, 3957, 3957, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3959, - - 3468, 3468, 3468, 3960, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3961, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3962, 3963, 3468, 3468, 3468, 3468, 3468, 3468, 3965, - 3965, 3468, 3468, 3468, 3468, 3966, 3967, 3968, 3968, 3968, - 3968, 3968, 3468, 3468, 3468, 3968, 3468, 3468, 3968, 3468, - 3468, 3468, 3468, 3969, 3969, 3468, 3468, 3970, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3972, 3972, 3972, 3468, - 3468, 3468, 3468, 3973, 3974, 3468, 3468, 3468, 3468, 3468, - 3950, 3951, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3955, 3956, 3957, 3957, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3960, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3961, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3962, 3963, 3468, 3965, - 3468, 3468, 3468, 3468, 3468, 3966, 3468, 3468, 3968, 3968, - 3968, 3468, 3468, 3968, 3968, 3468, 3468, 3468, 3968, 3468, - 3468, 3468, 3468, 3969, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3972, 3972, 3972, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3950, 3951, 3468, - - 3468, 3468, 3468, 3468, 3468, 3955, 3956, 3957, 3957, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3960, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3961, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3963, 3468, 3468, 3965, 3468, 3468, 3468, 3468, - 3468, 3968, 3968, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3968, 3968, 3468, 3468, 3468, 3468, 3969, 3468, 3468, 3468, - 3468, 3468, 3468, 3972, 3468, 3468, 3972, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3950, - - 3951, 3468, 3468, 3468, 3468, 3468, 3468, 3956, 3957, 3957, - 3957, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3961, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3963, 3468, 3468, 3468, 3965, 3468, 3468, 3468, 3968, - 3968, 3468, 3468, 3468, 3468, 3468, 3468, 3968, 3968, 3468, - 3468, 3468, 3468, 3969, 3972, 3468, 3468, 3468, 3972, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3951, 3468, 3468, 3468, 3468, - - 3956, 3957, 3957, 3957, 3975, 3976, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3961, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3965, 3968, - 3968, 3468, 3468, 3968, 3468, 3468, 3468, 3468, 3969, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3951, 3468, 3468, 3468, 3468, - 3956, 3957, 3977, 3978, 3975, 3976, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3965, 3968, - - 3968, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3969, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3956, 3977, 3957, 3979, 3978, 3980, 3957, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3965, 3968, 3968, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3969, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3956, 3979, 3468, - 3980, 3957, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3956, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3956, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3956, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3956, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3956, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3956, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3956, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3956, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3956, 3956, 3468, 3468, 3468, 3468, 3468, 3468, - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3956, 3956, 3956, 3956, 3956, 3956, 3468, 0, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468 + 3503, 3503, 3504, 3504, 3504, 3504, 3505, 3505, 3506, 3506, + 3507, 3507, 3508, 3508, 3508, 3508, 3509, 3509, 3503, 3503, + 3510, 3510, 3511, 3511, 3511, 3511, 3503, 3503, 3511, 3511, + 3511, 3511, 3503, 3503, 3511, 3511, 3503, 3503, 3511, 3511, + 3511, 3511, 3512, 3512, 3513, 3513, 3503, 3503, 3513, 3513, + 3513, 3513, 3514, 3514, 3508, 3508, 3515, 3515, 3516, 3516, + 3517, 3517, 3518, 3518, 3519, 3519, 3520, 3520, 3520, 3520, + 3503, 3503, 3520, 3520, 3520, 3520, 3503, 3503, 3520, 3520, + 3520, 3520, 3503, 3503, 3520, 3520, 3503, 3503, 3520, 3520, + 3520, 3520, 3503, 3503, 3520, 3520, 3503, 3503, 3520, 3520, + + 3520, 3520, 3521, 3521, 3522, 3522, 3503, 3503, 3522, 3522, + 3522, 3522, 3523, 3523, 3524, 3524, 3525, 3525, 3526, 3526, + 3527, 3527, 3528, 3528, 3503, 3503, 3528, 3528, 3528, 3528, + 3529, 3529, 3530, 3530, 3503, 3503, 3530, 3530, 3530, 3530, + 3531, 3531, 3532, 3532, 3533, 3533, 3534, 3534, 3502, 149, + 3535, 3535, 3503, 3503, 3535, 3535, 3535, 3535, 3536, 3536, + 3537, 3537, 3538, 3538, 3539, 3539, 3540, 3540, 3541, 3541, + 3542, 3542, 3543, 3543, 3544, 3544, 3545, 3545, 3503, 3503, + 3545, 3545, 3545, 3545, 3546, 3546, 3547, 3547, 3503, 3503, + 3547, 3547, 3547, 3547, 3548, 3548, 3549, 3549, 3503, 3503, + + 3549, 3549, 3549, 3549, 3550, 3550, 3551, 3551, 3552, 3552, + 3553, 3553, 3503, 3503, 3553, 3553, 3553, 3553, 3554, 3554, + 3555, 3555, 3503, 3503, 3555, 3555, 3555, 3555, 3556, 3556, + 3557, 3557, 3503, 3503, 3557, 3557, 3557, 3557, 3558, 3558, + 3559, 3559, 3560, 3560, 3561, 3561, 3503, 3503, 3561, 3561, + 3561, 3561, 3562, 3562, 3563, 3563, 3564, 3564, 3565, 3565, + 3503, 3503, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3566, 3502, 3502, 3566, 3502, 3502, 3502, + + 300, 300, 302, 300, 303, 303, 3502, 3502, 3502, 3567, + 3502, 3502, 3567, 3502, 3502, 304, 303, 3502, 3502, 3502, + 3568, 3502, 3502, 3568, 3568, 3568, 3502, 3502, 3502, 3502, + 3502, 3569, 3502, 3502, 3569, 3569, 3569, 3569, 3569, 3502, + 3502, 3502, 3502, 3502, 3502, 3570, 3502, 3502, 3570, 3570, + 3570, 3502, 3502, 3502, 3502, 3502, 3502, 3571, 3502, 3502, + 3571, 3571, 3502, 3502, 3502, 365, 303, 303, 304, 369, + 368, 368, 368, 368, 369, 375, 373, 373, 3502, 3502, + 3502, 3572, 3502, 3502, 3572, 3572, 3572, 3572, 3502, 3502, + 303, 303, 303, 3502, 3502, 3502, 3573, 3502, 3502, 3573, + + 3573, 3502, 3502, 3502, 3502, 3502, 3502, 3574, 3502, 3502, + 3574, 3574, 3502, 3502, 3502, 3502, 3502, 3502, 3575, 3502, + 3502, 3575, 3575, 3575, 3575, 3575, 3502, 3502, 392, 392, + 303, 3502, 3502, 3502, 3576, 3502, 3502, 3576, 3576, 3576, + 3576, 3502, 3502, 303, 303, 3502, 3502, 3502, 3577, 3502, + 3502, 3577, 3502, 3502, 3502, 3502, 3502, 3502, 3578, 3502, + 3502, 3578, 3578, 3578, 3502, 3502, 3502, 3502, 3502, 3502, + 3579, 3502, 3502, 3579, 3579, 3579, 3579, 3579, 3579, 3579, + 3579, 3579, 3502, 3502, 303, 303, 3502, 3502, 3502, 3580, + 3502, 3502, 3580, 3580, 3580, 3580, 3580, 3580, 3502, 3502, + + 3502, 3502, 3502, 3502, 3581, 3502, 3502, 3581, 3581, 3581, + 3581, 3581, 3581, 3581, 3502, 3502, 3502, 3502, 3502, 3502, + 3582, 3502, 3502, 3582, 3582, 3502, 3502, 3502, 3502, 3502, + 3502, 3583, 3502, 3502, 3583, 3583, 3583, 3502, 3502, 3502, + 3502, 3502, 3502, 3584, 3502, 3502, 3584, 3584, 3584, 3584, + 3502, 3502, 303, 303, 3502, 3502, 3502, 3585, 3502, 3502, + 3585, 3585, 3502, 3502, 303, 373, 373, 3502, 3502, 3502, + 3586, 3502, 3502, 3586, 3586, 3586, 3502, 3502, 373, 373, + 3502, 3502, 3502, 3587, 3502, 3502, 3587, 3587, 3502, 3502, + 3502, 3502, 3502, 3502, 3588, 3502, 3502, 3588, 3588, 3502, + + 3502, 373, 373, 3502, 3502, 3502, 3589, 3502, 3502, 3589, + 3589, 3589, 3502, 3502, 373, 373, 3502, 3502, 3502, 3590, + 3502, 3502, 3590, 3590, 3590, 3590, 3590, 3502, 3502, 303, + 392, 303, 3502, 3502, 3502, 3591, 3502, 3502, 3591, 3502, + 3502, 3502, 3502, 3502, 3502, 3592, 3502, 3502, 3592, 3502, + 3502, 303, 303, 3502, 3502, 3502, 3593, 3502, 3502, 3593, + 3593, 3502, 3502, 3502, 3502, 3502, 3502, 3594, 3502, 3502, + 3594, 3594, 3502, 3502, 3502, 3502, 3595, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3596, 3596, 3597, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3598, + 3598, 3599, 3502, 3600, 3600, 3600, 3600, 3502, 3601, 3502, + 3502, 3602, 3602, 3602, 3602, 3602, 3602, 3602, 3602, 3602, + 3603, 3502, 3604, 3604, 3604, 3604, 3605, 3502, 3606, 3606, + 3606, 3607, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3608, 3608, 3608, 3608, 3608, 3609, 3502, 3502, 3610, + 3610, 3610, 3611, 3502, 3612, 3612, 3612, 3613, 3502, 3614, + 3614, 3614, 3614, 3614, 3614, 3614, 3615, 3502, 3502, 3616, + + 3616, 3616, 3616, 3616, 3617, 3502, 3618, 3618, 3619, 3502, + 3620, 3620, 3620, 3620, 3621, 3502, 3622, 3622, 3622, 3622, + 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622, 3622, + 3622, 3622, 3622, 3623, 3502, 3624, 3624, 3624, 3624, 3624, + 3624, 3624, 3624, 3625, 3502, 3626, 3626, 3626, 3626, 3626, + 3626, 3626, 3626, 3627, 3502, 3628, 3628, 3628, 3629, 3502, + 3630, 3630, 3630, 3630, 3631, 3502, 3632, 3632, 3632, 3632, + 3632, 3632, 3633, 3502, 3634, 3634, 3634, 3634, 3635, 3502, + 3502, 3636, 3636, 3636, 3636, 3636, 3637, 3502, 3638, 3638, + 3638, 3639, 3502, 3640, 3640, 3640, 3641, 3502, 3642, 3642, + + 3642, 3642, 3643, 3502, 3644, 3644, 3644, 3644, 3644, 3644, + 3645, 3502, 3502, 3646, 3646, 3647, 3502, 3648, 3648, 3649, + 3502, 3650, 3650, 3650, 3651, 3502, 3652, 3652, 3652, 3653, + 3654, 3502, 3654, 3502, 3502, 3502, 3655, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3656, 3657, 3657, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3658, 3659, 3659, 3660, + 3502, 3502, 3660, 3502, 3661, 3661, 3502, 3662, 3502, 3502, + 3662, 3662, 3662, 3662, 3662, 3662, 3663, 3663, 3664, 3664, + + 3664, 3665, 3665, 3502, 3502, 3666, 3667, 3667, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3668, 3502, 3502, 3668, 3668, 3669, 3669, 3502, + 3670, 3670, 3671, 3671, 3672, 3672, 3673, 3673, 3674, 3674, + 3674, 3502, 3502, 3674, 3674, 3674, 3675, 3675, 3502, 3502, + 3676, 3676, 3502, 3502, 3676, 3677, 3677, 3678, 3679, 3679, + 3680, 3502, 3502, 3502, 3502, 3681, 3681, 3682, 3682, 3502, + 3502, 3682, 3502, 3502, 3682, 3682, 3682, 3682, 3682, 3682, + 3682, 3682, 3682, 3682, 3682, 3683, 3683, 3502, 3502, 3502, + 3502, 3684, 3684, 3684, 3684, 3684, 3685, 3685, 3686, 3686, + + 3686, 3502, 3502, 3686, 3686, 3686, 3687, 3687, 3688, 3502, + 3502, 3689, 3689, 3690, 3502, 3502, 3690, 3691, 3691, 3692, + 3502, 3502, 3692, 3692, 3692, 3693, 3693, 3694, 3694, 3694, + 3695, 3695, 3502, 3696, 3696, 3696, 3696, 3697, 3697, 3698, + 3502, 3502, 3699, 3699, 3700, 3700, 3701, 3701, 3702, 3702, + 3702, 3703, 3703, 3704, 3704, 3704, 3704, 3704, 3705, 3705, + 3502, 3706, 3707, 3707, 3502, 3502, 3708, 3708, 3502, 3502, + 3709, 3710, 3710, 3502, 3502, 3711, 3712, 3712, 3713, 3502, + 3502, 3713, 3502, 3502, 3714, 3502, 3502, 3502, 3502, 3502, + 3502, 3715, 3502, 3716, 3502, 3716, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3717, 3502, 3718, + 3502, 3718, 3719, 3502, 3502, 3502, 3719, 3502, 3502, 3720, + 3502, 3720, 3721, 3502, 3502, 3502, 3502, 3502, 3721, 3502, + 3502, 3721, 3721, 3721, 3502, 3722, 3502, 3722, 3723, 3723, + 3723, 3502, 3724, 3502, 3724, 3502, 3502, 3502, 3725, 3502, + 3726, 3502, 3726, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3727, 3502, 3502, 3502, + 3727, 3727, 3502, 3728, 3502, 3728, 3502, 3729, 3729, 3502, + + 3730, 3502, 3730, 3731, 3731, 3502, 3732, 3502, 3732, 3733, + 3733, 3733, 3502, 3502, 3502, 3733, 3733, 3733, 3502, 3734, + 3502, 3734, 3502, 3502, 3735, 3735, 3502, 3502, 3502, 3735, + 3502, 3736, 3502, 3736, 3737, 3502, 3738, 3502, 3738, 3739, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3740, 3502, 3740, + 3741, 3741, 3741, 3741, 3502, 3502, 3502, 3741, 3502, 3502, + 3502, 3502, 3502, 3741, 3741, 3741, 3741, 3741, 3741, 3741, + 3741, 3741, 3741, 3502, 3742, 3502, 3742, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3743, 3743, 3743, 3743, 3502, + 3744, 3502, 3744, 3745, 3745, 3745, 3745, 3502, 3502, 3502, + + 3502, 3502, 3745, 3745, 3502, 3746, 3502, 3746, 3747, 3502, + 3502, 3502, 3502, 3748, 3502, 3748, 3749, 3502, 3502, 3502, + 3749, 3502, 3750, 3502, 3750, 3751, 3502, 3502, 3502, 3751, + 3751, 3751, 3502, 3752, 3502, 3752, 3502, 3502, 3502, 3502, + 3753, 3502, 3754, 3502, 3754, 3502, 3502, 3502, 3755, 3755, + 3502, 3502, 3755, 3502, 3756, 3502, 3756, 3757, 3502, 3502, + 3502, 3502, 3758, 3502, 3758, 3502, 3502, 3502, 3502, 3502, + 3759, 3502, 3759, 3502, 3502, 3760, 3760, 3502, 3502, 3502, + 3761, 3502, 3761, 3762, 3762, 3762, 3762, 3762, 3502, 3763, + 3502, 3763, 3502, 3764, 3502, 3765, 3502, 3765, 3502, 3502, + + 3502, 3502, 3766, 3502, 3766, 3502, 3502, 3502, 3767, 3502, + 3768, 3502, 3768, 3502, 3502, 3502, 3769, 3502, 3770, 3502, + 3770, 3771, 3772, 3502, 3502, 3502, 3502, 3502, 3773, 3774, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3775, 3502, 3502, 3776, 3502, 3777, 3778, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3778, 3502, 3502, + 3778, 3779, 3780, 3502, 3502, 3780, 3781, 3782, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3783, 3783, 3502, 3502, 3784, 3502, 3502, + 3502, 3785, 3786, 3502, 3502, 3787, 3788, 3789, 3789, 3502, + 3502, 3789, 3789, 3789, 3790, 3502, 3502, 3791, 3791, 3791, + 3792, 3502, 3502, 3793, 3502, 3502, 3794, 3795, 3795, 3795, + 3795, 3502, 3502, 3502, 3502, 3502, 3795, 3795, 3795, 3795, + 3795, 3795, 3795, 3795, 3795, 3795, 3795, 3796, 3502, 3502, + 3502, 3797, 3797, 3797, 3797, 3798, 3799, 3799, 3799, 3799, + 3502, 3502, 3502, 3799, 3799, 3800, 3801, 3802, 3803, 3803, + 3804, 3805, 3805, 3805, 3805, 3806, 3502, 3502, 3502, 3502, + 3502, 3502, 3807, 3808, 3502, 3502, 3502, 3502, 3809, 3809, + + 3502, 3502, 3502, 3809, 3810, 3811, 3812, 3502, 3502, 3502, + 3502, 3502, 3502, 3813, 3502, 3502, 3502, 3814, 3814, 3502, + 3502, 3502, 3815, 3816, 3502, 3502, 3816, 3816, 3816, 3817, + 3502, 3818, 3819, 3820, 3821, 3822, 3823, 3824, 3825, 3826, + 3826, 3502, 3826, 3502, 3502, 3502, 3827, 3828, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3829, 3502, 3502, 3502, 3830, 3502, 3831, 3832, + 3502, 3502, 3502, 3832, 3502, 3502, 3502, 3832, 3833, 3834, + + 3502, 3502, 3502, 3502, 3502, 3835, 3836, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3837, 3502, 3502, 3502, 3502, 3502, 3838, 3502, 3502, 3502, + 3502, 3839, 3840, 3502, 3502, 3502, 3841, 3842, 3843, 3843, + 3502, 3502, 3502, 3502, 3502, 3843, 3502, 3502, 3843, 3844, + 3502, 3502, 3845, 3845, 3845, 3846, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3847, 3848, 3502, 3502, 3848, 3848, + 3502, 3502, 3502, 3848, 3848, 3502, 3502, 3848, 3848, 3848, + 3848, 3848, 3848, 3848, 3848, 3849, 3502, 3502, 3850, 3850, + 3850, 3851, 3852, 3502, 3502, 3852, 3852, 3502, 3502, 3852, + + 3853, 3854, 3855, 3856, 3856, 3857, 3858, 3858, 3858, 3502, + 3502, 3858, 3859, 3860, 3861, 3502, 3862, 3862, 3862, 3863, + 3864, 3865, 3866, 3867, 3867, 3868, 3869, 3502, 3502, 3502, + 3869, 3869, 3869, 3870, 3502, 3502, 3502, 3871, 3872, 3502, + 3502, 3873, 3502, 3502, 3874, 3875, 3876, 3876, 3502, 3502, + 3877, 3878, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3879, 3880, 3502, 3881, 3882, 3882, 3882, 3883, 3884, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3885, 3886, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3887, 3502, 3502, 3502, 3888, 3502, 3889, 3890, + 3502, 3502, 3891, 3892, 3892, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3892, 3502, 3502, 3502, 3502, 3502, 3502, + 3893, 3502, 3502, 3894, 3895, 3896, 3502, 3502, 3502, 3502, + 3502, 3896, 3896, 3896, 3502, 3502, 3502, 3502, 3502, 3896, + 3896, 3896, 3896, 3502, 3502, 3896, 3896, 3897, 3502, 3502, + 3502, 3502, 3502, 3898, 3502, 3502, 3899, 3900, 3502, 3502, + 3502, 3502, 3502, 3900, 3502, 3502, 3502, 3900, 3502, 3502, + 3901, 3902, 3903, 3903, 3904, 3905, 3905, 3905, 3502, 3502, + + 3502, 3905, 3502, 3502, 3906, 3907, 3502, 3502, 3502, 3502, + 3502, 3908, 3909, 3910, 3911, 3912, 3502, 3502, 3502, 3502, + 3913, 3914, 3914, 3914, 3914, 3915, 3502, 3502, 3502, 3502, + 3916, 3917, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3918, 3919, 3920, 3920, 3502, 3502, 3502, 3921, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3922, 3923, 3502, 3502, 3502, 3924, + 3502, 3502, 3924, 3925, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3926, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3927, 3928, + 3502, 3929, 3502, 3502, 3502, 3502, 3502, 3930, 3931, 3931, + 3502, 3502, 3502, 3502, 3502, 3931, 3502, 3502, 3502, 3502, + 3502, 3502, 3932, 3502, 3502, 3502, 3933, 3934, 3935, 3502, + 3502, 3502, 3935, 3935, 3935, 3502, 3502, 3502, 3502, 3502, + 3935, 3935, 3935, 3502, 3502, 3502, 3935, 3935, 3936, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3937, 3938, 3502, + 3502, 3502, 3938, 3938, 3939, 3940, 3941, 3502, 3502, 3942, + 3943, 3502, 3502, 3943, 3943, 3502, 3502, 3943, 3944, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3945, 3946, + + 3947, 3948, 3949, 3502, 3502, 3502, 3502, 3502, 3502, 3950, + 3951, 3951, 3951, 3951, 3952, 3502, 3953, 3954, 3955, 3956, + 3957, 3957, 3502, 3502, 3502, 3502, 3958, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3959, + 3960, 3502, 3961, 3502, 3502, 3502, 3961, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3962, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3963, 3964, 3502, 3965, + 3966, 3967, 3967, 3502, 3502, 3502, 3502, 3967, 3502, 3502, + + 3502, 3502, 3968, 3969, 3970, 3971, 3971, 3971, 3971, 3502, + 3502, 3502, 3971, 3971, 3971, 3971, 3502, 3502, 3972, 3502, + 3502, 3502, 3973, 3974, 3974, 3974, 3975, 3502, 3502, 3976, + 3502, 3502, 3502, 3977, 3978, 3502, 3502, 3502, 3978, 3978, + 3502, 3502, 3502, 3502, 3978, 3979, 3502, 3980, 3981, 3982, + 3983, 3984, 3985, 3502, 3502, 3986, 3986, 3986, 3987, 3502, + 3988, 3502, 3502, 3989, 3990, 3991, 3991, 3502, 3992, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3993, 3502, 3502, 3994, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3995, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3996, 3997, 3502, 3502, 3502, 3998, 3999, + 3999, 3502, 3502, 3502, 3502, 3999, 3502, 4000, 3502, 3502, + 4001, 4002, 4002, 4002, 4002, 4002, 3502, 3502, 4002, 4002, + 4002, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 4003, 4003, + 4003, 4004, 3502, 3502, 4005, 3502, 3502, 4006, 4006, 4006, + 3502, 3502, 3502, 3502, 4006, 4007, 3502, 4008, 3502, 3502, + 3502, 3502, 3983, 3984, 3985, 3502, 3502, 3502, 3502, 3502, + 3986, 3986, 3502, 3502, 3502, 3988, 3989, 3990, 3991, 3991, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3993, + + 3502, 3502, 3502, 3994, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3995, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3996, 3997, 3502, 3502, 3502, 3502, 3502, 3502, 3999, + 3999, 3502, 3502, 3502, 3502, 4000, 4001, 4002, 4002, 4002, + 4002, 4002, 3502, 3502, 3502, 4002, 3502, 3502, 4002, 3502, + 3502, 3502, 3502, 4003, 4003, 3502, 3502, 4004, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 4006, 4006, 4006, 3502, + 3502, 3502, 3502, 4007, 4008, 3502, 3502, 3502, 3502, 3502, + 3984, 3985, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3989, 3990, 3991, 3991, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3994, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3995, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3996, 3997, 3502, 3999, + 3502, 3502, 3502, 3502, 3502, 4000, 3502, 3502, 4002, 4002, + 4002, 3502, 3502, 4002, 4002, 3502, 3502, 3502, 4002, 3502, + 3502, 3502, 3502, 3502, 3502, 4003, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 4006, 4006, 4006, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3984, + + 3985, 3502, 3502, 3502, 3502, 3502, 3502, 3989, 3990, 3991, + 3991, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3994, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3995, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3997, 3502, 3502, 3999, 3502, 3502, + 3502, 3502, 3502, 4002, 4002, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 4002, 4002, 3502, 3502, 3502, 3502, 3502, 3502, + 4003, 3502, 3502, 3502, 3502, 3502, 3502, 4006, 3502, 3502, + 4006, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3984, 3985, 3502, 3502, 3502, 3502, 3502, + 3502, 3990, 3991, 3991, 3991, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3995, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3997, 3502, 3502, 3502, 3999, + 3502, 3502, 3502, 4002, 4002, 3502, 3502, 3502, 3502, 3502, + 3502, 4002, 4002, 3502, 3502, 3502, 3502, 3502, 3502, 4003, + 4006, 3502, 3502, 3502, 4006, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3985, 3502, 3502, 3502, 3502, 3990, 3991, 3991, 3991, + 4009, 4010, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3995, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3999, 4002, 4002, 3502, 3502, 4002, + 3502, 3502, 3502, 3502, 3502, 3502, 4003, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3985, 3502, 3502, 3502, 3502, 3990, 3991, + 4011, 4012, 4009, 4010, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3999, 4002, 4002, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 4003, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3990, 4011, 3991, 4013, 4012, 4014, 3991, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3999, 4002, 4002, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 4003, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3990, + 4013, 3502, 4014, 3991, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3990, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3990, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3990, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3990, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3990, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3990, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3990, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3990, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3990, 3990, 3502, 3502, + 3502, 3502, 3502, 3502, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, + 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, + + 3502, 0, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502 } ; static yyconst flex_int16_t yy_nxt[12714] = { 0, - 3468, 266, 267, 266, 266, 267, 266, 266, 267, 266, + 3502, 266, 267, 266, 266, 267, 266, 266, 267, 266, 266, 267, 266, 271, 267, 271, 277, 268, 274, 277, - 268, 274, 3468, 269, 3468, 275, 269, 3468, 275, 272, + 268, 274, 3502, 269, 3502, 275, 269, 3502, 275, 272, 271, 267, 271, 677, 278, 280, 281, 278, 280, 281, 282, 283, 722, 282, 283, 677, 272, 287, 288, 678, 284, 280, 281, 284, 285, 680, 282, 280, 281, 711, - 285, 679, 282, 287, 288, 3468, 284, 267, 267, 267, + 285, 679, 282, 287, 288, 3502, 284, 267, 267, 267, 871, 679, 284, 267, 267, 267, 299, 267, 299, 299, 267, 299, 872, 290, 299, 267, 299, 698, 1758, 290, 752, 289, 300, 1395, 714, 300, 676, 676, 676, 1396, @@ -1750,7 +1750,7 @@ static yyconst flex_int16_t yy_nxt[12714] = 267, 299, 299, 267, 299, 301, 715, 826, 302, 680, 827, 302, 950, 291, 291, 300, 680, 680, 300, 299, 267, 299, 676, 676, 676, 679, 676, 676, 676, 676, - 676, 676, 679, 679, 3468, 303, 951, 297, 291, 292, + 676, 676, 679, 679, 3502, 303, 951, 297, 291, 292, 267, 292, 291, 291, 291, 291, 291, 291, 291, 293, 291, 291, 291, 1761, 291, 295, 291, 296, 291, 299, @@ -1771,7 +1771,7 @@ static yyconst flex_int16_t yy_nxt[12714] = 308, 267, 308, 307, 307, 307, 307, 307, 307, 307, 309, 307, 307, 307, 680, 307, 311, 307, 312, 307, 315, 267, 315, 315, 267, 315, 315, 267, 315, 1763, - 679, 887, 280, 281, 885, 716, 316, 282, 3468, 317, + 679, 887, 280, 281, 885, 716, 316, 282, 3502, 317, 715, 886, 317, 778, 307, 307, 761, 327, 717, 777, 710, 897, 313, 318, 319, 267, 319, 318, 318, 318, 318, 318, 318, 318, 320, 318, 318, 318, 1765, 318, @@ -1794,7 +1794,7 @@ static yyconst flex_int16_t yy_nxt[12714] = 364, 805, 364, 267, 364, 364, 267, 364, 367, 1771, 680, 367, 680, 680, 365, 715, 329, 329, 365, 747, 714, 368, 676, 676, 676, 335, 679, 336, 679, 679, - 3468, 337, 676, 676, 676, 805, 338, 339, 329, 330, + 3502, 337, 676, 676, 676, 805, 338, 339, 329, 330, 267, 330, 329, 329, 329, 329, 329, 329, 329, 331, 329, 329, 329, 761, 329, 333, 329, 334, 329, 364, @@ -1837,7 +1837,7 @@ static yyconst flex_int16_t yy_nxt[12714] = 379, 379, 381, 379, 379, 379, 1210, 379, 383, 379, 384, 379, 390, 267, 390, 390, 267, 390, 267, 267, 267, 1030, 267, 267, 267, 960, 770, 680, 391, 1049, - 969, 391, 761, 1050, 392, 3468, 379, 379, 392, 680, + 969, 391, 761, 1050, 392, 3502, 379, 379, 392, 680, 680, 385, 759, 679, 965, 711, 815, 386, 676, 676, 676, 387, 676, 676, 676, 679, 679, 388, 379, 380, 267, 380, 379, 379, 379, 379, 379, 379, 379, 381, @@ -2019,7 +2019,7 @@ static yyconst flex_int16_t yy_nxt[12714] = 674, 674, 267, 674, 2180, 2183, 714, 1042, 1042, 1042, 708, 1193, 1193, 1193, 675, 2187, 1760, 675, 2188, 2191, - 3468, 2192, 555, 555, 1043, 1053, 1053, 1053, 561, 1195, + 3502, 2192, 555, 555, 1043, 1053, 1053, 1053, 561, 1195, 711, 2193, 1313, 1313, 1313, 2196, 1314, 2200, 711, 1315, 2201, 2204, 1054, 562, 555, 556, 267, 556, 555, 555, 555, 555, 555, 555, 555, 557, 555, 555, 555, 712, @@ -2103,17 +2103,17 @@ static yyconst flex_int16_t yy_nxt[12714] = 627, 633, 634, 267, 634, 633, 633, 633, 633, 633, 633, 633, 635, 633, 633, 633, 2476, 633, 637, 633, 638, 633, 1742, 2479, 1377, 1090, 1090, 1090, 1384, 1384, - 1384, 1767, 1767, 1767, 2466, 3468, 3468, 3468, 3468, 3468, - 3468, 2480, 1091, 2481, 2484, 1385, 633, 633, 3468, 3468, + 1384, 1767, 1767, 1767, 2466, 3502, 3502, 3502, 3502, 3502, + 3502, 2480, 1091, 2481, 2484, 1385, 633, 633, 3502, 3502, - 3468, 2488, 3468, 2489, 2490, 3468, 1398, 1398, 1398, 2491, - 1399, 2492, 2493, 1400, 2494, 3468, 1969, 1969, 1969, 2467, + 3502, 2488, 3502, 2489, 2490, 3502, 1398, 1398, 1398, 2491, + 1399, 2492, 2493, 1400, 2494, 3502, 1969, 1969, 1969, 2467, 639, 633, 634, 267, 634, 633, 633, 633, 633, 633, 633, 633, 635, 633, 633, 633, 1386, 633, 637, 633, 638, 633, 2495, 1388, 1390, 1390, 1390, 1102, 1102, 1102, - 1387, 1777, 1777, 1777, 3468, 3468, 3468, 1401, 1401, 1401, + 1387, 1777, 1777, 1777, 3502, 3502, 3502, 1401, 1401, 1401, 2496, 2497, 1392, 2510, 1103, 2511, 633, 633, 1390, 1390, - 1390, 3468, 2512, 2513, 1402, 1410, 1410, 1410, 2514, 1411, + 1390, 3502, 2512, 2513, 1402, 1410, 1410, 1410, 2514, 1411, 1970, 2516, 1412, 1972, 1972, 1972, 1392, 1811, 1811, 1811, 639, 643, 644, 267, 644, 643, 643, 643, 643, 643, @@ -2133,21 +2133,21 @@ static yyconst flex_int16_t yy_nxt[12714] = 2563, 654, 658, 654, 659, 654, 1422, 1422, 1422, 1121, 1121, 1121, 2564, 2566, 1433, 1433, 1433, 1437, 1437, 1437, 2568, 1433, 1433, 1433, 1424, 2593, 1122, 1439, 1439, 1439, - 654, 654, 1435, 2594, 1438, 3468, 3468, 3468, 1742, 1435, + 654, 654, 1435, 2594, 1438, 3502, 3502, 3502, 1742, 1435, 2596, 660, 2597, 2598, 1440, 2599, 1742, 1980, 1980, 1980, - 2600, 2604, 3468, 1425, 661, 654, 655, 267, 655, 654, + 2600, 2604, 3502, 1425, 661, 654, 655, 267, 655, 654, 654, 654, 654, 654, 654, 654, 656, 654, 654, 654, 2589, 654, 658, 654, 659, 654, 1436, 1442, 1442, 1442, 1447, 1447, 1447, 2590, 2605, 1442, 1442, 1442, 2606, 2607, - 3468, 3468, 3468, 1981, 1441, 1444, 2608, 1448, 2609, 2610, - 654, 654, 2611, 1444, 1451, 1451, 1451, 3468, 1459, 1459, + 3502, 3502, 3502, 1981, 1441, 1444, 2608, 1448, 2609, 2610, + 654, 654, 2611, 1444, 1451, 1451, 1451, 3502, 1459, 1459, 1459, 660, 1460, 2612, 2613, 1461, 1499, 1499, 1499, 2614, 1500, 1452, 2616, 1501, 661, 665, 666, 267, 666, 665, 665, 665, 665, 665, 665, 665, 667, 665, 665, 665, 1449, 665, 669, 665, 670, 665, 1445, 1454, 1454, 1454, - 2617, 3468, 3468, 3468, 2620, 1450, 1454, 1454, 1454, 1141, - 1141, 1141, 1462, 1462, 1462, 1456, 2618, 2621, 3468, 2622, + 2617, 3502, 3502, 3502, 2620, 1450, 1454, 1454, 1454, 1141, + 1141, 1141, 1462, 1462, 1462, 1456, 2618, 2621, 3502, 2622, 665, 665, 2623, 2626, 1456, 2619, 1142, 1814, 1814, 1814, 1464, 671, 1506, 1506, 1506, 2627, 1507, 2628, 2629, 1508, @@ -2157,9 +2157,9 @@ static yyconst flex_int16_t yy_nxt[12714] = 1466, 1466, 1468, 1468, 1468, 1470, 1470, 1470, 1470, 1470, 1470, 1474, 1474, 1474, 1464, 2624, 1467, 2631, 2632, 1469, 665, 665, 2634, 1472, 2625, 2640, 1472, 2641, 1475, 2642, - 2643, 671, 2646, 3468, 3468, 3468, 1478, 1478, 1478, 1480, + 2643, 671, 2646, 3502, 3502, 3502, 1478, 1478, 1478, 1480, 1480, 1480, 2648, 2649, 672, 680, 1480, 1480, 1480, 2650, - 3468, 1465, 695, 1479, 1489, 1489, 1489, 1482, 1489, 1489, + 3502, 1465, 695, 1479, 1489, 1489, 1489, 1482, 1489, 1489, 1489, 679, 696, 2651, 1482, 2652, 1495, 1495, 1495, 1495, 1495, 1495, 1491, 1514, 1514, 1514, 1491, 1515, 2656, 1473, @@ -2179,9 +2179,9 @@ static yyconst flex_int16_t yy_nxt[12714] = 2715, 1195, 2724, 2716, 1195, 1561, 1561, 1561, 1229, 1229, 1229, 2725, 1513, 1231, 1229, 1229, 1229, 1564, 1564, 1564, 2726, 2727, 1562, 1234, 1234, 1234, 1231, 1235, 2728, 2729, - 1236, 2730, 1231, 1530, 1565, 2732, 2733, 1521, 3468, 3468, - 3468, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, - 1244, 1244, 1244, 2734, 1245, 3468, 2735, 1246, 2736, 1241, + 1236, 2730, 1231, 1530, 1565, 2732, 2733, 1521, 3502, 3502, + 3502, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, 1239, + 1244, 1244, 1244, 2734, 1245, 3502, 2735, 1246, 2736, 1241, 2737, 2738, 1241, 1563, 2717, 1241, 1247, 1247, 1247, 1570, 1570, 1570, 2739, 1571, 2718, 2740, 1572, 2719, 1573, 1573, @@ -2191,508 +2191,508 @@ static yyconst flex_int16_t yy_nxt[12714] = 1255, 1255, 1255, 1255, 1584, 1584, 1584, 2756, 2759, 1580, 1262, 1262, 1262, 1257, 2760, 2761, 1257, 2764, 2765, 1257, 2769, 1585, 1262, 1262, 1262, 1262, 1262, 1262, 1264, 1266, - 1266, 1266, 2770, 1267, 2771, 2772, 1268, 1270, 1270, 1270, - 1264, 2773, 2774, 1264, 1270, 1270, 1270, 1589, 1589, 1589, - - 1288, 1288, 1288, 2782, 1289, 1272, 2783, 1290, 1606, 1606, - 1606, 1582, 1272, 2784, 2810, 1590, 1293, 1293, 1293, 1293, - 1293, 1293, 1587, 2812, 1180, 1607, 1293, 1293, 1293, 1610, - 1610, 1610, 2813, 2814, 1295, 2818, 2819, 1295, 3468, 3468, - 3468, 1300, 1300, 1300, 1295, 2822, 1611, 1300, 1300, 1300, - 1300, 1300, 1300, 2807, 2820, 3468, 1614, 1614, 1614, 1302, - 3468, 3468, 3468, 2823, 2826, 1302, 2827, 2821, 1302, 1620, - 1620, 1620, 1742, 1615, 1306, 1306, 1306, 3468, 1306, 1306, + 1266, 1266, 2772, 1267, 2775, 2776, 1268, 1270, 1270, 1270, + 1264, 2784, 2770, 1264, 1270, 1270, 1270, 1589, 1589, 1589, + + 1288, 1288, 1288, 2771, 1289, 1272, 2785, 1290, 1606, 1606, + 1606, 1582, 1272, 2773, 2786, 1590, 1293, 1293, 1293, 1293, + 1293, 1293, 1587, 2812, 2774, 1607, 1293, 1293, 1293, 1610, + 1610, 1610, 2814, 2815, 1295, 1180, 2816, 1295, 3502, 3502, + 3502, 1300, 1300, 1300, 1295, 2820, 1611, 1300, 1300, 1300, + 1300, 1300, 1300, 2821, 2822, 3502, 1614, 1614, 1614, 1302, + 3502, 3502, 3502, 2824, 2809, 1302, 2825, 2823, 1302, 1620, + 1620, 1620, 1742, 1615, 1306, 1306, 1306, 3502, 1306, 1306, 1306, 1306, 1306, 1306, 2828, 1612, 1621, 1608, 1616, 1319, 1319, 1319, 1308, 1313, 1313, 1313, 1308, 1314, 1742, 1308, 1315, 1319, 1319, 1319, 1319, 1319, 1319, 1321, 1327, 1327, - 1327, 2829, 1328, 2830, 2808, 1329, 2831, 1613, 2832, 1321, - 2833, 2834, 1321, 1331, 1331, 1331, 1331, 1331, 1331, 2792, - 1331, 1331, 1331, 1632, 1632, 1632, 1336, 1336, 1336, 2793, - 2809, 1333, 2836, 2837, 1333, 2794, 2838, 1617, 1333, 2824, + 1327, 2829, 1328, 2830, 2810, 1329, 2831, 1613, 2832, 1321, + 2833, 2834, 1321, 1331, 1331, 1331, 1331, 1331, 1331, 2794, + 1331, 1331, 1331, 1632, 1632, 1632, 1336, 1336, 1336, 2795, + 2811, 1333, 2835, 2836, 1333, 2796, 2838, 1617, 1333, 2826, 1633, 1635, 1635, 1635, 1338, 1336, 1336, 1336, 1336, 1336, - 1336, 2839, 2825, 1341, 1341, 1341, 2840, 1342, 1636, 1625, + 1336, 2839, 2827, 1341, 1341, 1341, 2840, 1342, 1636, 1625, 1343, 2841, 2842, 1338, 2843, 2844, 1338, 1344, 1344, 1344, 2845, 1345, 2846, 2847, 1346, 1347, 1347, 1347, 1347, 1347, 1347, 1631, 1347, 1347, 1347, 1355, 1355, 1355, 2848, 1356, - 2850, 2862, 1357, 1349, 2863, 2871, 1349, 1642, 1642, 1642, - 1349, 1359, 1359, 1359, 2872, 1360, 2873, 2874, 1361, 1362, + 2849, 2850, 1357, 1349, 2852, 2864, 1349, 1642, 1642, 1642, + 1349, 1359, 1359, 1359, 2865, 1360, 2873, 2874, 1361, 1362, 1362, 1362, 2875, 2876, 1643, 1634, 1644, 1644, 1644, 2877, - 1645, 2884, 2887, 1646, 2894, 2895, 1363, 1374, 1374, 1374, - 1374, 1374, 1374, 1374, 1374, 1374, 1378, 1378, 1378, 2795, - 1379, 2896, 2897, 1380, 2898, 1376, 2899, 1637, 1376, 2796, - 2912, 1376, 1381, 1381, 1381, 2797, 1382, 2914, 2915, 1383, - 1384, 1384, 1384, 1659, 1659, 1659, 2916, 1660, 2917, 2918, + 1645, 2878, 2879, 1646, 2880, 2881, 1363, 1374, 1374, 1374, + 1374, 1374, 1374, 1374, 1374, 1374, 1378, 1378, 1378, 2797, + 1379, 2888, 2891, 1380, 2898, 1376, 2899, 1637, 1376, 2798, + 2900, 1376, 1381, 1381, 1381, 2799, 1382, 2901, 2902, 1383, + 1384, 1384, 1384, 1659, 1659, 1659, 2903, 1660, 2916, 2918, 1661, 1390, 1390, 1390, 1390, 1390, 1390, 1385, 1390, 1390, 1390, 1398, 1398, 1398, 2919, 1399, 2920, 2921, 1400, 1392, - 2902, 2922, 1392, 1401, 1401, 1401, 1392, 1671, 1671, 1671, - 1658, 1672, 1180, 2903, 1673, 1405, 1405, 1405, 2923, 2904, + 2906, 2922, 1392, 1401, 1401, 1401, 1392, 1671, 1671, 1671, + 1658, 1672, 1180, 2907, 1673, 1405, 1405, 1405, 2923, 2908, 1402, 1405, 1405, 1405, 1405, 1405, 1405, 1410, 1410, 1410, - 1742, 1411, 2905, 1407, 1412, 2926, 1666, 2927, 2928, 1407, - 2929, 2930, 1407, 1413, 1413, 1413, 1413, 1413, 1413, 1413, + 1742, 1411, 2909, 1407, 1412, 2924, 1666, 2925, 2926, 1407, + 2927, 2930, 1407, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1418, 1418, 1418, 2931, 1419, 2932, 2933, 1420, - 2908, 1415, 2935, 2936, 1415, 2909, 2937, 1415, 1422, 1422, - 1422, 1422, 1422, 1422, 2938, 1676, 1422, 1422, 1422, 2939, + 2912, 1415, 2934, 2935, 1415, 2913, 2936, 1415, 1422, 1422, + 1422, 1422, 1422, 1422, 2937, 1676, 1422, 1422, 1422, 2939, 1427, 1427, 1427, 2940, 1428, 2941, 1424, 1429, 2942, 1424, 1433, 1433, 1433, 2943, 1424, 1433, 1433, 1433, 2944, 1433, 1433, 1433, 1437, 1437, 1437, 1687, 1687, 1687, 1435, 1688, - 2945, 2946, 1689, 1435, 2947, 2956, 1678, 1435, 2960, 1438, - 1439, 1439, 1439, 2961, 2968, 1681, 1690, 1690, 1690, 2969, - 1691, 2970, 2971, 1692, 1442, 1442, 1442, 1440, 1442, 1442, + 2945, 2946, 1689, 1435, 2947, 2948, 1678, 1435, 2949, 1438, + 1439, 1439, 1439, 2950, 2951, 1681, 1690, 1690, 1690, 2960, + 1691, 2964, 2965, 1692, 1442, 1442, 1442, 1440, 1442, 1442, 1442, 2972, 1442, 1442, 1442, 1447, 1447, 1447, 2973, 1451, 1451, 1451, 1444, 1964, 1964, 1964, 1444, 2974, 2975, 1686, - 1444, 2979, 1448, 1696, 1696, 1696, 1452, 1697, 2988, 2989, - 1698, 1701, 1701, 1701, 2990, 1702, 2991, 2992, 1703, 1454, + 1444, 2976, 1448, 1696, 1696, 1696, 1452, 1697, 2977, 2978, + 1698, 1701, 1701, 1701, 2979, 1702, 2980, 2981, 1703, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1454, 1459, 1459, - 1459, 2980, 1460, 2993, 2997, 1461, 2998, 1456, 2982, 2999, + 1459, 2985, 1460, 2994, 2995, 1461, 2996, 1456, 2986, 2997, - 1456, 2981, 3000, 1456, 1462, 1462, 1462, 3010, 2983, 1694, + 1456, 2998, 2999, 1456, 1462, 1462, 1462, 3003, 2987, 1694, 1462, 1462, 1462, 1462, 1462, 1462, 1466, 1466, 1466, 1708, - 1708, 1708, 1464, 1709, 3011, 3012, 1710, 3013, 1464, 3014, - 2984, 1464, 2986, 1467, 1468, 1468, 1468, 1711, 1711, 1711, - 2985, 1712, 2987, 3015, 1713, 1470, 1470, 1470, 3016, 1705, - 3017, 1469, 1470, 1470, 1470, 3021, 1470, 1470, 1470, 1474, - 1474, 1474, 3022, 1472, 1715, 1715, 1715, 3023, 1716, 3024, - 1472, 1717, 3025, 1707, 1472, 3026, 1475, 1478, 1478, 1478, - 1720, 1720, 1720, 1180, 1721, 3028, 3029, 1722, 1480, 1480, + 1708, 1708, 1464, 1709, 3004, 3005, 1710, 3006, 1464, 3016, + 2988, 1464, 2990, 1467, 1468, 1468, 1468, 1711, 1711, 1711, + 2989, 1712, 2991, 3017, 1713, 1470, 1470, 1470, 3018, 1705, + 3019, 1469, 1470, 1470, 1470, 3020, 1470, 1470, 1470, 1474, + 1474, 1474, 2992, 1472, 1715, 1715, 1715, 3021, 1716, 3022, + 1472, 1717, 2993, 1707, 1472, 3023, 1475, 1478, 1478, 1478, + 1720, 1720, 1720, 1180, 1721, 3027, 3028, 1722, 1480, 1480, 1480, 1480, 1480, 1480, 1479, 1480, 1480, 1480, 1725, 1725, - 1725, 1489, 1489, 1489, 3030, 3031, 1482, 3032, 3033, 1482, - 1489, 1489, 1489, 1482, 3034, 1726, 3035, 3001, 1714, 1491, - 1489, 1489, 1489, 1495, 1495, 1495, 3039, 3040, 1491, 1495, + 1725, 1489, 1489, 1489, 3029, 3030, 1482, 3031, 3032, 1482, + 1489, 1489, 1489, 1482, 3034, 1726, 3035, 3007, 1714, 1491, + 1489, 1489, 1489, 1495, 1495, 1495, 3036, 3037, 1491, 1495, 1495, 1495, 1495, 1495, 1495, 1499, 1499, 1499, 1491, 1500, - 3041, 1497, 1501, 1502, 1502, 1502, 3044, 1497, 3045, 3046, + 3038, 1497, 1501, 1502, 1502, 1502, 3039, 1497, 3040, 3041, 1497, 1502, 1502, 1502, 1502, 1502, 1502, 1723, 1506, 1506, - 1506, 1504, 1507, 3047, 3048, 1508, 1510, 1510, 1510, 1504, - 3049, 3054, 1504, 1510, 1510, 1510, 1510, 1510, 1510, 3055, - 3056, 1730, 3057, 3058, 1512, 1733, 1514, 1514, 1514, 3059, - 1515, 1512, 3060, 1516, 1512, 1518, 1518, 1518, 1518, 1518, + 1506, 1504, 1507, 3045, 3046, 1508, 1510, 1510, 1510, 1504, + 3047, 3050, 1504, 1510, 1510, 1510, 1510, 1510, 1510, 3051, + 3052, 1730, 3053, 3054, 1512, 1733, 1514, 1514, 1514, 3055, + 1515, 1512, 3056, 1516, 1512, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1518, 1741, 1741, 1741, 1193, 1193, 1193, - 1561, 1561, 1561, 1520, 1734, 3061, 1520, 3062, 3063, 1520, - 3064, 3065, 1742, 1743, 3067, 1195, 3068, 1562, 1780, 1780, - 1780, 3069, 1781, 3070, 1180, 1782, 3077, 1736, 1229, 1229, - 1229, 1564, 1564, 1564, 3078, 1784, 1784, 1784, 3079, 1785, - 3080, 1738, 1786, 1239, 1239, 1239, 1231, 3081, 1565, 1570, - 1570, 1570, 3082, 1571, 3083, 3084, 1572, 1573, 1573, 1573, - 3085, 1241, 3086, 1748, 1791, 1791, 1791, 3071, 1792, 3087, - 3088, 1793, 3089, 3090, 1574, 1575, 1575, 1575, 3093, 1576, - 3094, 3095, 1577, 1579, 1579, 1579, 1783, 1795, 1795, 1795, - - 3096, 1796, 1789, 3097, 1797, 1255, 1255, 1255, 3098, 3099, - 1580, 1584, 1584, 1584, 1801, 1801, 1801, 3100, 1802, 3101, - 3107, 1803, 3108, 1257, 1804, 1804, 1804, 3109, 1585, 1262, + 1561, 1561, 1561, 1520, 1734, 3057, 1520, 3062, 3063, 1520, + 3064, 3065, 1742, 1743, 3066, 1195, 3067, 1562, 1780, 1780, + 1780, 3068, 1781, 3069, 3070, 1782, 3071, 1736, 1229, 1229, + 1229, 1564, 1564, 1564, 3072, 1784, 1784, 1784, 3073, 1785, + 3075, 1738, 1786, 1239, 1239, 1239, 1231, 3076, 1565, 1570, + 1570, 1570, 3077, 1571, 3078, 1180, 1572, 1573, 1573, 1573, + 3085, 1241, 3086, 1748, 1791, 1791, 1791, 3087, 1792, 3088, + 3089, 1793, 3090, 3091, 1574, 1575, 1575, 1575, 3092, 1576, + 3093, 3094, 1577, 1579, 1579, 1579, 1783, 1795, 1795, 1795, + + 3095, 1796, 1789, 3096, 1797, 1255, 1255, 1255, 3079, 3097, + 1580, 1584, 1584, 1584, 1801, 1801, 1801, 3098, 1802, 3101, + 3102, 1803, 3103, 1257, 1804, 1804, 1804, 3104, 1585, 1262, 1262, 1262, 1589, 1589, 1589, 1822, 1822, 1822, 2164, 2164, - 2164, 1805, 1606, 1606, 1606, 3116, 3117, 1264, 3118, 3119, - 1590, 3120, 1823, 3121, 3122, 1799, 1824, 1824, 1824, 1607, - 1825, 3123, 3124, 1826, 1293, 1293, 1293, 1610, 1610, 1610, - 1829, 1829, 1829, 3125, 1830, 3126, 3127, 1831, 1806, 1300, - 1300, 1300, 1295, 3130, 1611, 1614, 1614, 1614, 1834, 1834, - 1834, 3131, 1835, 3132, 3133, 1836, 3141, 1302, 1306, 1306, - - 1306, 3136, 1615, 1620, 1620, 1620, 1841, 1841, 1841, 3142, - 1842, 3143, 3144, 1843, 1180, 3137, 1308, 1844, 1844, 1844, - 1621, 1847, 1847, 1847, 1319, 1319, 1319, 3145, 1827, 1331, - 1331, 1331, 3136, 3146, 1845, 1632, 1632, 1632, 1848, 1833, - 3147, 3148, 1321, 3139, 1857, 1857, 1857, 1333, 1858, 3151, - 3152, 1859, 1633, 1860, 1860, 1860, 1635, 1635, 1635, 1838, - 3134, 1862, 1862, 1862, 3153, 1863, 3155, 1849, 1864, 3156, - 3157, 1861, 3158, 1636, 1347, 1347, 1347, 1867, 1867, 1867, - 1642, 1642, 1642, 3159, 1871, 1871, 1871, 3167, 1872, 3160, - 1850, 1873, 1349, 1856, 1868, 3172, 3149, 1643, 1644, 1644, - - 1644, 3161, 1645, 3154, 3173, 1646, 1876, 1876, 1876, 1374, - 1374, 1374, 1659, 1659, 1659, 3174, 1660, 3175, 3176, 1661, - 1887, 1887, 1887, 1877, 3468, 3468, 3468, 1376, 3468, 3468, - 3468, 3468, 3468, 3468, 1390, 1390, 1390, 1888, 3150, 3177, - 1865, 3468, 1894, 1894, 1894, 3468, 3162, 3180, 3468, 1671, - 1671, 1671, 1392, 1672, 1742, 1743, 1673, 3180, 3163, 1895, + 2164, 1805, 1606, 1606, 1606, 3105, 3106, 1264, 3107, 3108, + 1590, 3109, 1823, 3115, 3116, 1799, 1824, 1824, 1824, 1607, + 1825, 3117, 3118, 1826, 1293, 1293, 1293, 1610, 1610, 1610, + 1829, 1829, 1829, 3119, 1830, 3126, 3127, 1831, 1806, 1300, + 1300, 1300, 1295, 3128, 1611, 1614, 1614, 1614, 1834, 1834, + 1834, 3129, 1835, 3130, 3131, 1836, 3132, 1302, 1306, 1306, + + 1306, 3133, 1615, 1620, 1620, 1620, 1841, 1841, 1841, 3134, + 1842, 3135, 3136, 1843, 3137, 3140, 1308, 1844, 1844, 1844, + 1621, 1847, 1847, 1847, 1319, 1319, 1319, 3141, 1827, 1331, + 1331, 1331, 3142, 3143, 1845, 1632, 1632, 1632, 1848, 1833, + 3151, 1180, 1321, 3152, 1857, 1857, 1857, 1333, 1858, 3146, + 3146, 1859, 1633, 1860, 1860, 1860, 1635, 1635, 1635, 1838, + 3149, 1862, 1862, 1862, 3147, 1863, 3153, 1849, 1864, 3154, + 3155, 1861, 3156, 1636, 1347, 1347, 1347, 1867, 1867, 1867, + 1642, 1642, 1642, 3157, 1871, 1871, 1871, 3144, 1872, 3158, + 1850, 1873, 1349, 1856, 1868, 3161, 3159, 1643, 1644, 1644, + + 1644, 3162, 1645, 3165, 3166, 1646, 1876, 1876, 1876, 1374, + 1374, 1374, 1659, 1659, 1659, 3163, 1660, 3167, 3168, 1661, + 1887, 1887, 1887, 1877, 3502, 3502, 3502, 1376, 3502, 3502, + 3502, 3502, 3502, 3502, 1390, 1390, 1390, 1888, 3160, 3169, + 1865, 3502, 1894, 1894, 1894, 3502, 3170, 3177, 3502, 1671, + 1671, 1671, 1392, 1672, 3164, 3178, 1673, 3179, 3171, 1895, 1898, 1898, 1898, 1405, 1405, 1405, 1413, 1413, 1413, 1422, - 1422, 1422, 3136, 3168, 1886, 1890, 3170, 1899, 1910, 1910, - 1910, 1407, 3136, 3183, 1415, 3169, 3137, 1424, 3171, 1892, - 1433, 1433, 1433, 3139, 1889, 1911, 1687, 1687, 1687, 3184, - - 1688, 1891, 3185, 1689, 1180, 1690, 1690, 1690, 1435, 1691, - 3186, 3187, 1692, 1442, 1442, 1442, 1696, 1696, 1696, 3190, - 1697, 3188, 3201, 1698, 1912, 3199, 1906, 1901, 1454, 1454, - 1454, 1444, 1903, 1701, 1701, 1701, 3191, 1702, 3204, 3189, - 1703, 1462, 1462, 1462, 3200, 3178, 1456, 1913, 1708, 1708, - 1708, 3192, 1709, 3202, 3207, 1710, 1711, 1711, 1711, 1464, - 1712, 3209, 3210, 1713, 1470, 1470, 1470, 1715, 1715, 1715, - 3212, 1716, 3203, 3208, 1717, 3213, 1720, 1720, 1720, 1915, - 1721, 3211, 1472, 1722, 1480, 1480, 1480, 3214, 3180, 1920, - 1725, 1725, 1725, 1928, 1928, 1928, 3216, 1929, 1922, 3180, - - 1930, 3217, 1482, 1489, 1489, 1489, 3218, 1726, 1936, 1936, + 1422, 1422, 3184, 3172, 1886, 1890, 3180, 1899, 1910, 1910, + 1910, 1407, 3185, 3186, 1415, 3173, 3187, 1424, 3181, 1892, + 1433, 1433, 1433, 3188, 1889, 1911, 1687, 1687, 1687, 3182, + + 1688, 1891, 3189, 1689, 1180, 1690, 1690, 1690, 1435, 1691, + 3192, 3183, 1692, 1442, 1442, 1442, 1696, 1696, 1696, 3192, + 1697, 3195, 3146, 1698, 1912, 3196, 1906, 1901, 1454, 1454, + 1454, 1444, 1903, 1701, 1701, 1701, 3147, 1702, 1742, 1743, + 1703, 1462, 1462, 1462, 3197, 3190, 1456, 1913, 1708, 1708, + 1708, 3146, 1709, 3198, 3201, 1710, 1711, 1711, 1711, 1464, + 1712, 3199, 3149, 1713, 1470, 1470, 1470, 1715, 1715, 1715, + 3215, 1716, 3202, 3203, 1717, 3200, 1720, 1720, 1720, 1915, + 1721, 3205, 1472, 1722, 1480, 1480, 1480, 3204, 3218, 1920, + 1725, 1725, 1725, 1928, 1928, 1928, 3206, 1929, 1922, 3219, + + 1930, 3220, 1482, 1489, 1489, 1489, 3225, 1726, 1936, 1936, 1936, 1923, 1495, 1495, 1495, 1502, 1502, 1502, 1940, 1940, - 1940, 1491, 1510, 1510, 1510, 1937, 1943, 1943, 1943, 3219, - 1497, 1926, 3220, 1504, 3221, 1941, 1518, 1518, 1518, 3222, - 1512, 3223, 3224, 1944, 1741, 1741, 1741, 1193, 1193, 1193, - 3234, 3235, 1934, 3236, 1520, 3237, 1780, 1780, 1780, 3238, - 1781, 3239, 1742, 1782, 3243, 1195, 3244, 1939, 1229, 1229, - 1229, 1784, 1784, 1784, 3245, 1785, 3246, 3247, 1786, 1938, - 1239, 1239, 1239, 3248, 1942, 3249, 1231, 1945, 3250, 1791, - 1791, 1791, 3252, 1792, 3253, 1947, 1793, 3254, 1241, 1952, - - 1795, 1795, 1795, 3255, 1796, 3256, 3257, 1797, 1255, 1255, - 1255, 3258, 1948, 1801, 1801, 1801, 3263, 1802, 3259, 3264, - 1803, 1804, 1804, 1804, 3265, 3261, 1257, 1262, 1262, 1262, - 3260, 1985, 1999, 1999, 1999, 1982, 2000, 3262, 1805, 2001, - 2008, 2008, 2008, 3266, 3267, 1264, 2008, 2008, 2008, 1969, - 1969, 1969, 3268, 1822, 1822, 1822, 2014, 2014, 2014, 3269, - 2015, 3270, 3271, 2016, 1824, 1824, 1824, 3272, 1825, 1989, + 1940, 1491, 1510, 1510, 1510, 1937, 1943, 1943, 1943, 3228, + 1497, 1926, 3213, 1504, 3216, 1941, 1518, 1518, 1518, 3229, + 1512, 3230, 3223, 1944, 1741, 1741, 1741, 1193, 1193, 1193, + 3192, 3214, 1934, 3217, 1520, 3226, 1780, 1780, 1780, 3232, + 1781, 3224, 1742, 1782, 3192, 1195, 3233, 1939, 1229, 1229, + 1229, 1784, 1784, 1784, 3227, 1785, 3234, 3235, 1786, 1938, + 1239, 1239, 1239, 3236, 1942, 3237, 1231, 1945, 3238, 1791, + 1791, 1791, 3239, 1792, 3240, 1947, 1793, 3241, 1241, 1952, + + 1795, 1795, 1795, 3242, 1796, 3252, 3253, 1797, 1255, 1255, + 1255, 3254, 1948, 1801, 1801, 1801, 3255, 1802, 3256, 3257, + 1803, 1804, 1804, 1804, 3258, 3259, 1257, 1262, 1262, 1262, + 3263, 1985, 1999, 1999, 1999, 1982, 2000, 3264, 1805, 2001, + 2008, 2008, 2008, 3265, 3266, 1264, 2008, 2008, 2008, 1969, + 1969, 1969, 3267, 1822, 1822, 1822, 2014, 2014, 2014, 3268, + 2015, 3269, 3270, 2016, 1824, 1824, 1824, 3272, 1825, 1989, 1823, 1826, 1293, 1293, 1293, 1829, 1829, 1829, 2002, 1830, 3273, 3274, 1831, 1300, 1300, 1300, 3275, 1834, 1834, 1834, - 1295, 1835, 3276, 1180, 1836, 2021, 2021, 2021, 1306, 1306, + 1295, 1835, 3276, 3277, 1836, 2021, 2021, 2021, 1306, 1306, 1306, 1302, 3278, 3279, 2009, 3280, 3281, 1841, 1841, 1841, - 1970, 1842, 2022, 2009, 1843, 3282, 1308, 3283, 3277, 2017, - 1844, 1844, 1844, 2026, 2026, 2026, 3284, 2027, 3285, 3286, + 1970, 1842, 2022, 2009, 1843, 3285, 1308, 3283, 3282, 2017, + 1844, 1844, 1844, 2026, 2026, 2026, 3286, 2027, 3287, 3284, 2028, 2029, 2029, 2029, 1847, 1847, 1847, 1845, 2031, 2031, - 2031, 3287, 2032, 3288, 3289, 2033, 3290, 3291, 2030, 2020, - 3292, 1848, 2035, 2035, 2035, 2039, 2039, 2039, 3468, 3468, - 3468, 3293, 2023, 2042, 2042, 2042, 1331, 1331, 1331, 3294, - 2036, 3295, 2040, 3296, 3297, 3468, 1860, 1860, 1860, 3298, - 2043, 1857, 1857, 1857, 1333, 1858, 3299, 1180, 1859, 1862, - 1862, 1862, 3301, 1863, 1861, 3302, 1864, 1347, 1347, 1347, - - 1867, 1867, 1867, 2047, 2047, 2047, 3300, 2048, 3303, 3304, - 2049, 3305, 3306, 2044, 3307, 1349, 3308, 1868, 2050, 2050, - 2050, 1871, 1871, 1871, 2041, 1872, 3309, 3310, 1873, 1876, - 1876, 1876, 2055, 2055, 2055, 2051, 2056, 3311, 3312, 2057, - 2058, 2058, 2058, 2045, 3313, 3314, 1877, 2064, 2064, 2064, - 1374, 1374, 1374, 1887, 1887, 1887, 3315, 2059, 2069, 2069, - 2069, 3316, 2070, 3317, 2065, 2071, 3318, 3319, 1376, 3320, - 1888, 2072, 2072, 2072, 3468, 3468, 3468, 2075, 2075, 2075, - 1390, 1390, 1390, 1894, 1894, 1894, 3322, 3323, 2073, 1180, - 3324, 3468, 3325, 3326, 2076, 2079, 2079, 2079, 1392, 2080, - - 1895, 3327, 2081, 2082, 2082, 2082, 1898, 1898, 1898, 3321, - 2085, 2085, 2085, 3328, 2086, 3329, 2068, 2087, 3330, 3331, - 2083, 3332, 3333, 1899, 2089, 2089, 2089, 1413, 1413, 1413, - 3334, 3335, 2074, 1422, 1422, 1422, 1910, 1910, 1910, 3336, - 2077, 3337, 2090, 3338, 3339, 1415, 3340, 3341, 2099, 2099, + 2031, 3288, 2032, 3289, 3290, 2033, 3291, 3292, 2030, 2020, + 3293, 1848, 2035, 2035, 2035, 2039, 2039, 2039, 3502, 3502, + 3502, 3294, 2023, 2042, 2042, 2042, 1331, 1331, 1331, 3295, + 2036, 3296, 2040, 3297, 3298, 3502, 1860, 1860, 1860, 3300, + 2043, 1857, 1857, 1857, 1333, 1858, 1180, 3301, 1859, 1862, + 1862, 1862, 3302, 1863, 1861, 3303, 1864, 1347, 1347, 1347, + + 1867, 1867, 1867, 2047, 2047, 2047, 3304, 2048, 3305, 3306, + 2049, 3299, 3307, 2044, 3308, 1349, 3309, 1868, 2050, 2050, + 2050, 1871, 1871, 1871, 2041, 1872, 3310, 3311, 1873, 1876, + 1876, 1876, 2055, 2055, 2055, 2051, 2056, 3312, 3313, 2057, + 2058, 2058, 2058, 2045, 3314, 3315, 1877, 2064, 2064, 2064, + 1374, 1374, 1374, 1887, 1887, 1887, 3316, 2059, 2069, 2069, + 2069, 3317, 2070, 3318, 2065, 2071, 3319, 3320, 1376, 3321, + 1888, 2072, 2072, 2072, 3502, 3502, 3502, 2075, 2075, 2075, + 1390, 1390, 1390, 1894, 1894, 1894, 3322, 3323, 2073, 3325, + 1180, 3502, 3326, 3327, 2076, 2079, 2079, 2079, 1392, 2080, + + 1895, 3328, 2081, 2082, 2082, 2082, 1898, 1898, 1898, 3324, + 2085, 2085, 2085, 3329, 2086, 3330, 2068, 2087, 3331, 3332, + 2083, 3333, 3334, 1899, 2089, 2089, 2089, 1413, 1413, 1413, + 3335, 3336, 2074, 1422, 1422, 1422, 1910, 1910, 1910, 3337, + 2077, 3338, 2090, 3339, 3340, 1415, 3341, 3342, 2099, 2099, 2099, 1424, 2100, 1911, 3343, 2101, 2103, 2103, 2103, 1442, - 1442, 1442, 2108, 2108, 2108, 2110, 2110, 2110, 3468, 3468, - 3468, 1454, 1454, 1454, 2104, 3344, 3345, 1444, 2092, 2109, - 3346, 2095, 2111, 3347, 3348, 3468, 1470, 1470, 1470, 1456, + 1442, 1442, 2108, 2108, 2108, 2110, 2110, 2110, 3502, 3502, + 3502, 1454, 1454, 1454, 2104, 3344, 3345, 1444, 2092, 2109, + 3346, 2095, 2111, 1180, 3348, 3502, 1470, 1470, 1470, 1456, 1462, 1462, 1462, 3349, 2117, 2117, 2117, 2119, 2119, 2119, - 1480, 1480, 1480, 3350, 1472, 1928, 1928, 1928, 1464, 1929, - 2106, 2118, 1930, 1180, 2120, 1489, 1489, 1489, 1482, 3342, - 1936, 1936, 1936, 2128, 2128, 2128, 3351, 2129, 3352, 3353, - 2130, 3354, 2112, 1491, 3356, 3357, 2115, 1937, 2113, 1495, + 1480, 1480, 1480, 3347, 1472, 1928, 1928, 1928, 1464, 1929, + 2106, 2118, 1930, 3350, 2120, 1489, 1489, 1489, 1482, 3351, + 1936, 1936, 1936, 2128, 2128, 2128, 3352, 2129, 3353, 3354, + 2130, 3355, 2112, 1491, 3356, 3357, 2115, 1937, 2113, 1495, 1495, 1495, 1502, 1502, 1502, 1940, 1940, 1940, 2133, 2133, 2133, 2116, 2134, 3358, 3359, 2135, 3360, 1497, 3361, 3362, - 1504, 3363, 1941, 3365, 1180, 2121, 2126, 2136, 2136, 2136, - 1943, 1943, 1943, 2138, 2138, 2138, 3366, 2139, 3355, 3367, - 2140, 1518, 1518, 1518, 3368, 2137, 3369, 1944, 2146, 2146, + 1504, 3363, 1941, 3364, 3365, 2121, 2126, 2136, 2136, 2136, + 1943, 1943, 1943, 2138, 2138, 2138, 3366, 2139, 3367, 3368, + 2140, 1518, 1518, 1518, 3369, 2137, 3371, 1944, 2146, 2146, 2146, 1193, 1193, 1193, 1969, 1969, 1969, 2132, 2131, 1520, - 2165, 2165, 2165, 3370, 3371, 2147, 1972, 1972, 1972, 1195, + 2165, 2165, 2165, 3372, 3373, 2147, 1972, 1972, 1972, 1195, 2168, 2168, 2168, 2169, 2169, 2169, 1980, 1980, 1980, 1229, 1229, 1229, 2178, 2178, 2178, 2181, 2181, 2181, 1255, 1255, 1255, 2185, 2185, 2185, 1999, 1999, 1999, 1231, 2000, 2141, - 2179, 2001, 2182, 1262, 1262, 1262, 1257, 3372, 2186, 2198, - 2198, 2198, 2148, 2008, 2008, 2008, 2205, 2205, 2205, 3375, - 3376, 1264, 2207, 2207, 2207, 3377, 2199, 3378, 3379, 2175, - 2014, 2014, 2014, 3380, 2015, 1755, 1180, 2016, 1180, 2208, - 1293, 1293, 1293, 2213, 2213, 2213, 1180, 2184, 3465, 2197, - 2021, 2021, 2021, 2215, 2215, 2215, 1180, 2216, 1295, 1180, - - 2217, 2214, 1306, 1306, 1306, 1754, 1180, 2022, 2209, 2026, - 2026, 2026, 3381, 2027, 3382, 1180, 2028, 2029, 2029, 2029, - 1308, 2221, 2221, 2221, 1180, 2222, 1180, 3399, 2223, 2035, - 2035, 2035, 1180, 2210, 2030, 2031, 2031, 2031, 1180, 2032, - 3387, 3401, 2033, 2037, 2037, 2037, 1180, 2036, 3391, 2218, - 2039, 2039, 2039, 2228, 2228, 2228, 1180, 2229, 3413, 3388, + 2179, 2001, 2182, 1262, 1262, 1262, 1257, 3374, 2186, 2198, + 2198, 2198, 2148, 2008, 2008, 2008, 2205, 2205, 2205, 1180, + 3375, 1264, 2207, 2207, 2207, 3370, 2199, 3376, 3377, 2175, + 2014, 2014, 2014, 3378, 2015, 3379, 3380, 2016, 3381, 2208, + 1293, 1293, 1293, 2213, 2213, 2213, 3382, 2184, 3383, 2197, + 2021, 2021, 2021, 2215, 2215, 2215, 3384, 2216, 1295, 3386, + + 2217, 2214, 1306, 1306, 1306, 3387, 3388, 2022, 2209, 2026, + 2026, 2026, 1180, 2027, 3389, 3390, 2028, 2029, 2029, 2029, + 1308, 2221, 2221, 2221, 3391, 2222, 3385, 3392, 2223, 2035, + 2035, 2035, 3393, 2210, 2030, 2031, 2031, 2031, 3394, 2032, + 3395, 3397, 2033, 2037, 2037, 2037, 3398, 2036, 3399, 2218, + 2039, 2039, 2039, 2228, 2228, 2228, 3400, 2229, 3401, 3402, 2230, 2231, 2231, 2231, 2042, 2042, 2042, 2040, 2234, 2234, - 2234, 1180, 2235, 3389, 3383, 2236, 1180, 1180, 2232, 3400, - 3384, 2043, 1331, 1331, 1331, 1347, 1347, 1347, 2047, 2047, - 2047, 3392, 2048, 3393, 3385, 2049, 2050, 2050, 2050, 1180, - - 1333, 1180, 3394, 1349, 2240, 2240, 2240, 2233, 2241, 3421, - 1180, 2242, 1180, 2051, 2055, 2055, 2055, 1180, 2056, 3386, - 1753, 2057, 2058, 2058, 2058, 2246, 2246, 2246, 1180, 2247, - 3390, 1180, 2248, 1752, 1180, 2237, 2249, 2249, 2249, 2059, - 2064, 2064, 2064, 2238, 2254, 2254, 2254, 1180, 2255, 3397, - 1180, 2256, 1180, 2250, 1374, 1374, 1374, 2065, 2069, 2069, - 2069, 1180, 2070, 3407, 3395, 2071, 2072, 2072, 2072, 2260, - 2260, 2260, 1376, 2261, 1180, 3396, 2262, 2263, 2263, 2263, - 2075, 2075, 2075, 2073, 2265, 2265, 2265, 3398, 2266, 3405, - 1180, 2267, 3409, 3403, 2264, 1751, 3402, 2076, 1390, 1390, - - 1390, 1180, 2079, 2079, 2079, 2259, 2080, 1750, 3414, 2081, - 2082, 2082, 2082, 2270, 2270, 2270, 1392, 2271, 1749, 3433, - 2272, 2085, 2085, 2085, 1180, 2086, 1180, 2083, 2087, 2089, + 2234, 3403, 2235, 3404, 3405, 2236, 3406, 3409, 2232, 3410, + 3411, 2043, 1331, 1331, 1331, 1347, 1347, 1347, 2047, 2047, + 2047, 3412, 2048, 3413, 3414, 2049, 2050, 2050, 2050, 1180, + + 1333, 1180, 1180, 1349, 2240, 2240, 2240, 2233, 2241, 1180, + 1755, 2242, 3425, 2051, 2055, 2055, 2055, 1180, 2056, 1180, + 1180, 2057, 2058, 2058, 2058, 2246, 2246, 2246, 1180, 2247, + 3423, 1754, 2248, 1180, 1180, 2237, 2249, 2249, 2249, 2059, + 2064, 2064, 2064, 2238, 2254, 2254, 2254, 3417, 2255, 3418, + 3419, 2256, 3449, 2250, 1374, 1374, 1374, 2065, 2069, 2069, + 2069, 3421, 2070, 3422, 3415, 2071, 2072, 2072, 2072, 2260, + 2260, 2260, 1376, 2261, 3433, 1180, 2262, 2263, 2263, 2263, + 2075, 2075, 2075, 2073, 2265, 2265, 2265, 3426, 2266, 3424, + 1180, 2267, 1180, 1180, 2264, 1180, 1753, 2076, 1390, 1390, + + 1390, 1752, 2079, 2079, 2079, 2259, 2080, 3441, 3499, 2081, + 2082, 2082, 2082, 2270, 2270, 2270, 1392, 2271, 1751, 1180, + 2272, 2085, 2085, 2085, 3442, 2086, 3416, 2083, 2087, 2089, 2089, 2089, 1413, 1413, 1413, 2278, 2278, 2278, 1422, 1422, 1422, 2282, 2282, 2282, 2099, 2099, 2099, 2090, 2100, 2268, 1415, 2101, 2279, 2103, 2103, 2103, 1424, 1180, 2283, 2290, - 2290, 2290, 2108, 2108, 2108, 2293, 2293, 2293, 3427, 2294, - 3404, 2104, 2295, 2110, 2110, 2110, 1180, 2291, 1180, 2109, - 3410, 2296, 2296, 2296, 1180, 2297, 1180, 2284, 2298, 1180, - 2111, 1454, 1454, 1454, 3406, 1180, 2276, 1747, 1180, 2280, + 2290, 2290, 2108, 2108, 2108, 2293, 2293, 2293, 1180, 2294, + 3427, 2104, 2295, 2110, 2110, 2110, 3428, 2291, 1180, 2109, + 1180, 2296, 2296, 2296, 1180, 2297, 1180, 2284, 2298, 1180, + 2111, 1454, 1454, 1454, 3431, 1180, 2276, 1180, 1750, 2280, 1462, 1462, 1462, 1470, 1470, 1470, 2117, 2117, 2117, 1456, - 2304, 2304, 2304, 3411, 2305, 1180, 3408, 2306, 1464, 3415, - 1180, 1472, 1180, 2118, 2119, 2119, 2119, 2307, 2307, 2307, - 3412, 2308, 3417, 3419, 2309, 1480, 1480, 1480, 1489, 1489, - 1489, 2120, 1180, 2128, 2128, 2128, 1180, 2129, 3422, 2302, - 2130, 1746, 1745, 1482, 1180, 3420, 1491, 2300, 1495, 1495, - 1495, 1502, 1502, 1502, 3428, 2133, 2133, 2133, 2303, 2134, - 1180, 1180, 2135, 2136, 2136, 2136, 1497, 3423, 1744, 1504, - 2138, 2138, 2138, 3434, 2139, 3416, 1180, 2140, 1518, 1518, - 1518, 2137, 3418, 2146, 2146, 2146, 3424, 2324, 2324, 2324, - - 2310, 2325, 1737, 2315, 2326, 1180, 1520, 3425, 3426, 2317, + 2304, 2304, 2304, 1180, 2305, 1180, 3420, 2306, 1464, 1180, + 1749, 1472, 3461, 2118, 2119, 2119, 2119, 2307, 2307, 2307, + 3434, 2308, 3435, 3429, 2309, 1480, 1480, 1480, 1489, 1489, + 1489, 2120, 3430, 2128, 2128, 2128, 1180, 2129, 3436, 2302, + 2130, 1180, 3432, 1482, 3445, 3443, 1491, 2300, 1495, 1495, + 1495, 1502, 1502, 1502, 1180, 2133, 2133, 2133, 2303, 2134, + 1180, 1180, 2135, 2136, 2136, 2136, 1497, 3444, 1747, 1504, + 2138, 2138, 2138, 1746, 2139, 3447, 1180, 2140, 1518, 1518, + 1518, 2137, 3437, 2146, 2146, 2146, 3457, 2324, 2324, 2324, + + 2310, 2325, 1745, 2315, 2326, 1180, 1520, 3439, 3440, 2317, 2147, 1193, 1193, 1193, 2318, 2328, 2328, 2328, 2333, 2333, - 2333, 2334, 2334, 2334, 2156, 2156, 2156, 1735, 1180, 1195, - 2336, 2336, 2336, 1732, 2319, 2341, 2341, 2341, 2164, 2164, + 2333, 2334, 2334, 2334, 2156, 2156, 2156, 1744, 1180, 1195, + 2336, 2336, 2336, 1737, 2319, 2341, 2341, 2341, 2164, 2164, 2164, 2165, 2165, 2165, 2342, 2342, 2342, 2168, 2168, 2168, 2169, 2169, 2169, 2345, 2345, 2345, 2346, 2346, 2346, 2347, 2347, 2347, 2348, 2348, 2348, 1229, 1229, 1229, 2178, 2178, - 2178, 2181, 2181, 2181, 3429, 2327, 1180, 2354, 2354, 2354, - 3435, 2355, 1180, 1231, 2356, 1731, 2179, 1729, 2182, 1180, + 2178, 2181, 2181, 2181, 3438, 2327, 1180, 2354, 2354, 2354, + 1180, 2355, 1735, 1231, 2356, 1180, 2179, 1180, 2182, 1732, 2343, 2358, 2358, 2358, 2185, 2185, 2185, 2360, 2360, 2360, - 1728, 2361, 1727, 1724, 2362, 1262, 1262, 1262, 1180, 2359, - 1180, 2186, 2198, 2198, 2198, 1180, 2350, 2374, 2374, 2374, - 1180, 2375, 3430, 1264, 2376, 2377, 2377, 2377, 3439, 2199, + 1180, 2361, 1731, 1180, 2362, 1262, 1262, 1262, 1729, 2359, + 3448, 2186, 2198, 2198, 2198, 3446, 2350, 2374, 2374, 2374, + 1180, 2375, 3453, 1264, 2376, 2377, 2377, 2377, 3450, 2199, 2205, 2205, 2205, 2382, 2382, 2382, 2207, 2207, 2207, 2384, - 2384, 2384, 1180, 2385, 3437, 3431, 2386, 1293, 1293, 1293, - 2213, 2213, 2213, 2208, 2373, 2215, 2215, 2215, 1180, 2216, - 1719, 3440, 2217, 3436, 1718, 1295, 1180, 3443, 2214, 1306, - 1306, 1306, 1180, 2221, 2221, 2221, 3438, 2222, 3441, 2383, - 2223, 2228, 2228, 2228, 1180, 2229, 1180, 1308, 2230, 2231, - 2231, 2231, 2400, 2400, 2400, 3432, 2401, 3442, 2388, 2402, - - 2234, 2234, 2234, 3445, 2235, 1180, 2232, 2236, 1331, 1331, - 1331, 1347, 1347, 1347, 2240, 2240, 2240, 1180, 2241, 3449, - 1180, 2242, 2391, 2246, 2246, 2246, 1333, 2247, 1180, 1349, - 2248, 2249, 2249, 2249, 2410, 2410, 2410, 1180, 2411, 1706, - 1180, 2412, 2254, 2254, 2254, 1180, 2255, 1704, 2250, 2256, + 2384, 2384, 3462, 2385, 3481, 1180, 2386, 1293, 1293, 1293, + 2213, 2213, 2213, 2208, 2373, 2215, 2215, 2215, 3458, 2216, + 1180, 1728, 2217, 3469, 1180, 1295, 3451, 1180, 2214, 1306, + 1306, 1306, 1180, 2221, 2221, 2221, 1180, 2222, 3455, 2383, + 2223, 2228, 2228, 2228, 1727, 2229, 1180, 1308, 2230, 2231, + 2231, 2231, 2400, 2400, 2400, 3454, 2401, 3456, 2388, 2402, + + 2234, 2234, 2234, 1180, 2235, 3467, 2232, 2236, 1331, 1331, + 1331, 1347, 1347, 1347, 2240, 2240, 2240, 1724, 2241, 1180, + 3471, 2242, 2391, 2246, 2246, 2246, 1333, 2247, 1719, 1349, + 2248, 2249, 2249, 2249, 2410, 2410, 2410, 1180, 2411, 3475, + 3459, 2412, 2254, 2254, 2254, 1718, 2255, 1180, 2250, 2256, 2417, 2417, 2417, 1374, 1374, 1374, 2260, 2260, 2260, 2404, - 2261, 3447, 1180, 2262, 3444, 3446, 2405, 2418, 2263, 2263, - 2263, 1376, 2420, 2420, 2420, 3450, 2421, 3455, 3448, 2422, - 2265, 2265, 2265, 1180, 2266, 2264, 1180, 2267, 1390, 1390, - 1390, 2270, 2270, 2270, 1180, 2271, 1180, 1700, 2272, 3453, + 2261, 1706, 1180, 2262, 1180, 3452, 2405, 2418, 2263, 2263, + 2263, 1376, 2420, 2420, 2420, 1180, 2421, 3470, 1180, 2422, + 2265, 2265, 2265, 3463, 2266, 2264, 1180, 2267, 1390, 1390, + 1390, 2270, 2270, 2270, 1180, 2271, 1180, 1180, 2272, 3460, 2428, 2428, 2428, 2278, 2278, 2278, 1392, 2431, 2431, 2431, - 3457, 2432, 1180, 1180, 2433, 3456, 1180, 2419, 2429, 1180, + 3464, 2432, 3465, 1180, 2433, 3466, 1180, 2419, 2429, 1704, 2279, 1422, 1422, 1422, 2282, 2282, 2282, 2436, 2436, 2436, - 1180, 2437, 3451, 3454, 2438, 2290, 2290, 2290, 3458, 1424, - 3452, 2283, 2293, 2293, 2293, 3459, 2294, 1180, 3460, 2295, + 3472, 2437, 1180, 1180, 2438, 2290, 2290, 2290, 3482, 1424, + 3473, 2283, 2293, 2293, 2293, 3468, 2294, 3499, 1180, 2295, 1454, 1454, 1454, 2291, 2423, 2296, 2296, 2296, 1180, 2297, - 3461, 3465, 2298, 1180, 1462, 1462, 1462, 1699, 1456, 1470, - 1470, 1470, 2304, 2304, 2304, 1180, 2305, 1695, 3462, 2306, - 1693, 2434, 1464, 1685, 2307, 2307, 2307, 1472, 2308, 1684, - 3463, 2309, 1480, 1480, 1480, 3464, 2454, 2454, 2454, 1683, - - 1682, 2449, 3468, 3468, 3468, 2452, 3468, 3468, 3468, 1680, - 1482, 1679, 2453, 2455, 3468, 3468, 3468, 1677, 1675, 3468, - 1489, 1489, 1489, 3468, 1495, 1495, 1495, 2462, 2462, 2462, - 2451, 3468, 1518, 1518, 1518, 2468, 2468, 2468, 1491, 2465, - 2465, 2465, 1497, 1674, 1670, 2463, 1669, 2324, 2324, 2324, - 1520, 2325, 1668, 2456, 2326, 1667, 1665, 1180, 1193, 1193, + 3477, 1180, 2298, 1180, 1462, 1462, 1462, 3476, 1456, 1470, + 1470, 1470, 2304, 2304, 2304, 1180, 2305, 1700, 3474, 2306, + 3478, 2434, 1464, 3483, 2307, 2307, 2307, 1472, 2308, 1699, + 3491, 2309, 1480, 1480, 1480, 3479, 2454, 2454, 2454, 1180, + + 3480, 2449, 3502, 3502, 3502, 2452, 3502, 3502, 3502, 1180, + 1482, 1180, 2453, 2455, 3502, 3502, 3502, 1695, 1180, 3502, + 1489, 1489, 1489, 3502, 1495, 1495, 1495, 2462, 2462, 2462, + 2451, 3502, 1518, 1518, 1518, 2468, 2468, 2468, 1491, 2465, + 2465, 2465, 1497, 3489, 3484, 2463, 1180, 2324, 2324, 2324, + 1520, 2325, 1693, 2456, 2326, 3487, 1180, 1180, 1193, 1193, 1193, 2328, 2328, 2328, 2470, 2470, 2470, 2471, 2471, 2471, - 2457, 1664, 1663, 2458, 1662, 1655, 1195, 2333, 2333, 2333, - 2334, 2334, 2334, 1654, 2461, 2459, 2336, 2336, 2336, 2475, - 2475, 2475, 1653, 1652, 2464, 2477, 2477, 2477, 2478, 2478, + 2457, 1685, 1684, 2458, 3492, 1683, 1195, 2333, 2333, 2333, + 2334, 2334, 2334, 1180, 2461, 2459, 2336, 2336, 2336, 2475, + 2475, 2475, 3485, 3488, 2464, 2477, 2477, 2477, 2478, 2478, 2478, 2341, 2341, 2341, 2342, 2342, 2342, 2345, 2345, 2345, - 2346, 2346, 2346, 2347, 2347, 2347, 1651, 2469, 2348, 2348, + 2346, 2346, 2346, 2347, 2347, 2347, 1682, 2469, 2348, 2348, 2348, 2482, 2482, 2482, 2485, 2485, 2485, 2354, 2354, 2354, - 1650, 2355, 1649, 1648, 2356, 3468, 3468, 3468, 1647, 2483, - 1641, 2486, 2358, 2358, 2358, 1640, 2360, 2360, 2360, 1639, - 2361, 1638, 3468, 2362, 1262, 1262, 1262, 2374, 2374, 2374, - 2359, 2375, 2499, 2500, 2376, 2501, 2504, 2505, 1630, 2506, - 1629, 1628, 1264, 2502, 2377, 2377, 2377, 2507, 1627, 1626, + 1680, 2355, 1180, 1679, 2356, 3502, 3502, 3502, 1180, 2483, + 1677, 2486, 2358, 2358, 2358, 1675, 2360, 2360, 2360, 1674, + 2361, 1180, 3502, 2362, 1262, 1262, 1262, 2374, 2374, 2374, + 2359, 2375, 2499, 2500, 2376, 2501, 2504, 2505, 1180, 2506, + 3490, 1670, 1264, 2502, 2377, 2377, 2377, 2507, 3486, 1669, 2503, 2509, 2509, 2509, 2508, 2382, 2382, 2382, 2384, 2384, - 2384, 1624, 2385, 1623, 1622, 2386, 1293, 1293, 1293, 1619, + 2384, 1668, 2385, 1180, 1180, 2386, 1293, 1293, 1293, 3495, - 1618, 2487, 2517, 2517, 2517, 1306, 1306, 1306, 2527, 2527, + 3493, 2487, 2517, 2517, 2517, 1306, 1306, 1306, 2527, 2527, 2527, 2529, 2529, 2529, 1295, 2498, 1347, 1347, 1347, 2518, - 2400, 2400, 2400, 1308, 2401, 1609, 1605, 2402, 1604, 2530, - 1603, 2410, 2410, 2410, 1349, 2411, 1602, 1601, 2412, 2567, - 2567, 2567, 2515, 2537, 2537, 2537, 2417, 2417, 2417, 1600, - 2542, 2542, 2542, 1599, 2543, 1598, 2519, 2544, 1596, 1595, - 2538, 1593, 1592, 2418, 2545, 2545, 2545, 2420, 2420, 2420, - 1591, 2421, 1588, 1586, 2422, 1583, 2531, 2547, 2547, 2547, - 1581, 1578, 2546, 2428, 2428, 2428, 2553, 2553, 2553, 2431, - 2431, 2431, 1569, 2432, 1567, 2548, 2433, 1422, 1422, 1422, - - 1560, 2429, 1558, 2554, 2556, 2556, 2556, 2436, 2436, 2436, - 1557, 2437, 1556, 1555, 2438, 1424, 3468, 3468, 3468, 1554, - 1553, 2557, 3468, 3468, 3468, 3468, 3468, 3468, 2569, 2569, - 2569, 1552, 1551, 3468, 2571, 2571, 2571, 1550, 1549, 3468, - 1546, 1545, 3468, 1462, 1462, 1462, 2570, 1544, 2555, 1543, + 2400, 2400, 2400, 1308, 2401, 3494, 3497, 2402, 1667, 2530, + 1665, 2410, 2410, 2410, 1349, 2411, 1664, 1663, 2412, 2567, + 2567, 2567, 2515, 2537, 2537, 2537, 2417, 2417, 2417, 1180, + 2542, 2542, 2542, 1662, 2543, 1655, 2519, 2544, 1654, 1653, + 2538, 1652, 1180, 2418, 2545, 2545, 2545, 2420, 2420, 2420, + 1651, 2421, 1650, 1649, 2422, 1648, 2531, 2547, 2547, 2547, + 1647, 3498, 2546, 2428, 2428, 2428, 2553, 2553, 2553, 2431, + 2431, 2431, 1641, 2432, 1640, 2548, 2433, 1422, 1422, 1422, + + 1639, 2429, 1638, 2554, 2556, 2556, 2556, 2436, 2436, 2436, + 3496, 2437, 1630, 1629, 2438, 1424, 3502, 3502, 3502, 1628, + 1627, 2557, 3502, 3502, 3502, 3502, 3502, 3502, 2569, 2569, + 2569, 1626, 1624, 3502, 2571, 2571, 2571, 1623, 1622, 3502, + 1619, 1618, 3502, 1462, 1462, 1462, 2570, 1609, 2555, 1605, 2558, 2572, 1470, 1470, 1470, 1480, 1480, 1480, 2454, 2454, - 2454, 1464, 2576, 2576, 2576, 1542, 2577, 1541, 1540, 2578, - 1472, 2559, 1539, 1482, 1537, 2455, 2565, 2579, 2579, 2579, - 3468, 3468, 3468, 2560, 3468, 3468, 3468, 2583, 2583, 2583, - 1536, 1535, 2575, 1534, 2580, 1533, 1532, 3468, 2585, 2585, - - 2585, 3468, 1531, 2573, 1529, 2584, 1495, 1495, 1495, 2462, - 2462, 2462, 1528, 2574, 1518, 1518, 1518, 1527, 2465, 2465, - 2465, 2468, 2468, 2468, 1497, 1526, 1525, 2463, 2591, 2591, - 2591, 2581, 1520, 1524, 1523, 2582, 1180, 2470, 2470, 2470, + 2454, 1464, 2576, 2576, 2576, 1604, 2577, 1603, 1602, 2578, + 1472, 2559, 1601, 1482, 1600, 2455, 2565, 2579, 2579, 2579, + 3502, 3502, 3502, 2560, 3502, 3502, 3502, 2583, 2583, 2583, + 1599, 1598, 2575, 1596, 2580, 1595, 1593, 3502, 2585, 2585, + + 2585, 3502, 1592, 2573, 1591, 2584, 1495, 1495, 1495, 2462, + 2462, 2462, 1588, 2574, 1518, 1518, 1518, 1586, 2465, 2465, + 2465, 2468, 2468, 2468, 1497, 1583, 1581, 2463, 2591, 2591, + 2591, 2581, 1520, 1578, 1569, 2582, 1180, 2470, 2470, 2470, 2471, 2471, 2471, 2595, 2595, 2595, 2592, 2475, 2475, 2475, 2477, 2477, 2477, 2478, 2478, 2478, 2482, 2482, 2482, 2485, - 2485, 2485, 2601, 2601, 2601, 1180, 2602, 1517, 1509, 2603, - 1494, 1493, 2586, 1488, 2483, 1487, 2486, 1486, 2587, 1485, + 2485, 2485, 2601, 2601, 2601, 1567, 2602, 1560, 1558, 2603, + 1557, 1556, 2586, 1555, 2483, 1554, 2486, 1553, 2587, 1552, 2588, 1262, 1262, 1262, 2509, 2509, 2509, 2630, 2630, 2630, 1293, 1293, 1293, 2517, 2517, 2517, 2635, 2635, 2635, 1264, - 2636, 1484, 1458, 2637, 2638, 2638, 2638, 1446, 1295, 1432, + 2636, 1551, 1550, 2637, 2638, 2638, 2638, 1549, 1295, 1546, 2518, 2644, 2644, 2644, 2527, 2527, 2527, 2529, 2529, 2529, - 1431, 1430, 2639, 1426, 1347, 1347, 1347, 1421, 2645, 2537, - 2537, 2537, 2653, 2653, 2653, 2530, 2654, 1417, 1409, 2655, - 1404, 2615, 1349, 2657, 2657, 2657, 2538, 2542, 2542, 2542, - 1403, 2543, 1397, 1394, 2544, 1373, 2633, 2545, 2545, 2545, - 2658, 2547, 2547, 2547, 1372, 2666, 2666, 2666, 2553, 2553, - 2553, 2672, 2672, 2672, 1371, 2546, 2669, 2669, 2669, 2548, - 2670, 2647, 2667, 2671, 1370, 2554, 2556, 2556, 2556, 2673, - 2674, 2674, 2674, 1369, 2675, 1368, 1367, 2676, 2682, 2682, - - 2682, 1366, 1365, 2557, 2567, 2567, 2567, 2569, 2569, 2569, - 2571, 2571, 2571, 1364, 1358, 2683, 2686, 2686, 2686, 1351, - 2687, 1340, 1335, 2688, 1330, 2570, 1326, 2572, 2689, 2689, - 2689, 1470, 1470, 1470, 1325, 1480, 1480, 1480, 2576, 2576, - 2576, 1324, 2577, 1318, 1317, 2578, 2690, 1316, 1312, 1472, - 2579, 2579, 2579, 1482, 2693, 2693, 2693, 1311, 2694, 1310, - 1305, 2695, 2696, 2696, 2696, 1304, 1299, 2580, 2698, 2698, - 2698, 2583, 2583, 2583, 2585, 2585, 2585, 1298, 1292, 2697, - 1291, 1287, 2700, 2700, 2700, 2699, 1518, 1518, 1518, 2584, - 2591, 2591, 2591, 2595, 2595, 2595, 1286, 1285, 2691, 2692, + 1545, 1544, 2639, 1543, 1347, 1347, 1347, 1542, 2645, 2537, + 2537, 2537, 2653, 2653, 2653, 2530, 2654, 1541, 1540, 2655, + 1539, 2615, 1349, 2657, 2657, 2657, 2538, 2542, 2542, 2542, + 1537, 2543, 1536, 1535, 2544, 1534, 2633, 2545, 2545, 2545, + 2658, 2547, 2547, 2547, 1533, 2666, 2666, 2666, 2553, 2553, + 2553, 2672, 2672, 2672, 1532, 2546, 2669, 2669, 2669, 2548, + 2670, 2647, 2667, 2671, 1531, 2554, 2556, 2556, 2556, 2673, + 2674, 2674, 2674, 1529, 2675, 1528, 1527, 2676, 2682, 2682, + + 2682, 1526, 1525, 2557, 2567, 2567, 2567, 2569, 2569, 2569, + 2571, 2571, 2571, 1524, 1523, 2683, 2686, 2686, 2686, 1180, + 2687, 1517, 1509, 2688, 1494, 2570, 1493, 2572, 2689, 2689, + 2689, 1470, 1470, 1470, 1488, 1480, 1480, 1480, 2576, 2576, + 2576, 1487, 2577, 1486, 1485, 2578, 2690, 1484, 1458, 1472, + 2579, 2579, 2579, 1482, 2693, 2693, 2693, 1446, 2694, 1432, + 1431, 2695, 2696, 2696, 2696, 1430, 1426, 2580, 2698, 2698, + 2698, 2583, 2583, 2583, 2585, 2585, 2585, 1421, 1417, 2697, + 1409, 1404, 2700, 2700, 2700, 2699, 1518, 1518, 1518, 2584, + 2591, 2591, 2591, 2595, 2595, 2595, 1403, 1397, 2691, 2692, 2701, 2708, 2708, 2708, 1520, 2712, 2712, 2712, 2592, 2601, - 2601, 2601, 1284, 2602, 1283, 1282, 2603, 1262, 1262, 1262, - 1281, 1280, 2713, 2630, 2630, 2630, 1293, 1293, 1293, 2749, - 2749, 2749, 2635, 2635, 2635, 1264, 2636, 1279, 1278, 2637, - 2638, 2638, 2638, 1277, 1295, 1276, 1275, 2702, 2751, 2751, - 2751, 2644, 2644, 2644, 1269, 2753, 2753, 2753, 2639, 2754, - 1261, 1260, 2755, 1259, 1254, 2752, 1253, 1252, 2645, 2757, - 2757, 2757, 2762, 2762, 2762, 1249, 1243, 2731, 2653, 2653, - 2653, 1238, 2654, 1237, 1233, 2655, 1228, 2758, 1227, 2763, - 2657, 2657, 2657, 1226, 2766, 2766, 2766, 2748, 2767, 1225, - - 1224, 2768, 2775, 2775, 2775, 1223, 1222, 2658, 2666, 2666, - 2666, 2777, 2777, 2777, 1220, 2778, 1219, 1218, 2779, 2776, - 2780, 2780, 2780, 1217, 1216, 2667, 2669, 2669, 2669, 1215, - 2670, 1214, 1213, 2671, 2672, 2672, 2672, 2781, 2674, 2674, - 2674, 1212, 2675, 1211, 1208, 2676, 2682, 2682, 2682, 2785, - 2785, 2785, 2673, 2786, 1207, 1206, 2787, 2788, 2788, 2788, - 2790, 2790, 2790, 2683, 2686, 2686, 2686, 1205, 2687, 1204, - 1203, 2688, 1202, 1201, 2789, 1200, 1199, 2791, 2689, 2689, + 2601, 2601, 1394, 2602, 1373, 1372, 2603, 1262, 1262, 1262, + 1371, 1370, 2713, 2630, 2630, 2630, 1293, 1293, 1293, 2749, + 2749, 2749, 2635, 2635, 2635, 1264, 2636, 1369, 1368, 2637, + 2638, 2638, 2638, 1367, 1295, 1366, 1365, 2702, 2751, 2751, + 2751, 2644, 2644, 2644, 1364, 2753, 2753, 2753, 2639, 2754, + 1358, 1351, 2755, 1340, 1335, 2752, 1330, 1326, 2645, 2757, + 2757, 2757, 2762, 2762, 2762, 1325, 1324, 2731, 2653, 2653, + 2653, 1318, 2654, 1317, 1316, 2655, 1312, 2758, 1311, 2763, + 2657, 2657, 2657, 1310, 2766, 2766, 2766, 2748, 2767, 1305, + + 1304, 2768, 2777, 2777, 2777, 1299, 1298, 2658, 2666, 2666, + 2666, 2779, 2779, 2779, 1292, 2780, 1291, 1287, 2781, 2778, + 2782, 2782, 2782, 1286, 1285, 2667, 2669, 2669, 2669, 1284, + 2670, 1283, 1282, 2671, 2672, 2672, 2672, 2783, 2674, 2674, + 2674, 1281, 2675, 1280, 1279, 2676, 2682, 2682, 2682, 2787, + 2787, 2787, 2673, 2788, 1278, 1277, 2789, 2790, 2790, 2790, + 2792, 2792, 2792, 2683, 2686, 2686, 2686, 1276, 2687, 1275, + 1269, 2688, 1261, 1260, 2791, 1259, 1254, 2793, 2689, 2689, 2689, 1470, 1470, 1470, 1480, 1480, 1480, 2693, 2693, 2693, - 1192, 2694, 1191, 1190, 2695, 1189, 2690, 1188, 1187, 1472, - - 1186, 1183, 1482, 2696, 2696, 2696, 2800, 2800, 2800, 1181, - 2801, 1180, 1178, 2802, 2698, 2698, 2698, 2803, 2803, 2803, - 2697, 2804, 1176, 1173, 2805, 2700, 2700, 2700, 1518, 1518, - 1518, 2699, 2811, 2811, 2811, 2708, 2708, 2708, 2712, 2712, - 2712, 1171, 1168, 2701, 1164, 2799, 1520, 2798, 1162, 2815, - 2815, 2815, 1161, 2816, 1160, 2713, 2817, 1262, 1262, 1262, - 2849, 2849, 2849, 2851, 2851, 2851, 1293, 1293, 1293, 2749, - 2749, 2749, 2854, 2854, 2854, 1264, 2751, 2751, 2751, 1158, - 2852, 2857, 2857, 2857, 1295, 2858, 1157, 1156, 2859, 2855, - 2806, 1155, 1154, 2752, 2753, 2753, 2753, 1153, 2754, 1151, - - 1150, 2755, 2860, 2860, 2860, 2757, 2757, 2757, 2835, 2864, - 2864, 2864, 2762, 2762, 2762, 2869, 2869, 2869, 2856, 2861, - 2866, 2866, 2866, 2758, 2867, 1149, 2865, 2868, 2853, 2763, - 1148, 1146, 2870, 2766, 2766, 2766, 1145, 2767, 1144, 1140, - 2768, 2775, 2775, 2775, 2878, 2878, 2878, 1139, 2879, 1137, - 1136, 2880, 2777, 2777, 2777, 1135, 2778, 1134, 2776, 2779, - 2780, 2780, 2780, 2881, 2881, 2881, 1133, 2882, 1132, 1130, - 2883, 2885, 2885, 2885, 2785, 2785, 2785, 2781, 2786, 1129, - 1128, 2787, 2788, 2788, 2788, 2888, 2888, 2888, 2886, 2889, - 1127, 1125, 2890, 2790, 2790, 2790, 2891, 2891, 2891, 2789, - - 2892, 1124, 1123, 2893, 1470, 1470, 1470, 1480, 1480, 1480, - 2791, 2800, 2800, 2800, 1120, 2801, 1119, 1117, 2802, 2803, - 2803, 2803, 1472, 2804, 1114, 1482, 2805, 2906, 2906, 2906, - 2910, 2910, 2910, 2811, 2811, 2811, 2913, 2913, 2913, 2815, - 2815, 2815, 1113, 2816, 1109, 2907, 2817, 2911, 1742, 2924, - 2924, 2924, 1262, 1262, 1262, 2900, 2849, 2849, 2849, 2948, - 2948, 2948, 2851, 2851, 2851, 1108, 2925, 1293, 1293, 1293, - 1264, 2949, 2949, 2949, 2901, 2950, 1106, 1105, 2951, 2852, - 2854, 2854, 2854, 1104, 1101, 1295, 2953, 2953, 2953, 1100, - 2954, 1099, 1098, 2955, 2860, 2860, 2860, 2855, 2857, 2857, - - 2857, 2934, 2858, 1096, 1095, 2859, 2957, 2957, 2957, 1094, - 2958, 2861, 1093, 2959, 2864, 2864, 2864, 1092, 2952, 2962, - 2962, 2962, 1087, 2963, 1085, 1084, 2964, 1083, 2866, 2866, - 2866, 2865, 2867, 1082, 1081, 2868, 2869, 2869, 2869, 2965, - 2965, 2965, 1080, 2966, 1079, 1078, 2967, 2878, 2878, 2878, - 1077, 2879, 1076, 2870, 2880, 2881, 2881, 2881, 1075, 2882, - 1072, 1069, 2883, 2885, 2885, 2885, 2976, 2976, 2976, 1068, - 2977, 1067, 1061, 2978, 2888, 2888, 2888, 1060, 2889, 1058, - 2886, 2890, 2891, 2891, 2891, 1057, 2892, 1055, 1052, 2893, - 2994, 2994, 2994, 1480, 1480, 1480, 2906, 2906, 2906, 3002, - - 3002, 3002, 2910, 2910, 2910, 3004, 3004, 3004, 2995, 3005, - 1051, 1482, 3006, 1048, 2907, 1046, 3003, 1742, 1045, 2911, - 1742, 1044, 1039, 1742, 3007, 3007, 3007, 2913, 2913, 2913, - 3008, 3008, 3008, 3009, 3009, 3009, 2924, 2924, 2924, 3018, - 3018, 3018, 1038, 3019, 1036, 1035, 3020, 1262, 1262, 1262, - 3036, 3036, 3036, 2925, 2948, 2948, 2948, 1034, 1032, 2996, - 2949, 2949, 2949, 1031, 2950, 1264, 1029, 2951, 3037, 3037, - 3037, 2953, 2953, 2953, 1027, 2954, 1026, 1023, 2955, 1018, - 2957, 2957, 2957, 1017, 2958, 1014, 3038, 2959, 2962, 2962, - 2962, 1013, 2963, 1012, 1009, 2964, 2965, 2965, 2965, 1008, - - 2966, 1006, 1003, 2967, 3042, 3042, 3042, 3050, 3050, 3050, - 2976, 2976, 2976, 3027, 2977, 1001, 1000, 2978, 3052, 3052, - 3052, 3043, 999, 998, 3051, 2994, 2994, 2994, 1480, 1480, - 1480, 3002, 3002, 3002, 996, 3053, 995, 3072, 3072, 3072, - 994, 3073, 993, 2995, 3074, 992, 1482, 991, 3003, 1742, - 3004, 3004, 3004, 988, 3005, 1742, 987, 3006, 3007, 3007, - 3007, 3008, 3008, 3008, 3009, 3009, 3009, 986, 1742, 3018, - 3018, 3018, 983, 3019, 980, 979, 3020, 977, 976, 3066, - 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 973, - 970, 1740, 3091, 3091, 3091, 967, 1740, 1740, 1740, 1742, - - 1740, 3036, 3036, 3036, 3037, 3037, 3037, 3042, 3042, 3042, - 3092, 3102, 3102, 3102, 966, 3103, 958, 957, 3104, 3105, - 3105, 3105, 3038, 956, 3043, 1740, 1740, 1740, 1740, 1740, - 1740, 1740, 1740, 1740, 1740, 1740, 3106, 955, 1740, 3050, - 3050, 3050, 949, 1740, 1740, 1740, 1742, 1740, 3110, 3110, - 3110, 948, 3111, 947, 945, 3112, 3051, 3052, 3052, 3052, - 3113, 3113, 3113, 944, 3114, 943, 942, 3115, 3128, 3128, - 3128, 941, 1740, 1740, 3053, 3072, 3072, 3072, 940, 3073, - 935, 932, 3074, 934, 929, 928, 3129, 926, 3091, 3091, - 3091, 924, 923, 1742, 1740, 1740, 1740, 1740, 1740, 3140, - - 1740, 1740, 1740, 921, 919, 1740, 3092, 3105, 3105, 3105, - 1740, 1740, 1740, 1742, 1740, 3102, 3102, 3102, 917, 3103, - 915, 913, 3104, 910, 3106, 3164, 3164, 3164, 909, 3165, - 908, 907, 3166, 3128, 3128, 3128, 3182, 3182, 3182, 1740, - 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 3140, - 906, 3129, 1740, 904, 1742, 1743, 902, 1740, 1740, 1740, - 1742, 1740, 3110, 3110, 3110, 901, 3111, 900, 898, 3112, - 3113, 3113, 3113, 896, 3114, 895, 893, 3115, 3193, 3193, - 3193, 3195, 3195, 3195, 891, 890, 1740, 1740, 3197, 3197, - 3197, 888, 3164, 3164, 3164, 3194, 3165, 884, 3196, 3166, - - 3205, 3205, 3205, 883, 881, 3198, 3215, 3215, 3215, 3182, - 3182, 3182, 3193, 3193, 3193, 876, 874, 3206, 3225, 3225, - 3225, 870, 3226, 869, 1180, 3227, 868, 1742, 866, 3194, - 3195, 3195, 3195, 3228, 3228, 3228, 864, 3229, 863, 862, - 3230, 3197, 3197, 3197, 3231, 3231, 3231, 3196, 3232, 860, - 858, 3233, 3205, 3205, 3205, 3240, 3240, 3240, 3198, 3241, - 1947, 857, 3242, 3215, 3215, 3215, 3225, 3225, 3225, 3206, - 3226, 855, 853, 3227, 852, 3228, 3228, 3228, 851, 3229, - 850, 1180, 3230, 3231, 3231, 3231, 849, 3232, 848, 847, - 3233, 3240, 3240, 3240, 845, 3241, 843, 842, 3242, 839, - - 3251, 3364, 3364, 3364, 3364, 3364, 3364, 838, 3373, 837, - 835, 3374, 3466, 3466, 3466, 3466, 3466, 3466, 833, 1180, - 822, 821, 1180, 818, 816, 814, 813, 812, 810, 808, - 3467, 806, 804, 3467, 264, 264, 264, 264, 264, 264, + 1253, 2694, 1252, 1249, 2695, 1243, 2690, 1238, 1237, 1472, + + 1233, 1228, 1482, 2696, 2696, 2696, 2802, 2802, 2802, 1227, + 2803, 1226, 1225, 2804, 2698, 2698, 2698, 2805, 2805, 2805, + 2697, 2806, 1224, 1223, 2807, 2700, 2700, 2700, 1518, 1518, + 1518, 2699, 2813, 2813, 2813, 2708, 2708, 2708, 2712, 2712, + 2712, 1222, 1220, 2701, 1219, 2801, 1520, 2800, 1218, 2817, + 2817, 2817, 1217, 2818, 1216, 2713, 2819, 1262, 1262, 1262, + 2851, 2851, 2851, 2853, 2853, 2853, 1293, 1293, 1293, 2749, + 2749, 2749, 2856, 2856, 2856, 1264, 2751, 2751, 2751, 1215, + 2854, 2859, 2859, 2859, 1295, 2860, 1214, 1213, 2861, 2857, + 2808, 1212, 1211, 2752, 2753, 2753, 2753, 1208, 2754, 1207, + + 1206, 2755, 2862, 2862, 2862, 2757, 2757, 2757, 2837, 2866, + 2866, 2866, 2762, 2762, 2762, 2871, 2871, 2871, 2858, 2863, + 2868, 2868, 2868, 2758, 2869, 1205, 2867, 2870, 2855, 2763, + 1204, 1203, 2872, 2766, 2766, 2766, 1202, 2767, 1201, 1200, + 2768, 2777, 2777, 2777, 2882, 2882, 2882, 1199, 2883, 1192, + 1191, 2884, 2779, 2779, 2779, 1190, 2780, 1189, 2778, 2781, + 2782, 2782, 2782, 2885, 2885, 2885, 1188, 2886, 1187, 1186, + 2887, 2889, 2889, 2889, 2787, 2787, 2787, 2783, 2788, 1183, + 1181, 2789, 2790, 2790, 2790, 2892, 2892, 2892, 2890, 2893, + 1180, 1178, 2894, 2792, 2792, 2792, 2895, 2895, 2895, 2791, + + 2896, 1176, 1173, 2897, 1470, 1470, 1470, 1480, 1480, 1480, + 2793, 2802, 2802, 2802, 1171, 2803, 1168, 1164, 2804, 2805, + 2805, 2805, 1472, 2806, 1162, 1482, 2807, 2910, 2910, 2910, + 2914, 2914, 2914, 2813, 2813, 2813, 2917, 2917, 2917, 2817, + 2817, 2817, 1161, 2818, 1160, 2911, 2819, 2915, 1742, 2928, + 2928, 2928, 1262, 1262, 1262, 2904, 2851, 2851, 2851, 2952, + 2952, 2952, 2853, 2853, 2853, 1158, 2929, 1293, 1293, 1293, + 1264, 2953, 2953, 2953, 2905, 2954, 1157, 1156, 2955, 2854, + 2856, 2856, 2856, 1155, 1154, 1295, 2957, 2957, 2957, 1153, + 2958, 1151, 1150, 2959, 2862, 2862, 2862, 2857, 2859, 2859, + + 2859, 2938, 2860, 1149, 1148, 2861, 2961, 2961, 2961, 1146, + 2962, 2863, 1145, 2963, 2866, 2866, 2866, 1144, 2956, 2966, + 2966, 2966, 1140, 2967, 1139, 1137, 2968, 1136, 2868, 2868, + 2868, 2867, 2869, 1135, 1134, 2870, 2871, 2871, 2871, 2969, + 2969, 2969, 1133, 2970, 1132, 1130, 2971, 2882, 2882, 2882, + 1129, 2883, 1128, 2872, 2884, 2885, 2885, 2885, 1127, 2886, + 1125, 1124, 2887, 2889, 2889, 2889, 2982, 2982, 2982, 1123, + 2983, 1120, 1119, 2984, 2892, 2892, 2892, 1117, 2893, 1114, + 2890, 2894, 2895, 2895, 2895, 1113, 2896, 1109, 1108, 2897, + 3000, 3000, 3000, 1480, 1480, 1480, 2910, 2910, 2910, 3008, + + 3008, 3008, 2914, 2914, 2914, 3010, 3010, 3010, 3001, 3011, + 1106, 1482, 3012, 1105, 2911, 1104, 3009, 1742, 1101, 2915, + 1742, 1100, 1099, 1742, 3013, 3013, 3013, 2917, 2917, 2917, + 3014, 3014, 3014, 3015, 3015, 3015, 2928, 2928, 2928, 3024, + 3024, 3024, 1098, 3025, 1096, 1095, 3026, 1262, 1262, 1262, + 3042, 3042, 3042, 2929, 2952, 2952, 2952, 1094, 1093, 3002, + 2953, 2953, 2953, 1092, 2954, 1264, 1087, 2955, 3043, 3043, + 3043, 2957, 2957, 2957, 1085, 2958, 1084, 1083, 2959, 1082, + 2961, 2961, 2961, 1081, 2962, 1080, 3044, 2963, 2966, 2966, + 2966, 1079, 2967, 1078, 1077, 2968, 2969, 2969, 2969, 1076, + + 2970, 1075, 1072, 2971, 3048, 3048, 3048, 3058, 3058, 3058, + 2982, 2982, 2982, 3033, 2983, 1069, 1068, 2984, 3060, 3060, + 3060, 3049, 1067, 1061, 3059, 3000, 3000, 3000, 1480, 1480, + 1480, 3008, 3008, 3008, 1060, 3061, 1058, 3080, 3080, 3080, + 1057, 3081, 1055, 3001, 3082, 1052, 1482, 1051, 3009, 1742, + 3010, 3010, 3010, 1048, 3011, 1742, 1046, 3012, 3013, 3013, + 3013, 3014, 3014, 3014, 3015, 3015, 3015, 1045, 1742, 3024, + 3024, 3024, 1044, 3025, 1039, 1038, 3026, 1036, 1035, 3074, + 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1034, + 1032, 1740, 3099, 3099, 3099, 1031, 1740, 1740, 1740, 1742, + + 1740, 3042, 3042, 3042, 3043, 3043, 3043, 3048, 3048, 3048, + 3100, 3110, 3110, 3110, 1029, 3111, 1027, 1026, 3112, 3113, + 3113, 3113, 3044, 1023, 3049, 1740, 1740, 1740, 1740, 1740, + 1740, 1740, 1740, 1740, 1740, 1740, 3114, 1018, 1740, 3058, + 3058, 3058, 1017, 1740, 1740, 1740, 1742, 1740, 3120, 3120, + 3120, 1014, 3121, 1013, 1012, 3122, 3059, 3060, 3060, 3060, + 3123, 3123, 3123, 1009, 3124, 1008, 1006, 3125, 3138, 3138, + 3138, 1003, 1740, 1740, 3061, 3080, 3080, 3080, 1001, 3081, + 1000, 999, 3082, 998, 996, 995, 3139, 994, 3099, 3099, + 3099, 993, 992, 1742, 1740, 1740, 1740, 1740, 1740, 3150, + + 1740, 1740, 1740, 991, 988, 1740, 3100, 3113, 3113, 3113, + 1740, 1740, 1740, 1742, 1740, 3110, 3110, 3110, 987, 3111, + 986, 983, 3112, 980, 3114, 3174, 3174, 3174, 979, 3175, + 977, 976, 3176, 3138, 3138, 3138, 3194, 3194, 3194, 1740, + 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 3150, + 973, 3139, 1740, 970, 1742, 1743, 967, 1740, 1740, 1740, + 1742, 1740, 3120, 3120, 3120, 966, 3121, 958, 957, 3122, + 3123, 3123, 3123, 956, 3124, 955, 949, 3125, 3207, 3207, + 3207, 3209, 3209, 3209, 948, 947, 1740, 1740, 3211, 3211, + 3211, 945, 3174, 3174, 3174, 3208, 3175, 944, 3210, 3176, + + 3221, 3221, 3221, 943, 942, 3212, 3231, 3231, 3231, 3194, + 3194, 3194, 3207, 3207, 3207, 941, 940, 3222, 3243, 3243, + 3243, 935, 3244, 932, 1180, 3245, 934, 1742, 929, 3208, + 3209, 3209, 3209, 3246, 3246, 3246, 928, 3247, 926, 924, + 3248, 3211, 3211, 3211, 3249, 3249, 3249, 3210, 3250, 923, + 921, 3251, 3221, 3221, 3221, 3260, 3260, 3260, 3212, 3261, + 1947, 919, 3262, 3231, 3231, 3231, 3243, 3243, 3243, 3222, + 3244, 917, 915, 3245, 913, 3246, 3246, 3246, 910, 3247, + 909, 1180, 3248, 3249, 3249, 3249, 908, 3250, 907, 906, + 3251, 3260, 3260, 3260, 904, 3261, 902, 901, 3262, 900, + + 3271, 3396, 3396, 3396, 3396, 3396, 3396, 898, 3407, 896, + 895, 3408, 3500, 3500, 3500, 3500, 3500, 3500, 893, 1180, + 891, 890, 1180, 888, 884, 883, 881, 876, 874, 870, + 3501, 869, 868, 3501, 264, 264, 264, 264, 264, 264, 264, 264, 264, 265, 265, 265, 265, 265, 265, 265, 265, 265, 270, 270, 270, 270, 270, 270, 270, 270, 270, 273, 273, 273, 273, 273, 273, 273, 273, 273, @@ -2755,382 +2755,382 @@ static yyconst flex_int16_t yy_nxt[12714] = 662, 662, 662, 668, 668, 668, 668, 668, 668, 668, 668, 668, 673, 673, 673, 673, 673, 673, 673, 673, - 673, 693, 693, 693, 803, 802, 801, 693, 720, 720, - 720, 799, 798, 796, 720, 724, 724, 724, 793, 792, - 791, 724, 732, 732, 732, 789, 787, 786, 732, 743, - 743, 743, 784, 782, 781, 743, 749, 749, 749, 779, - 776, 775, 749, 772, 772, 772, 774, 773, 771, 772, - 780, 780, 780, 3468, 718, 751, 780, 785, 785, 785, - 750, 748, 746, 785, 790, 790, 790, 745, 744, 742, - 790, 800, 800, 800, 738, 734, 733, 800, 807, 807, - 807, 731, 730, 727, 807, 811, 811, 811, 726, 725, - 723, 811, 817, 817, 817, 722, 721, 719, 817, 836, - - 836, 836, 714, 3468, 694, 836, 846, 846, 846, 692, - 690, 684, 846, 856, 856, 856, 683, 684, 683, 856, - 861, 861, 861, 682, 681, 3468, 861, 867, 867, 867, - 3468, 3468, 3468, 867, 875, 875, 875, 3468, 3468, 3468, - 875, 882, 882, 882, 3468, 3468, 3468, 882, 889, 889, - 889, 3468, 3468, 3468, 889, 894, 894, 894, 3468, 3468, - 3468, 894, 899, 899, 899, 3468, 3468, 3468, 899, 905, - 905, 905, 3468, 3468, 3468, 905, 914, 914, 914, 3468, - 3468, 3468, 914, 918, 918, 918, 3468, 3468, 3468, 918, - 922, 922, 922, 3468, 3468, 3468, 922, 927, 927, 927, - - 3468, 3468, 3468, 927, 931, 931, 931, 931, 931, 931, - 931, 3468, 931, 693, 693, 693, 3468, 3468, 3468, 693, - 946, 3468, 3468, 3468, 946, 720, 720, 720, 3468, 3468, - 3468, 720, 978, 3468, 3468, 3468, 978, 724, 724, 724, - 3468, 3468, 3468, 724, 985, 3468, 3468, 3468, 985, 732, - 732, 732, 3468, 3468, 3468, 732, 997, 3468, 3468, 3468, - 997, 743, 743, 743, 3468, 3468, 3468, 743, 1002, 3468, - 3468, 3468, 1002, 749, 749, 749, 3468, 3468, 3468, 749, - 1007, 3468, 3468, 3468, 1007, 772, 772, 772, 3468, 3468, - 3468, 772, 1028, 3468, 3468, 3468, 1028, 780, 780, 780, - - 3468, 3468, 3468, 780, 1033, 3468, 3468, 3468, 1033, 785, - 785, 785, 3468, 3468, 3468, 785, 1037, 3468, 3468, 3468, - 1037, 790, 790, 790, 3468, 3468, 3468, 790, 1047, 3468, - 3468, 3468, 1047, 800, 800, 800, 3468, 3468, 3468, 800, - 1056, 3468, 3468, 3468, 1056, 807, 807, 807, 3468, 3468, - 3468, 807, 1059, 3468, 3468, 3468, 1059, 811, 811, 811, - 3468, 3468, 3468, 811, 1066, 3468, 3468, 3468, 1066, 817, - 817, 817, 3468, 3468, 3468, 817, 1086, 3468, 3468, 3468, - 1086, 836, 836, 836, 3468, 3468, 3468, 836, 1097, 3468, - 3468, 3468, 1097, 846, 846, 846, 3468, 3468, 3468, 846, - - 1107, 3468, 3468, 3468, 1107, 856, 856, 856, 3468, 3468, - 3468, 856, 1112, 3468, 3468, 3468, 1112, 861, 861, 861, - 3468, 3468, 3468, 861, 1118, 3468, 3468, 3468, 1118, 867, - 867, 867, 3468, 3468, 3468, 867, 1126, 3468, 3468, 3468, - 1126, 875, 875, 875, 3468, 3468, 3468, 875, 1131, 3468, - 3468, 3468, 1131, 882, 882, 882, 3468, 3468, 3468, 882, - 1138, 3468, 3468, 3468, 1138, 889, 889, 889, 3468, 3468, - 3468, 889, 1143, 3468, 3468, 3468, 1143, 894, 894, 894, - 3468, 3468, 3468, 894, 1147, 3468, 3468, 3468, 1147, 899, - 899, 899, 3468, 3468, 3468, 899, 1152, 3468, 3468, 3468, - - 1152, 905, 905, 905, 3468, 3468, 3468, 905, 1159, 3468, - 3468, 3468, 1159, 914, 914, 914, 3468, 3468, 3468, 914, - 1163, 3468, 3468, 3468, 1163, 918, 918, 918, 3468, 3468, - 3468, 918, 1167, 3468, 3468, 3468, 1167, 922, 922, 922, - 3468, 3468, 3468, 922, 1172, 3468, 3468, 3468, 1172, 927, - 927, 927, 3468, 3468, 3468, 927, 1177, 3468, 3468, 3468, + 673, 693, 693, 693, 866, 864, 863, 693, 720, 720, + 720, 862, 860, 858, 720, 724, 724, 724, 857, 855, + 853, 724, 732, 732, 732, 852, 851, 850, 732, 743, + 743, 743, 849, 848, 847, 743, 749, 749, 749, 845, + 843, 842, 749, 772, 772, 772, 839, 838, 837, 772, + 780, 780, 780, 835, 833, 822, 780, 785, 785, 785, + 821, 818, 816, 785, 790, 790, 790, 814, 813, 812, + 790, 800, 800, 800, 810, 808, 806, 800, 807, 807, + 807, 804, 803, 802, 807, 811, 811, 811, 801, 799, + 798, 811, 817, 817, 817, 796, 793, 792, 817, 836, + + 836, 836, 791, 789, 787, 836, 846, 846, 846, 786, + 784, 782, 846, 856, 856, 856, 781, 779, 776, 856, + 861, 861, 861, 775, 774, 773, 861, 867, 867, 867, + 771, 3502, 718, 867, 875, 875, 875, 751, 750, 748, + 875, 882, 882, 882, 746, 745, 744, 882, 889, 889, + 889, 742, 738, 734, 889, 894, 894, 894, 733, 731, + 730, 894, 899, 899, 899, 727, 726, 725, 899, 905, + 905, 905, 723, 722, 721, 905, 914, 914, 914, 719, + 714, 3502, 914, 918, 918, 918, 694, 692, 690, 918, + 922, 922, 922, 684, 683, 684, 922, 927, 927, 927, + + 683, 682, 681, 927, 931, 931, 931, 931, 931, 931, + 931, 3502, 931, 693, 693, 693, 3502, 3502, 3502, 693, + 946, 3502, 3502, 3502, 946, 720, 720, 720, 3502, 3502, + 3502, 720, 978, 3502, 3502, 3502, 978, 724, 724, 724, + 3502, 3502, 3502, 724, 985, 3502, 3502, 3502, 985, 732, + 732, 732, 3502, 3502, 3502, 732, 997, 3502, 3502, 3502, + 997, 743, 743, 743, 3502, 3502, 3502, 743, 1002, 3502, + 3502, 3502, 1002, 749, 749, 749, 3502, 3502, 3502, 749, + 1007, 3502, 3502, 3502, 1007, 772, 772, 772, 3502, 3502, + 3502, 772, 1028, 3502, 3502, 3502, 1028, 780, 780, 780, + + 3502, 3502, 3502, 780, 1033, 3502, 3502, 3502, 1033, 785, + 785, 785, 3502, 3502, 3502, 785, 1037, 3502, 3502, 3502, + 1037, 790, 790, 790, 3502, 3502, 3502, 790, 1047, 3502, + 3502, 3502, 1047, 800, 800, 800, 3502, 3502, 3502, 800, + 1056, 3502, 3502, 3502, 1056, 807, 807, 807, 3502, 3502, + 3502, 807, 1059, 3502, 3502, 3502, 1059, 811, 811, 811, + 3502, 3502, 3502, 811, 1066, 3502, 3502, 3502, 1066, 817, + 817, 817, 3502, 3502, 3502, 817, 1086, 3502, 3502, 3502, + 1086, 836, 836, 836, 3502, 3502, 3502, 836, 1097, 3502, + 3502, 3502, 1097, 846, 846, 846, 3502, 3502, 3502, 846, + + 1107, 3502, 3502, 3502, 1107, 856, 856, 856, 3502, 3502, + 3502, 856, 1112, 3502, 3502, 3502, 1112, 861, 861, 861, + 3502, 3502, 3502, 861, 1118, 3502, 3502, 3502, 1118, 867, + 867, 867, 3502, 3502, 3502, 867, 1126, 3502, 3502, 3502, + 1126, 875, 875, 875, 3502, 3502, 3502, 875, 1131, 3502, + 3502, 3502, 1131, 882, 882, 882, 3502, 3502, 3502, 882, + 1138, 3502, 3502, 3502, 1138, 889, 889, 889, 3502, 3502, + 3502, 889, 1143, 3502, 3502, 3502, 1143, 894, 894, 894, + 3502, 3502, 3502, 894, 1147, 3502, 3502, 3502, 1147, 899, + 899, 899, 3502, 3502, 3502, 899, 1152, 3502, 3502, 3502, + + 1152, 905, 905, 905, 3502, 3502, 3502, 905, 1159, 3502, + 3502, 3502, 1159, 914, 914, 914, 3502, 3502, 3502, 914, + 1163, 3502, 3502, 3502, 1163, 918, 918, 918, 3502, 3502, + 3502, 918, 1167, 3502, 3502, 3502, 1167, 922, 922, 922, + 3502, 3502, 3502, 922, 1172, 3502, 3502, 3502, 1172, 927, + 927, 927, 3502, 3502, 3502, 927, 1177, 3502, 3502, 3502, 1177, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, - 1185, 3468, 3468, 3468, 3468, 1185, 693, 693, 693, 3468, - 3468, 3468, 693, 1194, 1194, 1194, 1194, 3468, 3468, 1194, - 1194, 720, 720, 720, 3468, 3468, 3468, 720, 1230, 1230, - - 1230, 1230, 3468, 3468, 1230, 1230, 724, 724, 724, 3468, - 3468, 3468, 724, 1240, 1240, 1240, 1240, 3468, 3468, 1240, - 1240, 732, 732, 732, 3468, 3468, 3468, 732, 1256, 1256, - 1256, 1256, 3468, 3468, 1256, 1256, 743, 743, 743, 3468, - 3468, 3468, 743, 1263, 1263, 1263, 1263, 3468, 3468, 1263, - 1263, 749, 749, 749, 3468, 3468, 3468, 749, 1271, 1271, - 1271, 1271, 3468, 3468, 1271, 1271, 772, 772, 772, 3468, - 3468, 3468, 772, 1294, 1294, 1294, 1294, 3468, 3468, 1294, - 1294, 780, 780, 780, 3468, 3468, 3468, 780, 1301, 1301, - 1301, 1301, 3468, 3468, 1301, 1301, 785, 785, 785, 3468, - - 3468, 3468, 785, 1307, 1307, 1307, 1307, 3468, 3468, 1307, - 1307, 790, 790, 790, 3468, 3468, 3468, 790, 1320, 1320, - 1320, 1320, 3468, 3468, 1320, 1320, 800, 800, 800, 3468, - 3468, 3468, 800, 1332, 1332, 1332, 1332, 3468, 3468, 1332, - 1332, 807, 807, 807, 3468, 3468, 3468, 807, 1337, 1337, - 1337, 1337, 3468, 3468, 1337, 1337, 811, 811, 811, 3468, - 3468, 3468, 811, 1348, 1348, 1348, 1348, 3468, 3468, 1348, - 1348, 817, 817, 817, 3468, 3468, 3468, 817, 1375, 1375, - 1375, 1375, 3468, 3468, 1375, 1375, 836, 836, 836, 836, - 3468, 836, 3468, 836, 1391, 1391, 1391, 1391, 3468, 3468, - - 1391, 1391, 846, 846, 846, 3468, 3468, 3468, 846, 1406, - 1406, 1406, 1406, 3468, 3468, 1406, 1406, 856, 856, 856, - 3468, 3468, 3468, 856, 1414, 1414, 1414, 1414, 3468, 3468, - 1414, 1414, 861, 861, 861, 3468, 3468, 3468, 861, 1423, - 1423, 1423, 1423, 3468, 3468, 1423, 1423, 867, 867, 867, - 3468, 3468, 3468, 867, 1434, 1434, 1434, 1434, 3468, 3468, - 1434, 1434, 875, 875, 875, 875, 3468, 875, 3468, 875, - 1443, 1443, 1443, 1443, 3468, 3468, 1443, 1443, 882, 882, - 882, 882, 3468, 882, 3468, 882, 1455, 1455, 1455, 1455, - 3468, 3468, 1455, 1455, 889, 889, 889, 3468, 3468, 3468, - - 889, 1463, 1463, 1463, 1463, 3468, 3468, 1463, 1463, 894, - 894, 894, 894, 3468, 894, 3468, 894, 1471, 1471, 1471, - 1471, 3468, 3468, 1471, 1471, 899, 899, 899, 899, 3468, - 899, 3468, 899, 1481, 1481, 1481, 1481, 3468, 3468, 1481, - 1481, 905, 905, 905, 3468, 3468, 3468, 905, 1490, 1490, - 1490, 1490, 3468, 3468, 1490, 1490, 914, 914, 914, 3468, - 3468, 3468, 914, 1496, 1496, 1496, 1496, 3468, 3468, 1496, - 1496, 1503, 1503, 1503, 1503, 3468, 3468, 1503, 1503, 922, - 922, 922, 3468, 3468, 3468, 922, 1511, 1511, 1511, 1511, - 3468, 3468, 1511, 1511, 927, 927, 927, 3468, 3468, 3468, - - 927, 1519, 1519, 1519, 1519, 3468, 3468, 1519, 1519, 1179, - 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1185, 3468, - 1185, 3468, 3468, 1185, 693, 693, 693, 3468, 3468, 3468, - 693, 1194, 1194, 1194, 1194, 3468, 3468, 1194, 1194, 720, - 720, 720, 720, 3468, 720, 3468, 720, 1230, 1230, 1230, - 1230, 3468, 3468, 1230, 1230, 724, 724, 724, 724, 3468, - 724, 3468, 724, 1240, 1240, 1240, 1240, 3468, 3468, 1240, - 1240, 732, 732, 732, 3468, 3468, 3468, 732, 1256, 1256, - 1256, 1256, 3468, 3468, 1256, 1256, 743, 743, 743, 3468, - 3468, 3468, 743, 1263, 1263, 1263, 1263, 3468, 3468, 1263, - - 1263, 749, 749, 749, 3468, 3468, 3468, 749, 1271, 1271, - 1271, 1271, 3468, 3468, 1271, 1271, 772, 772, 772, 3468, - 3468, 3468, 772, 1294, 1294, 1294, 1294, 3468, 3468, 1294, - 1294, 780, 780, 780, 780, 3468, 780, 3468, 780, 1301, - 1301, 1301, 1301, 3468, 3468, 1301, 1301, 785, 785, 785, - 785, 3468, 785, 3468, 785, 1307, 1307, 1307, 1307, 3468, - 3468, 1307, 1307, 790, 790, 790, 3468, 3468, 3468, 790, - 1320, 1320, 1320, 1320, 3468, 3468, 1320, 1320, 800, 800, - 800, 3468, 3468, 3468, 800, 1332, 1332, 1332, 1332, 3468, - 3468, 1332, 1332, 807, 807, 807, 807, 3468, 807, 3468, - - 807, 1337, 1337, 1337, 1337, 3468, 3468, 1337, 1337, 811, - 811, 811, 811, 3468, 811, 3468, 811, 1348, 1348, 1348, - 1348, 3468, 3468, 1348, 1348, 817, 817, 817, 3468, 3468, - 3468, 817, 1375, 1375, 1375, 1375, 3468, 3468, 1375, 1375, - 836, 836, 836, 3468, 3468, 3468, 836, 1391, 1391, 1391, - 1391, 3468, 3468, 1391, 1391, 846, 846, 846, 3468, 3468, - 3468, 846, 1406, 1406, 1406, 1406, 3468, 3468, 1406, 1406, - 856, 856, 856, 3468, 3468, 3468, 856, 1414, 1414, 1414, - 1414, 3468, 3468, 1414, 1414, 861, 861, 861, 3468, 3468, - 3468, 861, 1423, 1423, 1423, 1423, 3468, 3468, 1423, 1423, - - 867, 867, 867, 3468, 3468, 3468, 867, 1434, 1434, 1434, - 1434, 3468, 3468, 1434, 1434, 875, 875, 875, 3468, 3468, - 3468, 875, 1443, 1443, 1443, 1443, 3468, 3468, 1443, 1443, - 882, 882, 882, 3468, 3468, 3468, 882, 1455, 1455, 1455, - 1455, 3468, 3468, 1455, 1455, 889, 889, 889, 3468, 3468, - 3468, 889, 1463, 1463, 1463, 1463, 3468, 3468, 1463, 1463, - 1471, 1471, 1471, 1471, 3468, 3468, 1471, 1471, 899, 899, - 899, 3468, 3468, 3468, 899, 1481, 1481, 1481, 1481, 3468, - 3468, 1481, 1481, 905, 905, 905, 3468, 3468, 3468, 905, - 1490, 1490, 1490, 1490, 3468, 3468, 1490, 1490, 914, 914, - - 914, 3468, 3468, 3468, 914, 1496, 1496, 1496, 1496, 3468, - 3468, 1496, 1496, 1503, 1503, 1503, 1503, 3468, 3468, 1503, - 1503, 922, 922, 922, 3468, 3468, 3468, 922, 1511, 1511, - 1511, 1511, 3468, 3468, 1511, 1511, 927, 927, 927, 3468, - 3468, 3468, 927, 1519, 1519, 1519, 1519, 3468, 3468, 1519, + 1185, 3502, 3502, 3502, 3502, 1185, 693, 693, 693, 3502, + 3502, 3502, 693, 1194, 1194, 1194, 1194, 3502, 3502, 1194, + 1194, 720, 720, 720, 3502, 3502, 3502, 720, 1230, 1230, + + 1230, 1230, 3502, 3502, 1230, 1230, 724, 724, 724, 3502, + 3502, 3502, 724, 1240, 1240, 1240, 1240, 3502, 3502, 1240, + 1240, 732, 732, 732, 3502, 3502, 3502, 732, 1256, 1256, + 1256, 1256, 3502, 3502, 1256, 1256, 743, 743, 743, 3502, + 3502, 3502, 743, 1263, 1263, 1263, 1263, 3502, 3502, 1263, + 1263, 749, 749, 749, 3502, 3502, 3502, 749, 1271, 1271, + 1271, 1271, 3502, 3502, 1271, 1271, 772, 772, 772, 3502, + 3502, 3502, 772, 1294, 1294, 1294, 1294, 3502, 3502, 1294, + 1294, 780, 780, 780, 3502, 3502, 3502, 780, 1301, 1301, + 1301, 1301, 3502, 3502, 1301, 1301, 785, 785, 785, 3502, + + 3502, 3502, 785, 1307, 1307, 1307, 1307, 3502, 3502, 1307, + 1307, 790, 790, 790, 3502, 3502, 3502, 790, 1320, 1320, + 1320, 1320, 3502, 3502, 1320, 1320, 800, 800, 800, 3502, + 3502, 3502, 800, 1332, 1332, 1332, 1332, 3502, 3502, 1332, + 1332, 807, 807, 807, 3502, 3502, 3502, 807, 1337, 1337, + 1337, 1337, 3502, 3502, 1337, 1337, 811, 811, 811, 3502, + 3502, 3502, 811, 1348, 1348, 1348, 1348, 3502, 3502, 1348, + 1348, 817, 817, 817, 3502, 3502, 3502, 817, 1375, 1375, + 1375, 1375, 3502, 3502, 1375, 1375, 836, 836, 836, 836, + 3502, 836, 3502, 836, 1391, 1391, 1391, 1391, 3502, 3502, + + 1391, 1391, 846, 846, 846, 3502, 3502, 3502, 846, 1406, + 1406, 1406, 1406, 3502, 3502, 1406, 1406, 856, 856, 856, + 3502, 3502, 3502, 856, 1414, 1414, 1414, 1414, 3502, 3502, + 1414, 1414, 861, 861, 861, 3502, 3502, 3502, 861, 1423, + 1423, 1423, 1423, 3502, 3502, 1423, 1423, 867, 867, 867, + 3502, 3502, 3502, 867, 1434, 1434, 1434, 1434, 3502, 3502, + 1434, 1434, 875, 875, 875, 875, 3502, 875, 3502, 875, + 1443, 1443, 1443, 1443, 3502, 3502, 1443, 1443, 882, 882, + 882, 882, 3502, 882, 3502, 882, 1455, 1455, 1455, 1455, + 3502, 3502, 1455, 1455, 889, 889, 889, 3502, 3502, 3502, + + 889, 1463, 1463, 1463, 1463, 3502, 3502, 1463, 1463, 894, + 894, 894, 894, 3502, 894, 3502, 894, 1471, 1471, 1471, + 1471, 3502, 3502, 1471, 1471, 899, 899, 899, 899, 3502, + 899, 3502, 899, 1481, 1481, 1481, 1481, 3502, 3502, 1481, + 1481, 905, 905, 905, 3502, 3502, 3502, 905, 1490, 1490, + 1490, 1490, 3502, 3502, 1490, 1490, 914, 914, 914, 3502, + 3502, 3502, 914, 1496, 1496, 1496, 1496, 3502, 3502, 1496, + 1496, 1503, 1503, 1503, 1503, 3502, 3502, 1503, 1503, 922, + 922, 922, 3502, 3502, 3502, 922, 1511, 1511, 1511, 1511, + 3502, 3502, 1511, 1511, 927, 927, 927, 3502, 3502, 3502, + + 927, 1519, 1519, 1519, 1519, 3502, 3502, 1519, 1519, 1179, + 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1185, 3502, + 1185, 3502, 3502, 1185, 693, 693, 693, 3502, 3502, 3502, + 693, 1194, 1194, 1194, 1194, 3502, 3502, 1194, 1194, 720, + 720, 720, 720, 3502, 720, 3502, 720, 1230, 1230, 1230, + 1230, 3502, 3502, 1230, 1230, 724, 724, 724, 724, 3502, + 724, 3502, 724, 1240, 1240, 1240, 1240, 3502, 3502, 1240, + 1240, 732, 732, 732, 3502, 3502, 3502, 732, 1256, 1256, + 1256, 1256, 3502, 3502, 1256, 1256, 743, 743, 743, 3502, + 3502, 3502, 743, 1263, 1263, 1263, 1263, 3502, 3502, 1263, + + 1263, 749, 749, 749, 3502, 3502, 3502, 749, 1271, 1271, + 1271, 1271, 3502, 3502, 1271, 1271, 772, 772, 772, 3502, + 3502, 3502, 772, 1294, 1294, 1294, 1294, 3502, 3502, 1294, + 1294, 780, 780, 780, 780, 3502, 780, 3502, 780, 1301, + 1301, 1301, 1301, 3502, 3502, 1301, 1301, 785, 785, 785, + 785, 3502, 785, 3502, 785, 1307, 1307, 1307, 1307, 3502, + 3502, 1307, 1307, 790, 790, 790, 3502, 3502, 3502, 790, + 1320, 1320, 1320, 1320, 3502, 3502, 1320, 1320, 800, 800, + 800, 3502, 3502, 3502, 800, 1332, 1332, 1332, 1332, 3502, + 3502, 1332, 1332, 807, 807, 807, 807, 3502, 807, 3502, + + 807, 1337, 1337, 1337, 1337, 3502, 3502, 1337, 1337, 811, + 811, 811, 811, 3502, 811, 3502, 811, 1348, 1348, 1348, + 1348, 3502, 3502, 1348, 1348, 817, 817, 817, 3502, 3502, + 3502, 817, 1375, 1375, 1375, 1375, 3502, 3502, 1375, 1375, + 836, 836, 836, 3502, 3502, 3502, 836, 1391, 1391, 1391, + 1391, 3502, 3502, 1391, 1391, 846, 846, 846, 3502, 3502, + 3502, 846, 1406, 1406, 1406, 1406, 3502, 3502, 1406, 1406, + 856, 856, 856, 3502, 3502, 3502, 856, 1414, 1414, 1414, + 1414, 3502, 3502, 1414, 1414, 861, 861, 861, 3502, 3502, + 3502, 861, 1423, 1423, 1423, 1423, 3502, 3502, 1423, 1423, + + 867, 867, 867, 3502, 3502, 3502, 867, 1434, 1434, 1434, + 1434, 3502, 3502, 1434, 1434, 875, 875, 875, 3502, 3502, + 3502, 875, 1443, 1443, 1443, 1443, 3502, 3502, 1443, 1443, + 882, 882, 882, 3502, 3502, 3502, 882, 1455, 1455, 1455, + 1455, 3502, 3502, 1455, 1455, 889, 889, 889, 3502, 3502, + 3502, 889, 1463, 1463, 1463, 1463, 3502, 3502, 1463, 1463, + 1471, 1471, 1471, 1471, 3502, 3502, 1471, 1471, 899, 899, + 899, 3502, 3502, 3502, 899, 1481, 1481, 1481, 1481, 3502, + 3502, 1481, 1481, 905, 905, 905, 3502, 3502, 3502, 905, + 1490, 1490, 1490, 1490, 3502, 3502, 1490, 1490, 914, 914, + + 914, 3502, 3502, 3502, 914, 1496, 1496, 1496, 1496, 3502, + 3502, 1496, 1496, 1503, 1503, 1503, 1503, 3502, 3502, 1503, + 1503, 922, 922, 922, 3502, 3502, 3502, 922, 1511, 1511, + 1511, 1511, 3502, 3502, 1511, 1511, 927, 927, 927, 3502, + 3502, 3502, 927, 1519, 1519, 1519, 1519, 3502, 3502, 1519, 1519, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 693, - 693, 693, 3468, 3468, 3468, 693, 1194, 1194, 1194, 1194, - 3468, 3468, 1194, 1194, 1230, 1230, 1230, 1230, 3468, 3468, - 1230, 1230, 724, 724, 724, 3468, 3468, 3468, 724, 1240, - - 1240, 1240, 1240, 3468, 3468, 1240, 1240, 732, 732, 732, - 3468, 3468, 3468, 732, 1256, 1256, 1256, 1256, 3468, 3468, - 1256, 1256, 743, 743, 743, 3468, 3468, 3468, 743, 1263, - 1263, 1263, 1263, 3468, 3468, 1263, 1263, 749, 749, 749, - 3468, 3468, 3468, 749, 772, 772, 772, 3468, 3468, 3468, - 772, 1294, 1294, 1294, 1294, 3468, 3468, 1294, 1294, 780, - 780, 780, 3468, 3468, 3468, 780, 1301, 1301, 1301, 1301, - 3468, 3468, 1301, 1301, 785, 785, 785, 3468, 3468, 3468, - 785, 1307, 1307, 1307, 1307, 3468, 3468, 1307, 1307, 790, - 790, 790, 3468, 3468, 3468, 790, 1320, 1320, 1320, 1320, - - 3468, 3468, 1320, 1320, 800, 800, 800, 3468, 3468, 3468, - 800, 1332, 1332, 1332, 1332, 3468, 3468, 1332, 1332, 1337, - 1337, 1337, 1337, 3468, 3468, 1337, 1337, 1348, 1348, 1348, - 1348, 3468, 3468, 1348, 1348, 817, 817, 817, 3468, 3468, - 3468, 817, 1375, 1375, 1375, 1375, 3468, 3468, 1375, 1375, - 836, 836, 836, 836, 3468, 836, 3468, 836, 1391, 1391, - 1391, 1391, 3468, 3468, 1391, 1391, 846, 846, 846, 3468, - 3468, 3468, 846, 1406, 1406, 1406, 1406, 3468, 3468, 1406, - 1406, 856, 856, 856, 3468, 3468, 3468, 856, 1414, 1414, - 1414, 1414, 3468, 3468, 1414, 1414, 861, 861, 861, 3468, - - 3468, 3468, 861, 1423, 1423, 1423, 1423, 3468, 3468, 1423, - 1423, 867, 867, 867, 3468, 3468, 3468, 867, 1434, 1434, - 1434, 1434, 3468, 3468, 1434, 1434, 875, 875, 875, 3468, - 3468, 3468, 875, 1443, 1443, 1443, 1443, 3468, 3468, 1443, - 1443, 882, 882, 882, 3468, 3468, 3468, 882, 1455, 1455, - 1455, 1455, 3468, 3468, 1455, 1455, 889, 889, 889, 3468, - 3468, 3468, 889, 1463, 1463, 1463, 1463, 3468, 3468, 1463, - 1463, 1471, 1471, 1471, 1471, 3468, 3468, 1471, 1471, 899, - 899, 899, 3468, 3468, 3468, 899, 1481, 1481, 1481, 1481, - 3468, 3468, 1481, 1481, 905, 905, 905, 3468, 3468, 3468, - - 905, 1490, 1490, 1490, 1490, 3468, 3468, 1490, 1490, 914, - 914, 914, 914, 3468, 914, 3468, 914, 1496, 1496, 1496, - 1496, 3468, 3468, 1496, 1496, 1503, 1503, 1503, 1503, 3468, - 3468, 1503, 1503, 922, 922, 922, 922, 3468, 922, 3468, - 922, 1511, 1511, 1511, 1511, 3468, 3468, 1511, 1511, 927, - 927, 927, 927, 3468, 927, 3468, 927, 1519, 1519, 1519, - 1519, 3468, 3468, 1519, 1519, 1179, 1179, 1179, 1179, 1179, + 693, 693, 3502, 3502, 3502, 693, 1194, 1194, 1194, 1194, + 3502, 3502, 1194, 1194, 1230, 1230, 1230, 1230, 3502, 3502, + 1230, 1230, 724, 724, 724, 3502, 3502, 3502, 724, 1240, + + 1240, 1240, 1240, 3502, 3502, 1240, 1240, 732, 732, 732, + 3502, 3502, 3502, 732, 1256, 1256, 1256, 1256, 3502, 3502, + 1256, 1256, 743, 743, 743, 3502, 3502, 3502, 743, 1263, + 1263, 1263, 1263, 3502, 3502, 1263, 1263, 749, 749, 749, + 3502, 3502, 3502, 749, 772, 772, 772, 3502, 3502, 3502, + 772, 1294, 1294, 1294, 1294, 3502, 3502, 1294, 1294, 780, + 780, 780, 3502, 3502, 3502, 780, 1301, 1301, 1301, 1301, + 3502, 3502, 1301, 1301, 785, 785, 785, 3502, 3502, 3502, + 785, 1307, 1307, 1307, 1307, 3502, 3502, 1307, 1307, 790, + 790, 790, 3502, 3502, 3502, 790, 1320, 1320, 1320, 1320, + + 3502, 3502, 1320, 1320, 800, 800, 800, 3502, 3502, 3502, + 800, 1332, 1332, 1332, 1332, 3502, 3502, 1332, 1332, 1337, + 1337, 1337, 1337, 3502, 3502, 1337, 1337, 1348, 1348, 1348, + 1348, 3502, 3502, 1348, 1348, 817, 817, 817, 3502, 3502, + 3502, 817, 1375, 1375, 1375, 1375, 3502, 3502, 1375, 1375, + 836, 836, 836, 836, 3502, 836, 3502, 836, 1391, 1391, + 1391, 1391, 3502, 3502, 1391, 1391, 846, 846, 846, 3502, + 3502, 3502, 846, 1406, 1406, 1406, 1406, 3502, 3502, 1406, + 1406, 856, 856, 856, 3502, 3502, 3502, 856, 1414, 1414, + 1414, 1414, 3502, 3502, 1414, 1414, 861, 861, 861, 3502, + + 3502, 3502, 861, 1423, 1423, 1423, 1423, 3502, 3502, 1423, + 1423, 867, 867, 867, 3502, 3502, 3502, 867, 1434, 1434, + 1434, 1434, 3502, 3502, 1434, 1434, 875, 875, 875, 3502, + 3502, 3502, 875, 1443, 1443, 1443, 1443, 3502, 3502, 1443, + 1443, 882, 882, 882, 3502, 3502, 3502, 882, 1455, 1455, + 1455, 1455, 3502, 3502, 1455, 1455, 889, 889, 889, 3502, + 3502, 3502, 889, 1463, 1463, 1463, 1463, 3502, 3502, 1463, + 1463, 1471, 1471, 1471, 1471, 3502, 3502, 1471, 1471, 899, + 899, 899, 3502, 3502, 3502, 899, 1481, 1481, 1481, 1481, + 3502, 3502, 1481, 1481, 905, 905, 905, 3502, 3502, 3502, + + 905, 1490, 1490, 1490, 1490, 3502, 3502, 1490, 1490, 914, + 914, 914, 914, 3502, 914, 3502, 914, 1496, 1496, 1496, + 1496, 3502, 3502, 1496, 1496, 1503, 1503, 1503, 1503, 3502, + 3502, 1503, 1503, 922, 922, 922, 922, 3502, 922, 3502, + 922, 1511, 1511, 1511, 1511, 3502, 3502, 1511, 1511, 927, + 927, 927, 927, 3502, 927, 3502, 927, 1519, 1519, 1519, + 1519, 3502, 3502, 1519, 1519, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1740, 1740, 1740, 1740, 1740, 1740, - 1740, 1740, 1740, 693, 693, 693, 3468, 3468, 3468, 693, - 1194, 1194, 1194, 1194, 3468, 3468, 1194, 1194, 1230, 1230, - - 1230, 1230, 3468, 3468, 1230, 1230, 724, 724, 724, 3468, - 3468, 3468, 724, 1240, 1240, 1240, 1240, 3468, 3468, 1240, - 1240, 732, 732, 732, 3468, 3468, 3468, 732, 1256, 1256, - 1256, 1256, 3468, 3468, 1256, 1256, 743, 743, 743, 3468, - 3468, 3468, 743, 1263, 1263, 1263, 1263, 3468, 3468, 1263, - 1263, 749, 749, 749, 3468, 3468, 3468, 749, 772, 772, - 772, 3468, 3468, 3468, 772, 1294, 1294, 1294, 1294, 3468, - 3468, 1294, 1294, 780, 780, 780, 3468, 3468, 3468, 780, - 1301, 1301, 1301, 1301, 3468, 3468, 1301, 1301, 785, 785, - 785, 785, 3468, 785, 3468, 785, 1307, 1307, 1307, 1307, - - 3468, 3468, 1307, 1307, 790, 790, 790, 3468, 3468, 3468, - 790, 1320, 1320, 1320, 1320, 3468, 3468, 1320, 1320, 800, - 800, 800, 800, 3468, 800, 3468, 800, 1332, 1332, 1332, - 1332, 3468, 3468, 1332, 1332, 1348, 1348, 1348, 1348, 3468, - 3468, 1348, 1348, 817, 817, 817, 3468, 3468, 3468, 817, - 1375, 1375, 1375, 1375, 3468, 3468, 1375, 1375, 836, 836, - 836, 836, 3468, 836, 3468, 836, 1391, 1391, 1391, 1391, - 3468, 3468, 1391, 1391, 846, 846, 846, 3468, 3468, 3468, - 846, 1406, 1406, 1406, 1406, 3468, 3468, 1406, 1406, 856, - 856, 856, 3468, 3468, 3468, 856, 1414, 1414, 1414, 1414, - - 3468, 3468, 1414, 1414, 861, 861, 861, 3468, 3468, 3468, - 861, 1423, 1423, 1423, 1423, 3468, 3468, 1423, 1423, 867, - 867, 867, 3468, 3468, 3468, 867, 1434, 1434, 1434, 1434, - 3468, 3468, 1434, 1434, 875, 875, 875, 3468, 3468, 3468, - 875, 1443, 1443, 1443, 1443, 3468, 3468, 1443, 1443, 882, - 882, 882, 882, 3468, 882, 3468, 882, 1455, 1455, 1455, - 1455, 3468, 3468, 1455, 1455, 889, 889, 889, 3468, 3468, - 3468, 889, 1463, 1463, 1463, 1463, 3468, 3468, 1463, 1463, - 1471, 1471, 1471, 1471, 3468, 3468, 1471, 1471, 899, 899, - 899, 899, 3468, 899, 3468, 899, 1481, 1481, 1481, 1481, - - 3468, 3468, 1481, 1481, 905, 905, 905, 3468, 3468, 3468, - 905, 1490, 1490, 1490, 1490, 3468, 3468, 1490, 1490, 1496, - 1496, 1496, 1496, 3468, 3468, 1496, 1496, 1503, 1503, 1503, - 1503, 3468, 3468, 1503, 1503, 1511, 1511, 1511, 1511, 3468, - 3468, 1511, 1511, 1519, 1519, 1519, 1519, 3468, 3468, 1519, + 1740, 1740, 1740, 693, 693, 693, 3502, 3502, 3502, 693, + 1194, 1194, 1194, 1194, 3502, 3502, 1194, 1194, 1230, 1230, + + 1230, 1230, 3502, 3502, 1230, 1230, 724, 724, 724, 3502, + 3502, 3502, 724, 1240, 1240, 1240, 1240, 3502, 3502, 1240, + 1240, 732, 732, 732, 3502, 3502, 3502, 732, 1256, 1256, + 1256, 1256, 3502, 3502, 1256, 1256, 743, 743, 743, 3502, + 3502, 3502, 743, 1263, 1263, 1263, 1263, 3502, 3502, 1263, + 1263, 749, 749, 749, 3502, 3502, 3502, 749, 772, 772, + 772, 3502, 3502, 3502, 772, 1294, 1294, 1294, 1294, 3502, + 3502, 1294, 1294, 780, 780, 780, 3502, 3502, 3502, 780, + 1301, 1301, 1301, 1301, 3502, 3502, 1301, 1301, 785, 785, + 785, 785, 3502, 785, 3502, 785, 1307, 1307, 1307, 1307, + + 3502, 3502, 1307, 1307, 790, 790, 790, 3502, 3502, 3502, + 790, 1320, 1320, 1320, 1320, 3502, 3502, 1320, 1320, 800, + 800, 800, 800, 3502, 800, 3502, 800, 1332, 1332, 1332, + 1332, 3502, 3502, 1332, 1332, 1348, 1348, 1348, 1348, 3502, + 3502, 1348, 1348, 817, 817, 817, 3502, 3502, 3502, 817, + 1375, 1375, 1375, 1375, 3502, 3502, 1375, 1375, 836, 836, + 836, 836, 3502, 836, 3502, 836, 1391, 1391, 1391, 1391, + 3502, 3502, 1391, 1391, 846, 846, 846, 3502, 3502, 3502, + 846, 1406, 1406, 1406, 1406, 3502, 3502, 1406, 1406, 856, + 856, 856, 3502, 3502, 3502, 856, 1414, 1414, 1414, 1414, + + 3502, 3502, 1414, 1414, 861, 861, 861, 3502, 3502, 3502, + 861, 1423, 1423, 1423, 1423, 3502, 3502, 1423, 1423, 867, + 867, 867, 3502, 3502, 3502, 867, 1434, 1434, 1434, 1434, + 3502, 3502, 1434, 1434, 875, 875, 875, 3502, 3502, 3502, + 875, 1443, 1443, 1443, 1443, 3502, 3502, 1443, 1443, 882, + 882, 882, 882, 3502, 882, 3502, 882, 1455, 1455, 1455, + 1455, 3502, 3502, 1455, 1455, 889, 889, 889, 3502, 3502, + 3502, 889, 1463, 1463, 1463, 1463, 3502, 3502, 1463, 1463, + 1471, 1471, 1471, 1471, 3502, 3502, 1471, 1471, 899, 899, + 899, 899, 3502, 899, 3502, 899, 1481, 1481, 1481, 1481, + + 3502, 3502, 1481, 1481, 905, 905, 905, 3502, 3502, 3502, + 905, 1490, 1490, 1490, 1490, 3502, 3502, 1490, 1490, 1496, + 1496, 1496, 1496, 3502, 3502, 1496, 1496, 1503, 1503, 1503, + 1503, 3502, 3502, 1503, 1503, 1511, 1511, 1511, 1511, 3502, + 3502, 1511, 1511, 1519, 1519, 1519, 1519, 3502, 3502, 1519, 1519, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 693, - 693, 693, 693, 3468, 693, 3468, 693, 1194, 1194, 1194, - 1194, 3468, 3468, 1194, 1194, 1230, 1230, 1230, 1230, 3468, - 3468, 1230, 1230, 724, 724, 724, 3468, 3468, 3468, 724, - - 1240, 1240, 1240, 1240, 3468, 3468, 1240, 1240, 732, 732, - 732, 3468, 3468, 3468, 732, 1256, 1256, 1256, 1256, 3468, - 3468, 1256, 1256, 743, 743, 743, 743, 3468, 743, 3468, - 743, 1263, 1263, 1263, 1263, 3468, 3468, 1263, 1263, 749, - 749, 749, 749, 3468, 749, 3468, 749, 772, 772, 772, - 772, 3468, 772, 3468, 772, 1294, 1294, 1294, 1294, 3468, - 3468, 1294, 1294, 780, 780, 780, 3468, 3468, 3468, 780, - 1301, 1301, 1301, 1301, 3468, 3468, 1301, 1301, 1307, 1307, - 1307, 1307, 3468, 3468, 1307, 1307, 790, 790, 790, 3468, - 3468, 3468, 790, 800, 800, 800, 800, 3468, 800, 3468, - - 800, 1332, 1332, 1332, 1332, 3468, 3468, 1332, 1332, 1348, - 1348, 1348, 1348, 3468, 3468, 1348, 1348, 817, 817, 817, - 3468, 3468, 3468, 817, 1375, 1375, 1375, 1375, 3468, 3468, - 1375, 1375, 836, 836, 836, 836, 3468, 836, 3468, 836, - 1391, 1391, 1391, 1391, 3468, 3468, 1391, 1391, 846, 846, - 846, 3468, 3468, 3468, 846, 856, 856, 856, 3468, 3468, - 3468, 856, 1414, 1414, 1414, 1414, 3468, 3468, 1414, 1414, - 861, 861, 861, 3468, 3468, 3468, 861, 1423, 1423, 1423, - 1423, 3468, 3468, 1423, 1423, 867, 867, 867, 3468, 3468, - 3468, 867, 875, 875, 875, 3468, 3468, 3468, 875, 1443, - - 1443, 1443, 1443, 3468, 3468, 1443, 1443, 882, 882, 882, - 3468, 3468, 3468, 882, 1455, 1455, 1455, 1455, 3468, 3468, - 1455, 1455, 889, 889, 889, 3468, 3468, 3468, 889, 1463, - 1463, 1463, 1463, 3468, 3468, 1463, 1463, 1471, 1471, 1471, - 1471, 3468, 3468, 1471, 1471, 1481, 1481, 1481, 1481, 3468, - 3468, 1481, 1481, 905, 905, 905, 3468, 3468, 3468, 905, - 1490, 1490, 1490, 1490, 3468, 3468, 1490, 1490, 1496, 1496, - 1496, 1496, 3468, 3468, 1496, 1496, 1503, 1503, 1503, 1503, - 3468, 3468, 1503, 1503, 1519, 1519, 1519, 1519, 3468, 3468, + 693, 693, 693, 3502, 693, 3502, 693, 1194, 1194, 1194, + 1194, 3502, 3502, 1194, 1194, 1230, 1230, 1230, 1230, 3502, + 3502, 1230, 1230, 724, 724, 724, 3502, 3502, 3502, 724, + + 1240, 1240, 1240, 1240, 3502, 3502, 1240, 1240, 732, 732, + 732, 3502, 3502, 3502, 732, 1256, 1256, 1256, 1256, 3502, + 3502, 1256, 1256, 743, 743, 743, 743, 3502, 743, 3502, + 743, 1263, 1263, 1263, 1263, 3502, 3502, 1263, 1263, 749, + 749, 749, 749, 3502, 749, 3502, 749, 772, 772, 772, + 772, 3502, 772, 3502, 772, 1294, 1294, 1294, 1294, 3502, + 3502, 1294, 1294, 780, 780, 780, 3502, 3502, 3502, 780, + 1301, 1301, 1301, 1301, 3502, 3502, 1301, 1301, 1307, 1307, + 1307, 1307, 3502, 3502, 1307, 1307, 790, 790, 790, 3502, + 3502, 3502, 790, 800, 800, 800, 800, 3502, 800, 3502, + + 800, 1332, 1332, 1332, 1332, 3502, 3502, 1332, 1332, 1348, + 1348, 1348, 1348, 3502, 3502, 1348, 1348, 817, 817, 817, + 3502, 3502, 3502, 817, 1375, 1375, 1375, 1375, 3502, 3502, + 1375, 1375, 836, 836, 836, 836, 3502, 836, 3502, 836, + 1391, 1391, 1391, 1391, 3502, 3502, 1391, 1391, 846, 846, + 846, 3502, 3502, 3502, 846, 856, 856, 856, 3502, 3502, + 3502, 856, 1414, 1414, 1414, 1414, 3502, 3502, 1414, 1414, + 861, 861, 861, 3502, 3502, 3502, 861, 1423, 1423, 1423, + 1423, 3502, 3502, 1423, 1423, 867, 867, 867, 3502, 3502, + 3502, 867, 875, 875, 875, 3502, 3502, 3502, 875, 1443, + + 1443, 1443, 1443, 3502, 3502, 1443, 1443, 882, 882, 882, + 3502, 3502, 3502, 882, 1455, 1455, 1455, 1455, 3502, 3502, + 1455, 1455, 889, 889, 889, 3502, 3502, 3502, 889, 1463, + 1463, 1463, 1463, 3502, 3502, 1463, 1463, 1471, 1471, 1471, + 1471, 3502, 3502, 1471, 1471, 1481, 1481, 1481, 1481, 3502, + 3502, 1481, 1481, 905, 905, 905, 3502, 3502, 3502, 905, + 1490, 1490, 1490, 1490, 3502, 3502, 1490, 1490, 1496, 1496, + 1496, 1496, 3502, 3502, 1496, 1496, 1503, 1503, 1503, 1503, + 3502, 3502, 1503, 1503, 1519, 1519, 1519, 1519, 3502, 3502, 1519, 1519, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, - 1194, 1194, 1194, 1194, 3468, 3468, 1194, 1194, 1230, 1230, - 1230, 1230, 3468, 3468, 1230, 1230, 724, 724, 724, 3468, - 3468, 3468, 724, 732, 732, 732, 3468, 3468, 3468, 732, - 1256, 1256, 1256, 1256, 3468, 3468, 1256, 1256, 1263, 1263, - 1263, 1263, 3468, 3468, 1263, 1263, 772, 772, 772, 3468, - 3468, 3468, 772, 1294, 1294, 1294, 1294, 3468, 3468, 1294, - 1294, 780, 780, 780, 3468, 3468, 3468, 780, 1307, 1307, - 1307, 1307, 3468, 3468, 1307, 1307, 790, 790, 790, 3468, - 3468, 3468, 790, 800, 800, 800, 3468, 3468, 3468, 800, - - 1332, 1332, 1332, 1332, 3468, 3468, 1332, 1332, 1348, 1348, - 1348, 1348, 3468, 3468, 1348, 1348, 817, 817, 817, 3468, - 3468, 3468, 817, 1375, 1375, 1375, 1375, 3468, 3468, 1375, - 1375, 1391, 1391, 1391, 1391, 3468, 3468, 1391, 1391, 846, - 846, 846, 3468, 3468, 3468, 846, 856, 856, 856, 3468, - 3468, 3468, 856, 1414, 1414, 1414, 1414, 3468, 3468, 1414, - 1414, 861, 861, 861, 3468, 3468, 3468, 861, 1423, 1423, - 1423, 1423, 3468, 3468, 1423, 1423, 867, 867, 867, 3468, - 3468, 3468, 867, 875, 875, 875, 3468, 3468, 3468, 875, - 882, 882, 882, 3468, 3468, 3468, 882, 1455, 1455, 1455, - - 1455, 3468, 3468, 1455, 1455, 889, 889, 889, 3468, 3468, - 3468, 889, 1463, 1463, 1463, 1463, 3468, 3468, 1463, 1463, - 1471, 1471, 1471, 1471, 3468, 3468, 1471, 1471, 1481, 1481, - 1481, 1481, 3468, 3468, 1481, 1481, 905, 905, 905, 905, - 3468, 905, 3468, 905, 1490, 1490, 1490, 1490, 3468, 3468, - 1490, 1490, 1496, 1496, 1496, 1496, 3468, 3468, 1496, 1496, - 1503, 1503, 1503, 1503, 3468, 3468, 1503, 1503, 1519, 1519, - 1519, 1519, 3468, 3468, 1519, 1519, 1179, 1179, 1179, 1179, + 1194, 1194, 1194, 1194, 3502, 3502, 1194, 1194, 1230, 1230, + 1230, 1230, 3502, 3502, 1230, 1230, 724, 724, 724, 3502, + 3502, 3502, 724, 732, 732, 732, 3502, 3502, 3502, 732, + 1256, 1256, 1256, 1256, 3502, 3502, 1256, 1256, 1263, 1263, + 1263, 1263, 3502, 3502, 1263, 1263, 772, 772, 772, 3502, + 3502, 3502, 772, 1294, 1294, 1294, 1294, 3502, 3502, 1294, + 1294, 780, 780, 780, 3502, 3502, 3502, 780, 1307, 1307, + 1307, 1307, 3502, 3502, 1307, 1307, 790, 790, 790, 3502, + 3502, 3502, 790, 800, 800, 800, 3502, 3502, 3502, 800, + + 1332, 1332, 1332, 1332, 3502, 3502, 1332, 1332, 1348, 1348, + 1348, 1348, 3502, 3502, 1348, 1348, 817, 817, 817, 3502, + 3502, 3502, 817, 1375, 1375, 1375, 1375, 3502, 3502, 1375, + 1375, 1391, 1391, 1391, 1391, 3502, 3502, 1391, 1391, 846, + 846, 846, 3502, 3502, 3502, 846, 856, 856, 856, 3502, + 3502, 3502, 856, 1414, 1414, 1414, 1414, 3502, 3502, 1414, + 1414, 861, 861, 861, 3502, 3502, 3502, 861, 1423, 1423, + 1423, 1423, 3502, 3502, 1423, 1423, 867, 867, 867, 3502, + 3502, 3502, 867, 875, 875, 875, 3502, 3502, 3502, 875, + 882, 882, 882, 3502, 3502, 3502, 882, 1455, 1455, 1455, + + 1455, 3502, 3502, 1455, 1455, 889, 889, 889, 3502, 3502, + 3502, 889, 1463, 1463, 1463, 1463, 3502, 3502, 1463, 1463, + 1471, 1471, 1471, 1471, 3502, 3502, 1471, 1471, 1481, 1481, + 1481, 1481, 3502, 3502, 1481, 1481, 905, 905, 905, 905, + 3502, 905, 3502, 905, 1490, 1490, 1490, 1490, 3502, 3502, + 1490, 1490, 1496, 1496, 1496, 1496, 3502, 3502, 1496, 1496, + 1503, 1503, 1503, 1503, 3502, 3502, 1503, 1503, 1519, 1519, + 1519, 1519, 3502, 3502, 1519, 1519, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1740, 1740, 1740, 1740, 1740, - 1740, 1740, 1740, 1740, 1194, 1194, 1194, 1194, 3468, 3468, - - 1194, 1194, 1230, 1230, 1230, 1230, 3468, 3468, 1230, 1230, - 724, 724, 724, 3468, 3468, 3468, 724, 732, 732, 732, - 732, 3468, 732, 3468, 732, 1263, 1263, 1263, 1263, 3468, - 3468, 1263, 1263, 772, 772, 772, 3468, 3468, 3468, 772, - 1294, 1294, 1294, 1294, 3468, 3468, 1294, 1294, 780, 780, - 780, 780, 3468, 780, 3468, 780, 1307, 1307, 1307, 1307, - 3468, 3468, 1307, 1307, 790, 790, 790, 3468, 3468, 3468, - 790, 800, 800, 800, 3468, 3468, 3468, 800, 1332, 1332, - 1332, 1332, 3468, 3468, 1332, 1332, 1348, 1348, 1348, 1348, - 3468, 3468, 1348, 1348, 817, 817, 817, 3468, 3468, 3468, - - 817, 1375, 1375, 1375, 1375, 3468, 3468, 1375, 1375, 1391, - 1391, 1391, 1391, 3468, 3468, 1391, 1391, 846, 846, 846, - 3468, 3468, 3468, 846, 856, 856, 856, 3468, 3468, 3468, - 856, 861, 861, 861, 861, 3468, 861, 3468, 861, 1423, - 1423, 1423, 1423, 3468, 3468, 1423, 1423, 867, 867, 867, - 867, 3468, 867, 3468, 867, 875, 875, 875, 3468, 3468, - 3468, 875, 882, 882, 882, 3468, 3468, 3468, 882, 1455, - 1455, 1455, 1455, 3468, 3468, 1455, 1455, 889, 889, 889, - 889, 3468, 889, 3468, 889, 1463, 1463, 1463, 1463, 3468, - 3468, 1463, 1463, 1471, 1471, 1471, 1471, 3468, 3468, 1471, - - 1471, 1481, 1481, 1481, 1481, 3468, 3468, 1481, 1481, 905, - 905, 905, 905, 3468, 905, 3468, 905, 1490, 1490, 1490, - 1490, 3468, 3468, 1490, 1490, 1496, 1496, 1496, 1496, 3468, - 3468, 1496, 1496, 1519, 1519, 1519, 1519, 3468, 3468, 1519, + 1740, 1740, 1740, 1740, 1194, 1194, 1194, 1194, 3502, 3502, + + 1194, 1194, 1230, 1230, 1230, 1230, 3502, 3502, 1230, 1230, + 724, 724, 724, 3502, 3502, 3502, 724, 732, 732, 732, + 732, 3502, 732, 3502, 732, 1263, 1263, 1263, 1263, 3502, + 3502, 1263, 1263, 772, 772, 772, 3502, 3502, 3502, 772, + 1294, 1294, 1294, 1294, 3502, 3502, 1294, 1294, 780, 780, + 780, 780, 3502, 780, 3502, 780, 1307, 1307, 1307, 1307, + 3502, 3502, 1307, 1307, 790, 790, 790, 3502, 3502, 3502, + 790, 800, 800, 800, 3502, 3502, 3502, 800, 1332, 1332, + 1332, 1332, 3502, 3502, 1332, 1332, 1348, 1348, 1348, 1348, + 3502, 3502, 1348, 1348, 817, 817, 817, 3502, 3502, 3502, + + 817, 1375, 1375, 1375, 1375, 3502, 3502, 1375, 1375, 1391, + 1391, 1391, 1391, 3502, 3502, 1391, 1391, 846, 846, 846, + 3502, 3502, 3502, 846, 856, 856, 856, 3502, 3502, 3502, + 856, 861, 861, 861, 861, 3502, 861, 3502, 861, 1423, + 1423, 1423, 1423, 3502, 3502, 1423, 1423, 867, 867, 867, + 867, 3502, 867, 3502, 867, 875, 875, 875, 3502, 3502, + 3502, 875, 882, 882, 882, 3502, 3502, 3502, 882, 1455, + 1455, 1455, 1455, 3502, 3502, 1455, 1455, 889, 889, 889, + 889, 3502, 889, 3502, 889, 1463, 1463, 1463, 1463, 3502, + 3502, 1463, 1463, 1471, 1471, 1471, 1471, 3502, 3502, 1471, + + 1471, 1481, 1481, 1481, 1481, 3502, 3502, 1481, 1481, 905, + 905, 905, 905, 3502, 905, 3502, 905, 1490, 1490, 1490, + 1490, 3502, 3502, 1490, 1490, 1496, 1496, 1496, 1496, 3502, + 3502, 1496, 1496, 1519, 1519, 1519, 1519, 3502, 3502, 1519, 1519, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1179, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1194, - 1194, 1194, 1194, 3468, 3468, 1194, 1194, 724, 724, 724, - 3468, 3468, 3468, 724, 732, 732, 732, 3468, 3468, 3468, - 732, 1263, 1263, 1263, 1263, 3468, 3468, 1263, 1263, 772, - 772, 772, 3468, 3468, 3468, 772, 1294, 1294, 1294, 1294, - - 3468, 3468, 1294, 1294, 1307, 1307, 1307, 1307, 3468, 3468, - 1307, 1307, 790, 790, 790, 3468, 3468, 3468, 790, 800, - 800, 800, 3468, 3468, 3468, 800, 1348, 1348, 1348, 1348, - 3468, 3468, 1348, 1348, 817, 817, 817, 3468, 3468, 3468, - 817, 846, 846, 846, 3468, 3468, 3468, 846, 856, 856, - 856, 3468, 3468, 3468, 856, 1423, 1423, 1423, 1423, 3468, - 3468, 1423, 1423, 867, 867, 867, 3468, 3468, 3468, 867, - 875, 875, 875, 3468, 3468, 3468, 875, 882, 882, 882, - 3468, 3468, 3468, 882, 3075, 3075, 3075, 3075, 3075, 3075, - 3075, 3075, 3075, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - - 3076, 3076, 3135, 3135, 3135, 3135, 3135, 3135, 3135, 3135, - 3135, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, 3138, - 3179, 3179, 3179, 3179, 3179, 3179, 3179, 3179, 3179, 3181, - 3181, 3181, 3181, 3181, 3181, 3181, 3181, 3181, 263, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468 + 1194, 1194, 1194, 3502, 3502, 1194, 1194, 724, 724, 724, + 3502, 3502, 3502, 724, 732, 732, 732, 3502, 3502, 3502, + 732, 1263, 1263, 1263, 1263, 3502, 3502, 1263, 1263, 772, + 772, 772, 3502, 3502, 3502, 772, 1294, 1294, 1294, 1294, + + 3502, 3502, 1294, 1294, 1307, 1307, 1307, 1307, 3502, 3502, + 1307, 1307, 790, 790, 790, 3502, 3502, 3502, 790, 800, + 800, 800, 3502, 3502, 3502, 800, 1348, 1348, 1348, 1348, + 3502, 3502, 1348, 1348, 817, 817, 817, 3502, 3502, 3502, + 817, 846, 846, 846, 3502, 3502, 3502, 846, 856, 856, + 856, 3502, 3502, 3502, 856, 1423, 1423, 1423, 1423, 3502, + 3502, 1423, 1423, 867, 867, 867, 3502, 3502, 3502, 867, + 875, 875, 875, 3502, 3502, 3502, 875, 882, 882, 882, + 3502, 3502, 3502, 882, 3083, 3083, 3083, 3083, 3083, 3083, + 3083, 3083, 3083, 3084, 3084, 3084, 3084, 3084, 3084, 3084, + + 3084, 3084, 3145, 3145, 3145, 3145, 3145, 3145, 3145, 3145, + 3145, 3148, 3148, 3148, 3148, 3148, 3148, 3148, 3148, 3148, + 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3191, 3193, + 3193, 3193, 3193, 3193, 3193, 3193, 3193, 3193, 263, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502 } ; static yyconst flex_int16_t yy_chk[12714] = @@ -3594,950 +3594,950 @@ static yyconst flex_int16_t yy_chk[12714] = 1256, 1258, 1258, 1258, 1260, 1260, 1260, 2646, 2648, 1253, 1262, 1262, 1262, 1255, 2649, 2650, 1256, 2652, 2656, 1258, 2659, 1260, 1263, 1263, 1263, 1265, 1265, 1265, 1262, 1266, - 1266, 1266, 2660, 1266, 2661, 2662, 1266, 1270, 1270, 1270, - 1263, 2663, 2664, 1265, 1271, 1271, 1271, 1273, 1273, 1273, - - 1288, 1288, 1288, 2677, 1288, 1270, 2678, 1288, 1292, 1292, - 1292, 1258, 1271, 2679, 2706, 1273, 1293, 1293, 1293, 1294, - 1294, 1294, 1265, 2709, 2703, 1292, 1296, 1296, 1296, 1298, - 1298, 1298, 2710, 2711, 1293, 2714, 2715, 1294, 1299, 1299, - 1299, 1300, 1300, 1300, 1296, 2717, 1298, 1301, 1301, 1301, - 1303, 1303, 1303, 2703, 2716, 1299, 1304, 1304, 1304, 1300, - 1305, 1305, 1305, 2718, 2720, 1301, 2721, 2716, 1303, 1312, + 1266, 1266, 2661, 1266, 2663, 2664, 1266, 1270, 1270, 1270, + 1263, 2677, 2660, 1265, 1271, 1271, 1271, 1273, 1273, 1273, + + 1288, 1288, 1288, 2660, 1288, 1270, 2678, 1288, 1292, 1292, + 1292, 1258, 1271, 2662, 2679, 1273, 1293, 1293, 1293, 1294, + 1294, 1294, 1265, 2706, 2662, 1292, 1296, 1296, 1296, 1298, + 1298, 1298, 2709, 2710, 1293, 2703, 2711, 1294, 1299, 1299, + 1299, 1300, 1300, 1300, 1296, 2714, 1298, 1301, 1301, 1301, + 1303, 1303, 1303, 2715, 2716, 1299, 1304, 1304, 1304, 1300, + 1305, 1305, 1305, 2717, 2703, 1301, 2718, 2716, 1303, 1312, 1312, 1312, 2704, 1304, 1306, 1306, 1306, 1305, 1307, 1307, - 1307, 1309, 1309, 1309, 2722, 1299, 1312, 1296, 1305, 1319, + 1307, 1309, 1309, 1309, 2720, 1299, 1312, 1296, 1305, 1319, 1319, 1319, 1306, 1313, 1313, 1313, 1307, 1313, 2705, 1309, 1313, 1320, 1320, 1320, 1322, 1322, 1322, 1319, 1327, 1327, - 1327, 2723, 1327, 2724, 2704, 1327, 2726, 1303, 2727, 1320, - 2728, 2729, 1322, 1331, 1331, 1331, 1332, 1332, 1332, 2687, + 1327, 2721, 1327, 2722, 2704, 1327, 2723, 1303, 2724, 1320, + 2726, 2727, 1322, 1331, 1331, 1331, 1332, 1332, 1332, 2687, 1334, 1334, 1334, 1335, 1335, 1335, 1336, 1336, 1336, 2687, - 2705, 1331, 2732, 2733, 1332, 2687, 2734, 1309, 1334, 2719, + 2705, 1331, 2728, 2729, 1332, 2687, 2732, 1309, 1334, 2719, 1335, 1340, 1340, 1340, 1336, 1337, 1337, 1337, 1339, 1339, - 1339, 2735, 2719, 1341, 1341, 1341, 2736, 1341, 1340, 1322, - 1341, 2737, 2738, 1337, 2739, 2740, 1339, 1344, 1344, 1344, - 2741, 1344, 2742, 2743, 1344, 1347, 1347, 1347, 1348, 1348, - 1348, 1334, 1350, 1350, 1350, 1355, 1355, 1355, 2744, 1355, - - 2746, 2759, 1355, 1347, 2760, 2765, 1348, 1358, 1358, 1358, - 1350, 1359, 1359, 1359, 2769, 1359, 2770, 2771, 1359, 1362, - 1362, 1362, 2772, 2773, 1358, 1339, 1363, 1363, 1363, 2774, - 1363, 2782, 2784, 1363, 2792, 2793, 1362, 1374, 1374, 1374, + 1339, 2733, 2719, 1341, 1341, 1341, 2734, 1341, 1340, 1322, + 1341, 2735, 2736, 1337, 2737, 2738, 1339, 1344, 1344, 1344, + 2739, 1344, 2740, 2741, 1344, 1347, 1347, 1347, 1348, 1348, + 1348, 1334, 1350, 1350, 1350, 1355, 1355, 1355, 2742, 1355, + + 2743, 2744, 1355, 1347, 2746, 2759, 1348, 1358, 1358, 1358, + 1350, 1359, 1359, 1359, 2760, 1359, 2765, 2769, 1359, 1362, + 1362, 1362, 2770, 2771, 1358, 1339, 1363, 1363, 1363, 2772, + 1363, 2773, 2774, 1363, 2775, 2776, 1362, 1374, 1374, 1374, 1375, 1375, 1375, 1377, 1377, 1377, 1378, 1378, 1378, 2688, - 1378, 2794, 2795, 1378, 2796, 1374, 2797, 1350, 1375, 2688, - 2810, 1377, 1381, 1381, 1381, 2688, 1381, 2813, 2814, 1381, - 1384, 1384, 1384, 1385, 1385, 1385, 2818, 1385, 2819, 2820, + 1378, 2784, 2786, 1378, 2794, 1374, 2795, 1350, 1375, 2688, + 2796, 1377, 1381, 1381, 1381, 2688, 1381, 2797, 2798, 1381, + 1384, 1384, 1384, 1385, 1385, 1385, 2799, 1385, 2812, 2815, 1385, 1390, 1390, 1390, 1391, 1391, 1391, 1384, 1393, 1393, - 1393, 1398, 1398, 1398, 2821, 1398, 2822, 2823, 1398, 1390, + 1393, 1398, 1398, 1398, 2816, 1398, 2820, 2821, 1398, 1390, - 2801, 2824, 1391, 1401, 1401, 1401, 1393, 1402, 1402, 1402, - 1377, 1402, 2807, 2801, 1402, 1405, 1405, 1405, 2825, 2802, + 2803, 2822, 1391, 1401, 1401, 1401, 1393, 1402, 1402, 1402, + 1377, 1402, 2809, 2803, 1402, 1405, 1405, 1405, 2823, 2804, 1401, 1406, 1406, 1406, 1408, 1408, 1408, 1410, 1410, 1410, - 2808, 1410, 2802, 1405, 1410, 2827, 1393, 2828, 2829, 1406, - 2830, 2831, 1408, 1413, 1413, 1413, 1414, 1414, 1414, 1416, - 1416, 1416, 1418, 1418, 1418, 2832, 1418, 2833, 2834, 1418, - 2807, 1413, 2836, 2837, 1414, 2808, 2838, 1416, 1422, 1422, - 1422, 1423, 1423, 1423, 2839, 1408, 1425, 1425, 1425, 2840, - 1427, 1427, 1427, 2841, 1427, 2842, 1422, 1427, 2843, 1423, - 1433, 1433, 1433, 2844, 1425, 1434, 1434, 1434, 2845, 1436, + 2810, 1410, 2804, 1405, 1410, 2824, 1393, 2825, 2826, 1406, + 2827, 2829, 1408, 1413, 1413, 1413, 1414, 1414, 1414, 1416, + 1416, 1416, 1418, 1418, 1418, 2830, 1418, 2831, 2832, 1418, + 2809, 1413, 2833, 2834, 1414, 2810, 2835, 1416, 1422, 1422, + 1422, 1423, 1423, 1423, 2836, 1408, 1425, 1425, 1425, 2838, + 1427, 1427, 1427, 2839, 1427, 2840, 1422, 1427, 2841, 1423, + 1433, 1433, 1433, 2842, 1425, 1434, 1434, 1434, 2843, 1436, 1436, 1436, 1437, 1437, 1437, 1438, 1438, 1438, 1433, 1438, - 2846, 2847, 1438, 1434, 2848, 2856, 1416, 1436, 2862, 1437, - 1439, 1439, 1439, 2863, 2871, 1425, 1440, 1440, 1440, 2872, - 1440, 2873, 2874, 1440, 1442, 1442, 1442, 1439, 1443, 1443, - 1443, 2875, 1445, 1445, 1445, 1447, 1447, 1447, 2876, 1451, - 1451, 1451, 1442, 1964, 1964, 1964, 1443, 2877, 2884, 1436, - 1445, 2887, 1447, 1448, 1448, 1448, 1451, 1448, 2894, 2895, - 1448, 1452, 1452, 1452, 2896, 1452, 2897, 2898, 1452, 1454, + 2844, 2845, 1438, 1434, 2846, 2847, 1416, 1436, 2848, 1437, + 1439, 1439, 1439, 2849, 2850, 1425, 1440, 1440, 1440, 2858, + 1440, 2864, 2865, 1440, 1442, 1442, 1442, 1439, 1443, 1443, + 1443, 2873, 1445, 1445, 1445, 1447, 1447, 1447, 2874, 1451, + 1451, 1451, 1442, 1964, 1964, 1964, 1443, 2875, 2876, 1436, + 1445, 2877, 1447, 1448, 1448, 1448, 1451, 1448, 2878, 2879, + 1448, 1452, 1452, 1452, 2880, 1452, 2881, 2888, 1452, 1454, 1454, 1454, 1455, 1455, 1455, 1457, 1457, 1457, 1459, 1459, - 1459, 2889, 1459, 2899, 2902, 1459, 2903, 1454, 2890, 2904, + 1459, 2891, 1459, 2898, 2899, 1459, 2900, 1454, 2893, 2901, - 1455, 2889, 2905, 1457, 1462, 1462, 1462, 2916, 2890, 1445, + 1455, 2902, 2903, 1457, 1462, 1462, 1462, 2906, 2893, 1445, 1463, 1463, 1463, 1465, 1465, 1465, 1466, 1466, 1466, 1467, - 1467, 1467, 1462, 1467, 2917, 2918, 1467, 2919, 1463, 2920, - 2892, 1465, 2893, 1466, 1468, 1468, 1468, 1469, 1469, 1469, - 2892, 1469, 2893, 2921, 1469, 1470, 1470, 1470, 2922, 1457, - 2923, 1468, 1471, 1471, 1471, 2926, 1473, 1473, 1473, 1474, - 1474, 1474, 2927, 1470, 1475, 1475, 1475, 2929, 1475, 2930, - 1471, 1475, 2931, 1465, 1473, 2933, 1474, 1478, 1478, 1478, - 1479, 1479, 1479, 2908, 1479, 2935, 2936, 1479, 1480, 1480, + 1467, 1467, 1462, 1467, 2907, 2908, 1467, 2909, 1463, 2920, + 2894, 1465, 2896, 1466, 1468, 1468, 1468, 1469, 1469, 1469, + 2894, 1469, 2896, 2921, 1469, 1470, 1470, 1470, 2922, 1457, + 2923, 1468, 1471, 1471, 1471, 2924, 1473, 1473, 1473, 1474, + 1474, 1474, 2897, 1470, 1475, 1475, 1475, 2925, 1475, 2926, + 1471, 1475, 2897, 1465, 1473, 2927, 1474, 1478, 1478, 1478, + 1479, 1479, 1479, 2912, 1479, 2930, 2931, 1479, 1480, 1480, 1480, 1481, 1481, 1481, 1478, 1483, 1483, 1483, 1485, 1485, - 1485, 1489, 1489, 1489, 2937, 2940, 1480, 2941, 2942, 1481, - 1490, 1490, 1490, 1483, 2943, 1485, 2946, 2908, 1473, 1489, - 1492, 1492, 1492, 1495, 1495, 1495, 2956, 2960, 1490, 1496, + 1485, 1489, 1489, 1489, 2933, 2934, 1480, 2935, 2937, 1481, + 1490, 1490, 1490, 1483, 2939, 1485, 2940, 2912, 1473, 1489, + 1492, 1492, 1492, 1495, 1495, 1495, 2941, 2944, 1490, 1496, 1496, 1496, 1498, 1498, 1498, 1499, 1499, 1499, 1492, 1499, - 2961, 1495, 1499, 1502, 1502, 1502, 2969, 1496, 2970, 2971, + 2945, 1495, 1499, 1502, 1502, 1502, 2946, 1496, 2947, 2950, 1498, 1503, 1503, 1503, 1505, 1505, 1505, 1483, 1506, 1506, - 1506, 1502, 1506, 2972, 2973, 1506, 1510, 1510, 1510, 1503, - 2974, 2980, 1505, 1511, 1511, 1511, 1513, 1513, 1513, 2981, - 2982, 1492, 2983, 2984, 1510, 1498, 1514, 1514, 1514, 2985, - 1514, 1511, 2986, 1514, 1513, 1518, 1518, 1518, 1519, 1519, + 1506, 1502, 1506, 2960, 2964, 1506, 1510, 1510, 1510, 1503, + 2965, 2973, 1505, 1511, 1511, 1511, 1513, 1513, 1513, 2974, + 2975, 1492, 2976, 2977, 1510, 1498, 1514, 1514, 1514, 2978, + 1514, 1511, 2979, 1514, 1513, 1518, 1518, 1518, 1519, 1519, 1519, 1521, 1521, 1521, 1523, 1523, 1523, 1530, 1530, 1530, - 1561, 1561, 1561, 1518, 1505, 2987, 1519, 2988, 2989, 1521, - 2991, 2992, 1523, 1523, 2997, 1530, 2998, 1561, 1562, 1562, - 1562, 2999, 1562, 3000, 3001, 1562, 3010, 1513, 1563, 1563, - 1563, 1564, 1564, 1564, 3011, 1565, 1565, 1565, 3012, 1565, - 3013, 1521, 1565, 1568, 1568, 1568, 1563, 3014, 1564, 1570, - 1570, 1570, 3015, 1570, 3016, 3017, 1570, 1573, 1573, 1573, - 3021, 1568, 3022, 1530, 1574, 1574, 1574, 3001, 1574, 3023, - 3024, 1574, 3025, 3026, 1573, 1575, 1575, 1575, 3028, 1575, - 3029, 3031, 1575, 1579, 1579, 1579, 1563, 1580, 1580, 1580, - - 3032, 1580, 1568, 3033, 1580, 1582, 1582, 1582, 3035, 3039, - 1579, 1584, 1584, 1584, 1585, 1585, 1585, 3040, 1585, 3041, - 3046, 1585, 3048, 1582, 1586, 1586, 1586, 3049, 1584, 1587, + 1561, 1561, 1561, 1518, 1505, 2980, 1519, 2986, 2987, 1521, + 2988, 2989, 1523, 1523, 2990, 1530, 2991, 1561, 1562, 1562, + 1562, 2992, 1562, 2993, 2994, 1562, 2995, 1513, 1563, 1563, + 1563, 1564, 1564, 1564, 2997, 1565, 1565, 1565, 2998, 1565, + 3003, 1521, 1565, 1568, 1568, 1568, 1563, 3004, 1564, 1570, + 1570, 1570, 3005, 1570, 3006, 3007, 1570, 1573, 1573, 1573, + 3016, 1568, 3017, 1530, 1574, 1574, 1574, 3018, 1574, 3019, + 3020, 1574, 3021, 3022, 1573, 1575, 1575, 1575, 3023, 1575, + 3027, 3028, 1575, 1579, 1579, 1579, 1563, 1580, 1580, 1580, + + 3029, 1580, 1568, 3030, 1580, 1582, 1582, 1582, 3007, 3031, + 1579, 1584, 1584, 1584, 1585, 1585, 1585, 3032, 1585, 3034, + 3035, 1585, 3037, 1582, 1586, 1586, 1586, 3038, 1584, 1587, 1587, 1587, 1589, 1589, 1589, 1605, 1605, 1605, 1968, 1968, - 1968, 1586, 1606, 1606, 1606, 3054, 3055, 1587, 3056, 3057, - 1589, 3058, 1605, 3059, 3060, 1582, 1607, 1607, 1607, 1606, - 1607, 3061, 3062, 1607, 1608, 1608, 1608, 1610, 1610, 1610, - 1611, 1611, 1611, 3063, 1611, 3064, 3065, 1611, 1587, 1613, - 1613, 1613, 1608, 3067, 1610, 1614, 1614, 1614, 1615, 1615, - 1615, 3068, 1615, 3069, 3070, 1615, 3077, 1613, 1617, 1617, - - 1617, 3073, 1614, 1620, 1620, 1620, 1621, 1621, 1621, 3080, - 1621, 3081, 3084, 1621, 3071, 3073, 1617, 1622, 1622, 1622, - 1620, 1624, 1624, 1624, 1625, 1625, 1625, 3086, 1608, 1631, - 1631, 1631, 3074, 3087, 1622, 1632, 1632, 1632, 1624, 1613, - 3089, 3090, 1625, 3074, 1633, 1633, 1633, 1631, 1633, 3094, - 3095, 1633, 1632, 1634, 1634, 1634, 1635, 1635, 1635, 1617, - 3071, 1636, 1636, 1636, 3096, 1636, 3097, 1624, 1636, 3098, - 3099, 1634, 3100, 1635, 1637, 1637, 1637, 1639, 1639, 1639, - 1642, 1642, 1642, 3101, 1643, 1643, 1643, 3109, 1643, 3103, - 1625, 1643, 1637, 1631, 1639, 3117, 3093, 1642, 1644, 1644, - - 1644, 3103, 1644, 3096, 3119, 1644, 1649, 1649, 1649, 1658, - 1658, 1658, 1659, 1659, 1659, 3121, 1659, 3123, 3131, 1659, + 1968, 1586, 1606, 1606, 1606, 3039, 3041, 1587, 3045, 3046, + 1589, 3047, 1605, 3051, 3053, 1582, 1607, 1607, 1607, 1606, + 1607, 3054, 3056, 1607, 1608, 1608, 1608, 1610, 1610, 1610, + 1611, 1611, 1611, 3057, 1611, 3062, 3063, 1611, 1587, 1613, + 1613, 1613, 1608, 3064, 1610, 1614, 1614, 1614, 1615, 1615, + 1615, 3065, 1615, 3066, 3067, 1615, 3068, 1613, 1617, 1617, + + 1617, 3069, 1614, 1620, 1620, 1620, 1621, 1621, 1621, 3070, + 1621, 3071, 3072, 1621, 3073, 3075, 1617, 1622, 1622, 1622, + 1620, 1624, 1624, 1624, 1625, 1625, 1625, 3076, 1608, 1631, + 1631, 1631, 3077, 3078, 1622, 1632, 1632, 1632, 1624, 1613, + 3085, 3079, 1625, 3088, 1633, 1633, 1633, 1631, 1633, 3082, + 3081, 1633, 1632, 1634, 1634, 1634, 1635, 1635, 1635, 1617, + 3082, 1636, 1636, 1636, 3081, 1636, 3089, 1624, 1636, 3092, + 3094, 1634, 3095, 1635, 1637, 1637, 1637, 1639, 1639, 1639, + 1642, 1642, 1642, 3097, 1643, 1643, 1643, 3079, 1643, 3098, + 1625, 1643, 1637, 1631, 1639, 3102, 3101, 1642, 1644, 1644, + + 1644, 3103, 1644, 3105, 3106, 1644, 1649, 1649, 1649, 1658, + 1658, 1658, 1659, 1659, 1659, 3104, 1659, 3107, 3108, 1659, 1662, 1662, 1662, 1649, 1663, 1663, 1663, 1658, 1664, 1664, - 1664, 1665, 1665, 1665, 1666, 1666, 1666, 1662, 3093, 3133, - 1637, 1663, 1668, 1668, 1668, 1664, 3104, 3137, 1665, 1671, - 1671, 1671, 1666, 1671, 3136, 3136, 1671, 3139, 3104, 1668, + 1664, 1665, 1665, 1665, 1666, 1666, 1666, 1662, 3101, 3109, + 1637, 1663, 1668, 1668, 1668, 1664, 3111, 3115, 1665, 1671, + 1671, 1671, 1666, 1671, 3104, 3117, 1671, 3119, 3111, 1668, 1674, 1674, 1674, 1676, 1676, 1676, 1678, 1678, 1678, 1681, - 1681, 1681, 3135, 3114, 1658, 1664, 3115, 1674, 1685, 1685, - 1685, 1676, 3138, 3141, 1678, 3114, 3135, 1681, 3115, 1666, - 1686, 1686, 1686, 3138, 1663, 1685, 1687, 1687, 1687, 3142, - - 1687, 1665, 3143, 1687, 3134, 1690, 1690, 1690, 1686, 1690, - 3144, 3150, 1690, 1694, 1694, 1694, 1696, 1696, 1696, 3154, - 1696, 3151, 3161, 1696, 1685, 3160, 1681, 1676, 1705, 1705, - 1705, 1694, 1678, 1701, 1701, 1701, 3155, 1701, 3163, 3151, - 1701, 1707, 1707, 1707, 3160, 3134, 1705, 1686, 1708, 1708, - 1708, 3155, 1708, 3162, 3168, 1708, 1711, 1711, 1711, 1707, - 1711, 3169, 3170, 1711, 1714, 1714, 1714, 1715, 1715, 1715, - 3171, 1715, 3162, 3168, 1715, 3176, 1720, 1720, 1720, 1694, - 1720, 3170, 1714, 1720, 1723, 1723, 1723, 3177, 3179, 1705, - 1725, 1725, 1725, 1726, 1726, 1726, 3180, 1726, 1707, 3181, - - 1726, 3183, 1723, 1730, 1730, 1730, 3184, 1725, 1732, 1732, + 1681, 1681, 3127, 3112, 1658, 1664, 3124, 1674, 1685, 1685, + 1685, 1676, 3129, 3131, 1678, 3112, 3133, 1681, 3124, 1666, + 1686, 1686, 1686, 3141, 1663, 1685, 1687, 1687, 1687, 3125, + + 1687, 1665, 3143, 1687, 3144, 1690, 1690, 1690, 1686, 1690, + 3147, 3125, 1690, 1694, 1694, 1694, 1696, 1696, 1696, 3149, + 1696, 3151, 3145, 1696, 1685, 3152, 1681, 1676, 1705, 1705, + 1705, 1694, 1678, 1701, 1701, 1701, 3145, 1701, 3146, 3146, + 1701, 1707, 1707, 1707, 3153, 3144, 1705, 1686, 1708, 1708, + 1708, 3148, 1708, 3154, 3161, 1708, 1711, 1711, 1711, 1707, + 1711, 3160, 3148, 1711, 1714, 1714, 1714, 1715, 1715, 1715, + 3171, 1715, 3161, 3164, 1715, 3160, 1720, 1720, 1720, 1694, + 1720, 3165, 1714, 1720, 1723, 1723, 1723, 3164, 3173, 1705, + 1725, 1725, 1725, 1726, 1726, 1726, 3165, 1726, 1707, 3177, + + 1726, 3178, 1723, 1730, 1730, 1730, 3181, 1725, 1732, 1732, 1732, 1714, 1733, 1733, 1733, 1734, 1734, 1734, 1735, 1735, - 1735, 1730, 1736, 1736, 1736, 1732, 1737, 1737, 1737, 3185, - 1733, 1723, 3186, 1734, 3187, 1735, 1738, 1738, 1738, 3189, - 1736, 3190, 3192, 1737, 1741, 1741, 1741, 1748, 1748, 1748, - 3199, 3200, 1730, 3201, 1738, 3202, 1780, 1780, 1780, 3203, - 1780, 3204, 1741, 1780, 3207, 1748, 3208, 1734, 1783, 1783, - 1783, 1784, 1784, 1784, 3209, 1784, 3210, 3211, 1784, 1733, - 1789, 1789, 1789, 3212, 1736, 3213, 1783, 1738, 3214, 1791, - 1791, 1791, 3216, 1791, 3218, 1741, 1791, 3220, 1789, 1748, - - 1795, 1795, 1795, 3221, 1795, 3222, 3223, 1795, 1799, 1799, - 1799, 3224, 1741, 1801, 1801, 1801, 3234, 1801, 3232, 3235, - 1801, 1804, 1804, 1804, 3236, 3233, 1799, 1806, 1806, 1806, - 3232, 1789, 1805, 1805, 1805, 1783, 1805, 3233, 1804, 1805, - 1815, 1815, 1815, 3237, 3238, 1806, 1819, 1819, 1819, 1820, - 1820, 1820, 3239, 1822, 1822, 1822, 1823, 1823, 1823, 3243, - 1823, 3244, 3245, 1823, 1824, 1824, 1824, 3246, 1824, 1799, + 1735, 1730, 1736, 1736, 1736, 1732, 1737, 1737, 1737, 3183, + 1733, 1723, 3170, 1734, 3172, 1735, 1738, 1738, 1738, 3188, + 1736, 3189, 3180, 1737, 1741, 1741, 1741, 1748, 1748, 1748, + 3191, 3170, 1730, 3172, 1738, 3182, 1780, 1780, 1780, 3192, + 1780, 3180, 1741, 1780, 3193, 1748, 3195, 1734, 1783, 1783, + 1783, 1784, 1784, 1784, 3182, 1784, 3196, 3197, 1784, 1733, + 1789, 1789, 1789, 3198, 1736, 3199, 1783, 1738, 3200, 1791, + 1791, 1791, 3202, 1791, 3203, 1741, 1791, 3204, 1789, 1748, + + 1795, 1795, 1795, 3206, 1795, 3213, 3214, 1795, 1799, 1799, + 1799, 3215, 1741, 1801, 1801, 1801, 3216, 1801, 3217, 3218, + 1801, 1804, 1804, 1804, 3219, 3220, 1799, 1806, 1806, 1806, + 3223, 1789, 1805, 1805, 1805, 1783, 1805, 3224, 1804, 1805, + 1815, 1815, 1815, 3225, 3226, 1806, 1819, 1819, 1819, 1820, + 1820, 1820, 3227, 1822, 1822, 1822, 1823, 1823, 1823, 3228, + 1823, 3229, 3230, 1823, 1824, 1824, 1824, 3232, 1824, 1799, 1822, 1824, 1827, 1827, 1827, 1829, 1829, 1829, 1806, 1829, - 3247, 3248, 1829, 1833, 1833, 1833, 3249, 1834, 1834, 1834, - 1827, 1834, 3250, 3251, 1834, 1837, 1837, 1837, 1838, 1838, + 3234, 3236, 1829, 1833, 1833, 1833, 3237, 1834, 1834, 1834, + 1827, 1834, 3238, 3239, 1834, 1837, 1837, 1837, 1838, 1838, - 1838, 1833, 3253, 3254, 1815, 3255, 3256, 1841, 1841, 1841, - 1819, 1841, 1837, 1820, 1841, 3257, 1838, 3258, 3251, 1827, - 1844, 1844, 1844, 1845, 1845, 1845, 3259, 1845, 3260, 3261, + 1838, 1833, 3240, 3241, 1815, 3242, 3250, 1841, 1841, 1841, + 1819, 1841, 1837, 1820, 1841, 3252, 1838, 3251, 3250, 1827, + 1844, 1844, 1844, 1845, 1845, 1845, 3253, 1845, 3254, 3251, 1845, 1846, 1846, 1846, 1847, 1847, 1847, 1844, 1848, 1848, - 1848, 3262, 1848, 3263, 3264, 1848, 3265, 3266, 1846, 1833, - 3267, 1847, 1850, 1850, 1850, 1853, 1853, 1853, 1854, 1854, - 1854, 3268, 1838, 1855, 1855, 1855, 1856, 1856, 1856, 3269, - 1850, 3270, 1853, 3271, 3272, 1854, 1860, 1860, 1860, 3273, - 1855, 1857, 1857, 1857, 1856, 1857, 3274, 3277, 1857, 1862, - 1862, 1862, 3280, 1862, 1860, 3281, 1862, 1865, 1865, 1865, - - 1867, 1867, 1867, 1868, 1868, 1868, 3277, 1868, 3282, 3283, - 1868, 3284, 3285, 1856, 3286, 1865, 3287, 1867, 1869, 1869, - 1869, 1871, 1871, 1871, 1854, 1871, 3288, 3289, 1871, 1876, - 1876, 1876, 1877, 1877, 1877, 1869, 1877, 3290, 3291, 1877, - 1878, 1878, 1878, 1865, 3292, 3293, 1876, 1883, 1883, 1883, - 1886, 1886, 1886, 1887, 1887, 1887, 3294, 1878, 1888, 1888, - 1888, 3295, 1888, 3296, 1883, 1888, 3297, 3298, 1886, 3299, + 1848, 3255, 1848, 3256, 3257, 1848, 3263, 3264, 1846, 1833, + 3265, 1847, 1850, 1850, 1850, 1853, 1853, 1853, 1854, 1854, + 1854, 3266, 1838, 1855, 1855, 1855, 1856, 1856, 1856, 3267, + 1850, 3268, 1853, 3269, 3270, 1854, 1860, 1860, 1860, 3273, + 1855, 1857, 1857, 1857, 1856, 1857, 3271, 3274, 1857, 1862, + 1862, 1862, 3275, 1862, 1860, 3276, 1862, 1865, 1865, 1865, + + 1867, 1867, 1867, 1868, 1868, 1868, 3277, 1868, 3278, 3279, + 1868, 3271, 3280, 1856, 3281, 1865, 3282, 1867, 1869, 1869, + 1869, 1871, 1871, 1871, 1854, 1871, 3283, 3284, 1871, 1876, + 1876, 1876, 1877, 1877, 1877, 1869, 1877, 3285, 3286, 1877, + 1878, 1878, 1878, 1865, 3287, 3288, 1876, 1883, 1883, 1883, + 1886, 1886, 1886, 1887, 1887, 1887, 3289, 1878, 1888, 1888, + 1888, 3290, 1888, 3291, 1883, 1888, 3292, 3293, 1886, 3294, 1887, 1889, 1889, 1889, 1890, 1890, 1890, 1891, 1891, 1891, - 1892, 1892, 1892, 1894, 1894, 1894, 3301, 3302, 1889, 3300, - 3303, 1890, 3304, 3305, 1891, 1895, 1895, 1895, 1892, 1895, - - 1894, 3306, 1895, 1896, 1896, 1896, 1898, 1898, 1898, 3300, - 1899, 1899, 1899, 3307, 1899, 3308, 1886, 1899, 3309, 3310, - 1896, 3311, 3312, 1898, 1901, 1901, 1901, 1903, 1903, 1903, - 3313, 3314, 1890, 1906, 1906, 1906, 1910, 1910, 1910, 3315, - 1892, 3316, 1901, 3317, 3318, 1903, 3319, 3320, 1911, 1911, - 1911, 1906, 1911, 1910, 3326, 1911, 1913, 1913, 1913, 1915, + 1892, 1892, 1892, 1894, 1894, 1894, 3295, 3296, 1889, 3302, + 3299, 1890, 3303, 3304, 1891, 1895, 1895, 1895, 1892, 1895, + + 1894, 3305, 1895, 1896, 1896, 1896, 1898, 1898, 1898, 3299, + 1899, 1899, 1899, 3306, 1899, 3307, 1886, 1899, 3308, 3309, + 1896, 3310, 3311, 1898, 1901, 1901, 1901, 1903, 1903, 1903, + 3312, 3313, 1890, 1906, 1906, 1906, 1910, 1910, 1910, 3314, + 1892, 3315, 1901, 3316, 3317, 1903, 3318, 3319, 1911, 1911, + 1911, 1906, 1911, 1910, 3320, 1911, 1913, 1913, 1913, 1915, 1915, 1915, 1917, 1917, 1917, 1918, 1918, 1918, 1919, 1919, - 1919, 1920, 1920, 1920, 1913, 3327, 3328, 1915, 1903, 1917, - 3329, 1906, 1918, 3330, 3331, 1919, 1923, 1923, 1923, 1920, - 1922, 1922, 1922, 3333, 1924, 1924, 1924, 1925, 1925, 1925, - - 1926, 1926, 1926, 3334, 1923, 1928, 1928, 1928, 1922, 1928, - 1915, 1924, 1928, 3321, 1925, 1934, 1934, 1934, 1926, 3321, - 1936, 1936, 1936, 1937, 1937, 1937, 3336, 1937, 3337, 3339, - 1937, 3340, 1919, 1934, 3343, 3344, 1922, 1936, 1920, 1938, + 1919, 1920, 1920, 1920, 1913, 3321, 3322, 1915, 1903, 1917, + 3323, 1906, 1918, 3324, 3325, 1919, 1923, 1923, 1923, 1920, + 1922, 1922, 1922, 3326, 1924, 1924, 1924, 1925, 1925, 1925, + + 1926, 1926, 1926, 3324, 1923, 1928, 1928, 1928, 1922, 1928, + 1915, 1924, 1928, 3327, 1925, 1934, 1934, 1934, 1926, 3328, + 1936, 1936, 1936, 1937, 1937, 1937, 3329, 1937, 3330, 3331, + 1937, 3332, 1919, 1934, 3333, 3334, 1922, 1936, 1920, 1938, 1938, 1938, 1939, 1939, 1939, 1940, 1940, 1940, 1941, 1941, - 1941, 1923, 1941, 3345, 3346, 1941, 3348, 1938, 3350, 3352, - 1939, 3354, 1940, 3356, 3342, 1926, 1934, 1942, 1942, 1942, - 1943, 1943, 1943, 1944, 1944, 1944, 3357, 1944, 3342, 3358, - 1944, 1945, 1945, 1945, 3359, 1942, 3360, 1943, 1951, 1951, + 1941, 1923, 1941, 3335, 3336, 1941, 3337, 1938, 3338, 3339, + 1939, 3340, 1940, 3341, 3342, 1926, 1934, 1942, 1942, 1942, + 1943, 1943, 1943, 1944, 1944, 1944, 3343, 1944, 3344, 3345, + 1944, 1945, 1945, 1945, 3346, 1942, 3348, 1943, 1951, 1951, 1951, 1952, 1952, 1952, 1969, 1969, 1969, 1939, 1938, 1945, - 1970, 1970, 1970, 3361, 3362, 1951, 1972, 1972, 1972, 1952, + 1970, 1970, 1970, 3351, 3354, 1951, 1972, 1972, 1972, 1952, 1974, 1974, 1974, 1975, 1975, 1975, 1980, 1980, 1980, 1982, 1982, 1982, 1985, 1985, 1985, 1987, 1987, 1987, 1989, 1989, 1989, 1990, 1990, 1990, 1999, 1999, 1999, 1982, 1999, 1945, - 1985, 1999, 1987, 2002, 2002, 2002, 1989, 3363, 1990, 2003, - 2003, 2003, 1952, 2008, 2008, 2008, 2009, 2009, 2009, 3365, - 3367, 2002, 2013, 2013, 2013, 3369, 2003, 3370, 3371, 1982, - 2014, 2014, 2014, 3372, 2014, 1537, 3373, 2014, 3374, 2013, - 2017, 2017, 2017, 2020, 2020, 2020, 3397, 1989, 3464, 2002, - 2021, 2021, 2021, 2022, 2022, 2022, 3385, 2022, 2017, 3464, - - 2022, 2020, 2023, 2023, 2023, 1536, 3399, 2021, 2013, 2026, - 2026, 2026, 3373, 2026, 3374, 3386, 2026, 2029, 2029, 2029, - 2023, 2030, 2030, 2030, 3411, 2030, 3381, 3397, 2030, 2035, - 2035, 2035, 3382, 2017, 2029, 2031, 2031, 2031, 3398, 2031, - 3385, 3399, 2031, 2037, 2037, 2037, 3383, 2035, 3389, 2023, - 2039, 2039, 2039, 2040, 2040, 2040, 3389, 2040, 3411, 3386, + 1985, 1999, 1987, 2002, 2002, 2002, 1989, 3355, 1990, 2003, + 2003, 2003, 1952, 2008, 2008, 2008, 2009, 2009, 2009, 3347, + 3356, 2002, 2013, 2013, 2013, 3347, 2003, 3357, 3358, 1982, + 2014, 2014, 2014, 3359, 2014, 3361, 3362, 2014, 3364, 2013, + 2017, 2017, 2017, 2020, 2020, 2020, 3365, 1989, 3367, 2002, + 2021, 2021, 2021, 2022, 2022, 2022, 3368, 2022, 2017, 3371, + + 2022, 2020, 2023, 2023, 2023, 3372, 3373, 2021, 2013, 2026, + 2026, 2026, 3370, 2026, 3374, 3375, 2026, 2029, 2029, 2029, + 2023, 2030, 2030, 2030, 3376, 2030, 3370, 3378, 2030, 2035, + 2035, 2035, 3380, 2017, 2029, 2031, 2031, 2031, 3382, 2031, + 3384, 3386, 2031, 2037, 2037, 2037, 3387, 2035, 3388, 2023, + 2039, 2039, 2039, 2040, 2040, 2040, 3389, 2040, 3390, 3391, 2040, 2041, 2041, 2041, 2042, 2042, 2042, 2039, 2043, 2043, - 2043, 3384, 2043, 3387, 3381, 2043, 3419, 3387, 2041, 3398, - 3382, 2042, 2044, 2044, 2044, 2045, 2045, 2045, 2047, 2047, - 2047, 3390, 2047, 3391, 3383, 2047, 2050, 2050, 2050, 3390, - - 2044, 3391, 3392, 2045, 2051, 2051, 2051, 2041, 2051, 3419, - 3392, 2051, 3395, 2050, 2055, 2055, 2055, 3393, 2055, 3384, - 1535, 2055, 2058, 2058, 2058, 2059, 2059, 2059, 3394, 2059, - 3388, 3405, 2059, 1534, 3388, 2044, 2060, 2060, 2060, 2058, - 2064, 2064, 2064, 2045, 2065, 2065, 2065, 3401, 2065, 3395, - 3396, 2065, 3403, 2060, 2068, 2068, 2068, 2064, 2069, 2069, - 2069, 3400, 2069, 3405, 3393, 2069, 2072, 2072, 2072, 2073, - 2073, 2073, 2068, 2073, 3412, 3394, 2073, 2074, 2074, 2074, - 2075, 2075, 2075, 2072, 2076, 2076, 2076, 3396, 2076, 3403, - 3431, 2076, 3407, 3401, 2074, 1533, 3400, 2075, 2077, 2077, - - 2077, 3407, 2079, 2079, 2079, 2068, 2079, 1532, 3412, 2079, - 2082, 2082, 2082, 2083, 2083, 2083, 2077, 2083, 1531, 3431, - 2083, 2085, 2085, 2085, 3402, 2085, 3425, 2082, 2085, 2089, + 2043, 3392, 2043, 3393, 3394, 2043, 3395, 3399, 2041, 3401, + 3403, 2042, 2044, 2044, 2044, 2045, 2045, 2045, 2047, 2047, + 2047, 3404, 2047, 3405, 3406, 2047, 2050, 2050, 2050, 3415, + + 2044, 3416, 3417, 2045, 2051, 2051, 2051, 2041, 2051, 3447, + 1537, 2051, 3423, 2050, 2055, 2055, 2055, 3419, 2055, 3420, + 3423, 2055, 2058, 2058, 2058, 2059, 2059, 2059, 3407, 2059, + 3421, 1536, 2059, 3431, 3421, 2044, 2060, 2060, 2060, 2058, + 2064, 2064, 2064, 2045, 2065, 2065, 2065, 3415, 2065, 3416, + 3417, 2065, 3447, 2060, 2068, 2068, 2068, 2064, 2069, 2069, + 2069, 3419, 2069, 3420, 3407, 2069, 2072, 2072, 2072, 2073, + 2073, 2073, 2068, 2073, 3431, 3439, 2073, 2074, 2074, 2074, + 2075, 2075, 2075, 2072, 2076, 2076, 2076, 3424, 2076, 3422, + 3408, 2076, 3440, 3422, 2074, 3424, 1535, 2075, 2077, 2077, + + 2077, 1534, 2079, 2079, 2079, 2068, 2079, 3439, 3498, 2079, + 2082, 2082, 2082, 2083, 2083, 2083, 2077, 2083, 1533, 3498, + 2083, 2085, 2085, 2085, 3440, 2085, 3408, 2082, 2085, 2089, 2089, 2089, 2092, 2092, 2092, 2094, 2094, 2094, 2095, 2095, 2095, 2097, 2097, 2097, 2099, 2099, 2099, 2089, 2099, 2077, - 2092, 2099, 2094, 2103, 2103, 2103, 2095, 3404, 2097, 2106, - 2106, 2106, 2108, 2108, 2108, 2109, 2109, 2109, 3425, 2109, - 3402, 2103, 2109, 2110, 2110, 2110, 3413, 2106, 3409, 2108, - 3408, 2111, 2111, 2111, 3406, 2111, 3415, 2097, 2111, 3408, - 2110, 2113, 2113, 2113, 3404, 3410, 2092, 1529, 3417, 2095, + 2092, 2099, 2094, 2103, 2103, 2103, 2095, 3429, 2097, 2106, + 2106, 2106, 2108, 2108, 2108, 2109, 2109, 2109, 3418, 2109, + 3425, 2103, 2109, 2110, 2110, 2110, 3426, 2106, 3425, 2108, + 3459, 2111, 2111, 2111, 3426, 2111, 3427, 2097, 2111, 3432, + 2110, 2113, 2113, 2113, 3429, 3428, 2092, 3433, 1532, 2095, 2115, 2115, 2115, 2116, 2116, 2116, 2117, 2117, 2117, 2113, - 2118, 2118, 2118, 3409, 2118, 3420, 3406, 2118, 2115, 3413, - 3418, 2116, 3426, 2117, 2119, 2119, 2119, 2120, 2120, 2120, - 3410, 2120, 3415, 3417, 2120, 2121, 2121, 2121, 2126, 2126, - 2126, 2119, 3414, 2128, 2128, 2128, 3416, 2128, 3420, 2115, - 2128, 1528, 1527, 2121, 3432, 3418, 2126, 2113, 2131, 2131, - 2131, 2132, 2132, 2132, 3426, 2133, 2133, 2133, 2116, 2133, - 3423, 3424, 2133, 2136, 2136, 2136, 2131, 3421, 1526, 2132, - 2138, 2138, 2138, 3432, 2138, 3414, 3421, 2138, 2141, 2141, - 2141, 2136, 3416, 2146, 2146, 2146, 3422, 2147, 2147, 2147, - - 2121, 2147, 1517, 2126, 2147, 3422, 2141, 3423, 3424, 2131, + 2118, 2118, 2118, 3434, 2118, 3430, 3418, 2118, 2115, 3443, + 1531, 2116, 3459, 2117, 2119, 2119, 2119, 2120, 2120, 2120, + 3432, 2120, 3433, 3427, 2120, 2121, 2121, 2121, 2126, 2126, + 2126, 2119, 3428, 2128, 2128, 2128, 3435, 2128, 3434, 2115, + 2128, 3445, 3430, 2121, 3443, 3441, 2126, 2113, 2131, 2131, + 2131, 2132, 2132, 2132, 3441, 2133, 2133, 2133, 2116, 2133, + 3437, 3438, 2133, 2136, 2136, 2136, 2131, 3442, 1529, 2132, + 2138, 2138, 2138, 1528, 2138, 3445, 3442, 2138, 2141, 2141, + 2141, 2136, 3435, 2146, 2146, 2146, 3455, 2147, 2147, 2147, + + 2121, 2147, 1527, 2126, 2147, 3455, 2141, 3437, 3438, 2131, 2146, 2148, 2148, 2148, 2132, 2149, 2149, 2149, 2154, 2154, - 2154, 2155, 2155, 2155, 2156, 2156, 2156, 1509, 3427, 2148, - 2158, 2158, 2158, 1494, 2141, 2163, 2163, 2163, 2164, 2164, + 2154, 2155, 2155, 2155, 2156, 2156, 2156, 1526, 3436, 2148, + 2158, 2158, 2158, 1517, 2141, 2163, 2163, 2163, 2164, 2164, 2164, 2165, 2165, 2165, 2166, 2166, 2166, 2168, 2168, 2168, 2169, 2169, 2169, 2170, 2170, 2170, 2171, 2171, 2171, 2172, 2172, 2172, 2173, 2173, 2173, 2175, 2175, 2175, 2178, 2178, - 2178, 2181, 2181, 2181, 3427, 2148, 3428, 2182, 2182, 2182, - 3433, 2182, 3437, 2175, 2182, 1493, 2178, 1488, 2181, 3433, + 2178, 2181, 2181, 2181, 3436, 2148, 3446, 2182, 2182, 2182, + 3444, 2182, 1509, 2175, 2182, 3448, 2178, 3451, 2181, 1494, 2166, 2184, 2184, 2184, 2185, 2185, 2185, 2186, 2186, 2186, - 1487, 2186, 1486, 1484, 2186, 2197, 2197, 2197, 3429, 2184, - 3435, 2185, 2198, 2198, 2198, 3438, 2175, 2199, 2199, 2199, - 3441, 2199, 3428, 2197, 2199, 2200, 2200, 2200, 3437, 2198, + 3460, 2186, 1493, 3479, 2186, 2197, 2197, 2197, 1488, 2184, + 3446, 2185, 2198, 2198, 2198, 3444, 2175, 2199, 2199, 2199, + 3449, 2199, 3451, 2197, 2199, 2200, 2200, 2200, 3448, 2198, 2205, 2205, 2205, 2206, 2206, 2206, 2207, 2207, 2207, 2208, - 2208, 2208, 3436, 2208, 3435, 3429, 2208, 2210, 2210, 2210, - 2213, 2213, 2213, 2207, 2197, 2215, 2215, 2215, 3430, 2215, - 1477, 3438, 2215, 3434, 1476, 2210, 3443, 3441, 2213, 2218, - 2218, 2218, 3434, 2221, 2221, 2221, 3436, 2221, 3439, 2206, - 2221, 2228, 2228, 2228, 3447, 2228, 3439, 2218, 2228, 2231, - 2231, 2231, 2232, 2232, 2232, 3430, 2232, 3440, 2210, 2232, - - 2234, 2234, 2234, 3443, 2234, 3440, 2231, 2234, 2237, 2237, - 2237, 2238, 2238, 2238, 2240, 2240, 2240, 3442, 2240, 3447, - 3445, 2240, 2218, 2246, 2246, 2246, 2237, 2246, 3444, 2238, - 2246, 2249, 2249, 2249, 2250, 2250, 2250, 3446, 2250, 1458, - 3448, 2250, 2254, 2254, 2254, 3453, 2254, 1453, 2249, 2254, + 2208, 2208, 3460, 2208, 3479, 3453, 2208, 2210, 2210, 2210, + 2213, 2213, 2213, 2207, 2197, 2215, 2215, 2215, 3456, 2215, + 3452, 1487, 2215, 3467, 3454, 2210, 3449, 3456, 2213, 2218, + 2218, 2218, 3467, 2221, 2221, 2221, 3465, 2221, 3453, 2206, + 2221, 2228, 2228, 2228, 1486, 2228, 3469, 2218, 2228, 2231, + 2231, 2231, 2232, 2232, 2232, 3452, 2232, 3454, 2210, 2232, + + 2234, 2234, 2234, 3457, 2234, 3465, 2231, 2234, 2237, 2237, + 2237, 2238, 2238, 2238, 2240, 2240, 2240, 1484, 2240, 3450, + 3469, 2240, 2218, 2246, 2246, 2246, 2237, 2246, 1477, 2238, + 2246, 2249, 2249, 2249, 2250, 2250, 2250, 3461, 2250, 3473, + 3457, 2250, 2254, 2254, 2254, 1476, 2254, 3473, 2249, 2254, 2258, 2258, 2258, 2259, 2259, 2259, 2260, 2260, 2260, 2237, - 2260, 3445, 3451, 2260, 3442, 3444, 2238, 2258, 2263, 2263, - 2263, 2259, 2264, 2264, 2264, 3448, 2264, 3453, 3446, 2264, - 2265, 2265, 2265, 3454, 2265, 2263, 3449, 2265, 2268, 2268, - 2268, 2270, 2270, 2270, 3450, 2270, 3452, 1450, 2270, 3451, + 2260, 1458, 3458, 2260, 3462, 3450, 2238, 2258, 2263, 2263, + 2263, 2259, 2264, 2264, 2264, 3463, 2264, 3468, 3464, 2264, + 2265, 2265, 2265, 3461, 2265, 2263, 3468, 2265, 2268, 2268, + 2268, 2270, 2270, 2270, 3471, 2270, 3470, 3480, 2270, 3458, 2276, 2276, 2276, 2278, 2278, 2278, 2268, 2279, 2279, 2279, - 3455, 2279, 3459, 3457, 2279, 3454, 3458, 2259, 2276, 3455, + 3462, 2279, 3463, 3475, 2279, 3464, 3466, 2259, 2276, 1453, 2278, 2280, 2280, 2280, 2282, 2282, 2282, 2283, 2283, 2283, - 3460, 2283, 3449, 3452, 2283, 2290, 2290, 2290, 3456, 2280, - 3450, 2282, 2293, 2293, 2293, 3457, 2293, 3456, 3458, 2293, - 2300, 2300, 2300, 2290, 2268, 2296, 2296, 2296, 3461, 2296, - 3459, 3463, 2296, 3462, 2302, 2302, 2302, 1449, 2300, 2303, - 2303, 2303, 2304, 2304, 2304, 3463, 2304, 1446, 3460, 2304, - 1441, 2280, 2302, 1432, 2307, 2307, 2307, 2303, 2307, 1431, - 3461, 2307, 2310, 2310, 2310, 3462, 2311, 2311, 2311, 1430, - - 1426, 2300, 2312, 2312, 2312, 2303, 2313, 2313, 2313, 1421, - 2310, 1417, 2310, 2311, 2314, 2314, 2314, 1409, 1404, 2312, + 3470, 2283, 3472, 3476, 2283, 2290, 2290, 2290, 3480, 2280, + 3471, 2282, 2293, 2293, 2293, 3466, 2293, 3497, 3481, 2293, + 2300, 2300, 2300, 2290, 2268, 2296, 2296, 2296, 3477, 2296, + 3475, 3497, 2296, 3478, 2302, 2302, 2302, 3474, 2300, 2303, + 2303, 2303, 2304, 2304, 2304, 3474, 2304, 1450, 3472, 2304, + 3476, 2280, 2302, 3481, 2307, 2307, 2307, 2303, 2307, 1449, + 3489, 2307, 2310, 2310, 2310, 3477, 2311, 2311, 2311, 3489, + + 3478, 2300, 2312, 2312, 2312, 2303, 2313, 2313, 2313, 3482, + 2310, 3487, 2310, 2311, 2314, 2314, 2314, 1446, 3485, 2312, 2315, 2315, 2315, 2313, 2317, 2317, 2317, 2318, 2318, 2318, 2302, 2314, 2319, 2319, 2319, 2323, 2323, 2323, 2315, 2320, - 2320, 2320, 2317, 1403, 1397, 2318, 1396, 2324, 2324, 2324, - 2319, 2324, 1395, 2312, 2324, 1394, 1389, 2320, 2327, 2327, + 2320, 2320, 2317, 3487, 3482, 2318, 3483, 2324, 2324, 2324, + 2319, 2324, 1441, 2312, 2324, 3485, 3486, 2320, 2327, 2327, 2327, 2328, 2328, 2328, 2329, 2329, 2329, 2330, 2330, 2330, - 2313, 1388, 1387, 2314, 1386, 1372, 2327, 2333, 2333, 2333, - 2334, 2334, 2334, 1371, 2317, 2315, 2336, 2336, 2336, 2337, - 2337, 2337, 1370, 1369, 2319, 2339, 2339, 2339, 2340, 2340, + 2313, 1432, 1431, 2314, 3490, 1430, 2327, 2333, 2333, 2333, + 2334, 2334, 2334, 3490, 2317, 2315, 2336, 2336, 2336, 2337, + 2337, 2337, 3483, 3486, 2319, 2339, 2339, 2339, 2340, 2340, 2340, 2341, 2341, 2341, 2342, 2342, 2342, 2345, 2345, 2345, - 2346, 2346, 2346, 2347, 2347, 2347, 1368, 2327, 2348, 2348, + 2346, 2346, 2346, 2347, 2347, 2347, 1426, 2327, 2348, 2348, 2348, 2350, 2350, 2350, 2353, 2353, 2353, 2354, 2354, 2354, - 1367, 2354, 1366, 1365, 2354, 2357, 2357, 2357, 1364, 2350, - 1354, 2353, 2358, 2358, 2358, 1353, 2360, 2360, 2360, 1352, - 2360, 1351, 2357, 2360, 2373, 2373, 2373, 2374, 2374, 2374, - 2358, 2374, 2375, 2375, 2374, 2375, 2376, 2376, 1330, 2376, - 1326, 1325, 2373, 2375, 2377, 2377, 2377, 2376, 1324, 1323, + 1421, 2354, 3484, 1417, 2354, 2357, 2357, 2357, 3488, 2350, + 1409, 2353, 2358, 2358, 2358, 1404, 2360, 2360, 2360, 1403, + 2360, 3493, 2357, 2360, 2373, 2373, 2373, 2374, 2374, 2374, + 2358, 2374, 2375, 2375, 2374, 2375, 2376, 2376, 3491, 2376, + 3488, 1397, 2373, 2375, 2377, 2377, 2377, 2376, 3484, 1396, 2375, 2378, 2378, 2378, 2376, 2382, 2382, 2382, 2384, 2384, - 2384, 1318, 2384, 1317, 1316, 2384, 2388, 2388, 2388, 1311, + 2384, 1395, 2384, 3492, 3495, 2384, 2388, 2388, 2388, 3493, - 1310, 2357, 2390, 2390, 2390, 2391, 2391, 2391, 2399, 2399, + 3491, 2357, 2390, 2390, 2390, 2391, 2391, 2391, 2399, 2399, 2399, 2404, 2404, 2404, 2388, 2373, 2405, 2405, 2405, 2390, - 2400, 2400, 2400, 2391, 2400, 1297, 1291, 2400, 1287, 2404, - 1286, 2410, 2410, 2410, 2405, 2410, 1285, 1284, 2410, 2447, - 2447, 2447, 2388, 2413, 2413, 2413, 2417, 2417, 2417, 1283, - 2418, 2418, 2418, 1282, 2418, 1281, 2391, 2418, 1279, 1278, - 2413, 1276, 1275, 2417, 2419, 2419, 2419, 2420, 2420, 2420, - 1274, 2420, 1269, 1261, 2420, 1259, 2405, 2423, 2423, 2423, - 1254, 1252, 2419, 2428, 2428, 2428, 2430, 2430, 2430, 2431, - 2431, 2431, 1243, 2431, 1238, 2423, 2431, 2434, 2434, 2434, - - 1227, 2428, 1225, 2430, 2435, 2435, 2435, 2436, 2436, 2436, - 1224, 2436, 1223, 1222, 2436, 2434, 2439, 2439, 2439, 1220, - 1219, 2435, 2440, 2440, 2440, 2445, 2445, 2445, 2449, 2449, - 2449, 1218, 1217, 2439, 2450, 2450, 2450, 1216, 1215, 2440, - 1213, 1212, 2445, 2451, 2451, 2451, 2449, 1211, 2434, 1210, + 2400, 2400, 2400, 2391, 2400, 3492, 3495, 2400, 1394, 2404, + 1389, 2410, 2410, 2410, 2405, 2410, 1388, 1387, 2410, 2447, + 2447, 2447, 2388, 2413, 2413, 2413, 2417, 2417, 2417, 3496, + 2418, 2418, 2418, 1386, 2418, 1372, 2391, 2418, 1371, 1370, + 2413, 1369, 3494, 2417, 2419, 2419, 2419, 2420, 2420, 2420, + 1368, 2420, 1367, 1366, 2420, 1365, 2405, 2423, 2423, 2423, + 1364, 3496, 2419, 2428, 2428, 2428, 2430, 2430, 2430, 2431, + 2431, 2431, 1354, 2431, 1353, 2423, 2431, 2434, 2434, 2434, + + 1352, 2428, 1351, 2430, 2435, 2435, 2435, 2436, 2436, 2436, + 3494, 2436, 1330, 1326, 2436, 2434, 2439, 2439, 2439, 1325, + 1324, 2435, 2440, 2440, 2440, 2445, 2445, 2445, 2449, 2449, + 2449, 1323, 1318, 2439, 2450, 2450, 2450, 1317, 1316, 2440, + 1311, 1310, 2445, 2451, 2451, 2451, 2449, 1297, 2434, 1291, 2435, 2450, 2452, 2452, 2452, 2453, 2453, 2453, 2454, 2454, - 2454, 2451, 2455, 2455, 2455, 1209, 2455, 1208, 1207, 2455, - 2452, 2439, 1206, 2453, 1204, 2454, 2445, 2456, 2456, 2456, + 2454, 2451, 2455, 2455, 2455, 1287, 2455, 1286, 1285, 2455, + 2452, 2439, 1284, 2453, 1283, 2454, 2445, 2456, 2456, 2456, 2457, 2457, 2457, 2440, 2458, 2458, 2458, 2459, 2459, 2459, - 1203, 1202, 2453, 1201, 2456, 1200, 1199, 2457, 2460, 2460, + 1282, 1281, 2453, 1279, 2456, 1278, 1276, 2457, 2460, 2460, - 2460, 2458, 1198, 2451, 1192, 2459, 2461, 2461, 2461, 2462, - 2462, 2462, 1191, 2452, 2464, 2464, 2464, 1190, 2465, 2465, - 2465, 2468, 2468, 2468, 2461, 1187, 1186, 2462, 2469, 2469, - 2469, 2457, 2464, 1185, 1183, 2458, 2465, 2470, 2470, 2470, + 2460, 2458, 1275, 2451, 1274, 2459, 2461, 2461, 2461, 2462, + 2462, 2462, 1269, 2452, 2464, 2464, 2464, 1261, 2465, 2465, + 2465, 2468, 2468, 2468, 2461, 1259, 1254, 2462, 2469, 2469, + 2469, 2457, 2464, 1252, 1243, 2458, 2465, 2470, 2470, 2470, 2471, 2471, 2471, 2474, 2474, 2474, 2469, 2475, 2475, 2475, 2477, 2477, 2477, 2478, 2478, 2478, 2482, 2482, 2482, 2485, - 2485, 2485, 2486, 2486, 2486, 1179, 2486, 1176, 1171, 2486, - 1162, 1161, 2461, 1158, 2482, 1157, 2485, 1156, 2464, 1155, + 2485, 2485, 2486, 2486, 2486, 1238, 2486, 1227, 1225, 2486, + 1224, 1223, 2461, 1222, 2482, 1220, 2485, 1219, 2464, 1218, 2465, 2498, 2498, 2498, 2509, 2509, 2509, 2512, 2512, 2512, 2515, 2515, 2515, 2517, 2517, 2517, 2518, 2518, 2518, 2498, - 2518, 1154, 1140, 2518, 2519, 2519, 2519, 1133, 2515, 1125, + 2518, 1217, 1216, 2518, 2519, 2519, 2519, 1215, 2515, 1213, 2517, 2526, 2526, 2526, 2527, 2527, 2527, 2529, 2529, 2529, - 1124, 1123, 2519, 1120, 2531, 2531, 2531, 1117, 2526, 2537, - 2537, 2537, 2538, 2538, 2538, 2529, 2538, 1114, 1109, 2538, - 1106, 2498, 2531, 2540, 2540, 2540, 2537, 2542, 2542, 2542, - 1105, 2542, 1101, 1099, 2542, 1085, 2515, 2545, 2545, 2545, - 2540, 2547, 2547, 2547, 1084, 2551, 2551, 2551, 2553, 2553, - 2553, 2555, 2555, 2555, 1083, 2545, 2554, 2554, 2554, 2547, - 2554, 2531, 2551, 2554, 1082, 2553, 2556, 2556, 2556, 2555, - 2557, 2557, 2557, 1081, 2557, 1080, 1079, 2557, 2565, 2565, - - 2565, 1078, 1077, 2556, 2567, 2567, 2567, 2569, 2569, 2569, - 2571, 2571, 2571, 1076, 1072, 2565, 2572, 2572, 2572, 1068, - 2572, 1061, 1058, 2572, 1055, 2569, 1052, 2571, 2573, 2573, - 2573, 2574, 2574, 2574, 1051, 2575, 2575, 2575, 2576, 2576, - 2576, 1050, 2576, 1046, 1045, 2576, 2573, 1044, 1041, 2574, - 2579, 2579, 2579, 2575, 2580, 2580, 2580, 1040, 2580, 1039, - 1036, 2580, 2581, 2581, 2581, 1035, 1032, 2579, 2582, 2582, - 2582, 2583, 2583, 2583, 2585, 2585, 2585, 1031, 1027, 2581, - 1026, 1023, 2586, 2586, 2586, 2582, 2587, 2587, 2587, 2583, - 2591, 2591, 2591, 2595, 2595, 2595, 1022, 1021, 2574, 2575, + 1212, 1211, 2519, 1210, 2531, 2531, 2531, 1209, 2526, 2537, + 2537, 2537, 2538, 2538, 2538, 2529, 2538, 1208, 1207, 2538, + 1206, 2498, 2531, 2540, 2540, 2540, 2537, 2542, 2542, 2542, + 1204, 2542, 1203, 1202, 2542, 1201, 2515, 2545, 2545, 2545, + 2540, 2547, 2547, 2547, 1200, 2551, 2551, 2551, 2553, 2553, + 2553, 2555, 2555, 2555, 1199, 2545, 2554, 2554, 2554, 2547, + 2554, 2531, 2551, 2554, 1198, 2553, 2556, 2556, 2556, 2555, + 2557, 2557, 2557, 1192, 2557, 1191, 1190, 2557, 2565, 2565, + + 2565, 1187, 1186, 2556, 2567, 2567, 2567, 2569, 2569, 2569, + 2571, 2571, 2571, 1185, 1183, 2565, 2572, 2572, 2572, 1179, + 2572, 1176, 1171, 2572, 1162, 2569, 1161, 2571, 2573, 2573, + 2573, 2574, 2574, 2574, 1158, 2575, 2575, 2575, 2576, 2576, + 2576, 1157, 2576, 1156, 1155, 2576, 2573, 1154, 1140, 2574, + 2579, 2579, 2579, 2575, 2580, 2580, 2580, 1133, 2580, 1125, + 1124, 2580, 2581, 2581, 2581, 1123, 1120, 2579, 2582, 2582, + 2582, 2583, 2583, 2583, 2585, 2585, 2585, 1117, 1114, 2581, + 1109, 1106, 2586, 2586, 2586, 2582, 2587, 2587, 2587, 2583, + 2591, 2591, 2591, 2595, 2595, 2595, 1105, 1101, 2574, 2575, 2586, 2596, 2596, 2596, 2587, 2600, 2600, 2600, 2591, 2601, - 2601, 2601, 1020, 2601, 1019, 1017, 2601, 2615, 2615, 2615, - 1016, 1015, 2600, 2630, 2630, 2630, 2633, 2633, 2633, 2634, - 2634, 2634, 2635, 2635, 2635, 2615, 2635, 1014, 1013, 2635, - 2638, 2638, 2638, 1012, 2633, 1011, 1010, 2587, 2641, 2641, - 2641, 2644, 2644, 2644, 1006, 2645, 2645, 2645, 2638, 2645, - 1001, 1000, 2645, 999, 996, 2641, 995, 994, 2644, 2647, - 2647, 2647, 2651, 2651, 2651, 992, 988, 2615, 2653, 2653, - 2653, 984, 2653, 983, 980, 2653, 977, 2647, 976, 2651, - 2657, 2657, 2657, 975, 2658, 2658, 2658, 2633, 2658, 974, - - 973, 2658, 2665, 2665, 2665, 972, 971, 2657, 2666, 2666, - 2666, 2667, 2667, 2667, 969, 2667, 968, 967, 2667, 2665, - 2668, 2668, 2668, 966, 965, 2666, 2669, 2669, 2669, 964, - 2669, 963, 962, 2669, 2672, 2672, 2672, 2668, 2674, 2674, - 2674, 961, 2674, 960, 958, 2674, 2682, 2682, 2682, 2683, - 2683, 2683, 2672, 2683, 957, 956, 2683, 2684, 2684, 2684, - 2685, 2685, 2685, 2682, 2686, 2686, 2686, 955, 2686, 954, - 953, 2686, 952, 951, 2684, 950, 949, 2685, 2689, 2689, + 2601, 2601, 1099, 2601, 1085, 1084, 2601, 2615, 2615, 2615, + 1083, 1082, 2600, 2630, 2630, 2630, 2633, 2633, 2633, 2634, + 2634, 2634, 2635, 2635, 2635, 2615, 2635, 1081, 1080, 2635, + 2638, 2638, 2638, 1079, 2633, 1078, 1077, 2587, 2641, 2641, + 2641, 2644, 2644, 2644, 1076, 2645, 2645, 2645, 2638, 2645, + 1072, 1068, 2645, 1061, 1058, 2641, 1055, 1052, 2644, 2647, + 2647, 2647, 2651, 2651, 2651, 1051, 1050, 2615, 2653, 2653, + 2653, 1046, 2653, 1045, 1044, 2653, 1041, 2647, 1040, 2651, + 2657, 2657, 2657, 1039, 2658, 2658, 2658, 2633, 2658, 1036, + + 1035, 2658, 2665, 2665, 2665, 1032, 1031, 2657, 2666, 2666, + 2666, 2667, 2667, 2667, 1027, 2667, 1026, 1023, 2667, 2665, + 2668, 2668, 2668, 1022, 1021, 2666, 2669, 2669, 2669, 1020, + 2669, 1019, 1017, 2669, 2672, 2672, 2672, 2668, 2674, 2674, + 2674, 1016, 2674, 1015, 1014, 2674, 2682, 2682, 2682, 2683, + 2683, 2683, 2672, 2683, 1013, 1012, 2683, 2684, 2684, 2684, + 2685, 2685, 2685, 2682, 2686, 2686, 2686, 1011, 2686, 1010, + 1006, 2686, 1001, 1000, 2684, 999, 996, 2685, 2689, 2689, 2689, 2691, 2691, 2691, 2692, 2692, 2692, 2693, 2693, 2693, - 945, 2693, 944, 942, 2693, 941, 2689, 940, 939, 2691, + 995, 2693, 994, 992, 2693, 988, 2689, 984, 983, 2691, - 938, 934, 2692, 2696, 2696, 2696, 2697, 2697, 2697, 932, - 2697, 931, 930, 2697, 2698, 2698, 2698, 2699, 2699, 2699, - 2696, 2699, 929, 925, 2699, 2700, 2700, 2700, 2702, 2702, + 980, 977, 2692, 2696, 2696, 2696, 2697, 2697, 2697, 976, + 2697, 975, 974, 2697, 2698, 2698, 2698, 2699, 2699, 2699, + 2696, 2699, 973, 972, 2699, 2700, 2700, 2700, 2702, 2702, 2702, 2698, 2707, 2707, 2707, 2708, 2708, 2708, 2712, 2712, - 2712, 924, 920, 2700, 916, 2692, 2702, 2691, 915, 2713, - 2713, 2713, 912, 2713, 911, 2712, 2713, 2731, 2731, 2731, + 2712, 971, 969, 2700, 968, 2692, 2702, 2691, 967, 2713, + 2713, 2713, 966, 2713, 965, 2712, 2713, 2731, 2731, 2731, 2745, 2745, 2745, 2747, 2747, 2747, 2748, 2748, 2748, 2749, - 2749, 2749, 2750, 2750, 2750, 2731, 2751, 2751, 2751, 910, - 2747, 2752, 2752, 2752, 2748, 2752, 909, 908, 2752, 2750, - 2702, 907, 906, 2751, 2753, 2753, 2753, 903, 2753, 902, + 2749, 2749, 2750, 2750, 2750, 2731, 2751, 2751, 2751, 964, + 2747, 2752, 2752, 2752, 2748, 2752, 963, 962, 2752, 2750, + 2702, 961, 960, 2751, 2753, 2753, 2753, 958, 2753, 957, - 901, 2753, 2756, 2756, 2756, 2757, 2757, 2757, 2731, 2761, + 956, 2753, 2756, 2756, 2756, 2757, 2757, 2757, 2731, 2761, 2761, 2761, 2762, 2762, 2762, 2764, 2764, 2764, 2750, 2756, - 2763, 2763, 2763, 2757, 2763, 900, 2761, 2763, 2748, 2762, - 897, 896, 2764, 2766, 2766, 2766, 895, 2766, 892, 890, - 2766, 2775, 2775, 2775, 2776, 2776, 2776, 887, 2776, 886, - 885, 2776, 2777, 2777, 2777, 884, 2777, 883, 2775, 2777, - 2780, 2780, 2780, 2781, 2781, 2781, 880, 2781, 879, 878, - 2781, 2783, 2783, 2783, 2785, 2785, 2785, 2780, 2785, 877, - 876, 2785, 2788, 2788, 2788, 2789, 2789, 2789, 2783, 2789, - 873, 872, 2789, 2790, 2790, 2790, 2791, 2791, 2791, 2788, - - 2791, 871, 870, 2791, 2798, 2798, 2798, 2799, 2799, 2799, - 2790, 2800, 2800, 2800, 868, 2800, 865, 864, 2800, 2803, - 2803, 2803, 2798, 2803, 862, 2799, 2803, 2806, 2806, 2806, - 2809, 2809, 2809, 2811, 2811, 2811, 2812, 2812, 2812, 2815, - 2815, 2815, 859, 2815, 857, 2806, 2815, 2809, 2809, 2826, - 2826, 2826, 2835, 2835, 2835, 2798, 2849, 2849, 2849, 2850, - 2850, 2850, 2851, 2851, 2851, 854, 2826, 2853, 2853, 2853, - 2835, 2852, 2852, 2852, 2799, 2852, 853, 852, 2852, 2851, - 2854, 2854, 2854, 851, 849, 2853, 2855, 2855, 2855, 848, - 2855, 847, 844, 2855, 2860, 2860, 2860, 2854, 2857, 2857, - - 2857, 2835, 2857, 843, 842, 2857, 2861, 2861, 2861, 841, - 2861, 2860, 840, 2861, 2864, 2864, 2864, 839, 2853, 2865, - 2865, 2865, 834, 2865, 833, 832, 2865, 831, 2866, 2866, - 2866, 2864, 2866, 830, 829, 2866, 2869, 2869, 2869, 2870, - 2870, 2870, 828, 2870, 827, 826, 2870, 2878, 2878, 2878, - 825, 2878, 824, 2869, 2878, 2881, 2881, 2881, 823, 2881, - 821, 819, 2881, 2885, 2885, 2885, 2886, 2886, 2886, 818, - 2886, 815, 812, 2886, 2888, 2888, 2888, 809, 2888, 808, - 2885, 2888, 2891, 2891, 2891, 805, 2891, 804, 802, 2891, - 2900, 2900, 2900, 2901, 2901, 2901, 2906, 2906, 2906, 2909, - - 2909, 2909, 2910, 2910, 2910, 2911, 2911, 2911, 2900, 2911, - 801, 2901, 2911, 797, 2906, 796, 2909, 2909, 795, 2910, - 2910, 794, 791, 2911, 2912, 2912, 2912, 2913, 2913, 2913, - 2914, 2914, 2914, 2915, 2915, 2915, 2924, 2924, 2924, 2925, - 2925, 2925, 788, 2925, 787, 786, 2925, 2934, 2934, 2934, - 2947, 2947, 2947, 2924, 2948, 2948, 2948, 783, 782, 2901, - 2949, 2949, 2949, 781, 2949, 2934, 777, 2949, 2952, 2952, - 2952, 2953, 2953, 2953, 776, 2953, 775, 773, 2953, 762, - 2957, 2957, 2957, 760, 2957, 757, 2952, 2957, 2962, 2962, - 2962, 756, 2962, 755, 753, 2962, 2965, 2965, 2965, 752, - - 2965, 751, 747, 2965, 2968, 2968, 2968, 2975, 2975, 2975, - 2976, 2976, 2976, 2934, 2976, 746, 745, 2976, 2979, 2979, - 2979, 2968, 744, 741, 2975, 2994, 2994, 2994, 2996, 2996, - 2996, 3002, 3002, 3002, 740, 2979, 739, 3003, 3003, 3003, - 738, 3003, 737, 2994, 3003, 736, 2996, 735, 3002, 3002, - 3004, 3004, 3004, 733, 3004, 3003, 730, 3004, 3007, 3007, - 3007, 3008, 3008, 3008, 3009, 3009, 3009, 729, 3004, 3018, - 3018, 3018, 727, 3018, 725, 722, 3018, 721, 715, 2996, - 3005, 3005, 3005, 3005, 3005, 3005, 3005, 3005, 3005, 713, - 711, 3005, 3027, 3027, 3027, 708, 3005, 3005, 3005, 3005, - - 3005, 3036, 3036, 3036, 3037, 3037, 3037, 3042, 3042, 3042, - 3027, 3043, 3043, 3043, 707, 3043, 703, 702, 3043, 3044, - 3044, 3044, 3037, 701, 3042, 3005, 3005, 3006, 3006, 3006, - 3006, 3006, 3006, 3006, 3006, 3006, 3044, 700, 3006, 3050, - 3050, 3050, 697, 3006, 3006, 3006, 3006, 3006, 3051, 3051, - 3051, 696, 3051, 695, 694, 3051, 3050, 3052, 3052, 3052, - 3053, 3053, 3053, 691, 3053, 690, 689, 3053, 3066, 3066, - 3066, 688, 3006, 3006, 3052, 3072, 3072, 3072, 687, 3072, - 681, 680, 3072, 678, 672, 671, 3066, 667, 3091, 3091, - 3091, 661, 660, 3072, 3075, 3075, 3075, 3075, 3075, 3075, - - 3075, 3075, 3075, 656, 649, 3075, 3091, 3105, 3105, 3105, - 3075, 3075, 3075, 3075, 3075, 3102, 3102, 3102, 645, 3102, - 639, 635, 3102, 627, 3105, 3106, 3106, 3106, 626, 3106, - 625, 624, 3106, 3128, 3128, 3128, 3140, 3140, 3140, 3075, - 3075, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, 3076, - 623, 3128, 3076, 619, 3140, 3140, 612, 3076, 3076, 3076, - 3076, 3076, 3110, 3110, 3110, 611, 3110, 610, 606, 3110, - 3113, 3113, 3113, 599, 3113, 598, 594, 3113, 3157, 3157, - 3157, 3158, 3158, 3158, 588, 587, 3076, 3076, 3159, 3159, - 3159, 583, 3164, 3164, 3164, 3157, 3164, 575, 3158, 3164, - - 3167, 3167, 3167, 574, 570, 3159, 3178, 3178, 3178, 3182, - 3182, 3182, 3193, 3193, 3193, 561, 557, 3167, 3194, 3194, - 3194, 549, 3194, 548, 3178, 3194, 547, 3182, 543, 3193, - 3195, 3195, 3195, 3196, 3196, 3196, 537, 3196, 536, 535, - 3196, 3197, 3197, 3197, 3198, 3198, 3198, 3195, 3198, 531, - 525, 3198, 3205, 3205, 3205, 3206, 3206, 3206, 3197, 3206, - 3182, 524, 3206, 3215, 3215, 3215, 3225, 3225, 3225, 3205, - 3225, 520, 514, 3225, 513, 3228, 3228, 3228, 512, 3228, - 511, 3215, 3228, 3231, 3231, 3231, 510, 3231, 509, 508, - 3231, 3240, 3240, 3240, 504, 3240, 498, 497, 3240, 495, - - 3215, 3355, 3355, 3355, 3364, 3364, 3364, 494, 3364, 493, - 489, 3364, 3465, 3465, 3465, 3466, 3466, 3466, 482, 3355, - 477, 476, 3364, 474, 470, 464, 463, 462, 458, 452, - 3465, 448, 441, 3466, 3469, 3469, 3469, 3469, 3469, 3469, - 3469, 3469, 3469, 3470, 3470, 3470, 3470, 3470, 3470, 3470, - 3470, 3470, 3471, 3471, 3471, 3471, 3471, 3471, 3471, 3471, - 3471, 3472, 3472, 3472, 3472, 3472, 3472, 3472, 3472, 3472, - 3473, 3473, 3473, 3473, 3473, 3473, 3473, 3473, 3473, 3474, - 3474, 3474, 3474, 3474, 3474, 3474, 3474, 3474, 3475, 3475, - 3475, 3475, 3475, 3475, 3475, 3475, 3475, 3476, 3476, 3476, - - 3476, 3476, 3476, 3476, 3476, 3476, 3477, 3477, 3477, 3477, - 3477, 3477, 3477, 3477, 3477, 3478, 3478, 3478, 3478, 3478, - 3478, 3478, 3478, 3478, 3479, 3479, 3479, 3479, 3479, 3479, - 3479, 3479, 3479, 3480, 3480, 3480, 3480, 3480, 3480, 3480, - 3480, 3480, 3481, 3481, 3481, 3481, 3481, 3481, 3481, 3481, - 3481, 3482, 3482, 3482, 3482, 3482, 3482, 3482, 3482, 3482, - 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3483, 3484, - 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3484, 3485, 3485, - 3485, 3485, 3485, 3485, 3485, 3485, 3485, 3486, 3486, 3486, - 3486, 3486, 3486, 3486, 3486, 3486, 3487, 3487, 3487, 3487, - - 3487, 3487, 3487, 3487, 3487, 3488, 3488, 3488, 3488, 3488, - 3488, 3488, 3488, 3488, 3489, 3489, 3489, 3489, 3489, 3489, - 3489, 3489, 3489, 3490, 3490, 3490, 3490, 3490, 3490, 3490, - 3490, 3490, 3491, 3491, 3491, 3491, 3491, 3491, 3491, 3491, - 3491, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, 3492, - 3493, 3493, 3493, 3493, 3493, 3493, 3493, 3493, 3493, 3494, - 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3494, 3495, 3495, - 3495, 3495, 3495, 3495, 3495, 3495, 3495, 3496, 3496, 3496, - 3496, 3496, 3496, 3496, 3496, 3496, 3497, 3497, 3497, 3497, - 3497, 3497, 3497, 3497, 3497, 3498, 3498, 3498, 3498, 3498, - - 3498, 3498, 3498, 3498, 3499, 3499, 3499, 3499, 3499, 3499, - 3499, 3499, 3499, 3500, 3500, 3500, 3500, 3500, 3500, 3500, - 3500, 3500, 3501, 3501, 3501, 3501, 3501, 3501, 3501, 3501, - 3501, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, - 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3503, 3504, - 3504, 3504, 3504, 3504, 3504, 3504, 3504, 3504, 3505, 3505, - 3505, 3505, 3505, 3505, 3505, 3505, 3505, 3506, 3506, 3506, - 3506, 3506, 3506, 3506, 3506, 3506, 3507, 3507, 3507, 3507, - 3507, 3507, 3507, 3507, 3507, 3508, 3508, 3508, 3508, 3508, - 3508, 3508, 3508, 3508, 3509, 3509, 3509, 3509, 3509, 3509, - - 3509, 3509, 3509, 3510, 3510, 3510, 3510, 3510, 3510, 3510, - 3510, 3510, 3511, 3511, 3511, 3511, 3511, 3511, 3511, 3511, - 3511, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, 3512, - 3513, 3513, 3513, 3513, 3513, 3513, 3513, 3513, 3513, 3514, - 3514, 3514, 3514, 3514, 3514, 3514, 3514, 3514, 3515, 3515, - 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3516, 3516, 3516, - 3516, 3516, 3516, 3516, 3516, 3516, 3517, 3517, 3517, 3517, - 3517, 3517, 3517, 3517, 3517, 3518, 3518, 3518, 3518, 3518, - 3518, 3518, 3518, 3518, 3519, 3519, 3519, 3519, 3519, 3519, - 3519, 3519, 3519, 3520, 3520, 3520, 3520, 3520, 3520, 3520, - - 3520, 3520, 3521, 3521, 3521, 3521, 3521, 3521, 3521, 3521, - 3521, 3522, 3522, 3522, 3522, 3522, 3522, 3522, 3522, 3522, - 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3523, 3524, - 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3524, 3525, 3525, - 3525, 3525, 3525, 3525, 3525, 3525, 3525, 3526, 3526, 3526, - 3526, 3526, 3526, 3526, 3526, 3526, 3527, 3527, 3527, 3527, - 3527, 3527, 3527, 3527, 3527, 3528, 3528, 3528, 3528, 3528, - 3528, 3528, 3528, 3528, 3529, 3529, 3529, 3529, 3529, 3529, - 3529, 3529, 3529, 3530, 3530, 3530, 3530, 3530, 3530, 3530, - 3530, 3530, 3531, 3531, 3531, 3531, 3531, 3531, 3531, 3531, - - 3531, 3532, 3532, 3532, 440, 439, 438, 3532, 3533, 3533, - 3533, 434, 430, 426, 3533, 3534, 3534, 3534, 424, 423, - 422, 3534, 3535, 3535, 3535, 418, 412, 411, 3535, 3536, - 3536, 3536, 407, 401, 400, 3536, 3537, 3537, 3537, 396, - 388, 387, 3537, 3538, 3538, 3538, 386, 385, 381, 3538, - 3539, 3539, 3539, 372, 366, 362, 3539, 3540, 3540, 3540, - 361, 357, 351, 3540, 3541, 3541, 3541, 350, 349, 345, - 3541, 3542, 3542, 3542, 338, 336, 335, 3542, 3543, 3543, - 3543, 331, 328, 326, 3543, 3544, 3544, 3544, 325, 324, - 320, 3544, 3545, 3545, 3545, 316, 313, 309, 3545, 3546, - - 3546, 3546, 306, 305, 297, 3546, 3547, 3547, 3547, 293, - 289, 288, 3547, 3548, 3548, 3548, 287, 281, 280, 3548, - 3549, 3549, 3549, 278, 275, 263, 3549, 3550, 3550, 3550, - 0, 0, 0, 3550, 3551, 3551, 3551, 0, 0, 0, - 3551, 3552, 3552, 3552, 0, 0, 0, 3552, 3553, 3553, - 3553, 0, 0, 0, 3553, 3554, 3554, 3554, 0, 0, - 0, 3554, 3555, 3555, 3555, 0, 0, 0, 3555, 3556, - 3556, 3556, 0, 0, 0, 3556, 3557, 3557, 3557, 0, - 0, 0, 3557, 3558, 3558, 3558, 0, 0, 0, 3558, - 3559, 3559, 3559, 0, 0, 0, 3559, 3560, 3560, 3560, - - 0, 0, 0, 3560, 3561, 3561, 3561, 3561, 3561, 3561, - 3561, 0, 3561, 3562, 3562, 3562, 0, 0, 0, 3562, - 3563, 0, 0, 0, 3563, 3564, 3564, 3564, 0, 0, - 0, 3564, 3565, 0, 0, 0, 3565, 3566, 3566, 3566, - 0, 0, 0, 3566, 3567, 0, 0, 0, 3567, 3568, - 3568, 3568, 0, 0, 0, 3568, 3569, 0, 0, 0, - 3569, 3570, 3570, 3570, 0, 0, 0, 3570, 3571, 0, - 0, 0, 3571, 3572, 3572, 3572, 0, 0, 0, 3572, - 3573, 0, 0, 0, 3573, 3574, 3574, 3574, 0, 0, - 0, 3574, 3575, 0, 0, 0, 3575, 3576, 3576, 3576, - - 0, 0, 0, 3576, 3577, 0, 0, 0, 3577, 3578, - 3578, 3578, 0, 0, 0, 3578, 3579, 0, 0, 0, - 3579, 3580, 3580, 3580, 0, 0, 0, 3580, 3581, 0, - 0, 0, 3581, 3582, 3582, 3582, 0, 0, 0, 3582, - 3583, 0, 0, 0, 3583, 3584, 3584, 3584, 0, 0, - 0, 3584, 3585, 0, 0, 0, 3585, 3586, 3586, 3586, - 0, 0, 0, 3586, 3587, 0, 0, 0, 3587, 3588, - 3588, 3588, 0, 0, 0, 3588, 3589, 0, 0, 0, - 3589, 3590, 3590, 3590, 0, 0, 0, 3590, 3591, 0, - 0, 0, 3591, 3592, 3592, 3592, 0, 0, 0, 3592, - - 3593, 0, 0, 0, 3593, 3594, 3594, 3594, 0, 0, - 0, 3594, 3595, 0, 0, 0, 3595, 3596, 3596, 3596, - 0, 0, 0, 3596, 3597, 0, 0, 0, 3597, 3598, - 3598, 3598, 0, 0, 0, 3598, 3599, 0, 0, 0, - 3599, 3600, 3600, 3600, 0, 0, 0, 3600, 3601, 0, - 0, 0, 3601, 3602, 3602, 3602, 0, 0, 0, 3602, - 3603, 0, 0, 0, 3603, 3604, 3604, 3604, 0, 0, - 0, 3604, 3605, 0, 0, 0, 3605, 3606, 3606, 3606, - 0, 0, 0, 3606, 3607, 0, 0, 0, 3607, 3608, - 3608, 3608, 0, 0, 0, 3608, 3609, 0, 0, 0, - - 3609, 3610, 3610, 3610, 0, 0, 0, 3610, 3611, 0, - 0, 0, 3611, 3612, 3612, 3612, 0, 0, 0, 3612, - 3613, 0, 0, 0, 3613, 3614, 3614, 3614, 0, 0, - 0, 3614, 3615, 0, 0, 0, 3615, 3616, 3616, 3616, - 0, 0, 0, 3616, 3617, 0, 0, 0, 3617, 3618, - 3618, 3618, 0, 0, 0, 3618, 3619, 0, 0, 0, - 3619, 3620, 3620, 3620, 3620, 3620, 3620, 3620, 3620, 3620, - 3621, 0, 0, 0, 0, 3621, 3622, 3622, 3622, 0, - 0, 0, 3622, 3623, 3623, 3623, 3623, 0, 0, 3623, - 3623, 3624, 3624, 3624, 0, 0, 0, 3624, 3625, 3625, - - 3625, 3625, 0, 0, 3625, 3625, 3626, 3626, 3626, 0, - 0, 0, 3626, 3627, 3627, 3627, 3627, 0, 0, 3627, - 3627, 3628, 3628, 3628, 0, 0, 0, 3628, 3629, 3629, - 3629, 3629, 0, 0, 3629, 3629, 3630, 3630, 3630, 0, - 0, 0, 3630, 3631, 3631, 3631, 3631, 0, 0, 3631, - 3631, 3632, 3632, 3632, 0, 0, 0, 3632, 3633, 3633, - 3633, 3633, 0, 0, 3633, 3633, 3634, 3634, 3634, 0, - 0, 0, 3634, 3635, 3635, 3635, 3635, 0, 0, 3635, - 3635, 3636, 3636, 3636, 0, 0, 0, 3636, 3637, 3637, - 3637, 3637, 0, 0, 3637, 3637, 3638, 3638, 3638, 0, - - 0, 0, 3638, 3639, 3639, 3639, 3639, 0, 0, 3639, - 3639, 3640, 3640, 3640, 0, 0, 0, 3640, 3641, 3641, - 3641, 3641, 0, 0, 3641, 3641, 3642, 3642, 3642, 0, - 0, 0, 3642, 3643, 3643, 3643, 3643, 0, 0, 3643, - 3643, 3644, 3644, 3644, 0, 0, 0, 3644, 3645, 3645, - 3645, 3645, 0, 0, 3645, 3645, 3646, 3646, 3646, 0, - 0, 0, 3646, 3647, 3647, 3647, 3647, 0, 0, 3647, - 3647, 3648, 3648, 3648, 0, 0, 0, 3648, 3649, 3649, - 3649, 3649, 0, 0, 3649, 3649, 3650, 3650, 3650, 3650, - 0, 3650, 0, 3650, 3651, 3651, 3651, 3651, 0, 0, - - 3651, 3651, 3652, 3652, 3652, 0, 0, 0, 3652, 3653, - 3653, 3653, 3653, 0, 0, 3653, 3653, 3654, 3654, 3654, - 0, 0, 0, 3654, 3655, 3655, 3655, 3655, 0, 0, - 3655, 3655, 3656, 3656, 3656, 0, 0, 0, 3656, 3657, - 3657, 3657, 3657, 0, 0, 3657, 3657, 3658, 3658, 3658, - 0, 0, 0, 3658, 3659, 3659, 3659, 3659, 0, 0, - 3659, 3659, 3660, 3660, 3660, 3660, 0, 3660, 0, 3660, - 3661, 3661, 3661, 3661, 0, 0, 3661, 3661, 3662, 3662, - 3662, 3662, 0, 3662, 0, 3662, 3663, 3663, 3663, 3663, - 0, 0, 3663, 3663, 3664, 3664, 3664, 0, 0, 0, - - 3664, 3665, 3665, 3665, 3665, 0, 0, 3665, 3665, 3666, - 3666, 3666, 3666, 0, 3666, 0, 3666, 3667, 3667, 3667, - 3667, 0, 0, 3667, 3667, 3668, 3668, 3668, 3668, 0, - 3668, 0, 3668, 3669, 3669, 3669, 3669, 0, 0, 3669, + 2763, 2763, 2763, 2757, 2763, 955, 2761, 2763, 2748, 2762, + 954, 953, 2764, 2766, 2766, 2766, 952, 2766, 951, 950, + 2766, 2777, 2777, 2777, 2778, 2778, 2778, 949, 2778, 945, + 944, 2778, 2779, 2779, 2779, 942, 2779, 941, 2777, 2779, + 2782, 2782, 2782, 2783, 2783, 2783, 940, 2783, 939, 938, + 2783, 2785, 2785, 2785, 2787, 2787, 2787, 2782, 2787, 934, + 932, 2787, 2790, 2790, 2790, 2791, 2791, 2791, 2785, 2791, + 931, 930, 2791, 2792, 2792, 2792, 2793, 2793, 2793, 2790, + + 2793, 929, 925, 2793, 2800, 2800, 2800, 2801, 2801, 2801, + 2792, 2802, 2802, 2802, 924, 2802, 920, 916, 2802, 2805, + 2805, 2805, 2800, 2805, 915, 2801, 2805, 2808, 2808, 2808, + 2811, 2811, 2811, 2813, 2813, 2813, 2814, 2814, 2814, 2817, + 2817, 2817, 912, 2817, 911, 2808, 2817, 2811, 2811, 2828, + 2828, 2828, 2837, 2837, 2837, 2800, 2851, 2851, 2851, 2852, + 2852, 2852, 2853, 2853, 2853, 910, 2828, 2855, 2855, 2855, + 2837, 2854, 2854, 2854, 2801, 2854, 909, 908, 2854, 2853, + 2856, 2856, 2856, 907, 906, 2855, 2857, 2857, 2857, 903, + 2857, 902, 901, 2857, 2862, 2862, 2862, 2856, 2859, 2859, + + 2859, 2837, 2859, 900, 897, 2859, 2863, 2863, 2863, 896, + 2863, 2862, 895, 2863, 2866, 2866, 2866, 892, 2855, 2867, + 2867, 2867, 890, 2867, 887, 886, 2867, 885, 2868, 2868, + 2868, 2866, 2868, 884, 883, 2868, 2871, 2871, 2871, 2872, + 2872, 2872, 880, 2872, 879, 878, 2872, 2882, 2882, 2882, + 877, 2882, 876, 2871, 2882, 2885, 2885, 2885, 873, 2885, + 872, 871, 2885, 2889, 2889, 2889, 2890, 2890, 2890, 870, + 2890, 868, 865, 2890, 2892, 2892, 2892, 864, 2892, 862, + 2889, 2892, 2895, 2895, 2895, 859, 2895, 857, 854, 2895, + 2904, 2904, 2904, 2905, 2905, 2905, 2910, 2910, 2910, 2913, + + 2913, 2913, 2914, 2914, 2914, 2915, 2915, 2915, 2904, 2915, + 853, 2905, 2915, 852, 2910, 851, 2913, 2913, 849, 2914, + 2914, 848, 847, 2915, 2916, 2916, 2916, 2917, 2917, 2917, + 2918, 2918, 2918, 2919, 2919, 2919, 2928, 2928, 2928, 2929, + 2929, 2929, 844, 2929, 843, 842, 2929, 2938, 2938, 2938, + 2951, 2951, 2951, 2928, 2952, 2952, 2952, 841, 840, 2905, + 2953, 2953, 2953, 839, 2953, 2938, 834, 2953, 2956, 2956, + 2956, 2957, 2957, 2957, 833, 2957, 832, 831, 2957, 830, + 2961, 2961, 2961, 829, 2961, 828, 2956, 2961, 2966, 2966, + 2966, 827, 2966, 826, 825, 2966, 2969, 2969, 2969, 824, + + 2969, 823, 821, 2969, 2972, 2972, 2972, 2981, 2981, 2981, + 2982, 2982, 2982, 2938, 2982, 819, 818, 2982, 2985, 2985, + 2985, 2972, 815, 812, 2981, 3000, 3000, 3000, 3002, 3002, + 3002, 3008, 3008, 3008, 809, 2985, 808, 3009, 3009, 3009, + 805, 3009, 804, 3000, 3009, 802, 3002, 801, 3008, 3008, + 3010, 3010, 3010, 797, 3010, 3009, 796, 3010, 3013, 3013, + 3013, 3014, 3014, 3014, 3015, 3015, 3015, 795, 3010, 3024, + 3024, 3024, 794, 3024, 791, 788, 3024, 787, 786, 3002, + 3011, 3011, 3011, 3011, 3011, 3011, 3011, 3011, 3011, 783, + 782, 3011, 3033, 3033, 3033, 781, 3011, 3011, 3011, 3011, + + 3011, 3042, 3042, 3042, 3043, 3043, 3043, 3048, 3048, 3048, + 3033, 3049, 3049, 3049, 777, 3049, 776, 775, 3049, 3050, + 3050, 3050, 3043, 773, 3048, 3011, 3011, 3012, 3012, 3012, + 3012, 3012, 3012, 3012, 3012, 3012, 3050, 762, 3012, 3058, + 3058, 3058, 760, 3012, 3012, 3012, 3012, 3012, 3059, 3059, + 3059, 757, 3059, 756, 755, 3059, 3058, 3060, 3060, 3060, + 3061, 3061, 3061, 753, 3061, 752, 751, 3061, 3074, 3074, + 3074, 747, 3012, 3012, 3060, 3080, 3080, 3080, 746, 3080, + 745, 744, 3080, 741, 740, 739, 3074, 738, 3099, 3099, + 3099, 737, 736, 3080, 3083, 3083, 3083, 3083, 3083, 3083, + + 3083, 3083, 3083, 735, 733, 3083, 3099, 3113, 3113, 3113, + 3083, 3083, 3083, 3083, 3083, 3110, 3110, 3110, 730, 3110, + 729, 727, 3110, 725, 3113, 3114, 3114, 3114, 722, 3114, + 721, 715, 3114, 3138, 3138, 3138, 3150, 3150, 3150, 3083, + 3083, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, 3084, + 713, 3138, 3084, 711, 3150, 3150, 708, 3084, 3084, 3084, + 3084, 3084, 3120, 3120, 3120, 707, 3120, 703, 702, 3120, + 3123, 3123, 3123, 701, 3123, 700, 697, 3123, 3167, 3167, + 3167, 3168, 3168, 3168, 696, 695, 3084, 3084, 3169, 3169, + 3169, 694, 3174, 3174, 3174, 3167, 3174, 691, 3168, 3174, + + 3179, 3179, 3179, 690, 689, 3169, 3190, 3190, 3190, 3194, + 3194, 3194, 3207, 3207, 3207, 688, 687, 3179, 3208, 3208, + 3208, 681, 3208, 680, 3190, 3208, 678, 3194, 672, 3207, + 3209, 3209, 3209, 3210, 3210, 3210, 671, 3210, 667, 661, + 3210, 3211, 3211, 3211, 3212, 3212, 3212, 3209, 3212, 660, + 656, 3212, 3221, 3221, 3221, 3222, 3222, 3222, 3211, 3222, + 3194, 649, 3222, 3231, 3231, 3231, 3243, 3243, 3243, 3221, + 3243, 645, 639, 3243, 635, 3246, 3246, 3246, 627, 3246, + 626, 3231, 3246, 3249, 3249, 3249, 625, 3249, 624, 623, + 3249, 3260, 3260, 3260, 619, 3260, 612, 611, 3260, 610, + + 3231, 3385, 3385, 3385, 3396, 3396, 3396, 606, 3396, 599, + 598, 3396, 3499, 3499, 3499, 3500, 3500, 3500, 594, 3385, + 588, 587, 3396, 583, 575, 574, 570, 561, 557, 549, + 3499, 548, 547, 3500, 3503, 3503, 3503, 3503, 3503, 3503, + 3503, 3503, 3503, 3504, 3504, 3504, 3504, 3504, 3504, 3504, + 3504, 3504, 3505, 3505, 3505, 3505, 3505, 3505, 3505, 3505, + 3505, 3506, 3506, 3506, 3506, 3506, 3506, 3506, 3506, 3506, + 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3507, 3508, + 3508, 3508, 3508, 3508, 3508, 3508, 3508, 3508, 3509, 3509, + 3509, 3509, 3509, 3509, 3509, 3509, 3509, 3510, 3510, 3510, + + 3510, 3510, 3510, 3510, 3510, 3510, 3511, 3511, 3511, 3511, + 3511, 3511, 3511, 3511, 3511, 3512, 3512, 3512, 3512, 3512, + 3512, 3512, 3512, 3512, 3513, 3513, 3513, 3513, 3513, 3513, + 3513, 3513, 3513, 3514, 3514, 3514, 3514, 3514, 3514, 3514, + 3514, 3514, 3515, 3515, 3515, 3515, 3515, 3515, 3515, 3515, + 3515, 3516, 3516, 3516, 3516, 3516, 3516, 3516, 3516, 3516, + 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3517, 3518, + 3518, 3518, 3518, 3518, 3518, 3518, 3518, 3518, 3519, 3519, + 3519, 3519, 3519, 3519, 3519, 3519, 3519, 3520, 3520, 3520, + 3520, 3520, 3520, 3520, 3520, 3520, 3521, 3521, 3521, 3521, + + 3521, 3521, 3521, 3521, 3521, 3522, 3522, 3522, 3522, 3522, + 3522, 3522, 3522, 3522, 3523, 3523, 3523, 3523, 3523, 3523, + 3523, 3523, 3523, 3524, 3524, 3524, 3524, 3524, 3524, 3524, + 3524, 3524, 3525, 3525, 3525, 3525, 3525, 3525, 3525, 3525, + 3525, 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3526, 3526, + 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3527, 3528, + 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3528, 3529, 3529, + 3529, 3529, 3529, 3529, 3529, 3529, 3529, 3530, 3530, 3530, + 3530, 3530, 3530, 3530, 3530, 3530, 3531, 3531, 3531, 3531, + 3531, 3531, 3531, 3531, 3531, 3532, 3532, 3532, 3532, 3532, + + 3532, 3532, 3532, 3532, 3533, 3533, 3533, 3533, 3533, 3533, + 3533, 3533, 3533, 3534, 3534, 3534, 3534, 3534, 3534, 3534, + 3534, 3534, 3535, 3535, 3535, 3535, 3535, 3535, 3535, 3535, + 3535, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, 3536, + 3537, 3537, 3537, 3537, 3537, 3537, 3537, 3537, 3537, 3538, + 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3538, 3539, 3539, + 3539, 3539, 3539, 3539, 3539, 3539, 3539, 3540, 3540, 3540, + 3540, 3540, 3540, 3540, 3540, 3540, 3541, 3541, 3541, 3541, + 3541, 3541, 3541, 3541, 3541, 3542, 3542, 3542, 3542, 3542, + 3542, 3542, 3542, 3542, 3543, 3543, 3543, 3543, 3543, 3543, + + 3543, 3543, 3543, 3544, 3544, 3544, 3544, 3544, 3544, 3544, + 3544, 3544, 3545, 3545, 3545, 3545, 3545, 3545, 3545, 3545, + 3545, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, 3546, + 3547, 3547, 3547, 3547, 3547, 3547, 3547, 3547, 3547, 3548, + 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3548, 3549, 3549, + 3549, 3549, 3549, 3549, 3549, 3549, 3549, 3550, 3550, 3550, + 3550, 3550, 3550, 3550, 3550, 3550, 3551, 3551, 3551, 3551, + 3551, 3551, 3551, 3551, 3551, 3552, 3552, 3552, 3552, 3552, + 3552, 3552, 3552, 3552, 3553, 3553, 3553, 3553, 3553, 3553, + 3553, 3553, 3553, 3554, 3554, 3554, 3554, 3554, 3554, 3554, + + 3554, 3554, 3555, 3555, 3555, 3555, 3555, 3555, 3555, 3555, + 3555, 3556, 3556, 3556, 3556, 3556, 3556, 3556, 3556, 3556, + 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3557, 3558, + 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3558, 3559, 3559, + 3559, 3559, 3559, 3559, 3559, 3559, 3559, 3560, 3560, 3560, + 3560, 3560, 3560, 3560, 3560, 3560, 3561, 3561, 3561, 3561, + 3561, 3561, 3561, 3561, 3561, 3562, 3562, 3562, 3562, 3562, + 3562, 3562, 3562, 3562, 3563, 3563, 3563, 3563, 3563, 3563, + 3563, 3563, 3563, 3564, 3564, 3564, 3564, 3564, 3564, 3564, + 3564, 3564, 3565, 3565, 3565, 3565, 3565, 3565, 3565, 3565, + + 3565, 3566, 3566, 3566, 543, 537, 536, 3566, 3567, 3567, + 3567, 535, 531, 525, 3567, 3568, 3568, 3568, 524, 520, + 514, 3568, 3569, 3569, 3569, 513, 512, 511, 3569, 3570, + 3570, 3570, 510, 509, 508, 3570, 3571, 3571, 3571, 504, + 498, 497, 3571, 3572, 3572, 3572, 495, 494, 493, 3572, + 3573, 3573, 3573, 489, 482, 477, 3573, 3574, 3574, 3574, + 476, 474, 470, 3574, 3575, 3575, 3575, 464, 463, 462, + 3575, 3576, 3576, 3576, 458, 452, 448, 3576, 3577, 3577, + 3577, 441, 440, 439, 3577, 3578, 3578, 3578, 438, 434, + 430, 3578, 3579, 3579, 3579, 426, 424, 423, 3579, 3580, + + 3580, 3580, 422, 418, 412, 3580, 3581, 3581, 3581, 411, + 407, 401, 3581, 3582, 3582, 3582, 400, 396, 388, 3582, + 3583, 3583, 3583, 387, 386, 385, 3583, 3584, 3584, 3584, + 381, 372, 366, 3584, 3585, 3585, 3585, 362, 361, 357, + 3585, 3586, 3586, 3586, 351, 350, 349, 3586, 3587, 3587, + 3587, 345, 338, 336, 3587, 3588, 3588, 3588, 335, 331, + 328, 3588, 3589, 3589, 3589, 326, 325, 324, 3589, 3590, + 3590, 3590, 320, 316, 313, 3590, 3591, 3591, 3591, 309, + 306, 305, 3591, 3592, 3592, 3592, 297, 293, 289, 3592, + 3593, 3593, 3593, 288, 287, 281, 3593, 3594, 3594, 3594, + + 280, 278, 275, 3594, 3595, 3595, 3595, 3595, 3595, 3595, + 3595, 263, 3595, 3596, 3596, 3596, 0, 0, 0, 3596, + 3597, 0, 0, 0, 3597, 3598, 3598, 3598, 0, 0, + 0, 3598, 3599, 0, 0, 0, 3599, 3600, 3600, 3600, + 0, 0, 0, 3600, 3601, 0, 0, 0, 3601, 3602, + 3602, 3602, 0, 0, 0, 3602, 3603, 0, 0, 0, + 3603, 3604, 3604, 3604, 0, 0, 0, 3604, 3605, 0, + 0, 0, 3605, 3606, 3606, 3606, 0, 0, 0, 3606, + 3607, 0, 0, 0, 3607, 3608, 3608, 3608, 0, 0, + 0, 3608, 3609, 0, 0, 0, 3609, 3610, 3610, 3610, + + 0, 0, 0, 3610, 3611, 0, 0, 0, 3611, 3612, + 3612, 3612, 0, 0, 0, 3612, 3613, 0, 0, 0, + 3613, 3614, 3614, 3614, 0, 0, 0, 3614, 3615, 0, + 0, 0, 3615, 3616, 3616, 3616, 0, 0, 0, 3616, + 3617, 0, 0, 0, 3617, 3618, 3618, 3618, 0, 0, + 0, 3618, 3619, 0, 0, 0, 3619, 3620, 3620, 3620, + 0, 0, 0, 3620, 3621, 0, 0, 0, 3621, 3622, + 3622, 3622, 0, 0, 0, 3622, 3623, 0, 0, 0, + 3623, 3624, 3624, 3624, 0, 0, 0, 3624, 3625, 0, + 0, 0, 3625, 3626, 3626, 3626, 0, 0, 0, 3626, + + 3627, 0, 0, 0, 3627, 3628, 3628, 3628, 0, 0, + 0, 3628, 3629, 0, 0, 0, 3629, 3630, 3630, 3630, + 0, 0, 0, 3630, 3631, 0, 0, 0, 3631, 3632, + 3632, 3632, 0, 0, 0, 3632, 3633, 0, 0, 0, + 3633, 3634, 3634, 3634, 0, 0, 0, 3634, 3635, 0, + 0, 0, 3635, 3636, 3636, 3636, 0, 0, 0, 3636, + 3637, 0, 0, 0, 3637, 3638, 3638, 3638, 0, 0, + 0, 3638, 3639, 0, 0, 0, 3639, 3640, 3640, 3640, + 0, 0, 0, 3640, 3641, 0, 0, 0, 3641, 3642, + 3642, 3642, 0, 0, 0, 3642, 3643, 0, 0, 0, + + 3643, 3644, 3644, 3644, 0, 0, 0, 3644, 3645, 0, + 0, 0, 3645, 3646, 3646, 3646, 0, 0, 0, 3646, + 3647, 0, 0, 0, 3647, 3648, 3648, 3648, 0, 0, + 0, 3648, 3649, 0, 0, 0, 3649, 3650, 3650, 3650, + 0, 0, 0, 3650, 3651, 0, 0, 0, 3651, 3652, + 3652, 3652, 0, 0, 0, 3652, 3653, 0, 0, 0, + 3653, 3654, 3654, 3654, 3654, 3654, 3654, 3654, 3654, 3654, + 3655, 0, 0, 0, 0, 3655, 3656, 3656, 3656, 0, + 0, 0, 3656, 3657, 3657, 3657, 3657, 0, 0, 3657, + 3657, 3658, 3658, 3658, 0, 0, 0, 3658, 3659, 3659, + + 3659, 3659, 0, 0, 3659, 3659, 3660, 3660, 3660, 0, + 0, 0, 3660, 3661, 3661, 3661, 3661, 0, 0, 3661, + 3661, 3662, 3662, 3662, 0, 0, 0, 3662, 3663, 3663, + 3663, 3663, 0, 0, 3663, 3663, 3664, 3664, 3664, 0, + 0, 0, 3664, 3665, 3665, 3665, 3665, 0, 0, 3665, + 3665, 3666, 3666, 3666, 0, 0, 0, 3666, 3667, 3667, + 3667, 3667, 0, 0, 3667, 3667, 3668, 3668, 3668, 0, + 0, 0, 3668, 3669, 3669, 3669, 3669, 0, 0, 3669, 3669, 3670, 3670, 3670, 0, 0, 0, 3670, 3671, 3671, 3671, 3671, 0, 0, 3671, 3671, 3672, 3672, 3672, 0, + 0, 0, 3672, 3673, 3673, 3673, 3673, 0, 0, 3673, - 3673, 3674, 3674, 3674, 3674, 0, 0, 3674, 3674, 3675, - 3675, 3675, 0, 0, 0, 3675, 3676, 3676, 3676, 3676, - 0, 0, 3676, 3676, 3677, 3677, 3677, 0, 0, 0, - - 3677, 3678, 3678, 3678, 3678, 0, 0, 3678, 3678, 3679, - 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3679, 3680, 0, - 3680, 0, 0, 3680, 3681, 3681, 3681, 0, 0, 0, - 3681, 3682, 3682, 3682, 3682, 0, 0, 3682, 3682, 3683, - 3683, 3683, 3683, 0, 3683, 0, 3683, 3684, 3684, 3684, - 3684, 0, 0, 3684, 3684, 3685, 3685, 3685, 3685, 0, - 3685, 0, 3685, 3686, 3686, 3686, 3686, 0, 0, 3686, - 3686, 3687, 3687, 3687, 0, 0, 0, 3687, 3688, 3688, - 3688, 3688, 0, 0, 3688, 3688, 3689, 3689, 3689, 0, - 0, 0, 3689, 3690, 3690, 3690, 3690, 0, 0, 3690, - - 3690, 3691, 3691, 3691, 0, 0, 0, 3691, 3692, 3692, - 3692, 3692, 0, 0, 3692, 3692, 3693, 3693, 3693, 0, - 0, 0, 3693, 3694, 3694, 3694, 3694, 0, 0, 3694, - 3694, 3695, 3695, 3695, 3695, 0, 3695, 0, 3695, 3696, - 3696, 3696, 3696, 0, 0, 3696, 3696, 3697, 3697, 3697, - 3697, 0, 3697, 0, 3697, 3698, 3698, 3698, 3698, 0, - 0, 3698, 3698, 3699, 3699, 3699, 0, 0, 0, 3699, - 3700, 3700, 3700, 3700, 0, 0, 3700, 3700, 3701, 3701, - 3701, 0, 0, 0, 3701, 3702, 3702, 3702, 3702, 0, - 0, 3702, 3702, 3703, 3703, 3703, 3703, 0, 3703, 0, - - 3703, 3704, 3704, 3704, 3704, 0, 0, 3704, 3704, 3705, - 3705, 3705, 3705, 0, 3705, 0, 3705, 3706, 3706, 3706, - 3706, 0, 0, 3706, 3706, 3707, 3707, 3707, 0, 0, - 0, 3707, 3708, 3708, 3708, 3708, 0, 0, 3708, 3708, - 3709, 3709, 3709, 0, 0, 0, 3709, 3710, 3710, 3710, - 3710, 0, 0, 3710, 3710, 3711, 3711, 3711, 0, 0, - 0, 3711, 3712, 3712, 3712, 3712, 0, 0, 3712, 3712, - 3713, 3713, 3713, 0, 0, 0, 3713, 3714, 3714, 3714, - 3714, 0, 0, 3714, 3714, 3715, 3715, 3715, 0, 0, - 0, 3715, 3716, 3716, 3716, 3716, 0, 0, 3716, 3716, - - 3717, 3717, 3717, 0, 0, 0, 3717, 3718, 3718, 3718, - 3718, 0, 0, 3718, 3718, 3719, 3719, 3719, 0, 0, - 0, 3719, 3720, 3720, 3720, 3720, 0, 0, 3720, 3720, - 3721, 3721, 3721, 0, 0, 0, 3721, 3722, 3722, 3722, - 3722, 0, 0, 3722, 3722, 3723, 3723, 3723, 0, 0, - 0, 3723, 3724, 3724, 3724, 3724, 0, 0, 3724, 3724, - 3725, 3725, 3725, 3725, 0, 0, 3725, 3725, 3726, 3726, - 3726, 0, 0, 0, 3726, 3727, 3727, 3727, 3727, 0, - 0, 3727, 3727, 3728, 3728, 3728, 0, 0, 0, 3728, - 3729, 3729, 3729, 3729, 0, 0, 3729, 3729, 3730, 3730, - - 3730, 0, 0, 0, 3730, 3731, 3731, 3731, 3731, 0, - 0, 3731, 3731, 3732, 3732, 3732, 3732, 0, 0, 3732, - 3732, 3733, 3733, 3733, 0, 0, 0, 3733, 3734, 3734, - 3734, 3734, 0, 0, 3734, 3734, 3735, 3735, 3735, 0, - 0, 0, 3735, 3736, 3736, 3736, 3736, 0, 0, 3736, - 3736, 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737, 3737, - 3738, 3738, 3738, 3738, 3738, 3738, 3738, 3738, 3738, 3739, - 3739, 3739, 0, 0, 0, 3739, 3740, 3740, 3740, 3740, - 0, 0, 3740, 3740, 3741, 3741, 3741, 3741, 0, 0, - 3741, 3741, 3742, 3742, 3742, 0, 0, 0, 3742, 3743, - - 3743, 3743, 3743, 0, 0, 3743, 3743, 3744, 3744, 3744, - 0, 0, 0, 3744, 3745, 3745, 3745, 3745, 0, 0, - 3745, 3745, 3746, 3746, 3746, 0, 0, 0, 3746, 3747, - 3747, 3747, 3747, 0, 0, 3747, 3747, 3748, 3748, 3748, - 0, 0, 0, 3748, 3749, 3749, 3749, 0, 0, 0, - 3749, 3750, 3750, 3750, 3750, 0, 0, 3750, 3750, 3751, - 3751, 3751, 0, 0, 0, 3751, 3752, 3752, 3752, 3752, - 0, 0, 3752, 3752, 3753, 3753, 3753, 0, 0, 0, - 3753, 3754, 3754, 3754, 3754, 0, 0, 3754, 3754, 3755, - 3755, 3755, 0, 0, 0, 3755, 3756, 3756, 3756, 3756, - - 0, 0, 3756, 3756, 3757, 3757, 3757, 0, 0, 0, - 3757, 3758, 3758, 3758, 3758, 0, 0, 3758, 3758, 3759, - 3759, 3759, 3759, 0, 0, 3759, 3759, 3760, 3760, 3760, - 3760, 0, 0, 3760, 3760, 3761, 3761, 3761, 0, 0, - 0, 3761, 3762, 3762, 3762, 3762, 0, 0, 3762, 3762, - 3763, 3763, 3763, 3763, 0, 3763, 0, 3763, 3764, 3764, - 3764, 3764, 0, 0, 3764, 3764, 3765, 3765, 3765, 0, - 0, 0, 3765, 3766, 3766, 3766, 3766, 0, 0, 3766, + 3673, 3674, 3674, 3674, 0, 0, 0, 3674, 3675, 3675, + 3675, 3675, 0, 0, 3675, 3675, 3676, 3676, 3676, 0, + 0, 0, 3676, 3677, 3677, 3677, 3677, 0, 0, 3677, + 3677, 3678, 3678, 3678, 0, 0, 0, 3678, 3679, 3679, + 3679, 3679, 0, 0, 3679, 3679, 3680, 3680, 3680, 0, + 0, 0, 3680, 3681, 3681, 3681, 3681, 0, 0, 3681, + 3681, 3682, 3682, 3682, 0, 0, 0, 3682, 3683, 3683, + 3683, 3683, 0, 0, 3683, 3683, 3684, 3684, 3684, 3684, + 0, 3684, 0, 3684, 3685, 3685, 3685, 3685, 0, 0, + + 3685, 3685, 3686, 3686, 3686, 0, 0, 0, 3686, 3687, + 3687, 3687, 3687, 0, 0, 3687, 3687, 3688, 3688, 3688, + 0, 0, 0, 3688, 3689, 3689, 3689, 3689, 0, 0, + 3689, 3689, 3690, 3690, 3690, 0, 0, 0, 3690, 3691, + 3691, 3691, 3691, 0, 0, 3691, 3691, 3692, 3692, 3692, + 0, 0, 0, 3692, 3693, 3693, 3693, 3693, 0, 0, + 3693, 3693, 3694, 3694, 3694, 3694, 0, 3694, 0, 3694, + 3695, 3695, 3695, 3695, 0, 0, 3695, 3695, 3696, 3696, + 3696, 3696, 0, 3696, 0, 3696, 3697, 3697, 3697, 3697, + 0, 0, 3697, 3697, 3698, 3698, 3698, 0, 0, 0, + + 3698, 3699, 3699, 3699, 3699, 0, 0, 3699, 3699, 3700, + 3700, 3700, 3700, 0, 3700, 0, 3700, 3701, 3701, 3701, + 3701, 0, 0, 3701, 3701, 3702, 3702, 3702, 3702, 0, + 3702, 0, 3702, 3703, 3703, 3703, 3703, 0, 0, 3703, + 3703, 3704, 3704, 3704, 0, 0, 0, 3704, 3705, 3705, + 3705, 3705, 0, 0, 3705, 3705, 3706, 3706, 3706, 0, + 0, 0, 3706, 3707, 3707, 3707, 3707, 0, 0, 3707, + 3707, 3708, 3708, 3708, 3708, 0, 0, 3708, 3708, 3709, + 3709, 3709, 0, 0, 0, 3709, 3710, 3710, 3710, 3710, + 0, 0, 3710, 3710, 3711, 3711, 3711, 0, 0, 0, + + 3711, 3712, 3712, 3712, 3712, 0, 0, 3712, 3712, 3713, + 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3713, 3714, 0, + 3714, 0, 0, 3714, 3715, 3715, 3715, 0, 0, 0, + 3715, 3716, 3716, 3716, 3716, 0, 0, 3716, 3716, 3717, + 3717, 3717, 3717, 0, 3717, 0, 3717, 3718, 3718, 3718, + 3718, 0, 0, 3718, 3718, 3719, 3719, 3719, 3719, 0, + 3719, 0, 3719, 3720, 3720, 3720, 3720, 0, 0, 3720, + 3720, 3721, 3721, 3721, 0, 0, 0, 3721, 3722, 3722, + 3722, 3722, 0, 0, 3722, 3722, 3723, 3723, 3723, 0, + 0, 0, 3723, 3724, 3724, 3724, 3724, 0, 0, 3724, + + 3724, 3725, 3725, 3725, 0, 0, 0, 3725, 3726, 3726, + 3726, 3726, 0, 0, 3726, 3726, 3727, 3727, 3727, 0, + 0, 0, 3727, 3728, 3728, 3728, 3728, 0, 0, 3728, + 3728, 3729, 3729, 3729, 3729, 0, 3729, 0, 3729, 3730, + 3730, 3730, 3730, 0, 0, 3730, 3730, 3731, 3731, 3731, + 3731, 0, 3731, 0, 3731, 3732, 3732, 3732, 3732, 0, + 0, 3732, 3732, 3733, 3733, 3733, 0, 0, 0, 3733, + 3734, 3734, 3734, 3734, 0, 0, 3734, 3734, 3735, 3735, + 3735, 0, 0, 0, 3735, 3736, 3736, 3736, 3736, 0, + 0, 3736, 3736, 3737, 3737, 3737, 3737, 0, 3737, 0, + + 3737, 3738, 3738, 3738, 3738, 0, 0, 3738, 3738, 3739, + 3739, 3739, 3739, 0, 3739, 0, 3739, 3740, 3740, 3740, + 3740, 0, 0, 3740, 3740, 3741, 3741, 3741, 0, 0, + 0, 3741, 3742, 3742, 3742, 3742, 0, 0, 3742, 3742, + 3743, 3743, 3743, 0, 0, 0, 3743, 3744, 3744, 3744, + 3744, 0, 0, 3744, 3744, 3745, 3745, 3745, 0, 0, + 0, 3745, 3746, 3746, 3746, 3746, 0, 0, 3746, 3746, + 3747, 3747, 3747, 0, 0, 0, 3747, 3748, 3748, 3748, + 3748, 0, 0, 3748, 3748, 3749, 3749, 3749, 0, 0, + 0, 3749, 3750, 3750, 3750, 3750, 0, 0, 3750, 3750, + + 3751, 3751, 3751, 0, 0, 0, 3751, 3752, 3752, 3752, + 3752, 0, 0, 3752, 3752, 3753, 3753, 3753, 0, 0, + 0, 3753, 3754, 3754, 3754, 3754, 0, 0, 3754, 3754, + 3755, 3755, 3755, 0, 0, 0, 3755, 3756, 3756, 3756, + 3756, 0, 0, 3756, 3756, 3757, 3757, 3757, 0, 0, + 0, 3757, 3758, 3758, 3758, 3758, 0, 0, 3758, 3758, + 3759, 3759, 3759, 3759, 0, 0, 3759, 3759, 3760, 3760, + 3760, 0, 0, 0, 3760, 3761, 3761, 3761, 3761, 0, + 0, 3761, 3761, 3762, 3762, 3762, 0, 0, 0, 3762, + 3763, 3763, 3763, 3763, 0, 0, 3763, 3763, 3764, 3764, + + 3764, 0, 0, 0, 3764, 3765, 3765, 3765, 3765, 0, + 0, 3765, 3765, 3766, 3766, 3766, 3766, 0, 0, 3766, 3766, 3767, 3767, 3767, 0, 0, 0, 3767, 3768, 3768, 3768, 3768, 0, 0, 3768, 3768, 3769, 3769, 3769, 0, - 0, 0, 3769, 3770, 3770, 3770, 3770, 0, 0, 3770, - 3770, 3771, 3771, 3771, 0, 0, 0, 3771, 3772, 3772, - 3772, 3772, 0, 0, 3772, 3772, 3773, 3773, 3773, 0, - 0, 0, 3773, 3774, 3774, 3774, 3774, 0, 0, 3774, - 3774, 3775, 3775, 3775, 0, 0, 0, 3775, 3776, 3776, - 3776, 3776, 0, 0, 3776, 3776, 3777, 3777, 3777, 0, - 0, 0, 3777, 3778, 3778, 3778, 3778, 0, 0, 3778, - 3778, 3779, 3779, 3779, 3779, 0, 0, 3779, 3779, 3780, - 3780, 3780, 0, 0, 0, 3780, 3781, 3781, 3781, 3781, - 0, 0, 3781, 3781, 3782, 3782, 3782, 0, 0, 0, - - 3782, 3783, 3783, 3783, 3783, 0, 0, 3783, 3783, 3784, - 3784, 3784, 3784, 0, 3784, 0, 3784, 3785, 3785, 3785, - 3785, 0, 0, 3785, 3785, 3786, 3786, 3786, 3786, 0, - 0, 3786, 3786, 3787, 3787, 3787, 3787, 0, 3787, 0, + 3770, 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771, 3771, + 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3772, 3773, + 3773, 3773, 0, 0, 0, 3773, 3774, 3774, 3774, 3774, + 0, 0, 3774, 3774, 3775, 3775, 3775, 3775, 0, 0, + 3775, 3775, 3776, 3776, 3776, 0, 0, 0, 3776, 3777, + + 3777, 3777, 3777, 0, 0, 3777, 3777, 3778, 3778, 3778, + 0, 0, 0, 3778, 3779, 3779, 3779, 3779, 0, 0, + 3779, 3779, 3780, 3780, 3780, 0, 0, 0, 3780, 3781, + 3781, 3781, 3781, 0, 0, 3781, 3781, 3782, 3782, 3782, + 0, 0, 0, 3782, 3783, 3783, 3783, 0, 0, 0, + 3783, 3784, 3784, 3784, 3784, 0, 0, 3784, 3784, 3785, + 3785, 3785, 0, 0, 0, 3785, 3786, 3786, 3786, 3786, + 0, 0, 3786, 3786, 3787, 3787, 3787, 0, 0, 0, 3787, 3788, 3788, 3788, 3788, 0, 0, 3788, 3788, 3789, - 3789, 3789, 3789, 0, 3789, 0, 3789, 3790, 3790, 3790, - 3790, 0, 0, 3790, 3790, 3791, 3791, 3791, 3791, 3791, - 3791, 3791, 3791, 3791, 3792, 3792, 3792, 3792, 3792, 3792, - 3792, 3792, 3792, 3793, 3793, 3793, 0, 0, 0, 3793, - 3794, 3794, 3794, 3794, 0, 0, 3794, 3794, 3795, 3795, - - 3795, 3795, 0, 0, 3795, 3795, 3796, 3796, 3796, 0, - 0, 0, 3796, 3797, 3797, 3797, 3797, 0, 0, 3797, - 3797, 3798, 3798, 3798, 0, 0, 0, 3798, 3799, 3799, - 3799, 3799, 0, 0, 3799, 3799, 3800, 3800, 3800, 0, - 0, 0, 3800, 3801, 3801, 3801, 3801, 0, 0, 3801, - 3801, 3802, 3802, 3802, 0, 0, 0, 3802, 3803, 3803, - 3803, 0, 0, 0, 3803, 3804, 3804, 3804, 3804, 0, - 0, 3804, 3804, 3805, 3805, 3805, 0, 0, 0, 3805, - 3806, 3806, 3806, 3806, 0, 0, 3806, 3806, 3807, 3807, - 3807, 3807, 0, 3807, 0, 3807, 3808, 3808, 3808, 3808, - - 0, 0, 3808, 3808, 3809, 3809, 3809, 0, 0, 0, - 3809, 3810, 3810, 3810, 3810, 0, 0, 3810, 3810, 3811, - 3811, 3811, 3811, 0, 3811, 0, 3811, 3812, 3812, 3812, - 3812, 0, 0, 3812, 3812, 3813, 3813, 3813, 3813, 0, - 0, 3813, 3813, 3814, 3814, 3814, 0, 0, 0, 3814, - 3815, 3815, 3815, 3815, 0, 0, 3815, 3815, 3816, 3816, - 3816, 3816, 0, 3816, 0, 3816, 3817, 3817, 3817, 3817, - 0, 0, 3817, 3817, 3818, 3818, 3818, 0, 0, 0, - 3818, 3819, 3819, 3819, 3819, 0, 0, 3819, 3819, 3820, - 3820, 3820, 0, 0, 0, 3820, 3821, 3821, 3821, 3821, - - 0, 0, 3821, 3821, 3822, 3822, 3822, 0, 0, 0, - 3822, 3823, 3823, 3823, 3823, 0, 0, 3823, 3823, 3824, - 3824, 3824, 0, 0, 0, 3824, 3825, 3825, 3825, 3825, - 0, 0, 3825, 3825, 3826, 3826, 3826, 0, 0, 0, - 3826, 3827, 3827, 3827, 3827, 0, 0, 3827, 3827, 3828, - 3828, 3828, 3828, 0, 3828, 0, 3828, 3829, 3829, 3829, - 3829, 0, 0, 3829, 3829, 3830, 3830, 3830, 0, 0, - 0, 3830, 3831, 3831, 3831, 3831, 0, 0, 3831, 3831, - 3832, 3832, 3832, 3832, 0, 0, 3832, 3832, 3833, 3833, - 3833, 3833, 0, 3833, 0, 3833, 3834, 3834, 3834, 3834, - - 0, 0, 3834, 3834, 3835, 3835, 3835, 0, 0, 0, - 3835, 3836, 3836, 3836, 3836, 0, 0, 3836, 3836, 3837, - 3837, 3837, 3837, 0, 0, 3837, 3837, 3838, 3838, 3838, - 3838, 0, 0, 3838, 3838, 3839, 3839, 3839, 3839, 0, - 0, 3839, 3839, 3840, 3840, 3840, 3840, 0, 0, 3840, - 3840, 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841, 3841, - 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3842, 3843, - 3843, 3843, 3843, 0, 3843, 0, 3843, 3844, 3844, 3844, - 3844, 0, 0, 3844, 3844, 3845, 3845, 3845, 3845, 0, - 0, 3845, 3845, 3846, 3846, 3846, 0, 0, 0, 3846, - - 3847, 3847, 3847, 3847, 0, 0, 3847, 3847, 3848, 3848, - 3848, 0, 0, 0, 3848, 3849, 3849, 3849, 3849, 0, - 0, 3849, 3849, 3850, 3850, 3850, 3850, 0, 3850, 0, - 3850, 3851, 3851, 3851, 3851, 0, 0, 3851, 3851, 3852, - 3852, 3852, 3852, 0, 3852, 0, 3852, 3853, 3853, 3853, - 3853, 0, 3853, 0, 3853, 3854, 3854, 3854, 3854, 0, - 0, 3854, 3854, 3855, 3855, 3855, 0, 0, 0, 3855, - 3856, 3856, 3856, 3856, 0, 0, 3856, 3856, 3857, 3857, - 3857, 3857, 0, 0, 3857, 3857, 3858, 3858, 3858, 0, - 0, 0, 3858, 3859, 3859, 3859, 3859, 0, 3859, 0, - - 3859, 3860, 3860, 3860, 3860, 0, 0, 3860, 3860, 3861, - 3861, 3861, 3861, 0, 0, 3861, 3861, 3862, 3862, 3862, - 0, 0, 0, 3862, 3863, 3863, 3863, 3863, 0, 0, - 3863, 3863, 3864, 3864, 3864, 3864, 0, 3864, 0, 3864, - 3865, 3865, 3865, 3865, 0, 0, 3865, 3865, 3866, 3866, - 3866, 0, 0, 0, 3866, 3867, 3867, 3867, 0, 0, - 0, 3867, 3868, 3868, 3868, 3868, 0, 0, 3868, 3868, - 3869, 3869, 3869, 0, 0, 0, 3869, 3870, 3870, 3870, - 3870, 0, 0, 3870, 3870, 3871, 3871, 3871, 0, 0, - 0, 3871, 3872, 3872, 3872, 0, 0, 0, 3872, 3873, - - 3873, 3873, 3873, 0, 0, 3873, 3873, 3874, 3874, 3874, - 0, 0, 0, 3874, 3875, 3875, 3875, 3875, 0, 0, - 3875, 3875, 3876, 3876, 3876, 0, 0, 0, 3876, 3877, - 3877, 3877, 3877, 0, 0, 3877, 3877, 3878, 3878, 3878, + 3789, 3789, 0, 0, 0, 3789, 3790, 3790, 3790, 3790, + + 0, 0, 3790, 3790, 3791, 3791, 3791, 0, 0, 0, + 3791, 3792, 3792, 3792, 3792, 0, 0, 3792, 3792, 3793, + 3793, 3793, 3793, 0, 0, 3793, 3793, 3794, 3794, 3794, + 3794, 0, 0, 3794, 3794, 3795, 3795, 3795, 0, 0, + 0, 3795, 3796, 3796, 3796, 3796, 0, 0, 3796, 3796, + 3797, 3797, 3797, 3797, 0, 3797, 0, 3797, 3798, 3798, + 3798, 3798, 0, 0, 3798, 3798, 3799, 3799, 3799, 0, + 0, 0, 3799, 3800, 3800, 3800, 3800, 0, 0, 3800, + 3800, 3801, 3801, 3801, 0, 0, 0, 3801, 3802, 3802, + 3802, 3802, 0, 0, 3802, 3802, 3803, 3803, 3803, 0, + + 0, 0, 3803, 3804, 3804, 3804, 3804, 0, 0, 3804, + 3804, 3805, 3805, 3805, 0, 0, 0, 3805, 3806, 3806, + 3806, 3806, 0, 0, 3806, 3806, 3807, 3807, 3807, 0, + 0, 0, 3807, 3808, 3808, 3808, 3808, 0, 0, 3808, + 3808, 3809, 3809, 3809, 0, 0, 0, 3809, 3810, 3810, + 3810, 3810, 0, 0, 3810, 3810, 3811, 3811, 3811, 0, + 0, 0, 3811, 3812, 3812, 3812, 3812, 0, 0, 3812, + 3812, 3813, 3813, 3813, 3813, 0, 0, 3813, 3813, 3814, + 3814, 3814, 0, 0, 0, 3814, 3815, 3815, 3815, 3815, + 0, 0, 3815, 3815, 3816, 3816, 3816, 0, 0, 0, + + 3816, 3817, 3817, 3817, 3817, 0, 0, 3817, 3817, 3818, + 3818, 3818, 3818, 0, 3818, 0, 3818, 3819, 3819, 3819, + 3819, 0, 0, 3819, 3819, 3820, 3820, 3820, 3820, 0, + 0, 3820, 3820, 3821, 3821, 3821, 3821, 0, 3821, 0, + 3821, 3822, 3822, 3822, 3822, 0, 0, 3822, 3822, 3823, + 3823, 3823, 3823, 0, 3823, 0, 3823, 3824, 3824, 3824, + 3824, 0, 0, 3824, 3824, 3825, 3825, 3825, 3825, 3825, + 3825, 3825, 3825, 3825, 3826, 3826, 3826, 3826, 3826, 3826, + 3826, 3826, 3826, 3827, 3827, 3827, 0, 0, 0, 3827, + 3828, 3828, 3828, 3828, 0, 0, 3828, 3828, 3829, 3829, + + 3829, 3829, 0, 0, 3829, 3829, 3830, 3830, 3830, 0, + 0, 0, 3830, 3831, 3831, 3831, 3831, 0, 0, 3831, + 3831, 3832, 3832, 3832, 0, 0, 0, 3832, 3833, 3833, + 3833, 3833, 0, 0, 3833, 3833, 3834, 3834, 3834, 0, + 0, 0, 3834, 3835, 3835, 3835, 3835, 0, 0, 3835, + 3835, 3836, 3836, 3836, 0, 0, 0, 3836, 3837, 3837, + 3837, 0, 0, 0, 3837, 3838, 3838, 3838, 3838, 0, + 0, 3838, 3838, 3839, 3839, 3839, 0, 0, 0, 3839, + 3840, 3840, 3840, 3840, 0, 0, 3840, 3840, 3841, 3841, + 3841, 3841, 0, 3841, 0, 3841, 3842, 3842, 3842, 3842, + + 0, 0, 3842, 3842, 3843, 3843, 3843, 0, 0, 0, + 3843, 3844, 3844, 3844, 3844, 0, 0, 3844, 3844, 3845, + 3845, 3845, 3845, 0, 3845, 0, 3845, 3846, 3846, 3846, + 3846, 0, 0, 3846, 3846, 3847, 3847, 3847, 3847, 0, + 0, 3847, 3847, 3848, 3848, 3848, 0, 0, 0, 3848, + 3849, 3849, 3849, 3849, 0, 0, 3849, 3849, 3850, 3850, + 3850, 3850, 0, 3850, 0, 3850, 3851, 3851, 3851, 3851, + 0, 0, 3851, 3851, 3852, 3852, 3852, 0, 0, 0, + 3852, 3853, 3853, 3853, 3853, 0, 0, 3853, 3853, 3854, + 3854, 3854, 0, 0, 0, 3854, 3855, 3855, 3855, 3855, + + 0, 0, 3855, 3855, 3856, 3856, 3856, 0, 0, 0, + 3856, 3857, 3857, 3857, 3857, 0, 0, 3857, 3857, 3858, + 3858, 3858, 0, 0, 0, 3858, 3859, 3859, 3859, 3859, + 0, 0, 3859, 3859, 3860, 3860, 3860, 0, 0, 0, + 3860, 3861, 3861, 3861, 3861, 0, 0, 3861, 3861, 3862, + 3862, 3862, 3862, 0, 3862, 0, 3862, 3863, 3863, 3863, + 3863, 0, 0, 3863, 3863, 3864, 3864, 3864, 0, 0, + 0, 3864, 3865, 3865, 3865, 3865, 0, 0, 3865, 3865, + 3866, 3866, 3866, 3866, 0, 0, 3866, 3866, 3867, 3867, + 3867, 3867, 0, 3867, 0, 3867, 3868, 3868, 3868, 3868, + + 0, 0, 3868, 3868, 3869, 3869, 3869, 0, 0, 0, + 3869, 3870, 3870, 3870, 3870, 0, 0, 3870, 3870, 3871, + 3871, 3871, 3871, 0, 0, 3871, 3871, 3872, 3872, 3872, + 3872, 0, 0, 3872, 3872, 3873, 3873, 3873, 3873, 0, + 0, 3873, 3873, 3874, 3874, 3874, 3874, 0, 0, 3874, + 3874, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, 3875, + 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3876, 3877, + 3877, 3877, 3877, 0, 3877, 0, 3877, 3878, 3878, 3878, 3878, 0, 0, 3878, 3878, 3879, 3879, 3879, 3879, 0, 0, 3879, 3879, 3880, 3880, 3880, 0, 0, 0, 3880, - 3881, 3881, 3881, 3881, 0, 0, 3881, 3881, 3882, 3882, - 3882, 3882, 0, 0, 3882, 3882, 3883, 3883, 3883, 3883, - 0, 0, 3883, 3883, 3884, 3884, 3884, 3884, 0, 0, - 3884, 3884, 3885, 3885, 3885, 3885, 3885, 3885, 3885, 3885, - - 3885, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, 3886, - 3887, 3887, 3887, 3887, 0, 0, 3887, 3887, 3888, 3888, - 3888, 3888, 0, 0, 3888, 3888, 3889, 3889, 3889, 0, - 0, 0, 3889, 3890, 3890, 3890, 0, 0, 0, 3890, - 3891, 3891, 3891, 3891, 0, 0, 3891, 3891, 3892, 3892, - 3892, 3892, 0, 0, 3892, 3892, 3893, 3893, 3893, 0, - 0, 0, 3893, 3894, 3894, 3894, 3894, 0, 0, 3894, - 3894, 3895, 3895, 3895, 0, 0, 0, 3895, 3896, 3896, - 3896, 3896, 0, 0, 3896, 3896, 3897, 3897, 3897, 0, - 0, 0, 3897, 3898, 3898, 3898, 0, 0, 0, 3898, + 3881, 3881, 3881, 3881, 0, 0, 3881, 3881, 3882, 3882, + 3882, 0, 0, 0, 3882, 3883, 3883, 3883, 3883, 0, + 0, 3883, 3883, 3884, 3884, 3884, 3884, 0, 3884, 0, + 3884, 3885, 3885, 3885, 3885, 0, 0, 3885, 3885, 3886, + 3886, 3886, 3886, 0, 3886, 0, 3886, 3887, 3887, 3887, + 3887, 0, 3887, 0, 3887, 3888, 3888, 3888, 3888, 0, + 0, 3888, 3888, 3889, 3889, 3889, 0, 0, 0, 3889, + 3890, 3890, 3890, 3890, 0, 0, 3890, 3890, 3891, 3891, + 3891, 3891, 0, 0, 3891, 3891, 3892, 3892, 3892, 0, + 0, 0, 3892, 3893, 3893, 3893, 3893, 0, 3893, 0, + + 3893, 3894, 3894, 3894, 3894, 0, 0, 3894, 3894, 3895, + 3895, 3895, 3895, 0, 0, 3895, 3895, 3896, 3896, 3896, + 0, 0, 0, 3896, 3897, 3897, 3897, 3897, 0, 0, + 3897, 3897, 3898, 3898, 3898, 3898, 0, 3898, 0, 3898, 3899, 3899, 3899, 3899, 0, 0, 3899, 3899, 3900, 3900, - 3900, 3900, 0, 0, 3900, 3900, 3901, 3901, 3901, 0, - 0, 0, 3901, 3902, 3902, 3902, 3902, 0, 0, 3902, - 3902, 3903, 3903, 3903, 3903, 0, 0, 3903, 3903, 3904, - 3904, 3904, 0, 0, 0, 3904, 3905, 3905, 3905, 0, - 0, 0, 3905, 3906, 3906, 3906, 3906, 0, 0, 3906, - 3906, 3907, 3907, 3907, 0, 0, 0, 3907, 3908, 3908, - 3908, 3908, 0, 0, 3908, 3908, 3909, 3909, 3909, 0, - 0, 0, 3909, 3910, 3910, 3910, 0, 0, 0, 3910, - 3911, 3911, 3911, 0, 0, 0, 3911, 3912, 3912, 3912, - - 3912, 0, 0, 3912, 3912, 3913, 3913, 3913, 0, 0, - 0, 3913, 3914, 3914, 3914, 3914, 0, 0, 3914, 3914, + 3900, 0, 0, 0, 3900, 3901, 3901, 3901, 0, 0, + 0, 3901, 3902, 3902, 3902, 3902, 0, 0, 3902, 3902, + 3903, 3903, 3903, 0, 0, 0, 3903, 3904, 3904, 3904, + 3904, 0, 0, 3904, 3904, 3905, 3905, 3905, 0, 0, + 0, 3905, 3906, 3906, 3906, 0, 0, 0, 3906, 3907, + + 3907, 3907, 3907, 0, 0, 3907, 3907, 3908, 3908, 3908, + 0, 0, 0, 3908, 3909, 3909, 3909, 3909, 0, 0, + 3909, 3909, 3910, 3910, 3910, 0, 0, 0, 3910, 3911, + 3911, 3911, 3911, 0, 0, 3911, 3911, 3912, 3912, 3912, + 3912, 0, 0, 3912, 3912, 3913, 3913, 3913, 3913, 0, + 0, 3913, 3913, 3914, 3914, 3914, 0, 0, 0, 3914, 3915, 3915, 3915, 3915, 0, 0, 3915, 3915, 3916, 3916, 3916, 3916, 0, 0, 3916, 3916, 3917, 3917, 3917, 3917, - 0, 3917, 0, 3917, 3918, 3918, 3918, 3918, 0, 0, - 3918, 3918, 3919, 3919, 3919, 3919, 0, 0, 3919, 3919, - 3920, 3920, 3920, 3920, 0, 0, 3920, 3920, 3921, 3921, - 3921, 3921, 0, 0, 3921, 3921, 3922, 3922, 3922, 3922, - 3922, 3922, 3922, 3922, 3922, 3923, 3923, 3923, 3923, 3923, - 3923, 3923, 3923, 3923, 3924, 3924, 3924, 3924, 0, 0, - - 3924, 3924, 3925, 3925, 3925, 3925, 0, 0, 3925, 3925, - 3926, 3926, 3926, 0, 0, 0, 3926, 3927, 3927, 3927, - 3927, 0, 3927, 0, 3927, 3928, 3928, 3928, 3928, 0, - 0, 3928, 3928, 3929, 3929, 3929, 0, 0, 0, 3929, - 3930, 3930, 3930, 3930, 0, 0, 3930, 3930, 3931, 3931, - 3931, 3931, 0, 3931, 0, 3931, 3932, 3932, 3932, 3932, - 0, 0, 3932, 3932, 3933, 3933, 3933, 0, 0, 0, - 3933, 3934, 3934, 3934, 0, 0, 0, 3934, 3935, 3935, - 3935, 3935, 0, 0, 3935, 3935, 3936, 3936, 3936, 3936, - 0, 0, 3936, 3936, 3937, 3937, 3937, 0, 0, 0, - - 3937, 3938, 3938, 3938, 3938, 0, 0, 3938, 3938, 3939, - 3939, 3939, 3939, 0, 0, 3939, 3939, 3940, 3940, 3940, - 0, 0, 0, 3940, 3941, 3941, 3941, 0, 0, 0, - 3941, 3942, 3942, 3942, 3942, 0, 3942, 0, 3942, 3943, - 3943, 3943, 3943, 0, 0, 3943, 3943, 3944, 3944, 3944, - 3944, 0, 3944, 0, 3944, 3945, 3945, 3945, 0, 0, - 0, 3945, 3946, 3946, 3946, 0, 0, 0, 3946, 3947, - 3947, 3947, 3947, 0, 0, 3947, 3947, 3948, 3948, 3948, - 3948, 0, 3948, 0, 3948, 3949, 3949, 3949, 3949, 0, - 0, 3949, 3949, 3950, 3950, 3950, 3950, 0, 0, 3950, - - 3950, 3951, 3951, 3951, 3951, 0, 0, 3951, 3951, 3952, - 3952, 3952, 3952, 0, 3952, 0, 3952, 3953, 3953, 3953, - 3953, 0, 0, 3953, 3953, 3954, 3954, 3954, 3954, 0, - 0, 3954, 3954, 3955, 3955, 3955, 3955, 0, 0, 3955, - 3955, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, 3956, - 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3957, 3958, - 3958, 3958, 3958, 0, 0, 3958, 3958, 3959, 3959, 3959, - 0, 0, 0, 3959, 3960, 3960, 3960, 0, 0, 0, - 3960, 3961, 3961, 3961, 3961, 0, 0, 3961, 3961, 3962, - 3962, 3962, 0, 0, 0, 3962, 3963, 3963, 3963, 3963, - - 0, 0, 3963, 3963, 3964, 3964, 3964, 3964, 0, 0, - 3964, 3964, 3965, 3965, 3965, 0, 0, 0, 3965, 3966, - 3966, 3966, 0, 0, 0, 3966, 3967, 3967, 3967, 3967, - 0, 0, 3967, 3967, 3968, 3968, 3968, 0, 0, 0, - 3968, 3969, 3969, 3969, 0, 0, 0, 3969, 3970, 3970, - 3970, 0, 0, 0, 3970, 3971, 3971, 3971, 3971, 0, - 0, 3971, 3971, 3972, 3972, 3972, 0, 0, 0, 3972, - 3973, 3973, 3973, 0, 0, 0, 3973, 3974, 3974, 3974, - 0, 0, 0, 3974, 3975, 3975, 3975, 3975, 3975, 3975, - 3975, 3975, 3975, 3976, 3976, 3976, 3976, 3976, 3976, 3976, - - 3976, 3976, 3977, 3977, 3977, 3977, 3977, 3977, 3977, 3977, - 3977, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, 3978, - 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3979, 3980, - 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3980, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - - 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, 3468, - 3468, 3468, 3468 + 0, 0, 3917, 3917, 3918, 3918, 3918, 3918, 0, 0, + 3918, 3918, 3919, 3919, 3919, 3919, 3919, 3919, 3919, 3919, + + 3919, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, 3920, + 3921, 3921, 3921, 3921, 0, 0, 3921, 3921, 3922, 3922, + 3922, 3922, 0, 0, 3922, 3922, 3923, 3923, 3923, 0, + 0, 0, 3923, 3924, 3924, 3924, 0, 0, 0, 3924, + 3925, 3925, 3925, 3925, 0, 0, 3925, 3925, 3926, 3926, + 3926, 3926, 0, 0, 3926, 3926, 3927, 3927, 3927, 0, + 0, 0, 3927, 3928, 3928, 3928, 3928, 0, 0, 3928, + 3928, 3929, 3929, 3929, 0, 0, 0, 3929, 3930, 3930, + 3930, 3930, 0, 0, 3930, 3930, 3931, 3931, 3931, 0, + 0, 0, 3931, 3932, 3932, 3932, 0, 0, 0, 3932, + + 3933, 3933, 3933, 3933, 0, 0, 3933, 3933, 3934, 3934, + 3934, 3934, 0, 0, 3934, 3934, 3935, 3935, 3935, 0, + 0, 0, 3935, 3936, 3936, 3936, 3936, 0, 0, 3936, + 3936, 3937, 3937, 3937, 3937, 0, 0, 3937, 3937, 3938, + 3938, 3938, 0, 0, 0, 3938, 3939, 3939, 3939, 0, + 0, 0, 3939, 3940, 3940, 3940, 3940, 0, 0, 3940, + 3940, 3941, 3941, 3941, 0, 0, 0, 3941, 3942, 3942, + 3942, 3942, 0, 0, 3942, 3942, 3943, 3943, 3943, 0, + 0, 0, 3943, 3944, 3944, 3944, 0, 0, 0, 3944, + 3945, 3945, 3945, 0, 0, 0, 3945, 3946, 3946, 3946, + + 3946, 0, 0, 3946, 3946, 3947, 3947, 3947, 0, 0, + 0, 3947, 3948, 3948, 3948, 3948, 0, 0, 3948, 3948, + 3949, 3949, 3949, 3949, 0, 0, 3949, 3949, 3950, 3950, + 3950, 3950, 0, 0, 3950, 3950, 3951, 3951, 3951, 3951, + 0, 3951, 0, 3951, 3952, 3952, 3952, 3952, 0, 0, + 3952, 3952, 3953, 3953, 3953, 3953, 0, 0, 3953, 3953, + 3954, 3954, 3954, 3954, 0, 0, 3954, 3954, 3955, 3955, + 3955, 3955, 0, 0, 3955, 3955, 3956, 3956, 3956, 3956, + 3956, 3956, 3956, 3956, 3956, 3957, 3957, 3957, 3957, 3957, + 3957, 3957, 3957, 3957, 3958, 3958, 3958, 3958, 0, 0, + + 3958, 3958, 3959, 3959, 3959, 3959, 0, 0, 3959, 3959, + 3960, 3960, 3960, 0, 0, 0, 3960, 3961, 3961, 3961, + 3961, 0, 3961, 0, 3961, 3962, 3962, 3962, 3962, 0, + 0, 3962, 3962, 3963, 3963, 3963, 0, 0, 0, 3963, + 3964, 3964, 3964, 3964, 0, 0, 3964, 3964, 3965, 3965, + 3965, 3965, 0, 3965, 0, 3965, 3966, 3966, 3966, 3966, + 0, 0, 3966, 3966, 3967, 3967, 3967, 0, 0, 0, + 3967, 3968, 3968, 3968, 0, 0, 0, 3968, 3969, 3969, + 3969, 3969, 0, 0, 3969, 3969, 3970, 3970, 3970, 3970, + 0, 0, 3970, 3970, 3971, 3971, 3971, 0, 0, 0, + + 3971, 3972, 3972, 3972, 3972, 0, 0, 3972, 3972, 3973, + 3973, 3973, 3973, 0, 0, 3973, 3973, 3974, 3974, 3974, + 0, 0, 0, 3974, 3975, 3975, 3975, 0, 0, 0, + 3975, 3976, 3976, 3976, 3976, 0, 3976, 0, 3976, 3977, + 3977, 3977, 3977, 0, 0, 3977, 3977, 3978, 3978, 3978, + 3978, 0, 3978, 0, 3978, 3979, 3979, 3979, 0, 0, + 0, 3979, 3980, 3980, 3980, 0, 0, 0, 3980, 3981, + 3981, 3981, 3981, 0, 0, 3981, 3981, 3982, 3982, 3982, + 3982, 0, 3982, 0, 3982, 3983, 3983, 3983, 3983, 0, + 0, 3983, 3983, 3984, 3984, 3984, 3984, 0, 0, 3984, + + 3984, 3985, 3985, 3985, 3985, 0, 0, 3985, 3985, 3986, + 3986, 3986, 3986, 0, 3986, 0, 3986, 3987, 3987, 3987, + 3987, 0, 0, 3987, 3987, 3988, 3988, 3988, 3988, 0, + 0, 3988, 3988, 3989, 3989, 3989, 3989, 0, 0, 3989, + 3989, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, 3990, + 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3991, 3992, + 3992, 3992, 3992, 0, 0, 3992, 3992, 3993, 3993, 3993, + 0, 0, 0, 3993, 3994, 3994, 3994, 0, 0, 0, + 3994, 3995, 3995, 3995, 3995, 0, 0, 3995, 3995, 3996, + 3996, 3996, 0, 0, 0, 3996, 3997, 3997, 3997, 3997, + + 0, 0, 3997, 3997, 3998, 3998, 3998, 3998, 0, 0, + 3998, 3998, 3999, 3999, 3999, 0, 0, 0, 3999, 4000, + 4000, 4000, 0, 0, 0, 4000, 4001, 4001, 4001, 4001, + 0, 0, 4001, 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, 4005, 0, + 0, 4005, 4005, 4006, 4006, 4006, 0, 0, 0, 4006, + 4007, 4007, 4007, 0, 0, 0, 4007, 4008, 4008, 4008, + 0, 0, 0, 4008, 4009, 4009, 4009, 4009, 4009, 4009, + 4009, 4009, 4009, 4010, 4010, 4010, 4010, 4010, 4010, 4010, + + 4010, 4010, 4011, 4011, 4011, 4011, 4011, 4011, 4011, 4011, + 4011, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, 4012, + 4013, 4013, 4013, 4013, 4013, 4013, 4013, 4013, 4013, 4014, + 4014, 4014, 4014, 4014, 4014, 4014, 4014, 4014, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + + 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, 3502, + 3502, 3502, 3502 } ; /* Table of booleans, true if rule could match eol. */ -static yyconst flex_int32_t yy_rule_can_match_eol[592] = +static yyconst flex_int32_t yy_rule_can_match_eol[596] = { 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, @@ -4545,30 +4545,30 @@ static yyconst flex_int32_t yy_rule_can_match_eol[592] = 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, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 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, + 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 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, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 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, 0, 0, 0, 0, 1, 1, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 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, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 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, 0, 0, - 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 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, 0, 0, 0, 0, 1, 1, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, - 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, - 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, - 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, - 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, }; + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 0, + 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, + 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, + 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 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; @@ -4666,366 +4666,366 @@ const char surfxml_flexml_version[] = "1.9.6"; int surfxml_pcdata_ix; extern char *surfxml_bufferstack; #define surfxml_pcdata (surfxml_bufferstack + surfxml_pcdata_ix) -AT_surfxml_backbone_bandwidth AX_surfxml_backbone_bandwidth; -#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth) -short int surfxml_backbone_bandwidth_isset; -AT_surfxml_storage_typeId AX_surfxml_storage_typeId; -#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId) -short int surfxml_storage_typeId_isset; -AT_surfxml_config_id AX_surfxml_config_id; -#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id) -short int surfxml_config_id_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_cluster_lat AX_surfxml_cluster_lat; +#define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat) +short int surfxml_cluster_lat_isset; +AT_surfxml_cabinet_radical AX_surfxml_cabinet_radical; +#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical) +short int surfxml_cabinet_radical_isset; +AT_surfxml_bypassRoute_dst AX_surfxml_bypassRoute_dst; +#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst) +short int surfxml_bypassRoute_dst_isset; +AT_surfxml_cluster_loopback___lat AX_surfxml_cluster_loopback___lat; +#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat) +short int surfxml_cluster_loopback___lat_isset; +AT_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind; +#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind +short int surfxml_trace___connect_kind_isset; AT_surfxml_process_function AX_surfxml_process_function; #define A_surfxml_process_function (surfxml_bufferstack + AX_surfxml_process_function) short int surfxml_process_function_isset; -AT_surfxml_host___link_up AX_surfxml_host___link_up; -#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up) -short int surfxml_host___link_up_isset; -AT_surfxml_peer_lat AX_surfxml_peer_lat; -#define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat) -short int surfxml_peer_lat_isset; -AT_surfxml_bypassASroute_gw___dst AX_surfxml_bypassASroute_gw___dst; -#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst) -short int surfxml_bypassASroute_gw___dst_isset; -AT_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical; -#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical -short int surfxml_ASroute_symmetrical_isset; -AT_surfxml_cabinet_id AX_surfxml_cabinet_id; -#define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id) -short int surfxml_cabinet_id_isset; -AT_surfxml_AS_id AX_surfxml_AS_id; -#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id) -short int surfxml_AS_id_isset; -AT_surfxml_cluster_state___file AX_surfxml_cluster_state___file; -#define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file) -short int surfxml_cluster_state___file_isset; -AT_surfxml_process_host AX_surfxml_process_host; -#define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host) -short int surfxml_process_host_isset; -AT_surfxml_cabinet_power AX_surfxml_cabinet_power; -#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power) -short int surfxml_cabinet_power_isset; -AT_surfxml_ASroute_dst AX_surfxml_ASroute_dst; -#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst) -short int surfxml_ASroute_dst_isset; -AT_surfxml_link_bandwidth___file AX_surfxml_link_bandwidth___file; -#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file) -short int surfxml_link_bandwidth___file_isset; +AT_surfxml_storage_attach AX_surfxml_storage_attach; +#define A_surfxml_storage_attach (surfxml_bufferstack + AX_surfxml_storage_attach) +short int surfxml_storage_attach_isset; +AT_surfxml_host_state AX_surfxml_host_state; +#define A_surfxml_host_state AX_surfxml_host_state +short int surfxml_host_state_isset; +AT_surfxml_argument_value AX_surfxml_argument_value; +#define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value) +short int surfxml_argument_value_isset; +AT_surfxml_cluster_router___id AX_surfxml_cluster_router___id; +#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id) +short int surfxml_cluster_router___id_isset; +AT_surfxml_cluster_power AX_surfxml_cluster_power; +#define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power) +short int surfxml_cluster_power_isset; +AT_surfxml_trace_file AX_surfxml_trace_file; +#define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file) +short int surfxml_trace_file_isset; AT_surfxml_cluster_loopback___bw AX_surfxml_cluster_loopback___bw; #define A_surfxml_cluster_loopback___bw (surfxml_bufferstack + AX_surfxml_cluster_loopback___bw) short int surfxml_cluster_loopback___bw_isset; -AT_surfxml_random_generator AX_surfxml_random_generator; -#define A_surfxml_random_generator AX_surfxml_random_generator -short int surfxml_random_generator_isset; -AT_surfxml_cluster_bb___bw AX_surfxml_cluster_bb___bw; -#define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw) -short int surfxml_cluster_bb___bw_isset; +AT_surfxml_process_host AX_surfxml_process_host; +#define A_surfxml_process_host (surfxml_bufferstack + AX_surfxml_process_host) +short int surfxml_process_host_isset; +AT_surfxml_cabinet_bw AX_surfxml_cabinet_bw; +#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw) +short int surfxml_cabinet_bw_isset; AT_surfxml_peer_coordinates AX_surfxml_peer_coordinates; #define A_surfxml_peer_coordinates (surfxml_bufferstack + AX_surfxml_peer_coordinates) short int surfxml_peer_coordinates_isset; -AT_surfxml_cabinet_suffix AX_surfxml_cabinet_suffix; -#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix) -short int surfxml_cabinet_suffix_isset; -AT_surfxml_ASroute_src AX_surfxml_ASroute_src; -#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src) -short int surfxml_ASroute_src_isset; -AT_surfxml_cluster_limiter___link AX_surfxml_cluster_limiter___link; -#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link) -short int surfxml_cluster_limiter___link_isset; -AT_surfxml_host_core AX_surfxml_host_core; -#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core) -short int surfxml_host_core_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; -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_link_id AX_surfxml_link_id; -#define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id) -short int surfxml_link_id_isset; -AT_surfxml_trace_periodicity AX_surfxml_trace_periodicity; -#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity) -short int surfxml_trace_periodicity_isset; -AT_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction; -#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction -short int surfxml_link___ctn_direction_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_host_power AX_surfxml_host_power; -#define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power) -short int surfxml_host_power_isset; -AT_surfxml_peer_id AX_surfxml_peer_id; -#define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id) -short int surfxml_peer_id_isset; -AT_surfxml_peer_state___file AX_surfxml_peer_state___file; -#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file) -short int surfxml_peer_state___file_isset; -AT_surfxml_cluster_core AX_surfxml_cluster_core; -#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core) -short int surfxml_cluster_core_isset; -AT_surfxml_cluster_radical AX_surfxml_cluster_radical; -#define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical) -short int surfxml_cluster_radical_isset; -AT_surfxml_mount_storageId AX_surfxml_mount_storageId; -#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId) -short int surfxml_mount_storageId_isset; -AT_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy; -#define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy -short int surfxml_link_sharing___policy_isset; -AT_surfxml_peer_bw___in AX_surfxml_peer_bw___in; -#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in) -short int surfxml_peer_bw___in_isset; -AT_surfxml_include_file AX_surfxml_include_file; -#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file) -short int surfxml_include_file_isset; +AT_surfxml_host_coordinates AX_surfxml_host_coordinates; +#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates) +short int surfxml_host_coordinates_isset; +AT_surfxml_cluster_bb___bw AX_surfxml_cluster_bb___bw; +#define A_surfxml_cluster_bb___bw (surfxml_bufferstack + AX_surfxml_cluster_bb___bw) +short int surfxml_cluster_bb___bw_isset; +AT_surfxml_peer_power AX_surfxml_peer_power; +#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power) +short int surfxml_peer_power_isset; +AT_surfxml_host_availability AX_surfxml_host_availability; +#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability) +short int surfxml_host_availability_isset; +AT_surfxml_host_state___file AX_surfxml_host_state___file; +#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file) +short int surfxml_host_state___file_isset; AT_surfxml_cluster_availability___file AX_surfxml_cluster_availability___file; #define A_surfxml_cluster_availability___file (surfxml_bufferstack + AX_surfxml_cluster_availability___file) short int surfxml_cluster_availability___file_isset; -AT_surfxml_cluster_bb___lat AX_surfxml_cluster_bb___lat; -#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat) -short int surfxml_cluster_bb___lat_isset; -AT_surfxml_AS_routing AX_surfxml_AS_routing; -#define A_surfxml_AS_routing AX_surfxml_AS_routing -short int surfxml_AS_routing_isset; +AT_surfxml_router_coordinates AX_surfxml_router_coordinates; +#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates) +short int surfxml_router_coordinates_isset; AT_surfxml_random_min AX_surfxml_random_min; #define A_surfxml_random_min (surfxml_bufferstack + AX_surfxml_random_min) short int surfxml_random_min_isset; -AT_surfxml_cluster_router___id AX_surfxml_cluster_router___id; -#define A_surfxml_cluster_router___id (surfxml_bufferstack + AX_surfxml_cluster_router___id) -short int surfxml_cluster_router___id_isset; -AT_surfxml_host_pstate AX_surfxml_host_pstate; -#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate) -short int surfxml_host_pstate_isset; -AT_surfxml_random_std___deviation AX_surfxml_random_std___deviation; -#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation) -short int surfxml_random_std___deviation_isset; AT_surfxml_ASroute_gw___dst AX_surfxml_ASroute_gw___dst; #define A_surfxml_ASroute_gw___dst (surfxml_bufferstack + AX_surfxml_ASroute_gw___dst) short int surfxml_ASroute_gw___dst_isset; -AT_surfxml_backbone_id AX_surfxml_backbone_id; -#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id) -short int surfxml_backbone_id_isset; -AT_surfxml_host___link_down AX_surfxml_host___link_down; -#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down) -short int surfxml_host___link_down_isset; -AT_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy; -#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy -short int surfxml_cluster_sharing___policy_isset; -AT_surfxml_cluster_topo___parameters AX_surfxml_cluster_topo___parameters; -#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters) -short int surfxml_cluster_topo___parameters_isset; -AT_surfxml_route_symmetrical AX_surfxml_route_symmetrical; -#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical -short int surfxml_route_symmetrical_isset; -AT_surfxml_prop_id AX_surfxml_prop_id; -#define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id) -short int surfxml_prop_id_isset; -AT_surfxml_peer_bw___out AX_surfxml_peer_bw___out; -#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out) -short int surfxml_peer_bw___out_isset; -AT_surfxml_cabinet_bw AX_surfxml_cabinet_bw; -#define A_surfxml_cabinet_bw (surfxml_bufferstack + AX_surfxml_cabinet_bw) -short int surfxml_cabinet_bw_isset; -AT_surfxml_cabinet_radical AX_surfxml_cabinet_radical; -#define A_surfxml_cabinet_radical (surfxml_bufferstack + AX_surfxml_cabinet_radical) -short int surfxml_cabinet_radical_isset; -AT_surfxml_router_id AX_surfxml_router_id; -#define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id) -short int surfxml_router_id_isset; +AT_surfxml_random_id AX_surfxml_random_id; +#define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id) +short int surfxml_random_id_isset; AT_surfxml_route_dst AX_surfxml_route_dst; #define A_surfxml_route_dst (surfxml_bufferstack + AX_surfxml_route_dst) short int surfxml_route_dst_isset; -AT_surfxml_cluster_loopback___lat AX_surfxml_cluster_loopback___lat; -#define A_surfxml_cluster_loopback___lat (surfxml_bufferstack + AX_surfxml_cluster_loopback___lat) -short int surfxml_cluster_loopback___lat_isset; -AT_surfxml_prop_value AX_surfxml_prop_value; -#define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value) -short int surfxml_prop_value_isset; -AT_surfxml_cabinet_lat AX_surfxml_cabinet_lat; -#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat) -short int surfxml_cabinet_lat_isset; -AT_surfxml_storage_attach AX_surfxml_storage_attach; -#define A_surfxml_storage_attach (surfxml_bufferstack + AX_surfxml_storage_attach) -short int surfxml_storage_attach_isset; -AT_surfxml_bypassASroute_gw___src AX_surfxml_bypassASroute_gw___src; -#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src) -short int surfxml_bypassASroute_gw___src_isset; -AT_surfxml_host___link_id AX_surfxml_host___link_id; -#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id) -short int surfxml_host___link_id_isset; -AT_surfxml_mstorage_typeId AX_surfxml_mstorage_typeId; -#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId) -short int surfxml_mstorage_typeId_isset; -AT_surfxml_link___ctn_id AX_surfxml_link___ctn_id; -#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id) -short int surfxml_link___ctn_id_isset; -AT_surfxml_cluster_prefix AX_surfxml_cluster_prefix; -#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix) -short int surfxml_cluster_prefix_isset; -AT_surfxml_storage___type_model AX_surfxml_storage___type_model; -#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model) -short int surfxml_storage___type_model_isset; -AT_surfxml_random_max AX_surfxml_random_max; -#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max) -short int surfxml_random_max_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_cluster_bw AX_surfxml_cluster_bw; -#define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw) -short int surfxml_cluster_bw_isset; -AT_surfxml_trace_file AX_surfxml_trace_file; -#define A_surfxml_trace_file (surfxml_bufferstack + AX_surfxml_trace_file) -short int surfxml_trace_file_isset; +AT_surfxml_mount_storageId AX_surfxml_mount_storageId; +#define A_surfxml_mount_storageId (surfxml_bufferstack + AX_surfxml_mount_storageId) +short int surfxml_mount_storageId_isset; +AT_surfxml_backbone_bandwidth AX_surfxml_backbone_bandwidth; +#define A_surfxml_backbone_bandwidth (surfxml_bufferstack + AX_surfxml_backbone_bandwidth) +short int surfxml_backbone_bandwidth_isset; +AT_surfxml_cluster_topology AX_surfxml_cluster_topology; +#define A_surfxml_cluster_topology AX_surfxml_cluster_topology +short int surfxml_cluster_topology_isset; AT_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy; #define A_surfxml_cluster_bb___sharing___policy AX_surfxml_cluster_bb___sharing___policy short int surfxml_cluster_bb___sharing___policy_isset; -AT_surfxml_cluster_lat AX_surfxml_cluster_lat; -#define A_surfxml_cluster_lat (surfxml_bufferstack + AX_surfxml_cluster_lat) -short int surfxml_cluster_lat_isset; +AT_surfxml_peer_bw___out AX_surfxml_peer_bw___out; +#define A_surfxml_peer_bw___out (surfxml_bufferstack + AX_surfxml_peer_bw___out) +short int surfxml_peer_bw___out_isset; AT_surfxml_cluster_id AX_surfxml_cluster_id; #define A_surfxml_cluster_id (surfxml_bufferstack + AX_surfxml_cluster_id) short int surfxml_cluster_id_isset; +AT_surfxml_host_power AX_surfxml_host_power; +#define A_surfxml_host_power (surfxml_bufferstack + AX_surfxml_host_power) +short int surfxml_host_power_isset; +AT_surfxml_link_bandwidth AX_surfxml_link_bandwidth; +#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth) +short int surfxml_link_bandwidth_isset; +AT_surfxml_cabinet_prefix AX_surfxml_cabinet_prefix; +#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix) +short int surfxml_cabinet_prefix_isset; +AT_surfxml_mstorage_name AX_surfxml_mstorage_name; +#define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name) +short int surfxml_mstorage_name_isset; +AT_surfxml_backbone_latency AX_surfxml_backbone_latency; +#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency) +short int surfxml_backbone_latency_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_backbone_id AX_surfxml_backbone_id; +#define A_surfxml_backbone_id (surfxml_bufferstack + AX_surfxml_backbone_id) +short int surfxml_backbone_id_isset; +AT_surfxml_AS_routing AX_surfxml_AS_routing; +#define A_surfxml_AS_routing AX_surfxml_AS_routing +short int surfxml_AS_routing_isset; +AT_surfxml_prop_value AX_surfxml_prop_value; +#define A_surfxml_prop_value (surfxml_bufferstack + AX_surfxml_prop_value) +short int surfxml_prop_value_isset; +AT_surfxml_link_latency___file AX_surfxml_link_latency___file; +#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file) +short int surfxml_link_latency___file_isset; +AT_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction; +#define A_surfxml_link___ctn_direction AX_surfxml_link___ctn_direction +short int surfxml_link___ctn_direction_isset; +AT_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy; +#define A_surfxml_cluster_sharing___policy AX_surfxml_cluster_sharing___policy +short int surfxml_cluster_sharing___policy_isset; +AT_surfxml_cabinet_power AX_surfxml_cabinet_power; +#define A_surfxml_cabinet_power (surfxml_bufferstack + AX_surfxml_cabinet_power) +short int surfxml_cabinet_power_isset; +AT_surfxml_host___link_up AX_surfxml_host___link_up; +#define A_surfxml_host___link_up (surfxml_bufferstack + AX_surfxml_host___link_up) +short int surfxml_host___link_up_isset; +AT_surfxml_route_symmetrical AX_surfxml_route_symmetrical; +#define A_surfxml_route_symmetrical AX_surfxml_route_symmetrical +short int surfxml_route_symmetrical_isset; +AT_surfxml_link_latency AX_surfxml_link_latency; +#define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency) +short int surfxml_link_latency_isset; +AT_surfxml_storage_typeId AX_surfxml_storage_typeId; +#define A_surfxml_storage_typeId (surfxml_bufferstack + AX_surfxml_storage_typeId) +short int surfxml_storage_typeId_isset; +AT_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical; +#define A_surfxml_ASroute_symmetrical AX_surfxml_ASroute_symmetrical +short int surfxml_ASroute_symmetrical_isset; +AT_surfxml_cabinet_id AX_surfxml_cabinet_id; +#define A_surfxml_cabinet_id (surfxml_bufferstack + AX_surfxml_cabinet_id) +short int surfxml_cabinet_id_isset; +AT_surfxml_mount_name AX_surfxml_mount_name; +#define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name) +short int surfxml_mount_name_isset; +AT_surfxml_process_start___time AX_surfxml_process_start___time; +#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time) +short int surfxml_process_start___time_isset; +AT_surfxml_link_state___file AX_surfxml_link_state___file; +#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file) +short int surfxml_link_state___file_isset; +AT_surfxml_peer_availability___file AX_surfxml_peer_availability___file; +#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file) +short int surfxml_peer_availability___file_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_trace___connect_trace AX_surfxml_trace___connect_trace; +#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace) +short int surfxml_trace___connect_trace_isset; +AT_surfxml_cluster_core AX_surfxml_cluster_core; +#define A_surfxml_cluster_core (surfxml_bufferstack + AX_surfxml_cluster_core) +short int surfxml_cluster_core_isset; AT_surfxml_cluster_suffix AX_surfxml_cluster_suffix; #define A_surfxml_cluster_suffix (surfxml_bufferstack + AX_surfxml_cluster_suffix) short int surfxml_cluster_suffix_isset; -AT_surfxml_bypassRoute_dst AX_surfxml_bypassRoute_dst; -#define A_surfxml_bypassRoute_dst (surfxml_bufferstack + AX_surfxml_bypassRoute_dst) -short int surfxml_bypassRoute_dst_isset; -AT_surfxml_cluster_topology AX_surfxml_cluster_topology; -#define A_surfxml_cluster_topology AX_surfxml_cluster_topology -short int surfxml_cluster_topology_isset; AT_surfxml_bypassASroute_src AX_surfxml_bypassASroute_src; #define A_surfxml_bypassASroute_src (surfxml_bufferstack + AX_surfxml_bypassASroute_src) short int surfxml_bypassASroute_src_isset; -AT_surfxml_bypassASroute_dst AX_surfxml_bypassASroute_dst; -#define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst) -short int surfxml_bypassASroute_dst_isset; AT_surfxml_host_id AX_surfxml_host_id; #define A_surfxml_host_id (surfxml_bufferstack + AX_surfxml_host_id) short int surfxml_host_id_isset; -AT_surfxml_random_id AX_surfxml_random_id; -#define A_surfxml_random_id (surfxml_bufferstack + AX_surfxml_random_id) -short int surfxml_random_id_isset; -AT_surfxml_process_kill___time AX_surfxml_process_kill___time; -#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time) -short int surfxml_process_kill___time_isset; -AT_surfxml_route_src AX_surfxml_route_src; -#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src) -short int surfxml_route_src_isset; -AT_surfxml_link_latency___file AX_surfxml_link_latency___file; -#define A_surfxml_link_latency___file (surfxml_bufferstack + AX_surfxml_link_latency___file) -short int surfxml_link_latency___file_isset; -AT_surfxml_peer_power AX_surfxml_peer_power; -#define A_surfxml_peer_power (surfxml_bufferstack + AX_surfxml_peer_power) -short int surfxml_peer_power_isset; -AT_surfxml_random_seed AX_surfxml_random_seed; -#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed) -short int surfxml_random_seed_isset; -AT_surfxml_cluster_power AX_surfxml_cluster_power; -#define A_surfxml_cluster_power (surfxml_bufferstack + AX_surfxml_cluster_power) -short int surfxml_cluster_power_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; +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_cluster_radical AX_surfxml_cluster_radical; +#define A_surfxml_cluster_radical (surfxml_bufferstack + AX_surfxml_cluster_radical) +short int surfxml_cluster_radical_isset; +AT_surfxml_process_on___failure AX_surfxml_process_on___failure; +#define A_surfxml_process_on___failure AX_surfxml_process_on___failure +short int surfxml_process_on___failure_isset; +AT_surfxml_link_id AX_surfxml_link_id; +#define A_surfxml_link_id (surfxml_bufferstack + AX_surfxml_link_id) +short int surfxml_link_id_isset; +AT_surfxml_bypassASroute_dst AX_surfxml_bypassASroute_dst; +#define A_surfxml_bypassASroute_dst (surfxml_bufferstack + AX_surfxml_bypassASroute_dst) +short int surfxml_bypassASroute_dst_isset; +AT_surfxml_model___prop_id AX_surfxml_model___prop_id; +#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id) +short int surfxml_model___prop_id_isset; +AT_surfxml_random_generator AX_surfxml_random_generator; +#define A_surfxml_random_generator AX_surfxml_random_generator +short int surfxml_random_generator_isset; AT_surfxml_storage___type_size AX_surfxml_storage___type_size; #define A_surfxml_storage___type_size (surfxml_bufferstack + AX_surfxml_storage___type_size) short int surfxml_storage___type_size_isset; -AT_surfxml_link_state___file AX_surfxml_link_state___file; -#define A_surfxml_link_state___file (surfxml_bufferstack + AX_surfxml_link_state___file) -short int surfxml_link_state___file_isset; -AT_surfxml_argument_value AX_surfxml_argument_value; -#define A_surfxml_argument_value (surfxml_bufferstack + AX_surfxml_argument_value) -short int surfxml_argument_value_isset; +AT_surfxml_cluster_state___file AX_surfxml_cluster_state___file; +#define A_surfxml_cluster_state___file (surfxml_bufferstack + AX_surfxml_cluster_state___file) +short int surfxml_cluster_state___file_isset; +AT_surfxml_link___ctn_id AX_surfxml_link___ctn_id; +#define A_surfxml_link___ctn_id (surfxml_bufferstack + AX_surfxml_link___ctn_id) +short int surfxml_link___ctn_id_isset; +AT_surfxml_peer_bw___in AX_surfxml_peer_bw___in; +#define A_surfxml_peer_bw___in (surfxml_bufferstack + AX_surfxml_peer_bw___in) +short int surfxml_peer_bw___in_isset; AT_surfxml_bypassRoute_src AX_surfxml_bypassRoute_src; #define A_surfxml_bypassRoute_src (surfxml_bufferstack + AX_surfxml_bypassRoute_src) short int surfxml_bypassRoute_src_isset; +AT_surfxml_ASroute_gw___src AX_surfxml_ASroute_gw___src; +#define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src) +short int surfxml_ASroute_gw___src_isset; +AT_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy; +#define A_surfxml_link_sharing___policy AX_surfxml_link_sharing___policy +short int surfxml_link_sharing___policy_isset; +AT_surfxml_host_pstate AX_surfxml_host_pstate; +#define A_surfxml_host_pstate (surfxml_bufferstack + AX_surfxml_host_pstate) +short int surfxml_host_pstate_isset; +AT_surfxml_route_src AX_surfxml_route_src; +#define A_surfxml_route_src (surfxml_bufferstack + AX_surfxml_route_src) +short int surfxml_route_src_isset; +AT_surfxml_cabinet_suffix AX_surfxml_cabinet_suffix; +#define A_surfxml_cabinet_suffix (surfxml_bufferstack + AX_surfxml_cabinet_suffix) +short int surfxml_cabinet_suffix_isset; +AT_surfxml_cluster_limiter___link AX_surfxml_cluster_limiter___link; +#define A_surfxml_cluster_limiter___link (surfxml_bufferstack + AX_surfxml_cluster_limiter___link) +short int surfxml_cluster_limiter___link_isset; +AT_surfxml_cluster_bb___lat AX_surfxml_cluster_bb___lat; +#define A_surfxml_cluster_bb___lat (surfxml_bufferstack + AX_surfxml_cluster_bb___lat) +short int surfxml_cluster_bb___lat_isset; +AT_surfxml_peer_state___file AX_surfxml_peer_state___file; +#define A_surfxml_peer_state___file (surfxml_bufferstack + AX_surfxml_peer_state___file) +short int surfxml_peer_state___file_isset; +AT_surfxml_host___link_id AX_surfxml_host___link_id; +#define A_surfxml_host___link_id (surfxml_bufferstack + AX_surfxml_host___link_id) +short int surfxml_host___link_id_isset; +AT_surfxml_random_radical AX_surfxml_random_radical; +#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical) +short int surfxml_random_radical_isset; +AT_surfxml_include_file AX_surfxml_include_file; +#define A_surfxml_include_file (surfxml_bufferstack + AX_surfxml_include_file) +short int surfxml_include_file_isset; +AT_surfxml_link_bandwidth___file AX_surfxml_link_bandwidth___file; +#define A_surfxml_link_bandwidth___file (surfxml_bufferstack + AX_surfxml_link_bandwidth___file) +short int surfxml_link_bandwidth___file_isset; +AT_surfxml_prop_id AX_surfxml_prop_id; +#define A_surfxml_prop_id (surfxml_bufferstack + AX_surfxml_prop_id) +short int surfxml_prop_id_isset; +AT_surfxml_config_id AX_surfxml_config_id; +#define A_surfxml_config_id (surfxml_bufferstack + AX_surfxml_config_id) +short int surfxml_config_id_isset; +AT_surfxml_host_core AX_surfxml_host_core; +#define A_surfxml_host_core (surfxml_bufferstack + AX_surfxml_host_core) +short int surfxml_host_core_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; +AT_surfxml_random_max AX_surfxml_random_max; +#define A_surfxml_random_max (surfxml_bufferstack + AX_surfxml_random_max) +short int surfxml_random_max_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; +AT_surfxml_random_seed AX_surfxml_random_seed; +#define A_surfxml_random_seed (surfxml_bufferstack + AX_surfxml_random_seed) +short int surfxml_random_seed_isset; +AT_surfxml_trace_periodicity AX_surfxml_trace_periodicity; +#define A_surfxml_trace_periodicity (surfxml_bufferstack + AX_surfxml_trace_periodicity) +short int surfxml_trace_periodicity_isset; +AT_surfxml_model___prop_value AX_surfxml_model___prop_value; +#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value) +short int surfxml_model___prop_value_isset; +AT_surfxml_random_std___deviation AX_surfxml_random_std___deviation; +#define A_surfxml_random_std___deviation (surfxml_bufferstack + AX_surfxml_random_std___deviation) +short int surfxml_random_std___deviation_isset; +AT_surfxml_peer_id AX_surfxml_peer_id; +#define A_surfxml_peer_id (surfxml_bufferstack + AX_surfxml_peer_id) +short int surfxml_peer_id_isset; +AT_surfxml_random_mean AX_surfxml_random_mean; +#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean) +short int surfxml_random_mean_isset; +AT_surfxml_cluster_topo___parameters AX_surfxml_cluster_topo___parameters; +#define A_surfxml_cluster_topo___parameters (surfxml_bufferstack + AX_surfxml_cluster_topo___parameters) +short int surfxml_cluster_topo___parameters_isset; +AT_surfxml_ASroute_dst AX_surfxml_ASroute_dst; +#define A_surfxml_ASroute_dst (surfxml_bufferstack + AX_surfxml_ASroute_dst) +short int surfxml_ASroute_dst_isset; +AT_surfxml_cluster_prefix AX_surfxml_cluster_prefix; +#define A_surfxml_cluster_prefix (surfxml_bufferstack + AX_surfxml_cluster_prefix) +short int surfxml_cluster_prefix_isset; AT_surfxml_platform_version AX_surfxml_platform_version; #define A_surfxml_platform_version (surfxml_bufferstack + AX_surfxml_platform_version) short int surfxml_platform_version_isset; -AT_surfxml_model___prop_id AX_surfxml_model___prop_id; -#define A_surfxml_model___prop_id (surfxml_bufferstack + AX_surfxml_model___prop_id) -short int surfxml_model___prop_id_isset; -AT_surfxml_cabinet_prefix AX_surfxml_cabinet_prefix; -#define A_surfxml_cabinet_prefix (surfxml_bufferstack + AX_surfxml_cabinet_prefix) -short int surfxml_cabinet_prefix_isset; -AT_surfxml_router_coordinates AX_surfxml_router_coordinates; -#define A_surfxml_router_coordinates (surfxml_bufferstack + AX_surfxml_router_coordinates) -short int surfxml_router_coordinates_isset; -AT_surfxml_host_state AX_surfxml_host_state; -#define A_surfxml_host_state AX_surfxml_host_state -short int surfxml_host_state_isset; -AT_surfxml_random_radical AX_surfxml_random_radical; -#define A_surfxml_random_radical (surfxml_bufferstack + AX_surfxml_random_radical) -short int surfxml_random_radical_isset; -AT_surfxml_ASroute_gw___src AX_surfxml_ASroute_gw___src; -#define A_surfxml_ASroute_gw___src (surfxml_bufferstack + AX_surfxml_ASroute_gw___src) -short int surfxml_ASroute_gw___src_isset; -AT_surfxml_link_latency AX_surfxml_link_latency; -#define A_surfxml_link_latency (surfxml_bufferstack + AX_surfxml_link_latency) -short int surfxml_link_latency_isset; -AT_surfxml_peer_availability___file AX_surfxml_peer_availability___file; -#define A_surfxml_peer_availability___file (surfxml_bufferstack + AX_surfxml_peer_availability___file) -short int surfxml_peer_availability___file_isset; -AT_surfxml_mstorage_name AX_surfxml_mstorage_name; -#define A_surfxml_mstorage_name (surfxml_bufferstack + AX_surfxml_mstorage_name) -short int surfxml_mstorage_name_isset; -AT_surfxml_process_on___failure AX_surfxml_process_on___failure; -#define A_surfxml_process_on___failure AX_surfxml_process_on___failure -short int surfxml_process_on___failure_isset; -AT_surfxml_mount_name AX_surfxml_mount_name; -#define A_surfxml_mount_name (surfxml_bufferstack + AX_surfxml_mount_name) -short int surfxml_mount_name_isset; +AT_surfxml_link_state AX_surfxml_link_state; +#define A_surfxml_link_state AX_surfxml_link_state +short int surfxml_link_state_isset; +AT_surfxml_storage___type_model AX_surfxml_storage___type_model; +#define A_surfxml_storage___type_model (surfxml_bufferstack + AX_surfxml_storage___type_model) +short int surfxml_storage___type_model_isset; AT_surfxml_gpu_name AX_surfxml_gpu_name; #define A_surfxml_gpu_name (surfxml_bufferstack + AX_surfxml_gpu_name) short int surfxml_gpu_name_isset; -AT_surfxml_trace___connect_element AX_surfxml_trace___connect_element; -#define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element) -short int surfxml_trace___connect_element_isset; -AT_surfxml_process_start___time AX_surfxml_process_start___time; -#define A_surfxml_process_start___time (surfxml_bufferstack + AX_surfxml_process_start___time) -short int surfxml_process_start___time_isset; -AT_surfxml_host_state___file AX_surfxml_host_state___file; -#define A_surfxml_host_state___file (surfxml_bufferstack + AX_surfxml_host_state___file) -short int surfxml_host_state___file_isset; -AT_surfxml_host_availability AX_surfxml_host_availability; -#define A_surfxml_host_availability (surfxml_bufferstack + AX_surfxml_host_availability) -short int surfxml_host_availability_isset; -AT_surfxml_backbone_latency AX_surfxml_backbone_latency; -#define A_surfxml_backbone_latency (surfxml_bufferstack + AX_surfxml_backbone_latency) -short int surfxml_backbone_latency_isset; -AT_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind; -#define A_surfxml_trace___connect_kind AX_surfxml_trace___connect_kind -short int surfxml_trace___connect_kind_isset; -AT_surfxml_link_bandwidth AX_surfxml_link_bandwidth; -#define A_surfxml_link_bandwidth (surfxml_bufferstack + AX_surfxml_link_bandwidth) -short int surfxml_link_bandwidth_isset; -AT_surfxml_host_coordinates AX_surfxml_host_coordinates; -#define A_surfxml_host_coordinates (surfxml_bufferstack + AX_surfxml_host_coordinates) -short int surfxml_host_coordinates_isset; +AT_surfxml_bypassASroute_gw___src AX_surfxml_bypassASroute_gw___src; +#define A_surfxml_bypassASroute_gw___src (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___src) +short int surfxml_bypassASroute_gw___src_isset; +AT_surfxml_router_id AX_surfxml_router_id; +#define A_surfxml_router_id (surfxml_bufferstack + AX_surfxml_router_id) +short int surfxml_router_id_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_trace_id AX_surfxml_trace_id; #define A_surfxml_trace_id (surfxml_bufferstack + AX_surfxml_trace_id) short int surfxml_trace_id_isset; +AT_surfxml_AS_id AX_surfxml_AS_id; +#define A_surfxml_AS_id (surfxml_bufferstack + AX_surfxml_AS_id) +short int surfxml_AS_id_isset; +AT_surfxml_mstorage_typeId AX_surfxml_mstorage_typeId; +#define A_surfxml_mstorage_typeId (surfxml_bufferstack + AX_surfxml_mstorage_typeId) +short int surfxml_mstorage_typeId_isset; +AT_surfxml_trace___connect_element AX_surfxml_trace___connect_element; +#define A_surfxml_trace___connect_element (surfxml_bufferstack + AX_surfxml_trace___connect_element) +short int surfxml_trace___connect_element_isset; +AT_surfxml_cluster_bw AX_surfxml_cluster_bw; +#define A_surfxml_cluster_bw (surfxml_bufferstack + AX_surfxml_cluster_bw) +short int surfxml_cluster_bw_isset; +AT_surfxml_ASroute_src AX_surfxml_ASroute_src; +#define A_surfxml_ASroute_src (surfxml_bufferstack + AX_surfxml_ASroute_src) +short int surfxml_ASroute_src_isset; +AT_surfxml_host___link_down AX_surfxml_host___link_down; +#define A_surfxml_host___link_down (surfxml_bufferstack + AX_surfxml_host___link_down) +short int surfxml_host___link_down_isset; +AT_surfxml_process_kill___time AX_surfxml_process_kill___time; +#define A_surfxml_process_kill___time (surfxml_bufferstack + AX_surfxml_process_kill___time) +short int surfxml_process_kill___time_isset; +AT_surfxml_bypassASroute_gw___dst AX_surfxml_bypassASroute_gw___dst; +#define A_surfxml_bypassASroute_gw___dst (surfxml_bufferstack + AX_surfxml_bypassASroute_gw___dst) +short int surfxml_bypassASroute_gw___dst_isset; AT_surfxml_host_availability___file AX_surfxml_host_availability___file; #define A_surfxml_host_availability___file (surfxml_bufferstack + AX_surfxml_host_availability___file) short int surfxml_host_availability___file_isset; -AT_surfxml_link_state AX_surfxml_link_state; -#define A_surfxml_link_state AX_surfxml_link_state -short int surfxml_link_state_isset; -AT_surfxml_trace___connect_trace AX_surfxml_trace___connect_trace; -#define A_surfxml_trace___connect_trace (surfxml_bufferstack + AX_surfxml_trace___connect_trace) -short int surfxml_trace___connect_trace_isset; -AT_surfxml_random_mean AX_surfxml_random_mean; -#define A_surfxml_random_mean (surfxml_bufferstack + AX_surfxml_random_mean) -short int surfxml_random_mean_isset; -AT_surfxml_model___prop_value AX_surfxml_model___prop_value; -#define A_surfxml_model___prop_value (surfxml_bufferstack + AX_surfxml_model___prop_value) -short int surfxml_model___prop_value_isset; +AT_surfxml_peer_lat AX_surfxml_peer_lat; +#define A_surfxml_peer_lat (surfxml_bufferstack + AX_surfxml_peer_lat) +short int surfxml_peer_lat_isset; +AT_surfxml_cabinet_lat AX_surfxml_cabinet_lat; +#define A_surfxml_cabinet_lat (surfxml_bufferstack + AX_surfxml_cabinet_lat) +short int surfxml_cabinet_lat_isset; /* XML state. */ #ifdef FLEX_DEBUG @@ -5397,12 +5397,7 @@ static int input (void ); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k */ -#define YY_READ_BUF_SIZE 16384 -#else #define YY_READ_BUF_SIZE 8192 -#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -5503,34 +5498,6 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! surf_parse_in ) - surf_parse_in = stdin; - - 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 ); - } - - surf_parse__load_buffer_state( ); - } - - { - /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */ SET(PROLOG); reset_surfxml_parse_err_msg(); @@ -5696,6 +5663,32 @@ YY_DECL /* COMMENTS and PIs: handled uniformly for efficiency. */ + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! surf_parse_in ) + surf_parse_in = stdin; + + 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 ); + } + + surf_parse__load_buffer_state( ); + } + while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); @@ -5712,7 +5705,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + register 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; @@ -5721,7 +5714,7 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3469 ) + if ( yy_current_state >= 3503 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -5912,13 +5905,13 @@ case 26: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_platform_4): -case YY_STATE_EOF(S_surfxml_platform_1): case YY_STATE_EOF(S_surfxml_platform_3): +case YY_STATE_EOF(E_surfxml_platform): case YY_STATE_EOF(S_surfxml_platform_8): case YY_STATE_EOF(S_surfxml_platform): -case YY_STATE_EOF(E_surfxml_platform): +case YY_STATE_EOF(S_surfxml_platform_1): case YY_STATE_EOF(S_surfxml_platform_6): +case YY_STATE_EOF(S_surfxml_platform_4): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK @@ -5960,10 +5953,10 @@ 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; ETag_surfxml_include(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; - case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; - case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break; - case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; + case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break; + case S_surfxml_AS_5: case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break; + case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break; + case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; } } YY_BREAK @@ -5987,10 +5980,10 @@ YY_RULE_SETUP ETag_surfxml_include(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; - case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; - case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break; - case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; + case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break; + case S_surfxml_AS_5: case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break; + case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break; + case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; } } YY_BREAK @@ -6003,9 +5996,9 @@ case 37: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(E_surfxml_include): -case YY_STATE_EOF(S_surfxml_include_2): case YY_STATE_EOF(S_surfxml_include): +case YY_STATE_EOF(S_surfxml_include_2): +case YY_STATE_EOF(E_surfxml_include): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK @@ -6073,13 +6066,13 @@ YY_RULE_SETUP if (!AX_surfxml_trace_periodicity) FAIL("Required attribute `periodicity' not set for `trace' element."); LEAVE; STag_surfxml_trace(); surfxml_pcdata_ix = 0; ETag_surfxml_trace(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; + case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; + case S_surfxml_AS_6: case S_surfxml_AS_8: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break; + case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; + case S_surfxml_AS_16: case S_surfxml_AS: case S_surfxml_AS_12: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break; + case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; - case S_surfxml_AS_4: case S_surfxml_AS_11: case S_surfxml_AS: case S_surfxml_AS_9: case S_surfxml_AS_7: case S_surfxml_AS_10: SET(S_surfxml_AS_11); break; - case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break; - case S_surfxml_AS_12: case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS_1: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break; - case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; - case S_surfxml_AS_8: SET(S_surfxml_AS_9); break; + case S_surfxml_AS_7: case S_surfxml_AS_11: case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_10: case S_surfxml_AS_3: SET(S_surfxml_AS_11); break; } } YY_BREAK @@ -6105,13 +6098,13 @@ YY_RULE_SETUP surfxml_pcdata_ix = popbuffer(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; + case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; + case S_surfxml_AS_6: case S_surfxml_AS_8: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break; + case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; + case S_surfxml_AS_16: case S_surfxml_AS: case S_surfxml_AS_12: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break; + case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; - case S_surfxml_AS_4: case S_surfxml_AS_11: case S_surfxml_AS: case S_surfxml_AS_9: case S_surfxml_AS_7: case S_surfxml_AS_10: SET(S_surfxml_AS_11); break; - case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break; - case S_surfxml_AS_12: case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS_1: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break; - case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; - case S_surfxml_AS_8: SET(S_surfxml_AS_9); break; + case S_surfxml_AS_7: case S_surfxml_AS_11: case S_surfxml_AS_1: case S_surfxml_AS_4: case S_surfxml_AS_10: case S_surfxml_AS_3: SET(S_surfxml_AS_11); break; } } YY_BREAK @@ -6272,7 +6265,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; ETag_surfxml_random(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform_2: case S_surfxml_platform: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break; + case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break; } } YY_BREAK @@ -6296,7 +6289,7 @@ YY_RULE_SETUP ETag_surfxml_random(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform_2: case S_surfxml_platform: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break; + case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break; } } YY_BREAK @@ -6402,13 +6395,13 @@ YY_RULE_SETUP if (!AX_surfxml_trace___connect_element) FAIL("Required attribute `element' not set for `trace_connect' element."); LEAVE; STag_surfxml_trace___connect(); surfxml_pcdata_ix = 0; ETag_surfxml_trace___connect(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform: SET(S_surfxml_platform_6); break; + case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; + case S_surfxml_AS_4: case S_surfxml_AS_7: case S_surfxml_AS_11: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS_10: SET(S_surfxml_AS_11); break; case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; - case S_surfxml_AS_15: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS_12: SET(S_surfxml_AS_16); break; - case S_surfxml_AS_8: SET(S_surfxml_AS_9); break; - case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; - case S_surfxml_AS_10: case S_surfxml_AS_9: case S_surfxml_AS_7: case S_surfxml_AS: case S_surfxml_AS_11: case S_surfxml_AS_4: SET(S_surfxml_AS_11); break; case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; + case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; + case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break; + case S_surfxml_AS: case S_surfxml_AS_16: case S_surfxml_AS_15: case S_surfxml_AS_12: SET(S_surfxml_AS_16); break; } } YY_BREAK @@ -6432,13 +6425,13 @@ YY_RULE_SETUP ETag_surfxml_trace___connect(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: case S_surfxml_platform_5: case S_surfxml_platform: SET(S_surfxml_platform_6); break; + case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_3: case S_surfxml_platform_1: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; + case S_surfxml_AS_4: case S_surfxml_AS_7: case S_surfxml_AS_11: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS_10: SET(S_surfxml_AS_11); break; case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; - case S_surfxml_AS_15: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS_12: SET(S_surfxml_AS_16); break; - case S_surfxml_AS_8: SET(S_surfxml_AS_9); break; - case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; - case S_surfxml_AS_10: case S_surfxml_AS_9: case S_surfxml_AS_7: case S_surfxml_AS: case S_surfxml_AS_11: case S_surfxml_AS_4: SET(S_surfxml_AS_11); break; case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; + case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; + case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS_9: SET(S_surfxml_AS_9); break; + case S_surfxml_AS: case S_surfxml_AS_16: case S_surfxml_AS_15: case S_surfxml_AS_12: SET(S_surfxml_AS_16); break; } } YY_BREAK @@ -6539,6 +6532,13 @@ YY_RULE_SETUP A_surfxml_AS_routing = A_surfxml_AS_routing_Cluster___torus; YY_BREAK case 126: +/* rule 126 can match eol */ +case 127: +/* rule 127 can match eol */ +YY_RULE_SETUP +A_surfxml_AS_routing = A_surfxml_AS_routing_Cluster___fat___tree; + YY_BREAK +case 128: YY_RULE_SETUP { if (!AX_surfxml_AS_id) FAIL("Required attribute `id' not set for `AS' element."); @@ -6546,24 +6546,24 @@ YY_RULE_SETUP LEAVE; STag_surfxml_AS();surfxml_pcdata_ix = 0; ENTER(S_surfxml_AS); } YY_BREAK -case 127: +case 129: YY_RULE_SETUP { if (!AX_surfxml_AS_id) FAIL("Required attribute `id' not set for `AS' element."); if (!AX_surfxml_AS_routing) FAIL("Required attribute `routing' not set for `AS' element."); LEAVE; STag_surfxml_AS(); surfxml_pcdata_ix = 0; ETag_surfxml_AS(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS: SET(S_surfxml_AS_6); break; - case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; - case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break; + case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break; + case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; + case S_surfxml_include_2: case S_surfxml_include: case S_surfxml_include_1: SET(S_surfxml_include_2); break; } } YY_BREAK -case 128: +case 130: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of AS element.", surf_parse_text[0]); YY_BREAK -case 129: +case 131: YY_RULE_SETUP FAIL("Bad attribute `%s' in `AS' element start tag.",surf_parse_text); YY_BREAK @@ -6571,51 +6571,51 @@ case YY_STATE_EOF(AL_surfxml_AS): FAIL("EOF in attribute list of `AS' element."); YY_BREAK -case 130: -/* rule 130 can match eol */ +case 132: +/* rule 132 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_AS(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS: SET(S_surfxml_AS_6); break; - case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; - case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break; + case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_6); break; + case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; + case S_surfxml_include_2: case S_surfxml_include: case S_surfxml_include_1: SET(S_surfxml_include_2); break; } } YY_BREAK -case 131: -/* rule 131 can match eol */ +case 133: +/* rule 133 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 132: +case 134: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_AS_11): +case YY_STATE_EOF(S_surfxml_AS): case YY_STATE_EOF(S_surfxml_AS_4): -case YY_STATE_EOF(S_surfxml_AS_14): -case YY_STATE_EOF(S_surfxml_AS_6): -case YY_STATE_EOF(S_surfxml_AS_12): case YY_STATE_EOF(S_surfxml_AS_3): -case YY_STATE_EOF(S_surfxml_AS): -case YY_STATE_EOF(S_surfxml_AS_16): -case YY_STATE_EOF(E_surfxml_AS): -case YY_STATE_EOF(S_surfxml_AS_7): case YY_STATE_EOF(S_surfxml_AS_9): +case YY_STATE_EOF(S_surfxml_AS_12): case YY_STATE_EOF(S_surfxml_AS_1): +case YY_STATE_EOF(E_surfxml_AS): +case YY_STATE_EOF(S_surfxml_AS_6): +case YY_STATE_EOF(S_surfxml_AS_11): +case YY_STATE_EOF(S_surfxml_AS_7): +case YY_STATE_EOF(S_surfxml_AS_14): +case YY_STATE_EOF(S_surfxml_AS_16): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 133: -/* rule 133 can match eol */ +case 135: +/* rule 135 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 134: -/* rule 134 can match eol */ +case 136: +/* rule 136 can match eol */ YY_RULE_SETUP { AX_surfxml_storage___type_id = 0; @@ -6623,66 +6623,66 @@ YY_RULE_SETUP AX_surfxml_storage___type_model = 0; surfxml_storage___type_model_isset = 0; AX_surfxml_storage___type_size = 0; - surfxml_storage___type_size_isset = 0; - 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; - ENTER(AL_surfxml_storage___type); pushbuffer(0); - } - YY_BREAK - -case 135: -/* rule 135 can match eol */ -YY_RULE_SETUP -if (surfxml_storage___type_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_storage___type_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_id); - YY_BREAK -case 136: -/* rule 136 can match eol */ -YY_RULE_SETUP -if (surfxml_storage___type_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_storage___type_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_id); + surfxml_storage___type_size_isset = 0; + 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; + ENTER(AL_surfxml_storage___type); pushbuffer(0); + } YY_BREAK + case 137: /* rule 137 can match eol */ YY_RULE_SETUP -if (surfxml_storage___type_model_isset != 0) {FAIL("Multiple definition of attribute model in ");} surfxml_storage___type_model_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_model); +if (surfxml_storage___type_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_storage___type_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_id); YY_BREAK case 138: /* rule 138 can match eol */ YY_RULE_SETUP -if (surfxml_storage___type_model_isset != 0) {FAIL("Multiple definition of attribute model in ");} surfxml_storage___type_model_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_model); +if (surfxml_storage___type_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_storage___type_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_id); YY_BREAK case 139: /* rule 139 can match eol */ YY_RULE_SETUP -if (surfxml_storage___type_size_isset != 0) {FAIL("Multiple definition of attribute size in ");} surfxml_storage___type_size_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_size); +if (surfxml_storage___type_model_isset != 0) {FAIL("Multiple definition of attribute model in ");} surfxml_storage___type_model_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_model); YY_BREAK case 140: /* rule 140 can match eol */ YY_RULE_SETUP -if (surfxml_storage___type_size_isset != 0) {FAIL("Multiple definition of attribute size in ");} surfxml_storage___type_size_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_size); +if (surfxml_storage___type_model_isset != 0) {FAIL("Multiple definition of attribute model in ");} surfxml_storage___type_model_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_model); YY_BREAK case 141: /* rule 141 can match eol */ YY_RULE_SETUP -if (surfxml_storage___type_content_isset != 0) {FAIL("Multiple definition of attribute content in ");} surfxml_storage___type_content_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_content); +if (surfxml_storage___type_size_isset != 0) {FAIL("Multiple definition of attribute size in ");} surfxml_storage___type_size_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_size); YY_BREAK case 142: /* rule 142 can match eol */ YY_RULE_SETUP -if (surfxml_storage___type_content_isset != 0) {FAIL("Multiple definition of attribute content in ");} surfxml_storage___type_content_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_content); +if (surfxml_storage___type_size_isset != 0) {FAIL("Multiple definition of attribute size in ");} surfxml_storage___type_size_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_size); YY_BREAK case 143: /* rule 143 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_content___type_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_content___type); +if (surfxml_storage___type_content_isset != 0) {FAIL("Multiple definition of attribute content in ");} surfxml_storage___type_content_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_content); YY_BREAK case 144: /* rule 144 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_content___type_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_content___type); +if (surfxml_storage___type_content_isset != 0) {FAIL("Multiple definition of attribute content in ");} surfxml_storage___type_content_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_content); YY_BREAK case 145: +/* rule 145 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_content___type_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage___type_content___type); + YY_BREAK +case 146: +/* rule 146 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_content___type_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage___type_content___type); + YY_BREAK +case 147: YY_RULE_SETUP { if (!AX_surfxml_storage___type_id) FAIL("Required attribute `id' not set for `storage_type' element."); @@ -6691,7 +6691,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_storage___type();surfxml_pcdata_ix = 0; ENTER(S_surfxml_storage___type); } YY_BREAK -case 146: +case 148: YY_RULE_SETUP { if (!AX_surfxml_storage___type_id) FAIL("Required attribute `id' not set for `storage_type' element."); @@ -6699,16 +6699,16 @@ YY_RULE_SETUP 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) { - case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; - case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; + case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; } } YY_BREAK -case 147: +case 149: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of storage_type element.", surf_parse_text[0]); YY_BREAK -case 148: +case 150: YY_RULE_SETUP FAIL("Bad attribute `%s' in `storage_type' element start tag.",surf_parse_text); YY_BREAK @@ -6716,41 +6716,41 @@ case YY_STATE_EOF(AL_surfxml_storage___type): FAIL("EOF in attribute list of `storage_type' element."); YY_BREAK -case 149: -/* rule 149 can match eol */ +case 151: +/* rule 151 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_storage___type(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; - case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; + case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; } } YY_BREAK -case 150: -/* rule 150 can match eol */ +case 152: +/* rule 152 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 151: +case 153: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_storage___type_2): case YY_STATE_EOF(S_surfxml_storage___type): case YY_STATE_EOF(E_surfxml_storage___type): +case YY_STATE_EOF(S_surfxml_storage___type_2): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 152: -/* rule 152 can match eol */ +case 154: +/* rule 154 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 153: -/* rule 153 can match eol */ +case 155: +/* rule 155 can match eol */ YY_RULE_SETUP { AX_surfxml_mount_storageId = 0; @@ -6761,27 +6761,27 @@ YY_RULE_SETUP } YY_BREAK -case 154: -/* rule 154 can match eol */ +case 156: +/* rule 156 can match eol */ YY_RULE_SETUP if (surfxml_mount_storageId_isset != 0) {FAIL("Multiple definition of attribute storageId in ");} surfxml_mount_storageId_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_mount_storageId); YY_BREAK -case 155: -/* rule 155 can match eol */ +case 157: +/* rule 157 can match eol */ YY_RULE_SETUP if (surfxml_mount_storageId_isset != 0) {FAIL("Multiple definition of attribute storageId in ");} surfxml_mount_storageId_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_mount_storageId); YY_BREAK -case 156: -/* rule 156 can match eol */ +case 158: +/* rule 158 can match eol */ YY_RULE_SETUP if (surfxml_mount_name_isset != 0) {FAIL("Multiple definition of attribute name in ");} surfxml_mount_name_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_mount_name); YY_BREAK -case 157: -/* rule 157 can match eol */ +case 159: +/* rule 159 can match eol */ YY_RULE_SETUP if (surfxml_mount_name_isset != 0) {FAIL("Multiple definition of attribute name in ");} surfxml_mount_name_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_mount_name); YY_BREAK -case 158: +case 160: YY_RULE_SETUP { if (!AX_surfxml_mount_storageId) FAIL("Required attribute `storageId' not set for `mount' element."); @@ -6789,22 +6789,22 @@ YY_RULE_SETUP LEAVE; STag_surfxml_mount();surfxml_pcdata_ix = 0; ENTER(E_surfxml_mount); } YY_BREAK -case 159: +case 161: YY_RULE_SETUP { if (!AX_surfxml_mount_storageId) FAIL("Required attribute `storageId' not set for `mount' element."); if (!AX_surfxml_mount_name) FAIL("Required attribute `name' not set for `mount' element."); LEAVE; STag_surfxml_mount(); surfxml_pcdata_ix = 0; ETag_surfxml_mount(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_host_2: case S_surfxml_host_1: case S_surfxml_host: SET(S_surfxml_host_2); break; + case S_surfxml_host_2: case S_surfxml_host: case S_surfxml_host_1: SET(S_surfxml_host_2); break; } } YY_BREAK -case 160: +case 162: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of mount element.", surf_parse_text[0]); YY_BREAK -case 161: +case 163: YY_RULE_SETUP FAIL("Bad attribute `%s' in `mount' element start tag.",surf_parse_text); YY_BREAK @@ -6812,24 +6812,24 @@ case YY_STATE_EOF(AL_surfxml_mount): FAIL("EOF in attribute list of `mount' element."); YY_BREAK -case 162: -/* rule 162 can match eol */ +case 164: +/* rule 164 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_mount(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_host_2: case S_surfxml_host_1: case S_surfxml_host: SET(S_surfxml_host_2); break; + case S_surfxml_host_2: case S_surfxml_host: case S_surfxml_host_1: SET(S_surfxml_host_2); break; } } YY_BREAK -case 163: -/* rule 163 can match eol */ +case 165: +/* rule 165 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 164: +case 166: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -6837,13 +6837,13 @@ case YY_STATE_EOF(E_surfxml_mount): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 165: -/* rule 165 can match eol */ +case 167: +/* rule 167 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 166: -/* rule 166 can match eol */ +case 168: +/* rule 168 can match eol */ YY_RULE_SETUP { AX_surfxml_mstorage_typeId = 0; @@ -6854,27 +6854,27 @@ YY_RULE_SETUP } YY_BREAK -case 167: -/* rule 167 can match eol */ +case 169: +/* rule 169 can match eol */ YY_RULE_SETUP if (surfxml_mstorage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in ");} surfxml_mstorage_typeId_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_mstorage_typeId); YY_BREAK -case 168: -/* rule 168 can match eol */ +case 170: +/* rule 170 can match eol */ YY_RULE_SETUP if (surfxml_mstorage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in ");} surfxml_mstorage_typeId_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_mstorage_typeId); YY_BREAK -case 169: -/* rule 169 can match eol */ +case 171: +/* rule 171 can match eol */ YY_RULE_SETUP if (surfxml_mstorage_name_isset != 0) {FAIL("Multiple definition of attribute name in ");} surfxml_mstorage_name_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_mstorage_name); YY_BREAK -case 170: -/* rule 170 can match eol */ +case 172: +/* rule 172 can match eol */ YY_RULE_SETUP if (surfxml_mstorage_name_isset != 0) {FAIL("Multiple definition of attribute name in ");} surfxml_mstorage_name_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_mstorage_name); YY_BREAK -case 171: +case 173: YY_RULE_SETUP { if (!AX_surfxml_mstorage_typeId) FAIL("Required attribute `typeId' not set for `mstorage' element."); @@ -6882,7 +6882,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_mstorage();surfxml_pcdata_ix = 0; ENTER(E_surfxml_mstorage); } YY_BREAK -case 172: +case 174: YY_RULE_SETUP { if (!AX_surfxml_mstorage_typeId) FAIL("Required attribute `typeId' not set for `mstorage' element."); @@ -6893,11 +6893,11 @@ YY_RULE_SETUP } } YY_BREAK -case 173: +case 175: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of mstorage element.", surf_parse_text[0]); YY_BREAK -case 174: +case 176: YY_RULE_SETUP FAIL("Bad attribute `%s' in `mstorage' element start tag.",surf_parse_text); YY_BREAK @@ -6905,8 +6905,8 @@ case YY_STATE_EOF(AL_surfxml_mstorage): FAIL("EOF in attribute list of `mstorage' element."); YY_BREAK -case 175: -/* rule 175 can match eol */ +case 177: +/* rule 177 can match eol */ YY_RULE_SETUP { LEAVE; @@ -6917,12 +6917,12 @@ YY_RULE_SETUP } } YY_BREAK -case 176: -/* rule 176 can match eol */ +case 178: +/* rule 178 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 177: +case 179: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -6930,13 +6930,13 @@ case YY_STATE_EOF(E_surfxml_mstorage): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 178: -/* rule 178 can match eol */ +case 180: +/* rule 180 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 179: -/* rule 179 can match eol */ +case 181: +/* rule 181 can match eol */ YY_RULE_SETUP { AX_surfxml_host_id = 0; @@ -6961,101 +6961,101 @@ YY_RULE_SETUP } YY_BREAK -case 180: -/* rule 180 can match eol */ -YY_RULE_SETUP -if (surfxml_host_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_host_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_id); - YY_BREAK -case 181: -/* rule 181 can match eol */ -YY_RULE_SETUP -if (surfxml_host_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_host_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_id); - YY_BREAK case 182: /* rule 182 can match eol */ YY_RULE_SETUP -if (surfxml_host_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_host_power_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_power); +if (surfxml_host_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_host_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_id); YY_BREAK case 183: /* rule 183 can match eol */ YY_RULE_SETUP -if (surfxml_host_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_host_power_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_power); +if (surfxml_host_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_host_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_id); YY_BREAK case 184: /* rule 184 can match eol */ YY_RULE_SETUP -if (surfxml_host_core_isset != 0) {FAIL("Multiple definition of attribute core in ");} surfxml_host_core_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_core); +if (surfxml_host_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_host_power_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_power); YY_BREAK case 185: /* rule 185 can match eol */ YY_RULE_SETUP -if (surfxml_host_core_isset != 0) {FAIL("Multiple definition of attribute core in ");} surfxml_host_core_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_core); +if (surfxml_host_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_host_power_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_power); YY_BREAK case 186: /* rule 186 can match eol */ YY_RULE_SETUP -if (surfxml_host_availability_isset != 0) {FAIL("Multiple definition of attribute availability in ");} surfxml_host_availability_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_availability); +if (surfxml_host_core_isset != 0) {FAIL("Multiple definition of attribute core in ");} surfxml_host_core_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_core); YY_BREAK case 187: /* rule 187 can match eol */ YY_RULE_SETUP -if (surfxml_host_availability_isset != 0) {FAIL("Multiple definition of attribute availability in ");} surfxml_host_availability_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_availability); +if (surfxml_host_core_isset != 0) {FAIL("Multiple definition of attribute core in ");} surfxml_host_core_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_core); YY_BREAK case 188: /* rule 188 can match eol */ YY_RULE_SETUP -if (surfxml_host_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_host_availability___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_availability___file); +if (surfxml_host_availability_isset != 0) {FAIL("Multiple definition of attribute availability in ");} surfxml_host_availability_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_availability); YY_BREAK case 189: /* rule 189 can match eol */ YY_RULE_SETUP -if (surfxml_host_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_host_availability___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_availability___file); +if (surfxml_host_availability_isset != 0) {FAIL("Multiple definition of attribute availability in ");} surfxml_host_availability_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_availability); YY_BREAK case 190: /* rule 190 can match eol */ +YY_RULE_SETUP +if (surfxml_host_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_host_availability___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_availability___file); + YY_BREAK case 191: /* rule 191 can match eol */ YY_RULE_SETUP -A_surfxml_host_state = A_surfxml_host_state_ON; +if (surfxml_host_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_host_availability___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_availability___file); YY_BREAK case 192: /* rule 192 can match eol */ case 193: /* rule 193 can match eol */ YY_RULE_SETUP -A_surfxml_host_state = A_surfxml_host_state_OFF; +A_surfxml_host_state = A_surfxml_host_state_ON; YY_BREAK case 194: /* rule 194 can match eol */ -YY_RULE_SETUP -if (surfxml_host_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_host_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_state___file); - YY_BREAK case 195: /* rule 195 can match eol */ YY_RULE_SETUP -if (surfxml_host_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_host_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_state___file); +A_surfxml_host_state = A_surfxml_host_state_OFF; YY_BREAK case 196: /* rule 196 can match eol */ YY_RULE_SETUP -if (surfxml_host_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_host_coordinates_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_coordinates); +if (surfxml_host_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_host_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_state___file); YY_BREAK case 197: /* rule 197 can match eol */ YY_RULE_SETUP -if (surfxml_host_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_host_coordinates_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_coordinates); +if (surfxml_host_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_host_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_state___file); YY_BREAK case 198: /* rule 198 can match eol */ YY_RULE_SETUP -if (surfxml_host_pstate_isset != 0) {FAIL("Multiple definition of attribute pstate in ");} surfxml_host_pstate_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_pstate); +if (surfxml_host_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_host_coordinates_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_coordinates); YY_BREAK case 199: /* rule 199 can match eol */ YY_RULE_SETUP -if (surfxml_host_pstate_isset != 0) {FAIL("Multiple definition of attribute pstate in ");} surfxml_host_pstate_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_pstate); +if (surfxml_host_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_host_coordinates_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_coordinates); YY_BREAK case 200: +/* rule 200 can match eol */ +YY_RULE_SETUP +if (surfxml_host_pstate_isset != 0) {FAIL("Multiple definition of attribute pstate in ");} surfxml_host_pstate_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host_pstate); + YY_BREAK +case 201: +/* rule 201 can match eol */ +YY_RULE_SETUP +if (surfxml_host_pstate_isset != 0) {FAIL("Multiple definition of attribute pstate in ");} surfxml_host_pstate_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host_pstate); + YY_BREAK +case 202: YY_RULE_SETUP { if (!AX_surfxml_host_id) FAIL("Required attribute `id' not set for `host' element."); @@ -7063,22 +7063,22 @@ YY_RULE_SETUP LEAVE; STag_surfxml_host();surfxml_pcdata_ix = 0; ENTER(S_surfxml_host); } YY_BREAK -case 201: +case 203: YY_RULE_SETUP { if (!AX_surfxml_host_id) FAIL("Required attribute `id' not set for `host' element."); if (!AX_surfxml_host_power) FAIL("Required attribute `power' not set for `host' element."); LEAVE; STag_surfxml_host(); surfxml_pcdata_ix = 0; ETag_surfxml_host(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 202: +case 204: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of host element.", surf_parse_text[0]); YY_BREAK -case 203: +case 205: YY_RULE_SETUP FAIL("Bad attribute `%s' in `host' element start tag.",surf_parse_text); YY_BREAK @@ -7086,40 +7086,40 @@ case YY_STATE_EOF(AL_surfxml_host): FAIL("EOF in attribute list of `host' element."); YY_BREAK -case 204: -/* rule 204 can match eol */ +case 206: +/* rule 206 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_host(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 205: -/* rule 205 can match eol */ +case 207: +/* rule 207 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 206: +case 208: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_host): case YY_STATE_EOF(S_surfxml_host_2): +case YY_STATE_EOF(S_surfxml_host): case YY_STATE_EOF(E_surfxml_host): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 207: -/* rule 207 can match eol */ +case 209: +/* rule 209 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 208: -/* rule 208 can match eol */ +case 210: +/* rule 210 can match eol */ YY_RULE_SETUP { AX_surfxml_storage_id = 0; @@ -7136,57 +7136,57 @@ YY_RULE_SETUP } YY_BREAK -case 209: -/* rule 209 can match eol */ -YY_RULE_SETUP -if (surfxml_storage_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_storage_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_id); - YY_BREAK -case 210: -/* rule 210 can match eol */ -YY_RULE_SETUP -if (surfxml_storage_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_storage_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_id); - YY_BREAK case 211: /* rule 211 can match eol */ YY_RULE_SETUP -if (surfxml_storage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in ");} surfxml_storage_typeId_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_typeId); +if (surfxml_storage_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_storage_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_id); YY_BREAK case 212: /* rule 212 can match eol */ YY_RULE_SETUP -if (surfxml_storage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in ");} surfxml_storage_typeId_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_typeId); +if (surfxml_storage_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_storage_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_id); YY_BREAK case 213: /* rule 213 can match eol */ YY_RULE_SETUP -if (surfxml_storage_content_isset != 0) {FAIL("Multiple definition of attribute content in ");} surfxml_storage_content_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_content); +if (surfxml_storage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in ");} surfxml_storage_typeId_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_typeId); YY_BREAK case 214: /* rule 214 can match eol */ YY_RULE_SETUP -if (surfxml_storage_content_isset != 0) {FAIL("Multiple definition of attribute content in ");} surfxml_storage_content_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_content); +if (surfxml_storage_typeId_isset != 0) {FAIL("Multiple definition of attribute typeId in ");} surfxml_storage_typeId_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_typeId); YY_BREAK case 215: /* rule 215 can match eol */ YY_RULE_SETUP -if (surfxml_storage_content___type_isset != 0) {FAIL("Multiple definition of attribute content_type in ");} surfxml_storage_content___type_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_content___type); +if (surfxml_storage_content_isset != 0) {FAIL("Multiple definition of attribute content in ");} surfxml_storage_content_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_content); YY_BREAK case 216: /* rule 216 can match eol */ YY_RULE_SETUP -if (surfxml_storage_content___type_isset != 0) {FAIL("Multiple definition of attribute content_type in ");} surfxml_storage_content___type_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_content___type); +if (surfxml_storage_content_isset != 0) {FAIL("Multiple definition of attribute content in ");} surfxml_storage_content_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_content); YY_BREAK case 217: /* rule 217 can match eol */ YY_RULE_SETUP -if (surfxml_storage_attach_isset != 0) {FAIL("Multiple definition of attribute attach in ");} surfxml_storage_attach_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_attach); +if (surfxml_storage_content___type_isset != 0) {FAIL("Multiple definition of attribute content_type in ");} surfxml_storage_content___type_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_content___type); YY_BREAK case 218: /* rule 218 can match eol */ YY_RULE_SETUP -if (surfxml_storage_attach_isset != 0) {FAIL("Multiple definition of attribute attach in ");} surfxml_storage_attach_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_attach); +if (surfxml_storage_content___type_isset != 0) {FAIL("Multiple definition of attribute content_type in ");} surfxml_storage_content___type_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_content___type); YY_BREAK case 219: +/* rule 219 can match eol */ +YY_RULE_SETUP +if (surfxml_storage_attach_isset != 0) {FAIL("Multiple definition of attribute attach in ");} surfxml_storage_attach_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_storage_attach); + YY_BREAK +case 220: +/* rule 220 can match eol */ +YY_RULE_SETUP +if (surfxml_storage_attach_isset != 0) {FAIL("Multiple definition of attribute attach in ");} surfxml_storage_attach_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_storage_attach); + YY_BREAK +case 221: YY_RULE_SETUP { if (!AX_surfxml_storage_id) FAIL("Required attribute `id' not set for `storage' element."); @@ -7195,7 +7195,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_storage();surfxml_pcdata_ix = 0; ENTER(S_surfxml_storage); } YY_BREAK -case 220: +case 222: YY_RULE_SETUP { if (!AX_surfxml_storage_id) FAIL("Required attribute `id' not set for `storage' element."); @@ -7203,16 +7203,16 @@ YY_RULE_SETUP if (!AX_surfxml_storage_attach) FAIL("Required attribute `attach' not set for `storage' element."); LEAVE; STag_surfxml_storage(); surfxml_pcdata_ix = 0; ETag_surfxml_storage(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; - case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; + case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; + case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 221: +case 223: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of storage element.", surf_parse_text[0]); YY_BREAK -case 222: +case 224: YY_RULE_SETUP FAIL("Bad attribute `%s' in `storage' element start tag.",surf_parse_text); YY_BREAK @@ -7220,41 +7220,41 @@ case YY_STATE_EOF(AL_surfxml_storage): FAIL("EOF in attribute list of `storage' element."); YY_BREAK -case 223: -/* rule 223 can match eol */ +case 225: +/* rule 225 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_storage(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_13: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; - case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; + case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; + case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 224: -/* rule 224 can match eol */ +case 226: +/* rule 226 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 225: +case 227: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_storage_2): case YY_STATE_EOF(S_surfxml_storage): case YY_STATE_EOF(E_surfxml_storage): +case YY_STATE_EOF(S_surfxml_storage_2): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 226: -/* rule 226 can match eol */ +case 228: +/* rule 228 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 227: -/* rule 227 can match eol */ +case 229: +/* rule 229 can match eol */ YY_RULE_SETUP { AX_surfxml_gpu_name = 0; @@ -7263,38 +7263,38 @@ YY_RULE_SETUP } YY_BREAK -case 228: -/* rule 228 can match eol */ +case 230: +/* rule 230 can match eol */ YY_RULE_SETUP if (surfxml_gpu_name_isset != 0) {FAIL("Multiple definition of attribute name in ");} surfxml_gpu_name_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_gpu_name); YY_BREAK -case 229: -/* rule 229 can match eol */ +case 231: +/* rule 231 can match eol */ YY_RULE_SETUP if (surfxml_gpu_name_isset != 0) {FAIL("Multiple definition of attribute name in ");} surfxml_gpu_name_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_gpu_name); YY_BREAK -case 230: +case 232: YY_RULE_SETUP { if (!AX_surfxml_gpu_name) FAIL("Required attribute `name' not set for `gpu' element."); LEAVE; STag_surfxml_gpu();surfxml_pcdata_ix = 0; ENTER(E_surfxml_gpu); } YY_BREAK -case 231: +case 233: YY_RULE_SETUP { if (!AX_surfxml_gpu_name) FAIL("Required attribute `name' not set for `gpu' element."); LEAVE; STag_surfxml_gpu(); surfxml_pcdata_ix = 0; ETag_surfxml_gpu(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 232: +case 234: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of gpu element.", surf_parse_text[0]); YY_BREAK -case 233: +case 235: YY_RULE_SETUP FAIL("Bad attribute `%s' in `gpu' element start tag.",surf_parse_text); YY_BREAK @@ -7302,24 +7302,24 @@ case YY_STATE_EOF(AL_surfxml_gpu): FAIL("EOF in attribute list of `gpu' element."); YY_BREAK -case 234: -/* rule 234 can match eol */ +case 236: +/* rule 236 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_gpu(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 235: -/* rule 235 can match eol */ +case 237: +/* rule 237 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 236: +case 238: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -7327,13 +7327,13 @@ case YY_STATE_EOF(E_surfxml_gpu): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 237: -/* rule 237 can match eol */ +case 239: +/* rule 239 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 238: -/* rule 238 can match eol */ +case 240: +/* rule 240 can match eol */ YY_RULE_SETUP { AX_surfxml_host___link_id = 0; @@ -7346,37 +7346,37 @@ YY_RULE_SETUP } YY_BREAK -case 239: -/* rule 239 can match eol */ +case 241: +/* rule 241 can match eol */ YY_RULE_SETUP if (surfxml_host___link_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_host___link_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host___link_id); YY_BREAK -case 240: -/* rule 240 can match eol */ +case 242: +/* rule 242 can match eol */ YY_RULE_SETUP if (surfxml_host___link_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_host___link_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host___link_id); YY_BREAK -case 241: -/* rule 241 can match eol */ +case 243: +/* rule 243 can match eol */ YY_RULE_SETUP if (surfxml_host___link_up_isset != 0) {FAIL("Multiple definition of attribute up in ");} surfxml_host___link_up_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host___link_up); YY_BREAK -case 242: -/* rule 242 can match eol */ +case 244: +/* rule 244 can match eol */ YY_RULE_SETUP if (surfxml_host___link_up_isset != 0) {FAIL("Multiple definition of attribute up in ");} surfxml_host___link_up_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host___link_up); YY_BREAK -case 243: -/* rule 243 can match eol */ +case 245: +/* rule 245 can match eol */ YY_RULE_SETUP if (surfxml_host___link_down_isset != 0) {FAIL("Multiple definition of attribute down in ");} surfxml_host___link_down_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_host___link_down); YY_BREAK -case 244: -/* rule 244 can match eol */ +case 246: +/* rule 246 can match eol */ YY_RULE_SETUP if (surfxml_host___link_down_isset != 0) {FAIL("Multiple definition of attribute down in ");} surfxml_host___link_down_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_host___link_down); YY_BREAK -case 245: +case 247: YY_RULE_SETUP { if (!AX_surfxml_host___link_id) FAIL("Required attribute `id' not set for `host_link' element."); @@ -7385,7 +7385,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_host___link();surfxml_pcdata_ix = 0; ENTER(E_surfxml_host___link); } YY_BREAK -case 246: +case 248: YY_RULE_SETUP { if (!AX_surfxml_host___link_id) FAIL("Required attribute `id' not set for `host_link' element."); @@ -7393,15 +7393,15 @@ YY_RULE_SETUP if (!AX_surfxml_host___link_down) FAIL("Required attribute `down' not set for `host_link' element."); LEAVE; STag_surfxml_host___link(); surfxml_pcdata_ix = 0; ETag_surfxml_host___link(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 247: +case 249: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of host_link element.", surf_parse_text[0]); YY_BREAK -case 248: +case 250: YY_RULE_SETUP FAIL("Bad attribute `%s' in `host_link' element start tag.",surf_parse_text); YY_BREAK @@ -7409,24 +7409,24 @@ case YY_STATE_EOF(AL_surfxml_host___link): FAIL("EOF in attribute list of `host_link' element."); YY_BREAK -case 249: -/* rule 249 can match eol */ +case 251: +/* rule 251 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_host___link(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 250: -/* rule 250 can match eol */ +case 252: +/* rule 252 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 251: +case 253: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -7434,13 +7434,13 @@ case YY_STATE_EOF(E_surfxml_host___link): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 252: -/* rule 252 can match eol */ +case 254: +/* rule 254 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 253: -/* rule 253 can match eol */ +case 255: +/* rule 255 can match eol */ YY_RULE_SETUP { AX_surfxml_cluster_id = 0; @@ -7487,226 +7487,233 @@ YY_RULE_SETUP } YY_BREAK -case 254: -/* rule 254 can match eol */ -YY_RULE_SETUP -if (surfxml_cluster_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_cluster_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_id); - YY_BREAK -case 255: -/* rule 255 can match eol */ -YY_RULE_SETUP -if (surfxml_cluster_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_cluster_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_id); - YY_BREAK case 256: /* rule 256 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in ");} surfxml_cluster_prefix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_prefix); +if (surfxml_cluster_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_cluster_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_id); YY_BREAK case 257: /* rule 257 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in ");} surfxml_cluster_prefix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_prefix); +if (surfxml_cluster_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_cluster_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_id); YY_BREAK case 258: /* rule 258 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in ");} surfxml_cluster_suffix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_suffix); +if (surfxml_cluster_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in ");} surfxml_cluster_prefix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_prefix); YY_BREAK case 259: /* rule 259 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in ");} surfxml_cluster_suffix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_suffix); +if (surfxml_cluster_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in ");} surfxml_cluster_prefix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_prefix); YY_BREAK case 260: /* rule 260 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_radical_isset != 0) {FAIL("Multiple definition of attribute radical in ");} surfxml_cluster_radical_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_radical); +if (surfxml_cluster_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in ");} surfxml_cluster_suffix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_suffix); YY_BREAK case 261: /* rule 261 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_radical_isset != 0) {FAIL("Multiple definition of attribute radical in ");} surfxml_cluster_radical_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_radical); +if (surfxml_cluster_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in ");} surfxml_cluster_suffix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_suffix); YY_BREAK case 262: /* rule 262 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_cluster_power_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_power); +if (surfxml_cluster_radical_isset != 0) {FAIL("Multiple definition of attribute radical in ");} surfxml_cluster_radical_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_radical); YY_BREAK case 263: /* rule 263 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_cluster_power_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_power); +if (surfxml_cluster_radical_isset != 0) {FAIL("Multiple definition of attribute radical in ");} surfxml_cluster_radical_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_radical); YY_BREAK case 264: /* rule 264 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_core_isset != 0) {FAIL("Multiple definition of attribute core in ");} surfxml_cluster_core_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_core); +if (surfxml_cluster_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_cluster_power_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_power); YY_BREAK case 265: /* rule 265 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_core_isset != 0) {FAIL("Multiple definition of attribute core in ");} surfxml_cluster_core_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_core); +if (surfxml_cluster_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_cluster_power_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_power); YY_BREAK case 266: /* rule 266 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_bw_isset != 0) {FAIL("Multiple definition of attribute bw in ");} surfxml_cluster_bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_bw); +if (surfxml_cluster_core_isset != 0) {FAIL("Multiple definition of attribute core in ");} surfxml_cluster_core_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_core); YY_BREAK case 267: /* rule 267 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_bw_isset != 0) {FAIL("Multiple definition of attribute bw in ");} surfxml_cluster_bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_bw); +if (surfxml_cluster_core_isset != 0) {FAIL("Multiple definition of attribute core in ");} surfxml_cluster_core_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_core); YY_BREAK case 268: /* rule 268 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_cluster_lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_lat); +if (surfxml_cluster_bw_isset != 0) {FAIL("Multiple definition of attribute bw in ");} surfxml_cluster_bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_bw); YY_BREAK case 269: /* rule 269 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_cluster_lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_lat); +if (surfxml_cluster_bw_isset != 0) {FAIL("Multiple definition of attribute bw in ");} surfxml_cluster_bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_bw); YY_BREAK case 270: /* rule 270 can match eol */ +YY_RULE_SETUP +if (surfxml_cluster_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_cluster_lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_lat); + YY_BREAK case 271: /* rule 271 can match eol */ YY_RULE_SETUP -A_surfxml_cluster_sharing___policy = A_surfxml_cluster_sharing___policy_SHARED; +if (surfxml_cluster_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_cluster_lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_lat); YY_BREAK case 272: /* rule 272 can match eol */ case 273: /* rule 273 can match eol */ YY_RULE_SETUP -A_surfxml_cluster_sharing___policy = A_surfxml_cluster_sharing___policy_FULLDUPLEX; +A_surfxml_cluster_sharing___policy = A_surfxml_cluster_sharing___policy_SHARED; YY_BREAK case 274: /* rule 274 can match eol */ case 275: /* rule 275 can match eol */ YY_RULE_SETUP -A_surfxml_cluster_sharing___policy = A_surfxml_cluster_sharing___policy_FATPIPE; +A_surfxml_cluster_sharing___policy = A_surfxml_cluster_sharing___policy_FULLDUPLEX; YY_BREAK case 276: /* rule 276 can match eol */ case 277: /* rule 277 can match eol */ YY_RULE_SETUP -A_surfxml_cluster_topology = A_surfxml_cluster_topology_FLAT; +A_surfxml_cluster_sharing___policy = A_surfxml_cluster_sharing___policy_FATPIPE; YY_BREAK case 278: /* rule 278 can match eol */ case 279: /* rule 279 can match eol */ YY_RULE_SETUP -A_surfxml_cluster_topology = A_surfxml_cluster_topology_TORUS; +A_surfxml_cluster_topology = A_surfxml_cluster_topology_FLAT; YY_BREAK case 280: /* rule 280 can match eol */ -YY_RULE_SETUP -if (surfxml_cluster_topo___parameters_isset != 0) {FAIL("Multiple definition of attribute topo_parameters in ");} surfxml_cluster_topo___parameters_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_topo___parameters); - YY_BREAK case 281: /* rule 281 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_topo___parameters_isset != 0) {FAIL("Multiple definition of attribute topo_parameters in ");} surfxml_cluster_topo___parameters_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_topo___parameters); +A_surfxml_cluster_topology = A_surfxml_cluster_topology_TORUS; YY_BREAK case 282: /* rule 282 can match eol */ -YY_RULE_SETUP -if (surfxml_cluster_bb___bw_isset != 0) {FAIL("Multiple definition of attribute bb_bw in ");} surfxml_cluster_bb___bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_bb___bw); - YY_BREAK case 283: /* rule 283 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_bb___bw_isset != 0) {FAIL("Multiple definition of attribute bb_bw in ");} surfxml_cluster_bb___bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_bb___bw); +A_surfxml_cluster_topology = A_surfxml_cluster_topology_FAT___TREE; YY_BREAK case 284: /* rule 284 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_bb___lat_isset != 0) {FAIL("Multiple definition of attribute bb_lat in ");} surfxml_cluster_bb___lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_bb___lat); +if (surfxml_cluster_topo___parameters_isset != 0) {FAIL("Multiple definition of attribute topo_parameters in ");} surfxml_cluster_topo___parameters_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_topo___parameters); YY_BREAK case 285: /* rule 285 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_bb___lat_isset != 0) {FAIL("Multiple definition of attribute bb_lat in ");} surfxml_cluster_bb___lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_bb___lat); +if (surfxml_cluster_topo___parameters_isset != 0) {FAIL("Multiple definition of attribute topo_parameters in ");} surfxml_cluster_topo___parameters_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_topo___parameters); YY_BREAK case 286: /* rule 286 can match eol */ +YY_RULE_SETUP +if (surfxml_cluster_bb___bw_isset != 0) {FAIL("Multiple definition of attribute bb_bw in ");} surfxml_cluster_bb___bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_bb___bw); + YY_BREAK case 287: /* rule 287 can match eol */ YY_RULE_SETUP -A_surfxml_cluster_bb___sharing___policy = A_surfxml_cluster_bb___sharing___policy_SHARED; +if (surfxml_cluster_bb___bw_isset != 0) {FAIL("Multiple definition of attribute bb_bw in ");} surfxml_cluster_bb___bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_bb___bw); YY_BREAK case 288: /* rule 288 can match eol */ +YY_RULE_SETUP +if (surfxml_cluster_bb___lat_isset != 0) {FAIL("Multiple definition of attribute bb_lat in ");} surfxml_cluster_bb___lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_bb___lat); + YY_BREAK case 289: /* rule 289 can match eol */ YY_RULE_SETUP -A_surfxml_cluster_bb___sharing___policy = A_surfxml_cluster_bb___sharing___policy_FATPIPE; +if (surfxml_cluster_bb___lat_isset != 0) {FAIL("Multiple definition of attribute bb_lat in ");} surfxml_cluster_bb___lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_bb___lat); YY_BREAK case 290: /* rule 290 can match eol */ -YY_RULE_SETUP -if (surfxml_cluster_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_cluster_availability___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_availability___file); - YY_BREAK case 291: /* rule 291 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_cluster_availability___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_availability___file); +A_surfxml_cluster_bb___sharing___policy = A_surfxml_cluster_bb___sharing___policy_SHARED; YY_BREAK case 292: /* rule 292 can match eol */ -YY_RULE_SETUP -if (surfxml_cluster_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_cluster_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_state___file); - YY_BREAK case 293: /* rule 293 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_cluster_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_state___file); +A_surfxml_cluster_bb___sharing___policy = A_surfxml_cluster_bb___sharing___policy_FATPIPE; YY_BREAK case 294: /* rule 294 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_router___id_isset != 0) {FAIL("Multiple definition of attribute router_id in ");} surfxml_cluster_router___id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_router___id); +if (surfxml_cluster_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_cluster_availability___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_availability___file); YY_BREAK case 295: /* rule 295 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_router___id_isset != 0) {FAIL("Multiple definition of attribute router_id in ");} surfxml_cluster_router___id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_router___id); +if (surfxml_cluster_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_cluster_availability___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_availability___file); YY_BREAK case 296: /* rule 296 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_limiter___link_isset != 0) {FAIL("Multiple definition of attribute limiter_link in ");} surfxml_cluster_limiter___link_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_limiter___link); +if (surfxml_cluster_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_cluster_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_state___file); YY_BREAK case 297: /* rule 297 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_limiter___link_isset != 0) {FAIL("Multiple definition of attribute limiter_link in ");} surfxml_cluster_limiter___link_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_limiter___link); +if (surfxml_cluster_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_cluster_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_state___file); YY_BREAK case 298: /* rule 298 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_loopback___bw_isset != 0) {FAIL("Multiple definition of attribute loopback_bw in ");} surfxml_cluster_loopback___bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_loopback___bw); +if (surfxml_cluster_router___id_isset != 0) {FAIL("Multiple definition of attribute router_id in ");} surfxml_cluster_router___id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_router___id); YY_BREAK case 299: /* rule 299 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_loopback___bw_isset != 0) {FAIL("Multiple definition of attribute loopback_bw in ");} surfxml_cluster_loopback___bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_loopback___bw); +if (surfxml_cluster_router___id_isset != 0) {FAIL("Multiple definition of attribute router_id in ");} surfxml_cluster_router___id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_router___id); YY_BREAK case 300: /* rule 300 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_loopback___lat_isset != 0) {FAIL("Multiple definition of attribute loopback_lat in ");} surfxml_cluster_loopback___lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_loopback___lat); +if (surfxml_cluster_limiter___link_isset != 0) {FAIL("Multiple definition of attribute limiter_link in ");} surfxml_cluster_limiter___link_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_limiter___link); YY_BREAK case 301: /* rule 301 can match eol */ YY_RULE_SETUP -if (surfxml_cluster_loopback___lat_isset != 0) {FAIL("Multiple definition of attribute loopback_lat in ");} surfxml_cluster_loopback___lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_loopback___lat); +if (surfxml_cluster_limiter___link_isset != 0) {FAIL("Multiple definition of attribute limiter_link in ");} surfxml_cluster_limiter___link_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_limiter___link); YY_BREAK case 302: +/* rule 302 can match eol */ +YY_RULE_SETUP +if (surfxml_cluster_loopback___bw_isset != 0) {FAIL("Multiple definition of attribute loopback_bw in ");} surfxml_cluster_loopback___bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_loopback___bw); + YY_BREAK +case 303: +/* rule 303 can match eol */ +YY_RULE_SETUP +if (surfxml_cluster_loopback___bw_isset != 0) {FAIL("Multiple definition of attribute loopback_bw in ");} surfxml_cluster_loopback___bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_loopback___bw); + YY_BREAK +case 304: +/* rule 304 can match eol */ +YY_RULE_SETUP +if (surfxml_cluster_loopback___lat_isset != 0) {FAIL("Multiple definition of attribute loopback_lat in ");} surfxml_cluster_loopback___lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cluster_loopback___lat); + YY_BREAK +case 305: +/* rule 305 can match eol */ +YY_RULE_SETUP +if (surfxml_cluster_loopback___lat_isset != 0) {FAIL("Multiple definition of attribute loopback_lat in ");} surfxml_cluster_loopback___lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cluster_loopback___lat); + YY_BREAK +case 306: YY_RULE_SETUP { if (!AX_surfxml_cluster_id) FAIL("Required attribute `id' not set for `cluster' element."); @@ -7719,7 +7726,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_cluster();surfxml_pcdata_ix = 0; ENTER(S_surfxml_cluster); } YY_BREAK -case 303: +case 307: YY_RULE_SETUP { if (!AX_surfxml_cluster_id) FAIL("Required attribute `id' not set for `cluster' element."); @@ -7731,17 +7738,17 @@ YY_RULE_SETUP if (!AX_surfxml_cluster_lat) FAIL("Required attribute `lat' not set for `cluster' element."); LEAVE; STag_surfxml_cluster(); surfxml_pcdata_ix = 0; ETag_surfxml_cluster(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; - case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break; - case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break; + case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; + case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break; + case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform: SET(S_surfxml_platform_6); break; } } YY_BREAK -case 304: +case 308: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of cluster element.", surf_parse_text[0]); YY_BREAK -case 305: +case 309: YY_RULE_SETUP FAIL("Bad attribute `%s' in `cluster' element start tag.",surf_parse_text); YY_BREAK @@ -7749,42 +7756,42 @@ case YY_STATE_EOF(AL_surfxml_cluster): FAIL("EOF in attribute list of `cluster' element."); YY_BREAK -case 306: -/* rule 306 can match eol */ +case 310: +/* rule 310 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_cluster(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_include: case S_surfxml_include_2: case S_surfxml_include_1: SET(S_surfxml_include_2); break; - case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: SET(S_surfxml_AS_6); break; - case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break; + case S_surfxml_AS_3: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; + case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break; + case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_3: case S_surfxml_platform_5: case S_surfxml_platform: SET(S_surfxml_platform_6); break; } } YY_BREAK -case 307: -/* rule 307 can match eol */ +case 311: +/* rule 311 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 308: +case 312: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_cluster): -case YY_STATE_EOF(S_surfxml_cluster_2): case YY_STATE_EOF(E_surfxml_cluster): +case YY_STATE_EOF(S_surfxml_cluster_2): +case YY_STATE_EOF(S_surfxml_cluster): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 309: -/* rule 309 can match eol */ +case 313: +/* rule 313 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 310: -/* rule 310 can match eol */ +case 314: +/* rule 314 can match eol */ YY_RULE_SETUP { AX_surfxml_cabinet_id = 0; @@ -7805,77 +7812,77 @@ YY_RULE_SETUP } YY_BREAK -case 311: -/* rule 311 can match eol */ +case 315: +/* rule 315 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_cabinet_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_id); YY_BREAK -case 312: -/* rule 312 can match eol */ +case 316: +/* rule 316 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_cabinet_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_id); YY_BREAK -case 313: -/* rule 313 can match eol */ +case 317: +/* rule 317 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in ");} surfxml_cabinet_prefix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_prefix); YY_BREAK -case 314: -/* rule 314 can match eol */ +case 318: +/* rule 318 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_prefix_isset != 0) {FAIL("Multiple definition of attribute prefix in ");} surfxml_cabinet_prefix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_prefix); YY_BREAK -case 315: -/* rule 315 can match eol */ +case 319: +/* rule 319 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in ");} surfxml_cabinet_suffix_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_suffix); YY_BREAK -case 316: -/* rule 316 can match eol */ +case 320: +/* rule 320 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_suffix_isset != 0) {FAIL("Multiple definition of attribute suffix in ");} surfxml_cabinet_suffix_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_suffix); YY_BREAK -case 317: -/* rule 317 can match eol */ +case 321: +/* rule 321 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_radical_isset != 0) {FAIL("Multiple definition of attribute radical in ");} surfxml_cabinet_radical_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_radical); YY_BREAK -case 318: -/* rule 318 can match eol */ +case 322: +/* rule 322 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_radical_isset != 0) {FAIL("Multiple definition of attribute radical in ");} surfxml_cabinet_radical_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_radical); YY_BREAK -case 319: -/* rule 319 can match eol */ +case 323: +/* rule 323 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_cabinet_power_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_power); YY_BREAK -case 320: -/* rule 320 can match eol */ +case 324: +/* rule 324 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_cabinet_power_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_power); YY_BREAK -case 321: -/* rule 321 can match eol */ +case 325: +/* rule 325 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_bw_isset != 0) {FAIL("Multiple definition of attribute bw in ");} surfxml_cabinet_bw_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_bw); YY_BREAK -case 322: -/* rule 322 can match eol */ +case 326: +/* rule 326 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_bw_isset != 0) {FAIL("Multiple definition of attribute bw in ");} surfxml_cabinet_bw_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_bw); YY_BREAK -case 323: -/* rule 323 can match eol */ +case 327: +/* rule 327 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_cabinet_lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_cabinet_lat); YY_BREAK -case 324: -/* rule 324 can match eol */ +case 328: +/* rule 328 can match eol */ YY_RULE_SETUP if (surfxml_cabinet_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_cabinet_lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_cabinet_lat); YY_BREAK -case 325: +case 329: YY_RULE_SETUP { if (!AX_surfxml_cabinet_id) FAIL("Required attribute `id' not set for `cabinet' element."); @@ -7888,7 +7895,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_cabinet();surfxml_pcdata_ix = 0; ENTER(E_surfxml_cabinet); } YY_BREAK -case 326: +case 330: YY_RULE_SETUP { if (!AX_surfxml_cabinet_id) FAIL("Required attribute `id' not set for `cabinet' element."); @@ -7900,18 +7907,18 @@ YY_RULE_SETUP if (!AX_surfxml_cabinet_lat) FAIL("Required attribute `lat' not set for `cabinet' element."); LEAVE; STag_surfxml_cabinet(); surfxml_pcdata_ix = 0; ETag_surfxml_cabinet(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break; - case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break; - case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; - case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break; + case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break; + case S_surfxml_platform_6: case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break; + case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; + case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break; } } YY_BREAK -case 327: +case 331: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of cabinet element.", surf_parse_text[0]); YY_BREAK -case 328: +case 332: YY_RULE_SETUP FAIL("Bad attribute `%s' in `cabinet' element start tag.",surf_parse_text); YY_BREAK @@ -7919,27 +7926,27 @@ case YY_STATE_EOF(AL_surfxml_cabinet): FAIL("EOF in attribute list of `cabinet' element."); YY_BREAK -case 329: -/* rule 329 can match eol */ +case 333: +/* rule 333 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_cabinet(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: SET(S_surfxml_AS_14); break; - case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_5: SET(S_surfxml_platform_6); break; - case S_surfxml_AS_6: case S_surfxml_AS_5: SET(S_surfxml_AS_6); break; - case S_surfxml_include: case S_surfxml_include_1: case S_surfxml_include_2: SET(S_surfxml_include_2); break; + case S_surfxml_AS_13: case S_surfxml_AS_14: case S_surfxml_AS: SET(S_surfxml_AS_14); break; + case S_surfxml_platform_6: case S_surfxml_platform_1: case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break; + case S_surfxml_AS_3: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; + case S_surfxml_include_1: case S_surfxml_include_2: case S_surfxml_include: SET(S_surfxml_include_2); break; } } YY_BREAK -case 330: -/* rule 330 can match eol */ +case 334: +/* rule 334 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 331: +case 335: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -7947,13 +7954,13 @@ case YY_STATE_EOF(E_surfxml_cabinet): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 332: -/* rule 332 can match eol */ +case 336: +/* rule 336 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 333: -/* rule 333 can match eol */ +case 337: +/* rule 337 can match eol */ YY_RULE_SETUP { AX_surfxml_peer_id = 0; @@ -7976,87 +7983,87 @@ YY_RULE_SETUP } YY_BREAK -case 334: -/* rule 334 can match eol */ -YY_RULE_SETUP -if (surfxml_peer_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_peer_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_id); - YY_BREAK -case 335: -/* rule 335 can match eol */ -YY_RULE_SETUP -if (surfxml_peer_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_peer_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_id); - YY_BREAK -case 336: -/* rule 336 can match eol */ -YY_RULE_SETUP -if (surfxml_peer_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_peer_power_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_power); - YY_BREAK -case 337: -/* rule 337 can match eol */ -YY_RULE_SETUP -if (surfxml_peer_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_peer_power_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_power); - YY_BREAK case 338: /* rule 338 can match eol */ YY_RULE_SETUP -if (surfxml_peer_bw___in_isset != 0) {FAIL("Multiple definition of attribute bw_in in ");} surfxml_peer_bw___in_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_bw___in); +if (surfxml_peer_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_peer_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_id); YY_BREAK case 339: /* rule 339 can match eol */ YY_RULE_SETUP -if (surfxml_peer_bw___in_isset != 0) {FAIL("Multiple definition of attribute bw_in in ");} surfxml_peer_bw___in_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_bw___in); +if (surfxml_peer_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_peer_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_id); YY_BREAK case 340: /* rule 340 can match eol */ YY_RULE_SETUP -if (surfxml_peer_bw___out_isset != 0) {FAIL("Multiple definition of attribute bw_out in ");} surfxml_peer_bw___out_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_bw___out); +if (surfxml_peer_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_peer_power_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_power); YY_BREAK case 341: /* rule 341 can match eol */ YY_RULE_SETUP -if (surfxml_peer_bw___out_isset != 0) {FAIL("Multiple definition of attribute bw_out in ");} surfxml_peer_bw___out_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_bw___out); +if (surfxml_peer_power_isset != 0) {FAIL("Multiple definition of attribute power in ");} surfxml_peer_power_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_power); YY_BREAK case 342: /* rule 342 can match eol */ YY_RULE_SETUP -if (surfxml_peer_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_peer_lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_lat); +if (surfxml_peer_bw___in_isset != 0) {FAIL("Multiple definition of attribute bw_in in ");} surfxml_peer_bw___in_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_bw___in); YY_BREAK case 343: /* rule 343 can match eol */ YY_RULE_SETUP -if (surfxml_peer_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_peer_lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_lat); +if (surfxml_peer_bw___in_isset != 0) {FAIL("Multiple definition of attribute bw_in in ");} surfxml_peer_bw___in_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_bw___in); YY_BREAK case 344: /* rule 344 can match eol */ YY_RULE_SETUP -if (surfxml_peer_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_peer_coordinates_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_coordinates); +if (surfxml_peer_bw___out_isset != 0) {FAIL("Multiple definition of attribute bw_out in ");} surfxml_peer_bw___out_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_bw___out); YY_BREAK case 345: /* rule 345 can match eol */ YY_RULE_SETUP -if (surfxml_peer_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_peer_coordinates_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_coordinates); +if (surfxml_peer_bw___out_isset != 0) {FAIL("Multiple definition of attribute bw_out in ");} surfxml_peer_bw___out_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_bw___out); YY_BREAK case 346: /* rule 346 can match eol */ YY_RULE_SETUP -if (surfxml_peer_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_peer_availability___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_availability___file); +if (surfxml_peer_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_peer_lat_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_lat); YY_BREAK case 347: /* rule 347 can match eol */ YY_RULE_SETUP -if (surfxml_peer_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_peer_availability___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_availability___file); +if (surfxml_peer_lat_isset != 0) {FAIL("Multiple definition of attribute lat in ");} surfxml_peer_lat_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_lat); YY_BREAK case 348: /* rule 348 can match eol */ YY_RULE_SETUP -if (surfxml_peer_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_peer_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_state___file); +if (surfxml_peer_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_peer_coordinates_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_coordinates); YY_BREAK case 349: /* rule 349 can match eol */ YY_RULE_SETUP -if (surfxml_peer_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_peer_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_state___file); +if (surfxml_peer_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_peer_coordinates_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_coordinates); YY_BREAK case 350: +/* rule 350 can match eol */ +YY_RULE_SETUP +if (surfxml_peer_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_peer_availability___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_availability___file); + YY_BREAK +case 351: +/* rule 351 can match eol */ +YY_RULE_SETUP +if (surfxml_peer_availability___file_isset != 0) {FAIL("Multiple definition of attribute availability_file in ");} surfxml_peer_availability___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_availability___file); + YY_BREAK +case 352: +/* rule 352 can match eol */ +YY_RULE_SETUP +if (surfxml_peer_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_peer_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_peer_state___file); + YY_BREAK +case 353: +/* rule 353 can match eol */ +YY_RULE_SETUP +if (surfxml_peer_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_peer_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_peer_state___file); + YY_BREAK +case 354: YY_RULE_SETUP { if (!AX_surfxml_peer_id) FAIL("Required attribute `id' not set for `peer' element."); @@ -8067,7 +8074,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_peer();surfxml_pcdata_ix = 0; ENTER(E_surfxml_peer); } YY_BREAK -case 351: +case 355: YY_RULE_SETUP { if (!AX_surfxml_peer_id) FAIL("Required attribute `id' not set for `peer' element."); @@ -8077,17 +8084,17 @@ YY_RULE_SETUP if (!AX_surfxml_peer_lat) FAIL("Required attribute `lat' not set for `peer' element."); LEAVE; STag_surfxml_peer(); surfxml_pcdata_ix = 0; ETag_surfxml_peer(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; - case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break; - case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; + case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break; + case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; + case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break; } } YY_BREAK -case 352: +case 356: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of peer element.", surf_parse_text[0]); YY_BREAK -case 353: +case 357: YY_RULE_SETUP FAIL("Bad attribute `%s' in `peer' element start tag.",surf_parse_text); YY_BREAK @@ -8095,26 +8102,26 @@ case YY_STATE_EOF(AL_surfxml_peer): FAIL("EOF in attribute list of `peer' element."); YY_BREAK -case 354: -/* rule 354 can match eol */ +case 358: +/* rule 358 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_peer(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform: case S_surfxml_platform_5: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: SET(S_surfxml_platform_6); break; - case S_surfxml_include_2: case S_surfxml_include_1: case S_surfxml_include: SET(S_surfxml_include_2); break; - case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; + case S_surfxml_include_1: case S_surfxml_include: case S_surfxml_include_2: SET(S_surfxml_include_2); break; + case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_5: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; + case S_surfxml_platform_1: case S_surfxml_platform_6: case S_surfxml_platform_5: case S_surfxml_platform: case S_surfxml_platform_3: SET(S_surfxml_platform_6); break; } } YY_BREAK -case 355: -/* rule 355 can match eol */ +case 359: +/* rule 359 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 356: +case 360: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -8122,13 +8129,13 @@ case YY_STATE_EOF(E_surfxml_peer): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 357: -/* rule 357 can match eol */ +case 361: +/* rule 361 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 358: -/* rule 358 can match eol */ +case 362: +/* rule 362 can match eol */ YY_RULE_SETUP { AX_surfxml_router_id = 0; @@ -8139,48 +8146,48 @@ YY_RULE_SETUP } YY_BREAK -case 359: -/* rule 359 can match eol */ +case 363: +/* rule 363 can match eol */ YY_RULE_SETUP if (surfxml_router_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_router_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_router_id); YY_BREAK -case 360: -/* rule 360 can match eol */ +case 364: +/* rule 364 can match eol */ YY_RULE_SETUP if (surfxml_router_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_router_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_router_id); YY_BREAK -case 361: -/* rule 361 can match eol */ +case 365: +/* rule 365 can match eol */ YY_RULE_SETUP if (surfxml_router_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_router_coordinates_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_router_coordinates); YY_BREAK -case 362: -/* rule 362 can match eol */ +case 366: +/* rule 366 can match eol */ YY_RULE_SETUP if (surfxml_router_coordinates_isset != 0) {FAIL("Multiple definition of attribute coordinates in ");} surfxml_router_coordinates_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_router_coordinates); YY_BREAK -case 363: +case 367: YY_RULE_SETUP { if (!AX_surfxml_router_id) FAIL("Required attribute `id' not set for `router' element."); LEAVE; STag_surfxml_router();surfxml_pcdata_ix = 0; ENTER(E_surfxml_router); } YY_BREAK -case 364: +case 368: 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; ETag_surfxml_router(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 365: +case 369: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of router element.", surf_parse_text[0]); YY_BREAK -case 366: +case 370: YY_RULE_SETUP FAIL("Bad attribute `%s' in `router' element start tag.",surf_parse_text); YY_BREAK @@ -8188,24 +8195,24 @@ case YY_STATE_EOF(AL_surfxml_router): FAIL("EOF in attribute list of `router' element."); YY_BREAK -case 367: -/* rule 367 can match eol */ +case 371: +/* rule 371 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_router(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_14: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_14: case S_surfxml_AS_13: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_14); break; } } YY_BREAK -case 368: -/* rule 368 can match eol */ +case 372: +/* rule 372 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 369: +case 373: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -8213,13 +8220,13 @@ case YY_STATE_EOF(E_surfxml_router): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 370: -/* rule 370 can match eol */ +case 374: +/* rule 374 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 371: -/* rule 371 can match eol */ +case 375: +/* rule 375 can match eol */ YY_RULE_SETUP { AX_surfxml_backbone_id = 0; @@ -8232,37 +8239,37 @@ YY_RULE_SETUP } YY_BREAK -case 372: -/* rule 372 can match eol */ +case 376: +/* rule 376 can match eol */ YY_RULE_SETUP if (surfxml_backbone_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_backbone_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_backbone_id); YY_BREAK -case 373: -/* rule 373 can match eol */ +case 377: +/* rule 377 can match eol */ YY_RULE_SETUP if (surfxml_backbone_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_backbone_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_backbone_id); YY_BREAK -case 374: -/* rule 374 can match eol */ +case 378: +/* rule 378 can match eol */ YY_RULE_SETUP if (surfxml_backbone_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in ");} surfxml_backbone_bandwidth_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_backbone_bandwidth); YY_BREAK -case 375: -/* rule 375 can match eol */ +case 379: +/* rule 379 can match eol */ YY_RULE_SETUP if (surfxml_backbone_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in ");} surfxml_backbone_bandwidth_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_backbone_bandwidth); YY_BREAK -case 376: -/* rule 376 can match eol */ +case 380: +/* rule 380 can match eol */ YY_RULE_SETUP if (surfxml_backbone_latency_isset != 0) {FAIL("Multiple definition of attribute latency in ");} surfxml_backbone_latency_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_backbone_latency); YY_BREAK -case 377: -/* rule 377 can match eol */ +case 381: +/* rule 381 can match eol */ YY_RULE_SETUP if (surfxml_backbone_latency_isset != 0) {FAIL("Multiple definition of attribute latency in ");} surfxml_backbone_latency_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_backbone_latency); YY_BREAK -case 378: +case 382: YY_RULE_SETUP { if (!AX_surfxml_backbone_id) FAIL("Required attribute `id' not set for `backbone' element."); @@ -8271,7 +8278,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_backbone();surfxml_pcdata_ix = 0; ENTER(E_surfxml_backbone); } YY_BREAK -case 379: +case 383: YY_RULE_SETUP { if (!AX_surfxml_backbone_id) FAIL("Required attribute `id' not set for `backbone' element."); @@ -8279,16 +8286,16 @@ 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; ETag_surfxml_backbone(); popbuffer(); /* attribute */ switch (YY_START) { - 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: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; } } YY_BREAK -case 380: +case 384: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of backbone element.", surf_parse_text[0]); YY_BREAK -case 381: +case 385: YY_RULE_SETUP FAIL("Bad attribute `%s' in `backbone' element start tag.",surf_parse_text); YY_BREAK @@ -8296,25 +8303,25 @@ case YY_STATE_EOF(AL_surfxml_backbone): FAIL("EOF in attribute list of `backbone' element."); YY_BREAK -case 382: -/* rule 382 can match eol */ +case 386: +/* rule 386 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_backbone(); popbuffer(); /* attribute */ switch (YY_START) { - 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: case S_surfxml_AS_3: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS: case S_surfxml_AS_13: case S_surfxml_AS_14: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_5: case S_surfxml_AS_6: case S_surfxml_AS_1: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; } } YY_BREAK -case 383: -/* rule 383 can match eol */ +case 387: +/* rule 387 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 384: +case 388: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -8322,13 +8329,13 @@ case YY_STATE_EOF(E_surfxml_backbone): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 385: -/* rule 385 can match eol */ +case 389: +/* rule 389 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 386: -/* rule 386 can match eol */ +case 390: +/* rule 390 can match eol */ YY_RULE_SETUP { AX_surfxml_link_id = 0; @@ -8351,102 +8358,102 @@ YY_RULE_SETUP } YY_BREAK -case 387: -/* rule 387 can match eol */ -YY_RULE_SETUP -if (surfxml_link_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_link_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_id); - YY_BREAK -case 388: -/* rule 388 can match eol */ -YY_RULE_SETUP -if (surfxml_link_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_link_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_id); - YY_BREAK -case 389: -/* rule 389 can match eol */ -YY_RULE_SETUP -if (surfxml_link_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in ");} surfxml_link_bandwidth_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_bandwidth); - YY_BREAK -case 390: -/* rule 390 can match eol */ -YY_RULE_SETUP -if (surfxml_link_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in ");} surfxml_link_bandwidth_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_bandwidth); - YY_BREAK case 391: /* rule 391 can match eol */ YY_RULE_SETUP -if (surfxml_link_bandwidth___file_isset != 0) {FAIL("Multiple definition of attribute bandwidth_file in ");} surfxml_link_bandwidth___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_bandwidth___file); +if (surfxml_link_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_link_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_id); YY_BREAK case 392: /* rule 392 can match eol */ YY_RULE_SETUP -if (surfxml_link_bandwidth___file_isset != 0) {FAIL("Multiple definition of attribute bandwidth_file in ");} surfxml_link_bandwidth___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_bandwidth___file); +if (surfxml_link_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_link_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_id); YY_BREAK case 393: /* rule 393 can match eol */ YY_RULE_SETUP -if (surfxml_link_latency_isset != 0) {FAIL("Multiple definition of attribute latency in ");} surfxml_link_latency_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_latency); +if (surfxml_link_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in ");} surfxml_link_bandwidth_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_bandwidth); YY_BREAK case 394: /* rule 394 can match eol */ YY_RULE_SETUP -if (surfxml_link_latency_isset != 0) {FAIL("Multiple definition of attribute latency in ");} surfxml_link_latency_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_latency); +if (surfxml_link_bandwidth_isset != 0) {FAIL("Multiple definition of attribute bandwidth in ");} surfxml_link_bandwidth_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_bandwidth); YY_BREAK case 395: /* rule 395 can match eol */ YY_RULE_SETUP -if (surfxml_link_latency___file_isset != 0) {FAIL("Multiple definition of attribute latency_file in ");} surfxml_link_latency___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_latency___file); +if (surfxml_link_bandwidth___file_isset != 0) {FAIL("Multiple definition of attribute bandwidth_file in ");} surfxml_link_bandwidth___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_bandwidth___file); YY_BREAK case 396: /* rule 396 can match eol */ YY_RULE_SETUP -if (surfxml_link_latency___file_isset != 0) {FAIL("Multiple definition of attribute latency_file in ");} surfxml_link_latency___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_latency___file); +if (surfxml_link_bandwidth___file_isset != 0) {FAIL("Multiple definition of attribute bandwidth_file in ");} surfxml_link_bandwidth___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_bandwidth___file); YY_BREAK case 397: /* rule 397 can match eol */ +YY_RULE_SETUP +if (surfxml_link_latency_isset != 0) {FAIL("Multiple definition of attribute latency in ");} surfxml_link_latency_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_latency); + YY_BREAK case 398: /* rule 398 can match eol */ YY_RULE_SETUP -A_surfxml_link_state = A_surfxml_link_state_ON; +if (surfxml_link_latency_isset != 0) {FAIL("Multiple definition of attribute latency in ");} surfxml_link_latency_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_latency); YY_BREAK case 399: /* rule 399 can match eol */ +YY_RULE_SETUP +if (surfxml_link_latency___file_isset != 0) {FAIL("Multiple definition of attribute latency_file in ");} surfxml_link_latency___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_latency___file); + YY_BREAK case 400: /* rule 400 can match eol */ YY_RULE_SETUP -A_surfxml_link_state = A_surfxml_link_state_OFF; +if (surfxml_link_latency___file_isset != 0) {FAIL("Multiple definition of attribute latency_file in ");} surfxml_link_latency___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_latency___file); YY_BREAK case 401: /* rule 401 can match eol */ -YY_RULE_SETUP -if (surfxml_link_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_link_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_state___file); - YY_BREAK case 402: /* rule 402 can match eol */ YY_RULE_SETUP -if (surfxml_link_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_link_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_state___file); +A_surfxml_link_state = A_surfxml_link_state_ON; YY_BREAK case 403: /* rule 403 can match eol */ case 404: /* rule 404 can match eol */ YY_RULE_SETUP -A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_SHARED; +A_surfxml_link_state = A_surfxml_link_state_OFF; YY_BREAK case 405: /* rule 405 can match eol */ +YY_RULE_SETUP +if (surfxml_link_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_link_state___file_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link_state___file); + YY_BREAK case 406: /* rule 406 can match eol */ YY_RULE_SETUP -A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_FATPIPE; +if (surfxml_link_state___file_isset != 0) {FAIL("Multiple definition of attribute state_file in ");} surfxml_link_state___file_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link_state___file); YY_BREAK case 407: /* rule 407 can match eol */ case 408: /* rule 408 can match eol */ YY_RULE_SETUP +A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_SHARED; + YY_BREAK +case 409: +/* rule 409 can match eol */ +case 410: +/* rule 410 can match eol */ +YY_RULE_SETUP +A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_FATPIPE; + YY_BREAK +case 411: +/* rule 411 can match eol */ +case 412: +/* rule 412 can match eol */ +YY_RULE_SETUP A_surfxml_link_sharing___policy = A_surfxml_link_sharing___policy_FULLDUPLEX; YY_BREAK -case 409: +case 413: YY_RULE_SETUP { if (!AX_surfxml_link_id) FAIL("Required attribute `id' not set for `link' element."); @@ -8454,23 +8461,23 @@ YY_RULE_SETUP LEAVE; STag_surfxml_link();surfxml_pcdata_ix = 0; ENTER(S_surfxml_link); } YY_BREAK -case 410: +case 414: YY_RULE_SETUP { if (!AX_surfxml_link_id) FAIL("Required attribute `id' not set for `link' element."); if (!AX_surfxml_link_bandwidth) FAIL("Required attribute `bandwidth' not set for `link' element."); LEAVE; STag_surfxml_link(); surfxml_pcdata_ix = 0; ETag_surfxml_link(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; - case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; + case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; } } YY_BREAK -case 411: +case 415: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of link element.", surf_parse_text[0]); YY_BREAK -case 412: +case 416: YY_RULE_SETUP FAIL("Bad attribute `%s' in `link' element start tag.",surf_parse_text); YY_BREAK @@ -8478,25 +8485,25 @@ case YY_STATE_EOF(AL_surfxml_link): FAIL("EOF in attribute list of `link' element."); YY_BREAK -case 413: -/* rule 413 can match eol */ +case 417: +/* rule 417 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_link(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; - case S_surfxml_AS_5: case S_surfxml_AS_6: SET(S_surfxml_AS_6); break; + case S_surfxml_AS: case S_surfxml_AS_14: case S_surfxml_AS_13: SET(S_surfxml_AS_14); break; + case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_5: case S_surfxml_AS_3: SET(S_surfxml_AS_6); break; } } YY_BREAK -case 414: -/* rule 414 can match eol */ +case 418: +/* rule 418 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 415: +case 419: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -8506,13 +8513,13 @@ case YY_STATE_EOF(E_surfxml_link): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 416: -/* rule 416 can match eol */ +case 420: +/* rule 420 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 417: -/* rule 417 can match eol */ +case 421: +/* rule 421 can match eol */ YY_RULE_SETUP { AX_surfxml_route_src = 0; @@ -8525,41 +8532,41 @@ YY_RULE_SETUP } YY_BREAK -case 418: -/* rule 418 can match eol */ +case 422: +/* rule 422 can match eol */ YY_RULE_SETUP if (surfxml_route_src_isset != 0) {FAIL("Multiple definition of attribute src in ");} surfxml_route_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_route_src); YY_BREAK -case 419: -/* rule 419 can match eol */ +case 423: +/* rule 423 can match eol */ YY_RULE_SETUP if (surfxml_route_src_isset != 0) {FAIL("Multiple definition of attribute src in ");} surfxml_route_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_route_src); YY_BREAK -case 420: -/* rule 420 can match eol */ +case 424: +/* rule 424 can match eol */ YY_RULE_SETUP if (surfxml_route_dst_isset != 0) {FAIL("Multiple definition of attribute dst in ");} surfxml_route_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_route_dst); YY_BREAK -case 421: -/* rule 421 can match eol */ +case 425: +/* rule 425 can match eol */ YY_RULE_SETUP if (surfxml_route_dst_isset != 0) {FAIL("Multiple definition of attribute dst in ");} surfxml_route_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_route_dst); YY_BREAK -case 422: -/* rule 422 can match eol */ -case 423: -/* rule 423 can match eol */ +case 426: +/* rule 426 can match eol */ +case 427: +/* rule 427 can match eol */ YY_RULE_SETUP A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_YES; YY_BREAK -case 424: -/* rule 424 can match eol */ -case 425: -/* rule 425 can match eol */ +case 428: +/* rule 428 can match eol */ +case 429: +/* rule 429 can match eol */ YY_RULE_SETUP A_surfxml_route_symmetrical = A_surfxml_route_symmetrical_NO; YY_BREAK -case 426: +case 430: YY_RULE_SETUP { if (!AX_surfxml_route_src) FAIL("Required attribute `src' not set for `route' element."); @@ -8567,22 +8574,22 @@ YY_RULE_SETUP LEAVE; STag_surfxml_route();surfxml_pcdata_ix = 0; ENTER(S_surfxml_route); } YY_BREAK -case 427: +case 431: YY_RULE_SETUP { if (!AX_surfxml_route_src) FAIL("Required attribute `src' not set for `route' element."); if (!AX_surfxml_route_dst) FAIL("Required attribute `dst' not set for `route' element."); LEAVE; STag_surfxml_route(); surfxml_pcdata_ix = 0; ETag_surfxml_route(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_16: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break; + case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS_15: case S_surfxml_AS_1: case S_surfxml_AS_16: case S_surfxml_AS: SET(S_surfxml_AS_16); break; } } YY_BREAK -case 428: +case 432: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of route element.", surf_parse_text[0]); YY_BREAK -case 429: +case 433: YY_RULE_SETUP FAIL("Bad attribute `%s' in `route' element start tag.",surf_parse_text); YY_BREAK @@ -8590,40 +8597,40 @@ case YY_STATE_EOF(AL_surfxml_route): FAIL("EOF in attribute list of `route' element."); YY_BREAK -case 430: -/* rule 430 can match eol */ +case 434: +/* rule 434 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_route(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_16: case S_surfxml_AS_3: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_15: SET(S_surfxml_AS_16); break; + case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_3: case S_surfxml_AS_15: case S_surfxml_AS_1: case S_surfxml_AS_16: case S_surfxml_AS: SET(S_surfxml_AS_16); break; } } YY_BREAK -case 431: -/* rule 431 can match eol */ +case 435: +/* rule 435 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 432: +case 436: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK +case YY_STATE_EOF(S_surfxml_route_2): case YY_STATE_EOF(S_surfxml_route): case YY_STATE_EOF(E_surfxml_route): -case YY_STATE_EOF(S_surfxml_route_2): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 433: -/* rule 433 can match eol */ +case 437: +/* rule 437 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 434: -/* rule 434 can match eol */ +case 438: +/* rule 438 can match eol */ YY_RULE_SETUP { AX_surfxml_ASroute_src = 0; @@ -8640,61 +8647,61 @@ YY_RULE_SETUP } YY_BREAK -case 435: -/* rule 435 can match eol */ +case 439: +/* rule 439 can match eol */ YY_RULE_SETUP if (surfxml_ASroute_src_isset != 0) {FAIL("Multiple definition of attribute src in ");} surfxml_ASroute_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_ASroute_src); YY_BREAK -case 436: -/* rule 436 can match eol */ +case 440: +/* rule 440 can match eol */ YY_RULE_SETUP if (surfxml_ASroute_src_isset != 0) {FAIL("Multiple definition of attribute src in ");} surfxml_ASroute_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_ASroute_src); YY_BREAK -case 437: -/* rule 437 can match eol */ +case 441: +/* rule 441 can match eol */ YY_RULE_SETUP if (surfxml_ASroute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in ");} surfxml_ASroute_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_ASroute_dst); YY_BREAK -case 438: -/* rule 438 can match eol */ +case 442: +/* rule 442 can match eol */ YY_RULE_SETUP if (surfxml_ASroute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in ");} surfxml_ASroute_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_ASroute_dst); YY_BREAK -case 439: -/* rule 439 can match eol */ +case 443: +/* rule 443 can match eol */ YY_RULE_SETUP if (surfxml_ASroute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in ");} surfxml_ASroute_gw___src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_ASroute_gw___src); YY_BREAK -case 440: -/* rule 440 can match eol */ +case 444: +/* rule 444 can match eol */ YY_RULE_SETUP if (surfxml_ASroute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in ");} surfxml_ASroute_gw___src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_ASroute_gw___src); YY_BREAK -case 441: -/* rule 441 can match eol */ +case 445: +/* rule 445 can match eol */ YY_RULE_SETUP if (surfxml_ASroute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in ");} surfxml_ASroute_gw___dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_ASroute_gw___dst); YY_BREAK -case 442: -/* rule 442 can match eol */ +case 446: +/* rule 446 can match eol */ YY_RULE_SETUP if (surfxml_ASroute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in ");} surfxml_ASroute_gw___dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_ASroute_gw___dst); YY_BREAK -case 443: -/* rule 443 can match eol */ -case 444: -/* rule 444 can match eol */ +case 447: +/* rule 447 can match eol */ +case 448: +/* rule 448 can match eol */ YY_RULE_SETUP A_surfxml_ASroute_symmetrical = A_surfxml_ASroute_symmetrical_YES; YY_BREAK -case 445: -/* rule 445 can match eol */ -case 446: -/* rule 446 can match eol */ +case 449: +/* rule 449 can match eol */ +case 450: +/* rule 450 can match eol */ YY_RULE_SETUP A_surfxml_ASroute_symmetrical = A_surfxml_ASroute_symmetrical_NO; YY_BREAK -case 447: +case 451: YY_RULE_SETUP { if (!AX_surfxml_ASroute_src) FAIL("Required attribute `src' not set for `ASroute' element."); @@ -8704,7 +8711,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_ASroute();surfxml_pcdata_ix = 0; ENTER(S_surfxml_ASroute); } YY_BREAK -case 448: +case 452: YY_RULE_SETUP { if (!AX_surfxml_ASroute_src) FAIL("Required attribute `src' not set for `ASroute' element."); @@ -8713,15 +8720,15 @@ YY_RULE_SETUP if (!AX_surfxml_ASroute_gw___dst) FAIL("Required attribute `gw_dst' 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_8: case S_surfxml_AS_6: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_1: case S_surfxml_AS_4: SET(S_surfxml_AS_9); break; + case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_4: case S_surfxml_AS_8: case S_surfxml_AS: SET(S_surfxml_AS_9); break; } } YY_BREAK -case 449: +case 453: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of ASroute element.", surf_parse_text[0]); YY_BREAK -case 450: +case 454: YY_RULE_SETUP FAIL("Bad attribute `%s' in `ASroute' element start tag.",surf_parse_text); YY_BREAK @@ -8729,40 +8736,40 @@ case YY_STATE_EOF(AL_surfxml_ASroute): FAIL("EOF in attribute list of `ASroute' element."); YY_BREAK -case 451: -/* rule 451 can match eol */ +case 455: +/* rule 455 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_ASroute(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_8: case S_surfxml_AS_6: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_1: case S_surfxml_AS_4: SET(S_surfxml_AS_9); break; + case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_1: case S_surfxml_AS_6: case S_surfxml_AS_4: case S_surfxml_AS_8: case S_surfxml_AS: SET(S_surfxml_AS_9); break; } } YY_BREAK -case 452: -/* rule 452 can match eol */ +case 456: +/* rule 456 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 453: +case 457: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_ASroute): case YY_STATE_EOF(S_surfxml_ASroute_2): +case YY_STATE_EOF(S_surfxml_ASroute): case YY_STATE_EOF(E_surfxml_ASroute): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 454: -/* rule 454 can match eol */ +case 458: +/* rule 458 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 455: -/* rule 455 can match eol */ +case 459: +/* rule 459 can match eol */ YY_RULE_SETUP { AX_surfxml_link___ctn_id = 0; @@ -8773,62 +8780,62 @@ YY_RULE_SETUP } YY_BREAK -case 456: -/* rule 456 can match eol */ +case 460: +/* rule 460 can match eol */ YY_RULE_SETUP if (surfxml_link___ctn_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_link___ctn_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_link___ctn_id); YY_BREAK -case 457: -/* rule 457 can match eol */ +case 461: +/* rule 461 can match eol */ YY_RULE_SETUP if (surfxml_link___ctn_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_link___ctn_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_link___ctn_id); YY_BREAK -case 458: -/* rule 458 can match eol */ -case 459: -/* rule 459 can match eol */ +case 462: +/* rule 462 can match eol */ +case 463: +/* rule 463 can match eol */ YY_RULE_SETUP A_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_UP; YY_BREAK -case 460: -/* rule 460 can match eol */ -case 461: -/* rule 461 can match eol */ +case 464: +/* rule 464 can match eol */ +case 465: +/* rule 465 can match eol */ YY_RULE_SETUP A_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_DOWN; YY_BREAK -case 462: -/* rule 462 can match eol */ -case 463: -/* rule 463 can match eol */ +case 466: +/* rule 466 can match eol */ +case 467: +/* rule 467 can match eol */ YY_RULE_SETUP A_surfxml_link___ctn_direction = A_surfxml_link___ctn_direction_NONE; YY_BREAK -case 464: +case 468: YY_RULE_SETUP { if (!AX_surfxml_link___ctn_id) FAIL("Required attribute `id' not set for `link_ctn' element."); LEAVE; STag_surfxml_link___ctn();surfxml_pcdata_ix = 0; ENTER(E_surfxml_link___ctn); } YY_BREAK -case 465: +case 469: 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; ETag_surfxml_link___ctn(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_route_1: case S_surfxml_route_2: case S_surfxml_route: SET(S_surfxml_route_2); break; - case S_surfxml_bypassRoute_2: case S_surfxml_bypassRoute: case S_surfxml_bypassRoute_1: SET(S_surfxml_bypassRoute_2); break; + case S_surfxml_ASroute_2: case S_surfxml_ASroute_1: case S_surfxml_ASroute: SET(S_surfxml_ASroute_2); break; case S_surfxml_bypassASroute: case S_surfxml_bypassASroute_2: case S_surfxml_bypassASroute_1: SET(S_surfxml_bypassASroute_2); break; - case S_surfxml_ASroute_2: case S_surfxml_ASroute: case S_surfxml_ASroute_1: SET(S_surfxml_ASroute_2); break; + case S_surfxml_route_2: case S_surfxml_route_1: case S_surfxml_route: SET(S_surfxml_route_2); break; + case S_surfxml_bypassRoute_1: case S_surfxml_bypassRoute: case S_surfxml_bypassRoute_2: SET(S_surfxml_bypassRoute_2); break; } } YY_BREAK -case 466: +case 470: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of link_ctn element.", surf_parse_text[0]); YY_BREAK -case 467: +case 471: YY_RULE_SETUP FAIL("Bad attribute `%s' in `link_ctn' element start tag.",surf_parse_text); YY_BREAK @@ -8836,27 +8843,27 @@ case YY_STATE_EOF(AL_surfxml_link___ctn): FAIL("EOF in attribute list of `link_ctn' element."); YY_BREAK -case 468: -/* rule 468 can match eol */ +case 472: +/* rule 472 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_link___ctn(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_route_1: case S_surfxml_route_2: case S_surfxml_route: SET(S_surfxml_route_2); break; - case S_surfxml_bypassRoute_2: case S_surfxml_bypassRoute: case S_surfxml_bypassRoute_1: SET(S_surfxml_bypassRoute_2); break; + case S_surfxml_ASroute_2: case S_surfxml_ASroute_1: case S_surfxml_ASroute: SET(S_surfxml_ASroute_2); break; case S_surfxml_bypassASroute: case S_surfxml_bypassASroute_2: case S_surfxml_bypassASroute_1: SET(S_surfxml_bypassASroute_2); break; - case S_surfxml_ASroute_2: case S_surfxml_ASroute: case S_surfxml_ASroute_1: SET(S_surfxml_ASroute_2); break; + case S_surfxml_route_2: case S_surfxml_route_1: case S_surfxml_route: SET(S_surfxml_route_2); break; + case S_surfxml_bypassRoute_1: case S_surfxml_bypassRoute: case S_surfxml_bypassRoute_2: SET(S_surfxml_bypassRoute_2); break; } } YY_BREAK -case 469: -/* rule 469 can match eol */ +case 473: +/* rule 473 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 470: +case 474: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -8864,13 +8871,13 @@ case YY_STATE_EOF(E_surfxml_link___ctn): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 471: -/* rule 471 can match eol */ +case 475: +/* rule 475 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 472: -/* rule 472 can match eol */ +case 476: +/* rule 476 can match eol */ YY_RULE_SETUP { AX_surfxml_bypassRoute_src = 0; @@ -8881,27 +8888,27 @@ YY_RULE_SETUP } YY_BREAK -case 473: -/* rule 473 can match eol */ +case 477: +/* rule 477 can match eol */ YY_RULE_SETUP if (surfxml_bypassRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in ");} surfxml_bypassRoute_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassRoute_src); YY_BREAK -case 474: -/* rule 474 can match eol */ +case 478: +/* rule 478 can match eol */ YY_RULE_SETUP if (surfxml_bypassRoute_src_isset != 0) {FAIL("Multiple definition of attribute src in ");} surfxml_bypassRoute_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassRoute_src); YY_BREAK -case 475: -/* rule 475 can match eol */ +case 479: +/* rule 479 can match eol */ YY_RULE_SETUP if (surfxml_bypassRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in ");} surfxml_bypassRoute_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassRoute_dst); YY_BREAK -case 476: -/* rule 476 can match eol */ +case 480: +/* rule 480 can match eol */ YY_RULE_SETUP if (surfxml_bypassRoute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in ");} surfxml_bypassRoute_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassRoute_dst); YY_BREAK -case 477: +case 481: YY_RULE_SETUP { if (!AX_surfxml_bypassRoute_src) FAIL("Required attribute `src' not set for `bypassRoute' element."); @@ -8909,22 +8916,22 @@ YY_RULE_SETUP LEAVE; STag_surfxml_bypassRoute();surfxml_pcdata_ix = 0; ENTER(S_surfxml_bypassRoute); } YY_BREAK -case 478: +case 482: YY_RULE_SETUP { if (!AX_surfxml_bypassRoute_src) FAIL("Required attribute `src' not set for `bypassRoute' element."); if (!AX_surfxml_bypassRoute_dst) FAIL("Required attribute `dst' not set for `bypassRoute' element."); LEAVE; STag_surfxml_bypassRoute(); surfxml_pcdata_ix = 0; ETag_surfxml_bypassRoute(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_15: case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_16: case S_surfxml_AS_3: case S_surfxml_AS: SET(S_surfxml_AS_16); break; + case S_surfxml_AS_14: case S_surfxml_AS_12: case S_surfxml_AS_15: case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_16); break; } } YY_BREAK -case 479: +case 483: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of bypassRoute element.", surf_parse_text[0]); YY_BREAK -case 480: +case 484: YY_RULE_SETUP FAIL("Bad attribute `%s' in `bypassRoute' element start tag.",surf_parse_text); YY_BREAK @@ -8932,40 +8939,40 @@ case YY_STATE_EOF(AL_surfxml_bypassRoute): FAIL("EOF in attribute list of `bypassRoute' element."); YY_BREAK -case 481: -/* rule 481 can match eol */ +case 485: +/* rule 485 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_bypassRoute(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_15: case S_surfxml_AS_12: case S_surfxml_AS_14: case S_surfxml_AS_1: case S_surfxml_AS_16: case S_surfxml_AS_3: case S_surfxml_AS: SET(S_surfxml_AS_16); break; + case S_surfxml_AS_14: case S_surfxml_AS_12: case S_surfxml_AS_15: case S_surfxml_AS_3: case S_surfxml_AS_16: case S_surfxml_AS_1: case S_surfxml_AS: SET(S_surfxml_AS_16); break; } } YY_BREAK -case 482: -/* rule 482 can match eol */ +case 486: +/* rule 486 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 483: +case 487: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_bypassRoute_2): 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: `' expected."); YY_BREAK -case 484: -/* rule 484 can match eol */ +case 488: +/* rule 488 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 485: -/* rule 485 can match eol */ +case 489: +/* rule 489 can match eol */ YY_RULE_SETUP { AX_surfxml_bypassASroute_src = 0; @@ -8980,47 +8987,47 @@ YY_RULE_SETUP } YY_BREAK -case 486: -/* rule 486 can match eol */ +case 490: +/* rule 490 can match eol */ YY_RULE_SETUP if (surfxml_bypassASroute_src_isset != 0) {FAIL("Multiple definition of attribute src in ");} surfxml_bypassASroute_src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassASroute_src); YY_BREAK -case 487: -/* rule 487 can match eol */ +case 491: +/* rule 491 can match eol */ YY_RULE_SETUP if (surfxml_bypassASroute_src_isset != 0) {FAIL("Multiple definition of attribute src in ");} surfxml_bypassASroute_src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassASroute_src); YY_BREAK -case 488: -/* rule 488 can match eol */ +case 492: +/* rule 492 can match eol */ YY_RULE_SETUP if (surfxml_bypassASroute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in ");} surfxml_bypassASroute_dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassASroute_dst); YY_BREAK -case 489: -/* rule 489 can match eol */ +case 493: +/* rule 493 can match eol */ YY_RULE_SETUP if (surfxml_bypassASroute_dst_isset != 0) {FAIL("Multiple definition of attribute dst in ");} surfxml_bypassASroute_dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassASroute_dst); YY_BREAK -case 490: -/* rule 490 can match eol */ +case 494: +/* rule 494 can match eol */ YY_RULE_SETUP if (surfxml_bypassASroute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in ");} surfxml_bypassASroute_gw___src_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassASroute_gw___src); YY_BREAK -case 491: -/* rule 491 can match eol */ +case 495: +/* rule 495 can match eol */ YY_RULE_SETUP if (surfxml_bypassASroute_gw___src_isset != 0) {FAIL("Multiple definition of attribute gw_src in ");} surfxml_bypassASroute_gw___src_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassASroute_gw___src); YY_BREAK -case 492: -/* rule 492 can match eol */ +case 496: +/* rule 496 can match eol */ YY_RULE_SETUP if (surfxml_bypassASroute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in ");} surfxml_bypassASroute_gw___dst_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_bypassASroute_gw___dst); - YY_BREAK -case 493: -/* rule 493 can match eol */ + YY_BREAK +case 497: +/* rule 497 can match eol */ YY_RULE_SETUP if (surfxml_bypassASroute_gw___dst_isset != 0) {FAIL("Multiple definition of attribute gw_dst in ");} surfxml_bypassASroute_gw___dst_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_bypassASroute_gw___dst); YY_BREAK -case 494: +case 498: YY_RULE_SETUP { if (!AX_surfxml_bypassASroute_src) FAIL("Required attribute `src' not set for `bypassASroute' element."); @@ -9030,7 +9037,7 @@ YY_RULE_SETUP LEAVE; STag_surfxml_bypassASroute();surfxml_pcdata_ix = 0; ENTER(S_surfxml_bypassASroute); } YY_BREAK -case 495: +case 499: YY_RULE_SETUP { if (!AX_surfxml_bypassASroute_src) FAIL("Required attribute `src' not set for `bypassASroute' element."); @@ -9039,15 +9046,15 @@ YY_RULE_SETUP if (!AX_surfxml_bypassASroute_gw___dst) FAIL("Required attribute `gw_dst' not set for `bypassASroute' element."); LEAVE; STag_surfxml_bypassASroute(); surfxml_pcdata_ix = 0; ETag_surfxml_bypassASroute(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_4: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_9: case S_surfxml_AS_6: case S_surfxml_AS_8: SET(S_surfxml_AS_9); break; + case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_9); break; } } YY_BREAK -case 496: +case 500: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of bypassASroute element.", surf_parse_text[0]); YY_BREAK -case 497: +case 501: YY_RULE_SETUP FAIL("Bad attribute `%s' in `bypassASroute' element start tag.",surf_parse_text); YY_BREAK @@ -9055,24 +9062,24 @@ case YY_STATE_EOF(AL_surfxml_bypassASroute): FAIL("EOF in attribute list of `bypassASroute' element."); YY_BREAK -case 498: -/* rule 498 can match eol */ +case 502: +/* rule 502 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_bypassASroute(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_AS_4: case S_surfxml_AS: case S_surfxml_AS_3: case S_surfxml_AS_1: case S_surfxml_AS_9: case S_surfxml_AS_6: case S_surfxml_AS_8: SET(S_surfxml_AS_9); break; + case S_surfxml_AS_3: case S_surfxml_AS_9: case S_surfxml_AS_8: case S_surfxml_AS_4: case S_surfxml_AS: case S_surfxml_AS_1: case S_surfxml_AS_6: SET(S_surfxml_AS_9); break; } } YY_BREAK -case 499: -/* rule 499 can match eol */ +case 503: +/* rule 503 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 500: +case 504: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -9082,13 +9089,13 @@ case YY_STATE_EOF(E_surfxml_bypassASroute): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 501: -/* rule 501 can match eol */ +case 505: +/* rule 505 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 502: -/* rule 502 can match eol */ +case 506: +/* rule 506 can match eol */ YY_RULE_SETUP { AX_surfxml_process_host = 0; @@ -9105,61 +9112,61 @@ YY_RULE_SETUP } YY_BREAK -case 503: -/* rule 503 can match eol */ +case 507: +/* rule 507 can match eol */ YY_RULE_SETUP if (surfxml_process_host_isset != 0) {FAIL("Multiple definition of attribute host in ");} surfxml_process_host_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_process_host); YY_BREAK -case 504: -/* rule 504 can match eol */ +case 508: +/* rule 508 can match eol */ YY_RULE_SETUP if (surfxml_process_host_isset != 0) {FAIL("Multiple definition of attribute host in ");} surfxml_process_host_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_process_host); YY_BREAK -case 505: -/* rule 505 can match eol */ +case 509: +/* rule 509 can match eol */ YY_RULE_SETUP if (surfxml_process_function_isset != 0) {FAIL("Multiple definition of attribute function in ");} surfxml_process_function_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_process_function); YY_BREAK -case 506: -/* rule 506 can match eol */ +case 510: +/* rule 510 can match eol */ YY_RULE_SETUP if (surfxml_process_function_isset != 0) {FAIL("Multiple definition of attribute function in ");} surfxml_process_function_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_process_function); YY_BREAK -case 507: -/* rule 507 can match eol */ +case 511: +/* rule 511 can match eol */ YY_RULE_SETUP if (surfxml_process_start___time_isset != 0) {FAIL("Multiple definition of attribute start_time in ");} surfxml_process_start___time_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_process_start___time); YY_BREAK -case 508: -/* rule 508 can match eol */ +case 512: +/* rule 512 can match eol */ YY_RULE_SETUP if (surfxml_process_start___time_isset != 0) {FAIL("Multiple definition of attribute start_time in ");} surfxml_process_start___time_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_process_start___time); YY_BREAK -case 509: -/* rule 509 can match eol */ +case 513: +/* rule 513 can match eol */ YY_RULE_SETUP if (surfxml_process_kill___time_isset != 0) {FAIL("Multiple definition of attribute kill_time in ");} surfxml_process_kill___time_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_process_kill___time); YY_BREAK -case 510: -/* rule 510 can match eol */ +case 514: +/* rule 514 can match eol */ YY_RULE_SETUP if (surfxml_process_kill___time_isset != 0) {FAIL("Multiple definition of attribute kill_time in ");} surfxml_process_kill___time_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_process_kill___time); YY_BREAK -case 511: -/* rule 511 can match eol */ -case 512: -/* rule 512 can match eol */ +case 515: +/* rule 515 can match eol */ +case 516: +/* rule 516 can match eol */ YY_RULE_SETUP A_surfxml_process_on___failure = A_surfxml_process_on___failure_DIE; YY_BREAK -case 513: -/* rule 513 can match eol */ -case 514: -/* rule 514 can match eol */ +case 517: +/* rule 517 can match eol */ +case 518: +/* rule 518 can match eol */ YY_RULE_SETUP A_surfxml_process_on___failure = A_surfxml_process_on___failure_RESTART; YY_BREAK -case 515: +case 519: YY_RULE_SETUP { if (!AX_surfxml_process_host) FAIL("Required attribute `host' not set for `process' element."); @@ -9167,22 +9174,22 @@ YY_RULE_SETUP LEAVE; STag_surfxml_process();surfxml_pcdata_ix = 0; ENTER(S_surfxml_process); } YY_BREAK -case 516: +case 520: YY_RULE_SETUP { if (!AX_surfxml_process_host) FAIL("Required attribute `host' not set for `process' element."); if (!AX_surfxml_process_function) FAIL("Required attribute `function' not set for `process' element."); LEAVE; STag_surfxml_process(); surfxml_pcdata_ix = 0; ETag_surfxml_process(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform_7: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_8: case S_surfxml_platform_4: SET(S_surfxml_platform_8); break; + case S_surfxml_platform_4: case S_surfxml_platform: case S_surfxml_platform_7: case S_surfxml_platform_8: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_8); break; } } YY_BREAK -case 517: +case 521: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of process element.", surf_parse_text[0]); YY_BREAK -case 518: +case 522: YY_RULE_SETUP FAIL("Bad attribute `%s' in `process' element start tag.",surf_parse_text); YY_BREAK @@ -9190,40 +9197,40 @@ case YY_STATE_EOF(AL_surfxml_process): FAIL("EOF in attribute list of `process' element."); YY_BREAK -case 519: -/* rule 519 can match eol */ +case 523: +/* rule 523 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_process(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform_7: case S_surfxml_platform_1: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform: case S_surfxml_platform_8: case S_surfxml_platform_4: SET(S_surfxml_platform_8); break; + case S_surfxml_platform_4: case S_surfxml_platform: case S_surfxml_platform_7: case S_surfxml_platform_8: case S_surfxml_platform_3: case S_surfxml_platform_6: case S_surfxml_platform_1: SET(S_surfxml_platform_8); break; } } YY_BREAK -case 520: -/* rule 520 can match eol */ +case 524: +/* rule 524 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 521: +case 525: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_process_2): -case YY_STATE_EOF(E_surfxml_process): case YY_STATE_EOF(S_surfxml_process): +case YY_STATE_EOF(E_surfxml_process): +case YY_STATE_EOF(S_surfxml_process_2): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 522: -/* rule 522 can match eol */ +case 526: +/* rule 526 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 523: -/* rule 523 can match eol */ +case 527: +/* rule 527 can match eol */ YY_RULE_SETUP { AX_surfxml_argument_value = 0; @@ -9232,38 +9239,38 @@ YY_RULE_SETUP } YY_BREAK -case 524: -/* rule 524 can match eol */ +case 528: +/* rule 528 can match eol */ YY_RULE_SETUP if (surfxml_argument_value_isset != 0) {FAIL("Multiple definition of attribute value in ");} surfxml_argument_value_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_argument_value); YY_BREAK -case 525: -/* rule 525 can match eol */ +case 529: +/* rule 529 can match eol */ YY_RULE_SETUP if (surfxml_argument_value_isset != 0) {FAIL("Multiple definition of attribute value in ");} surfxml_argument_value_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_argument_value); YY_BREAK -case 526: +case 530: 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 -case 527: +case 531: 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; ETag_surfxml_argument(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_process_1: case S_surfxml_process: case S_surfxml_process_2: SET(S_surfxml_process_2); break; + case S_surfxml_process_1: case S_surfxml_process_2: case S_surfxml_process: SET(S_surfxml_process_2); break; } } YY_BREAK -case 528: +case 532: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of argument element.", surf_parse_text[0]); YY_BREAK -case 529: +case 533: YY_RULE_SETUP FAIL("Bad attribute `%s' in `argument' element start tag.",surf_parse_text); YY_BREAK @@ -9271,24 +9278,24 @@ case YY_STATE_EOF(AL_surfxml_argument): FAIL("EOF in attribute list of `argument' element."); YY_BREAK -case 530: -/* rule 530 can match eol */ +case 534: +/* rule 534 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_argument(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_process_1: case S_surfxml_process: case S_surfxml_process_2: SET(S_surfxml_process_2); break; + case S_surfxml_process_1: case S_surfxml_process_2: case S_surfxml_process: SET(S_surfxml_process_2); break; } } YY_BREAK -case 531: -/* rule 531 can match eol */ +case 535: +/* rule 535 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 532: +case 536: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -9296,13 +9303,13 @@ case YY_STATE_EOF(E_surfxml_argument): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK -case 533: -/* rule 533 can match eol */ +case 537: +/* rule 537 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 534: -/* rule 534 can match eol */ +case 538: +/* rule 538 can match eol */ YY_RULE_SETUP { AX_surfxml_config_id = 0; @@ -9311,36 +9318,36 @@ YY_RULE_SETUP } YY_BREAK -case 535: -/* rule 535 can match eol */ +case 539: +/* rule 539 can match eol */ YY_RULE_SETUP if (surfxml_config_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_config_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_config_id); YY_BREAK -case 536: -/* rule 536 can match eol */ +case 540: +/* rule 540 can match eol */ YY_RULE_SETUP if (surfxml_config_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_config_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_config_id); YY_BREAK -case 537: +case 541: YY_RULE_SETUP { LEAVE; STag_surfxml_config();surfxml_pcdata_ix = 0; ENTER(S_surfxml_config); } YY_BREAK -case 538: +case 542: YY_RULE_SETUP { LEAVE; STag_surfxml_config(); surfxml_pcdata_ix = 0; ETag_surfxml_config(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break; + case S_surfxml_platform_3: case S_surfxml_platform_2: case S_surfxml_platform: SET(S_surfxml_platform_3); break; } } YY_BREAK -case 539: +case 543: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of config element.", surf_parse_text[0]); YY_BREAK -case 540: +case 544: YY_RULE_SETUP FAIL("Bad attribute `%s' in `config' element start tag.",surf_parse_text); YY_BREAK @@ -9348,42 +9355,42 @@ case YY_STATE_EOF(AL_surfxml_config): FAIL("EOF in attribute list of `config' element."); YY_BREAK -case 541: -/* rule 541 can match eol */ +case 545: +/* rule 545 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_config(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_platform: case S_surfxml_platform_2: case S_surfxml_platform_3: SET(S_surfxml_platform_3); break; + case S_surfxml_platform_3: case S_surfxml_platform_2: case S_surfxml_platform: SET(S_surfxml_platform_3); break; } } YY_BREAK -case 542: -/* rule 542 can match eol */ +case 546: +/* rule 546 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 543: +case 547: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK -case YY_STATE_EOF(S_surfxml_config): -case YY_STATE_EOF(E_surfxml_config): case YY_STATE_EOF(S_surfxml_config_2): +case YY_STATE_EOF(E_surfxml_config): +case YY_STATE_EOF(S_surfxml_config): if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); YY_BREAK /* * */ -case 544: -/* rule 544 can match eol */ +case 548: +/* rule 548 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 545: -/* rule 545 can match eol */ +case 549: +/* rule 549 can match eol */ YY_RULE_SETUP { AX_surfxml_prop_id = 0; @@ -9394,27 +9401,27 @@ YY_RULE_SETUP } YY_BREAK -case 546: -/* rule 546 can match eol */ +case 550: +/* rule 550 can match eol */ YY_RULE_SETUP if (surfxml_prop_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_prop_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_prop_id); YY_BREAK -case 547: -/* rule 547 can match eol */ +case 551: +/* rule 551 can match eol */ YY_RULE_SETUP if (surfxml_prop_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_prop_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_prop_id); YY_BREAK -case 548: -/* rule 548 can match eol */ +case 552: +/* rule 552 can match eol */ YY_RULE_SETUP if (surfxml_prop_value_isset != 0) {FAIL("Multiple definition of attribute value in ");} surfxml_prop_value_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_prop_value); YY_BREAK -case 549: -/* rule 549 can match eol */ +case 553: +/* rule 553 can match eol */ YY_RULE_SETUP if (surfxml_prop_value_isset != 0) {FAIL("Multiple definition of attribute value in ");} surfxml_prop_value_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_prop_value); YY_BREAK -case 550: +case 554: YY_RULE_SETUP { if (!AX_surfxml_prop_id) FAIL("Required attribute `id' not set for `prop' element."); @@ -9422,29 +9429,29 @@ YY_RULE_SETUP LEAVE; STag_surfxml_prop();surfxml_pcdata_ix = 0; ENTER(E_surfxml_prop); } YY_BREAK -case 551: +case 555: YY_RULE_SETUP { if (!AX_surfxml_prop_id) FAIL("Required attribute `id' not set for `prop' element."); if (!AX_surfxml_prop_value) FAIL("Required attribute `value' not set for `prop' element."); LEAVE; STag_surfxml_prop(); surfxml_pcdata_ix = 0; ETag_surfxml_prop(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_host: case S_surfxml_host_2: case S_surfxml_host_1: SET(S_surfxml_host_2); break; - case S_surfxml_storage_1: case S_surfxml_storage: case S_surfxml_storage_2: SET(S_surfxml_storage_2); break; - case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break; - case S_surfxml_process: case S_surfxml_process_1: case S_surfxml_process_2: SET(S_surfxml_process_2); break; + case S_surfxml_process_2: case S_surfxml_process_1: case S_surfxml_process: SET(S_surfxml_process_2); break; + case S_surfxml_storage___type: case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: SET(S_surfxml_storage___type_2); break; case S_surfxml_config_1: case S_surfxml_config_2: case S_surfxml_config: SET(S_surfxml_config_2); break; - case S_surfxml_link: case S_surfxml_link_1: case S_surfxml_link_2: SET(S_surfxml_link_2); break; - case S_surfxml_cluster_2: case S_surfxml_cluster_1: case S_surfxml_cluster: SET(S_surfxml_cluster_2); break; - case S_surfxml_AS_2: case S_surfxml_AS_3: case S_surfxml_AS: SET(S_surfxml_AS_3); break; + case S_surfxml_link: case S_surfxml_link_2: case S_surfxml_link_1: SET(S_surfxml_link_2); break; + case S_surfxml_AS_3: case S_surfxml_AS_2: case S_surfxml_AS: SET(S_surfxml_AS_3); break; + case S_surfxml_host: case S_surfxml_host_1: case S_surfxml_host_2: SET(S_surfxml_host_2); break; + case S_surfxml_cluster_2: case S_surfxml_cluster: case S_surfxml_cluster_1: SET(S_surfxml_cluster_2); break; + case S_surfxml_storage: case S_surfxml_storage_1: case S_surfxml_storage_2: SET(S_surfxml_storage_2); break; } } YY_BREAK -case 552: +case 556: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of prop element.", surf_parse_text[0]); YY_BREAK -case 553: +case 557: YY_RULE_SETUP FAIL("Bad attribute `%s' in `prop' element start tag.",surf_parse_text); YY_BREAK @@ -9452,31 +9459,31 @@ case YY_STATE_EOF(AL_surfxml_prop): FAIL("EOF in attribute list of `prop' element."); YY_BREAK -case 554: -/* rule 554 can match eol */ +case 558: +/* rule 558 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_prop(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_host: case S_surfxml_host_2: case S_surfxml_host_1: SET(S_surfxml_host_2); break; - case S_surfxml_storage_1: case S_surfxml_storage: case S_surfxml_storage_2: SET(S_surfxml_storage_2); break; - case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break; - case S_surfxml_process: case S_surfxml_process_1: case S_surfxml_process_2: SET(S_surfxml_process_2); break; + case S_surfxml_process_2: case S_surfxml_process_1: case S_surfxml_process: SET(S_surfxml_process_2); break; + case S_surfxml_storage___type: case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: SET(S_surfxml_storage___type_2); break; case S_surfxml_config_1: case S_surfxml_config_2: case S_surfxml_config: SET(S_surfxml_config_2); break; - case S_surfxml_link: case S_surfxml_link_1: case S_surfxml_link_2: SET(S_surfxml_link_2); break; - case S_surfxml_cluster_2: case S_surfxml_cluster_1: case S_surfxml_cluster: SET(S_surfxml_cluster_2); break; - case S_surfxml_AS_2: case S_surfxml_AS_3: case S_surfxml_AS: SET(S_surfxml_AS_3); break; + case S_surfxml_link: case S_surfxml_link_2: case S_surfxml_link_1: SET(S_surfxml_link_2); break; + case S_surfxml_AS_3: case S_surfxml_AS_2: case S_surfxml_AS: SET(S_surfxml_AS_3); break; + case S_surfxml_host: case S_surfxml_host_1: case S_surfxml_host_2: SET(S_surfxml_host_2); break; + case S_surfxml_cluster_2: case S_surfxml_cluster: case S_surfxml_cluster_1: SET(S_surfxml_cluster_2); break; + case S_surfxml_storage: case S_surfxml_storage_1: case S_surfxml_storage_2: SET(S_surfxml_storage_2); break; } } YY_BREAK -case 555: -/* rule 555 can match eol */ +case 559: +/* rule 559 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 556: +case 560: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -9486,13 +9493,13 @@ if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected."); /* * */ -case 557: -/* rule 557 can match eol */ +case 561: +/* rule 561 can match eol */ YY_RULE_SETUP FAIL("Starting tag is not allowed here."); YY_BREAK -case 558: -/* rule 558 can match eol */ +case 562: +/* rule 562 can match eol */ YY_RULE_SETUP { AX_surfxml_model___prop_id = 0; @@ -9503,27 +9510,27 @@ YY_RULE_SETUP } YY_BREAK -case 559: -/* rule 559 can match eol */ +case 563: +/* rule 563 can match eol */ YY_RULE_SETUP if (surfxml_model___prop_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_model___prop_id_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_model___prop_id); YY_BREAK -case 560: -/* rule 560 can match eol */ +case 564: +/* rule 564 can match eol */ YY_RULE_SETUP if (surfxml_model___prop_id_isset != 0) {FAIL("Multiple definition of attribute id in ");} surfxml_model___prop_id_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_model___prop_id); YY_BREAK -case 561: -/* rule 561 can match eol */ +case 565: +/* rule 565 can match eol */ YY_RULE_SETUP if (surfxml_model___prop_value_isset != 0) {FAIL("Multiple definition of attribute value in ");} surfxml_model___prop_value_isset = 1; ENTER(VALUE1); BUFFERSET(AX_surfxml_model___prop_value); YY_BREAK -case 562: -/* rule 562 can match eol */ +case 566: +/* rule 566 can match eol */ YY_RULE_SETUP if (surfxml_model___prop_value_isset != 0) {FAIL("Multiple definition of attribute value in ");} surfxml_model___prop_value_isset = 1; ENTER(VALUE2); BUFFERSET(AX_surfxml_model___prop_value); YY_BREAK -case 563: +case 567: YY_RULE_SETUP { if (!AX_surfxml_model___prop_id) FAIL("Required attribute `id' not set for `model_prop' element."); @@ -9531,22 +9538,22 @@ YY_RULE_SETUP LEAVE; STag_surfxml_model___prop();surfxml_pcdata_ix = 0; ENTER(E_surfxml_model___prop); } YY_BREAK -case 564: +case 568: YY_RULE_SETUP { if (!AX_surfxml_model___prop_id) FAIL("Required attribute `id' not set for `model_prop' element."); 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; ETag_surfxml_model___prop(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break; + case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break; } } YY_BREAK -case 565: +case 569: YY_RULE_SETUP FAIL("Unexpected character `%c' in attribute list of model_prop element.", surf_parse_text[0]); YY_BREAK -case 566: +case 570: YY_RULE_SETUP FAIL("Bad attribute `%s' in `model_prop' element start tag.",surf_parse_text); YY_BREAK @@ -9554,24 +9561,24 @@ case YY_STATE_EOF(AL_surfxml_model___prop): FAIL("EOF in attribute list of `model_prop' element."); YY_BREAK -case 567: -/* rule 567 can match eol */ +case 571: +/* rule 571 can match eol */ YY_RULE_SETUP { LEAVE; ETag_surfxml_model___prop(); popbuffer(); /* attribute */ switch (YY_START) { - case S_surfxml_storage___type_1: case S_surfxml_storage___type_2: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break; + case S_surfxml_storage___type_2: case S_surfxml_storage___type_1: case S_surfxml_storage___type: SET(S_surfxml_storage___type_2); break; } } YY_BREAK -case 568: -/* rule 568 can match eol */ +case 572: +/* rule 572 can match eol */ YY_RULE_SETUP FAIL("Unexpected end-tag `%s': `' expected.",surf_parse_text); YY_BREAK -case 569: +case 573: YY_RULE_SETUP FAIL("Unexpected character `%c': `' expected.",surf_parse_text[0]); YY_BREAK @@ -9581,7 +9588,7 @@ if(!ETag_surfxml_include_state()) FAIL("Premature EOF: `' expected. /* EPILOG: after the root element. */ -case 570: +case 574: YY_RULE_SETUP {SET(PROLOG); yyless(0); CLEANUP; return -1;} YY_BREAK @@ -9592,58 +9599,58 @@ SUCCEED; /* CHARACTER DATA. */ /* Non-defined standard entities... */ -case 571: +case 575: YY_RULE_SETUP BUFFERPUTC('&'); YY_BREAK -case 572: +case 576: YY_RULE_SETUP BUFFERPUTC('<'); YY_BREAK -case 573: +case 577: YY_RULE_SETUP BUFFERPUTC('>'); YY_BREAK -case 574: +case 578: YY_RULE_SETUP BUFFERPUTC('\''); YY_BREAK -case 575: +case 579: YY_RULE_SETUP BUFFERPUTC('"'); YY_BREAK /* Character entities. */ -case 576: +case 580: YY_RULE_SETUP BUFFERPUTC((unsigned char)atoi(surf_parse_text+2)); YY_BREAK -case 577: +case 581: YY_RULE_SETUP BUFFERPUTC((unsigned char)strtol(surf_parse_text+3,NULL,16)); YY_BREAK -case 578: -/* rule 578 can match eol */ -case 579: -/* rule 579 can match eol */ -case 580: -/* rule 580 can match eol */ -case 581: -/* rule 581 can match eol */ +case 582: +/* rule 582 can match eol */ +case 583: +/* rule 583 can match eol */ +case 584: +/* rule 584 can match eol */ +case 585: +/* rule 585 can match eol */ YY_RULE_SETUP BUFFERPUTC('\n'); YY_BREAK -case 582: +case 586: YY_RULE_SETUP ENTER(CDATA); YY_BREAK -case 583: +case 587: YY_RULE_SETUP FAIL("Unexpected `]""]>' in character data."); YY_BREAK -case 584: +case 588: YY_RULE_SETUP BUFFERDONE; LEAVE; YY_BREAK @@ -9651,7 +9658,7 @@ case YY_STATE_EOF(VALUE1): FAIL("EOF in literal (\"'\" expected)."); YY_BREAK -case 585: +case 589: YY_RULE_SETUP BUFFERDONE; LEAVE; YY_BREAK @@ -9659,22 +9666,22 @@ case YY_STATE_EOF(VALUE2): FAIL("EOF in literal (`\"' expected)."); YY_BREAK -case 586: -/* rule 586 can match eol */ +case 590: +/* rule 590 can match eol */ YY_RULE_SETUP BUFFERPUTC(surf_parse_text[0]); YY_BREAK -case 587: +case 591: YY_RULE_SETUP FAIL("Spurious `%c' in character data.",surf_parse_text[0]); YY_BREAK -case 588: +case 592: YY_RULE_SETUP LEAVE; YY_BREAK /* "]""]" BUFFERPUTC(surf_parse_text[0]); BUFFERPUTC(surf_parse_text[1]); */ -case 589: +case 593: YY_RULE_SETUP BUFFERPUTC(surf_parse_text[0]); YY_BREAK @@ -9686,13 +9693,13 @@ FAIL("EOF in CDATA section."); /* Ideally, this should be replaced by code in flexml.pl that generates just the states not covered by other rules. */ -case 590: -/* rule 590 can match eol */ +case 594: +/* rule 594 can match eol */ YY_RULE_SETUP FAIL("Syntax error on character `%c'.", surf_parse_text[0]); YY_BREAK -case 591: +case 595: YY_RULE_SETUP ECHO; YY_BREAK @@ -9849,7 +9856,6 @@ case YY_STATE_EOF(IMPOSSIBLE): "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 @@ -10011,7 +10017,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3469 ) + if ( yy_current_state >= 3503 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -10039,11 +10045,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 3469 ) + if ( yy_current_state >= 3503 ) 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 == 3468); + yy_is_jam = (yy_current_state == 3502); return yy_is_jam ? 0 : yy_current_state; } diff --git a/src/surf/storage_interface.hpp b/src/surf/storage_interface.hpp index 61ef3abd8a..07eaf8d2ad 100644 --- a/src/surf/storage_interface.hpp +++ b/src/surf/storage_interface.hpp @@ -38,25 +38,25 @@ typedef StorageAction *StorageActionPtr; * @brief Callbacks handler which emit the callbacks after Storage creation * * @details Callback functions have the following signature: `void(StoragePtr)` */ -extern surf_callback(void, StoragePtr) storageCreatedCallbacks; +XBT_PUBLIC_DATA(surf_callback(void, StoragePtr)) storageCreatedCallbacks; /** @ingroup SURF_callbacks * @brief Callbacks handler which emit the callbacks after Storage destruction * * @details Callback functions have the following signature: `void(StoragePtr)` */ -extern surf_callback(void, StoragePtr) storageDestructedCallbacks; +XBT_PUBLIC_DATA(surf_callback(void, StoragePtr)) storageDestructedCallbacks; /** @ingroup SURF_callbacks * @brief Callbacks handler which emit the callbacks after Storage State changed * * @details Callback functions have the following signature: `void(StorageActionPtr action, e_surf_resource_state_t old, e_surf_resource_state_t current)` */ -extern surf_callback(void, StoragePtr, e_surf_resource_state_t, e_surf_resource_state_t) storageStateChangedCallbacks; +XBT_PUBLIC_DATA(surf_callback(void, StoragePtr, e_surf_resource_state_t, e_surf_resource_state_t)) storageStateChangedCallbacks; /** @ingroup SURF_callbacks * @brief Callbacks handler which emit the callbacks after StorageAction State changed * * @details Callback functions have the following signature: `void(StorageActionPtr action, e_surf_action_state_t old, e_surf_action_state_t current)` */ -extern surf_callback(void, StorageActionPtr, e_surf_action_state_t, e_surf_action_state_t) storageActionStateChangedCallbacks; +XBT_PUBLIC_DATA(surf_callback(void, StorageActionPtr, e_surf_action_state_t, e_surf_action_state_t)) storageActionStateChangedCallbacks; /********* * Model * @@ -88,7 +88,7 @@ public: * @param attach [description] * @return The created Storage */ - virtual StoragePtr createResource(const char* id, + virtual StoragePtr createStorage(const char* id, const char* type_id, const char* content_name, const char* content_type, diff --git a/src/surf/storage_n11.cpp b/src/surf/storage_n11.cpp index d0bc4080f0..832cc03314 100644 --- a/src/surf/storage_n11.cpp +++ b/src/surf/storage_n11.cpp @@ -68,7 +68,7 @@ static void parse_storage_init(sg_platf_storage_cbarg_t storage) storage->content_type, storage->properties); - surf_storage_model->createResource(storage->id, + surf_storage_model->createStorage(storage->id, ((storage_type_t) stype)->type_id, storage->content, storage->content_type, @@ -234,7 +234,7 @@ StorageN11Model::~StorageN11Model(){ storage_running_action_set_that_does_not_need_being_checked = NULL; } -StoragePtr StorageN11Model::createResource(const char* id, const char* type_id, +StoragePtr StorageN11Model::createStorage(const char* id, const char* type_id, const char* content_name, const char* content_type, xbt_dict_t properties, const char* attach) { @@ -252,7 +252,7 @@ StoragePtr StorageN11Model::createResource(const char* id, const char* type_id, Bread, Bwrite, Bconnection, type_id, (char *)content_name, xbt_strdup(content_type), storage_type->size, (char *) attach); - xbt_lib_set(storage_lib, id, SURF_STORAGE_LEVEL, static_cast(storage)); + xbt_lib_set(storage_lib, id, SURF_STORAGE_LEVEL, storage); XBT_DEBUG("SURF storage create resource\n\t\tid '%s'\n\t\ttype '%s'\n\t\tproperties '%p'\n\t\tBread '%f'\n", id, @@ -415,7 +415,7 @@ StorageActionPtr StorageN11::close(surf_file_t fd) StorageActionPtr write_action; unsigned int i; xbt_dynar_foreach(p_writeActions, i, _write_action) { - write_action = static_cast(static_cast(_write_action)); + write_action = static_cast(_write_action); if ((write_action->p_file) == fd) { xbt_dynar_cursor_rm(p_writeActions, &i); write_action->unref(); diff --git a/src/surf/storage_n11.hpp b/src/surf/storage_n11.hpp index d479002b5f..2ec11237f6 100644 --- a/src/surf/storage_n11.hpp +++ b/src/surf/storage_n11.hpp @@ -37,8 +37,9 @@ class StorageN11Model : public StorageModel { public: StorageN11Model(); ~StorageN11Model(); - StoragePtr createResource(const char* id, const char* type_id, + StoragePtr createStorage(const char* id, const char* type_id, const char* content_name, const char* content_type, xbt_dict_t properties, const char* attach); + void addTraces(){DIE_IMPOSSIBLE;} double shareResources(double now); void updateActionsState(double now, double delta); }; diff --git a/src/surf/surf_c_bindings.cpp b/src/surf/surf_c_bindings.cpp index 6ee28a1431..61cc24ecb4 100644 --- a/src/surf/surf_c_bindings.cpp +++ b/src/surf/surf_c_bindings.cpp @@ -287,7 +287,7 @@ xbt_dynar_t surf_workstation_model_get_route(surf_workstation_model_t /*model*/, } void surf_vm_workstation_model_create(const char *name, surf_resource_t ind_phys_host){ - surf_vm_workstation_model->createResource(name, ind_phys_host); + surf_vm_workstation_model->createWorkstationVM(name, ind_phys_host); } surf_action_t surf_network_model_communicate(surf_network_model_t model, sg_routing_edge_t src, sg_routing_edge_t dst, double size, double rate){ @@ -520,9 +520,11 @@ void surf_action_set_priority(surf_action_t action, double priority){ action->setPriority(priority); } +#ifdef HAVE_TRACING void surf_action_set_category(surf_action_t action, const char *category){ action->setCategory(category); } +#endif void *surf_action_get_data(surf_action_t action){ return action->getData(); diff --git a/src/surf/surf_interface.cpp b/src/surf/surf_interface.cpp index 7cf6ef8b67..52b1722bd3 100644 --- a/src/surf/surf_interface.cpp +++ b/src/surf/surf_interface.cpp @@ -157,7 +157,7 @@ s_surf_model_description_t surf_workstation_model_description[] = { s_surf_model_description_t surf_vm_workstation_model_description[] = { {"default", "Default vm workstation model.", - surf_vm_workstation_model_init_current_default}, + surf_vm_workstation_model_init_HL13}, {NULL, NULL, NULL} /* this array must be NULL terminated */ }; @@ -520,7 +520,7 @@ double Model::shareResourcesLazy(double now) { ActionPtr action = NULL; double min = -1; - double share, time_to_completion; + double share; XBT_DEBUG ("Before share resources, the size of modified actions set is %zd", @@ -547,10 +547,10 @@ double Model::shareResourcesLazy(double now) action->updateRemainingLazy(now); min = -1; - time_to_completion = -1; share = lmm_variable_getvalue(action->getVariable()); if (share > 0) { + double time_to_completion; if (action->getRemains() > 0) { time_to_completion = action->getRemainsNoUpdate() / share; } else { @@ -1028,7 +1028,7 @@ void Action::updateRemainingLazy(double now) { double delta = 0.0; - if(getModel() == static_cast(surf_network_model)) + if(getModel() == surf_network_model) { if (m_suspended != 0) return; @@ -1050,7 +1050,7 @@ void Action::updateRemainingLazy(double now) double_update(&m_remains, m_lastValue * delta, sg_surf_precision*sg_maxmin_precision); #ifdef HAVE_TRACING - if (getModel() == static_cast(surf_cpu_model_pm) && TRACE_is_enabled()) { + if (getModel() == surf_cpu_model_pm && TRACE_is_enabled()) { ResourcePtr cpu = static_cast(lmm_constraint_id(lmm_get_cnst_from_var(getModel()->getMaxminSystem(), getVariable(), 0))); TRACE_surf_host_set_utilization(cpu->getName(), getCategory(), m_lastValue, m_lastUpdate, now - m_lastUpdate); } @@ -1058,7 +1058,7 @@ void Action::updateRemainingLazy(double now) XBT_DEBUG("Updating action(%p): remains is now %f", this, m_remains); } - if(getModel() == static_cast(surf_network_model)) + if(getModel() == surf_network_model) { if (m_maxDuration != NO_MAX_DURATION) double_update(&m_maxDuration, delta, sg_surf_precision); diff --git a/src/surf/surf_interface.hpp b/src/surf/surf_interface.hpp index a636b30c9a..4270a6e599 100644 --- a/src/surf/surf_interface.hpp +++ b/src/surf/surf_interface.hpp @@ -129,6 +129,8 @@ public: */ virtual ~Model(); + virtual void addTraces() =0; + /** * @brief Get the name of the current Model * diff --git a/src/surf/surf_routing.cpp b/src/surf/surf_routing.cpp index a4bbe30144..1129d13718 100644 --- a/src/surf/surf_routing.cpp +++ b/src/surf/surf_routing.cpp @@ -8,7 +8,7 @@ #include "surf_routing_private.hpp" #include "surf_routing_cluster.hpp" #include "surf_routing_cluster_torus.hpp" - +#include "surf_routing_cluster_fat_tree.hpp" #include "simgrid/platf_interface.h" // platform creation API internal interface #include "simgrid/sg_config.h" @@ -89,7 +89,7 @@ typedef enum { SURF_MODEL_VIVALDI, SURF_MODEL_CLUSTER, SURF_MODEL_TORUS_CLUSTER, - + SURF_MODEL_FAT_TREE_CLUSTER, } e_routing_types; struct s_model_type routing_models[] = { @@ -111,8 +111,10 @@ struct s_model_type routing_models[] = { model_vivaldi_create, NULL}, {"Cluster", "Cluster routing", model_cluster_create, NULL}, - {"Torus_Cluster", "Torus Cluster routing", - model_torus_cluster_create, NULL}, + {"Torus_Cluster", "Torus Cluster routing", + model_torus_cluster_create, NULL}, + {"Fat_Tree_Cluster", "Fat Tree Cluster routing", + model_fat_tree_cluster_create, NULL}, {NULL, NULL, NULL, NULL} }; @@ -356,14 +358,15 @@ void routing_AS_begin(sg_platf_AS_cbarg_t AS) /* search the routing model */ switch(AS->routing){ - case A_surfxml_AS_routing_Cluster: model = &routing_models[SURF_MODEL_CLUSTER];break; - case A_surfxml_AS_routing_Cluster___torus: model = &routing_models[SURF_MODEL_TORUS_CLUSTER];break; - case A_surfxml_AS_routing_Dijkstra: model = &routing_models[SURF_MODEL_DIJKSTRA];break; - case A_surfxml_AS_routing_DijkstraCache: model = &routing_models[SURF_MODEL_DIJKSTRACACHE];break; - case A_surfxml_AS_routing_Floyd: model = &routing_models[SURF_MODEL_FLOYD];break; - case A_surfxml_AS_routing_Full: model = &routing_models[SURF_MODEL_FULL];break; - case A_surfxml_AS_routing_None: model = &routing_models[SURF_MODEL_NONE];break; - case A_surfxml_AS_routing_Vivaldi: model = &routing_models[SURF_MODEL_VIVALDI];break; + case A_surfxml_AS_routing_Cluster: model = &routing_models[SURF_MODEL_CLUSTER];break; + case A_surfxml_AS_routing_Cluster___torus: model = &routing_models[SURF_MODEL_TORUS_CLUSTER];break; + case A_surfxml_AS_routing_Cluster___fat___tree: model = &routing_models[SURF_MODEL_FAT_TREE_CLUSTER];break; + case A_surfxml_AS_routing_Dijkstra: model = &routing_models[SURF_MODEL_DIJKSTRA];break; + case A_surfxml_AS_routing_DijkstraCache: model = &routing_models[SURF_MODEL_DIJKSTRACACHE];break; + case A_surfxml_AS_routing_Floyd: model = &routing_models[SURF_MODEL_FLOYD];break; + case A_surfxml_AS_routing_Full: model = &routing_models[SURF_MODEL_FULL];break; + case A_surfxml_AS_routing_None: model = &routing_models[SURF_MODEL_NONE];break; + case A_surfxml_AS_routing_Vivaldi: model = &routing_models[SURF_MODEL_VIVALDI];break; default: xbt_die("Not a valid model!!!"); break; } @@ -401,7 +404,7 @@ void routing_AS_begin(sg_platf_AS_cbarg_t AS) /* add to the father element list */ info->setId(current_routing->parseAS(info)); } else { - THROWF(arg_error, 0, "All defined components must be belong to a AS"); + THROWF(arg_error, 0, "All defined components must belong to a AS"); } xbt_lib_set(as_router_lib, info->getName(), ROUTING_ASR_LEVEL, @@ -836,7 +839,15 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster) AS.routing = A_surfxml_AS_routing_Cluster___torus; sg_platf_new_AS_begin(&AS); ((AsClusterTorusPtr)current_routing)->parse_specific_arguments(cluster); - }else{ + } + else if (cluster->topology == SURF_CLUSTER_FAT_TREE) { + XBT_DEBUG("", cluster->id); + AS.routing = A_surfxml_AS_routing_Cluster___fat___tree; + sg_platf_new_AS_begin(&AS); + ((AsClusterFatTree*)current_routing)->parse_specific_arguments(cluster); + } + + else{ XBT_DEBUG("", cluster->id); AS.routing = A_surfxml_AS_routing_Cluster; sg_platf_new_AS_begin(&AS); @@ -902,7 +913,7 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster) } else { XBT_DEBUG("\tstate_file=\"\""); } - + xbt_dynar_t power_state_list = xbt_dynar_new(sizeof(double), NULL); xbt_dynar_push(power_state_list,&cluster->power); host.power_peak = power_state_list; @@ -975,12 +986,15 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster) //call the cluster function that adds the others links - + if (cluster->topology == SURF_CLUSTER_FAT_TREE) { + ((AsClusterFatTree*) current_routing)->addProcessingNode(i); + } + else { ((AsClusterPtr)current_routing)->create_links_for_node(cluster, i, rankId, rankId* ((AsClusterPtr)current_routing)->p_nb_links_per_node + ((AsClusterPtr)current_routing)->p_has_loopback + ((AsClusterPtr)current_routing)->p_has_limiter ); - + } xbt_free(link_id); xbt_free(host_id); rankId++; @@ -989,7 +1003,11 @@ static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster) xbt_dynar_free(&radical_ends); } xbt_dynar_free(&radical_elements); - + + // For fat trees, the links must be created once all nodes have been added + if(cluster->topology == SURF_CLUSTER_FAT_TREE) { + ((AsClusterFatTree*)current_routing)->create_links(cluster); + } // Add a router. It is magically used thanks to the way in which surf_routing_cluster is written, // and it's very useful to connect clusters together XBT_DEBUG(" "); @@ -1325,6 +1343,32 @@ const char *surf_AS_get_name(AsPtr as) { return as->p_name; } +static AsPtr surf_AS_recursive_get_by_name(AsPtr current, const char * name) { + xbt_dict_cursor_t cursor = NULL; + char *key; + AS_t elem; + AsPtr tmp = NULL; + + if(!strcmp(current->p_name, name)) + return current; + + xbt_dict_foreach(current->p_routingSons, cursor, key, elem) { + tmp = surf_AS_recursive_get_by_name(elem, name); + if(tmp != NULL ) { + break; + } + } + return tmp; +} + + +AsPtr surf_AS_get_by_name(const char * name) { + AsPtr as = surf_AS_recursive_get_by_name(routing_platf->p_root, name); + if(as == NULL) + XBT_WARN("Impossible to find an AS with name %s, please check your input", name); + return as; +} + xbt_dict_t surf_AS_get_routing_sons(AsPtr as) { return as->p_routingSons; } diff --git a/src/surf/surf_routing_cluster_fat_tree.cpp b/src/surf/surf_routing_cluster_fat_tree.cpp index 01d40f035a..f94b395f77 100644 --- a/src/surf/surf_routing_cluster_fat_tree.cpp +++ b/src/surf/surf_routing_cluster_fat_tree.cpp @@ -5,9 +5,18 @@ #include #include #include +#include +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(surf_route_fat_tree, surf, "Routing for fat trees"); -AsClusterFatTree::AsClusterFatTree() : levels(0) {} +AS_t model_fat_tree_cluster_create(void) +{ + return new AsClusterFatTree(); +} + +AsClusterFatTree::AsClusterFatTree() : levels(0) { + XBT_DEBUG("Creating a new fat tree."); +} AsClusterFatTree::~AsClusterFatTree() { for (unsigned int i = 0 ; i < this->nodes.size() ; i++) { @@ -15,29 +24,230 @@ AsClusterFatTree::~AsClusterFatTree() { } } +bool AsClusterFatTree::isInSubTree(FatTreeNode *root, FatTreeNode *node) { + XBT_DEBUG("Is %d(%u,%u) in the sub tree of %d(%u,%u) ?", node->id, node->level, node->position, root->id, root->level, root->position); + if (root->level <= node->level) { + return false; + } + for (unsigned int i = 0 ; i < node->level ; i++) { + if(root->label[i] != node->label[i]) { + return false; + } + } + + for (unsigned int i = root->level ; i < this->levels ; i++) { + if(root->label[i] != node->label[i]) { + return false; + } + } + return true; +} + void AsClusterFatTree::getRouteAndLatency(RoutingEdgePtr src, RoutingEdgePtr dst, sg_platf_route_cbarg_t into, double *latency) { - // TODO + FatTreeNode *source, *destination, *currentNode; + std::vector route; + std::map::const_iterator tempIter; + tempIter = this->computeNodes.find(src->getId()); + + // xbt_die -> assert + if (tempIter == this->computeNodes.end()) { + xbt_die("Could not find the source %s [%d] in the fat tree", src->getName(), src->getId()); + } + source = tempIter->second; + tempIter = this->computeNodes.find(dst->getId()); + if (tempIter == this->computeNodes.end()) { + xbt_die("Could not find the destination %s [%d] in the fat tree", src->getName(), src->getId()); + } + + + destination = tempIter->second; + XBT_DEBUG("Get route and latency from '%s' [%d] to '%s' [%d] in a fat tree", + src->getName(), src->getId(), dst->getName(), dst->getId()); + + currentNode = source; + + // up part + while (!isInSubTree(currentNode, destination)) { + int d, k; // as in d-mod-k + d = destination->position; + + for (unsigned int i = 0 ; i < currentNode->level ; i++) { + d /= this->upperLevelNodesNumber[i]; + } + k = this->upperLevelNodesNumber[currentNode->level]; + d = d % k; + route.push_back(currentNode->parents[d]->upLink); + + if(latency) { + *latency += currentNode->parents[d]->upLink->getLatency(); + } + currentNode = currentNode->parents[d]->upNode; + } + XBT_DEBUG("%d(%u,%u) is in the sub tree of %d(%u,%u).", destination->id, destination->level, destination->position, currentNode->id, currentNode->level, currentNode->position); + // Down part + while(currentNode != destination) { + for(unsigned int i = 0 ; i < currentNode->children.size() ; i++) { + if(i % this->lowerLevelNodesNumber[currentNode->level - 1] == + destination->label[currentNode->level - 1]) { + route.push_back(currentNode->children[i]->downLink); + if(latency) { + *latency += currentNode->children[i]->downLink->getLatency(); + } + currentNode = currentNode->children[i]->downNode; + XBT_DEBUG("%d(%u,%u) is accessible through %d(%u,%u)", destination->id, destination->level, destination->position, currentNode->id, currentNode->level, currentNode->position); + } + } + } + + for (unsigned int i = 0 ; i < route.size() ; i++) { + xbt_dynar_push_as(into->link_list, void*, route[i]); + } + } /* This function makes the assumption that parse_specific_arguments() and * addNodes() have already been called */ -void AsClusterFatTree::create_links(sg_platf_cluster_cbarg_t cluster) { - +void AsClusterFatTree::create_links(sg_platf_cluster_cbarg_t cluster){ if(this->levels == 0) { return; } - this->nodesByLevel.resize(this->levels, 0); + this->generateSwitches(); + + + if(XBT_LOG_ISENABLED(surf_route_fat_tree, xbt_log_priority_debug)) { + std::stringstream msgBuffer; + + msgBuffer << "We are creating a fat tree of " << this->levels << " levels " + << "with " << this->nodesByLevel[0] << " processing nodes"; + for (unsigned int i = 1 ; i <= this->levels ; i++) { + msgBuffer << ", " << this->nodesByLevel[i] << " switches at level " << i; + } + XBT_DEBUG("%s", msgBuffer.str().c_str()); + msgBuffer.str(""); + msgBuffer << "Nodes are : "; + + for (unsigned int i = 0 ; i < this->nodes.size() ; i++) { + msgBuffer << this->nodes[i]->id << "(" << this->nodes[i]->level << "," + << this->nodes[i]->position << ") "; + } + XBT_DEBUG("%s", msgBuffer.str().c_str()); + } + + + this->generateLabels(); + + unsigned int k = 0; + // Nodes are totally ordered, by level and then by position, in this->nodes + for (unsigned int i = 0 ; i < this->levels ; i++) { + for (unsigned int j = 0 ; j < this->nodesByLevel[i] ; j++) { + this->connectNodeToParents(cluster, this->nodes[k]); + k++; + } + } + + if(XBT_LOG_ISENABLED(surf_route_fat_tree, xbt_log_priority_debug)) { + std::stringstream msgBuffer; + msgBuffer << "Links are : "; + for (unsigned int i = 0 ; i < this->links.size() ; i++) { + msgBuffer << "(" << this->links[i]->upNode->id << "," + << this->links[i]->downNode->id << ") "; + } + XBT_DEBUG("%s", msgBuffer.str().c_str()); + } + + +} + +int AsClusterFatTree::connectNodeToParents(sg_platf_cluster_cbarg_t cluster, + FatTreeNode *node) { + std::vector::iterator currentParentNode = this->nodes.begin(); + int connectionsNumber = 0; + const int level = node->level; + XBT_DEBUG("We are connecting node %d(%u,%u) to his parents.", + node->id, node->level, node->position); + currentParentNode += this->getLevelPosition(level + 1); + for (unsigned int i = 0 ; i < this->nodesByLevel[level + 1] ; i++ ) { + if(this->areRelated(*currentParentNode, node)) { + XBT_DEBUG("%d(%u,%u) and %d(%u,%u) are related," + " with %u links between them.", node->id, + node->level, node->position, (*currentParentNode)->id, + (*currentParentNode)->level, (*currentParentNode)->position, this->lowerLevelPortsNumber[level]); + for (unsigned int j = 0 ; j < this->lowerLevelPortsNumber[level] ; j++) { + this->addLink(cluster, *currentParentNode, node->label[level] + + j * this->lowerLevelNodesNumber[level], node, + (*currentParentNode)->label[level] + + j * this->upperLevelNodesNumber[level]); + } + connectionsNumber++; + } + ++currentParentNode; + } + return connectionsNumber; +} + + +bool AsClusterFatTree::areRelated(FatTreeNode *parent, FatTreeNode *child) { + std::stringstream msgBuffer; + + if(XBT_LOG_ISENABLED(surf_route_fat_tree, xbt_log_priority_debug)) { + msgBuffer << "Are " << child->id << "(" << child->level << "," + << child->position << ") <"; + + for (unsigned int i = 0 ; i < this->levels ; i++) { + msgBuffer << child->label[i] << ","; + } + msgBuffer << ">"; + + msgBuffer << " and " << parent->id << "(" << parent->level + << "," << parent->position << ") <"; + for (unsigned int i = 0 ; i < this->levels ; i++) { + msgBuffer << parent->label[i] << ","; + } + msgBuffer << ">"; + msgBuffer << " related ? "; + XBT_DEBUG("%s", msgBuffer.str().c_str()); + + } + if (parent->level != child->level + 1) { + return false; + } + + for (unsigned int i = 0 ; i < this->levels; i++) { + if (parent->label[i] != child->label[i] && i + 1 != parent->level) { + return false; + } + } + return true; +} + +void AsClusterFatTree::generateSwitches() { + XBT_DEBUG("Generating switches."); + this->nodesByLevel.resize(this->levels + 1, 0); unsigned int nodesRequired = 0; + // We take care of the number of nodes by level + this->nodesByLevel[0] = 1; + for (unsigned int i = 0 ; i < this->levels ; i++) { + this->nodesByLevel[0] *= this->lowerLevelNodesNumber[i]; + } + + if(this->nodesByLevel[0] != this->nodes.size()) { + surf_parse_error("The number of provided nodes does not fit with the wanted topology." + " Please check your platform description (We need %d nodes, we got %zu)", + this->nodesByLevel[0], this->nodes.size()); + return; + } + + for (unsigned int i = 0 ; i < this->levels ; i++) { int nodesInThisLevel = 1; - for (unsigned int j = 0 ; j < i ; j++) { + for (unsigned int j = 0 ; j <= i ; j++) { nodesInThisLevel *= this->upperLevelNodesNumber[j]; } @@ -45,79 +255,124 @@ void AsClusterFatTree::create_links(sg_platf_cluster_cbarg_t cluster) { nodesInThisLevel *= this->lowerLevelNodesNumber[j]; } - this->nodesByLevel[i] = nodesInThisLevel; + this->nodesByLevel[i+1] = nodesInThisLevel; nodesRequired += nodesInThisLevel; } - - if(nodesRequired > this->nodes.size()) { - surf_parse_error("There is not enough nodes to fit to the described topology." - " Please check your platform description (We need %d nodes, we only got %zu)", - nodesRequired, this->nodes.size()); - return; - } - // Nodes are totally ordered, by level and then by position, in this->nodes + + // If we have to many compute nodes, we ditch them + + + // We create the switches int k = 0; for (unsigned int i = 0 ; i < this->levels ; i++) { + for (unsigned int j = 0 ; j < this->nodesByLevel[i + 1] ; j++) { + FatTreeNode* newNode; + newNode = new FatTreeNode(--k, i + 1, j); + XBT_DEBUG("We create the switch %d(%d,%d)", newNode->id, newNode->level, newNode->position); + newNode->children.resize(this->lowerLevelNodesNumber[i] * + this->lowerLevelPortsNumber[i]); + if (i != this->levels - 1) { + newNode->parents.resize(this->upperLevelNodesNumber[i + 1] * this->lowerLevelPortsNumber[i + 1]); + } + newNode->label.resize(this->levels); + this->nodes.push_back(newNode); + } + } +} + +void AsClusterFatTree::generateLabels() { + XBT_DEBUG("Generating labels."); + // TODO : check if nodesByLevel and nodes are filled + std::vector maxLabel(this->levels); + std::vector currentLabel(this->levels); + unsigned int k = 0; + for (unsigned int i = 0 ; i <= this->levels ; i++) { + currentLabel.assign(this->levels, 0); + for (unsigned int j = 0 ; j < this->levels ; j++) { + maxLabel[j] = j + 1 > i ? + this->lowerLevelNodesNumber[j] : this->upperLevelNodesNumber[j]; + } + for (unsigned int j = 0 ; j < this->nodesByLevel[i] ; j++) { - this->nodes[k]->level = i; - this->nodes[k]->position = j; - if(i != 0) { - int position, size; - this->getLevelPosition(i - 1, &position, &size); // TODO : check position and size ? - /* We create the connexions between this nodes and all its parents - */ - for (unsigned int l = this->upperLevelNodesNumber[i] * j ; - l < this->upperLevelNodesNumber[i] * (j + 1) ; l++) - this->addLink(cluster, this->nodes[position + l], this->nodes[k]); + + if(XBT_LOG_ISENABLED(surf_route_fat_tree, xbt_log_priority_debug )) { + std::stringstream msgBuffer; + + msgBuffer << "Assigning label <"; + for (unsigned int l = 0 ; l < this->levels ; l++) { + msgBuffer << currentLabel[l] << ","; + } + msgBuffer << "> to " << k << " (" << i << "," << j <<")"; + + XBT_DEBUG("%s", msgBuffer.str().c_str()); + } + this->nodes[k]->label.assign(currentLabel.begin(), currentLabel.end()); + + bool remainder = true; + + unsigned int pos = 0; + do { + std::stringstream msgBuffer; + + ++currentLabel[pos]; + if (currentLabel[pos] >= maxLabel[pos]) { + currentLabel[pos] = 0; + remainder = true; + } + else { + remainder = false; + } + if (!remainder) { + pos = 0; + } + else { + ++pos; + } } + while(remainder && pos < this->levels); k++; } } } -void AsClusterFatTree::getLevelPosition(const unsigned int level, int *position, int *size) { - if (level > this->levels - 1) { - *position = -1; - *size = -1; - return; + +int AsClusterFatTree::getLevelPosition(const unsigned int level) { + if (level > this->levels) { + // Well, that should never happen. Maybe should we throw instead. + return -1; } int tempPosition = 0; for (unsigned int i = 0 ; i < level ; i++) { tempPosition += this->nodesByLevel[i]; } - *position = tempPosition; - *size = this->nodesByLevel[level]; -} - -void AsClusterFatTree::addNodes(std::vector const& id) { - for (size_t i = 0 ; i < id.size() ; i++) { - this->nodes.push_back(new FatTreeNode(id[i])); - } + return tempPosition; } -void AsClusterFatTree::addLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode *parent, - FatTreeNode *child) { +void AsClusterFatTree::addProcessingNode(int id) { using std::make_pair; - if (parent->children.size() == this->nodesByLevel[parent->level] || - child->parents.size() == this->nodesByLevel[child->level]) { - /* NB : This case should never happen, if this private function is not misused, - * so should we keep this test, keep it only for debug, throw an exception - * or get rid of it ? In all cases, anytime we get in there, code should be - * fixed - */ - xbt_die("I've been asked to create a link that could not possibly exist"); - return; - } - - parent->children.push_back(child); - child->parents.push_back(parent); + static int position = 0; + FatTreeNode* newNode; + newNode = new FatTreeNode(id, 0, position++); + newNode->parents.resize(this->upperLevelNodesNumber[0] * this->lowerLevelPortsNumber[0]); + newNode->label.resize(this->levels); + this->computeNodes.insert(make_pair(id,newNode)); + this->nodes.push_back(newNode); +} +void AsClusterFatTree::addLink(sg_platf_cluster_cbarg_t cluster, + FatTreeNode *parent, unsigned int parentPort, + FatTreeNode *child, unsigned int childPort) { FatTreeLink *newLink; + newLink = new FatTreeLink(cluster, child, parent); + XBT_DEBUG("Creating a link between the parent (%d,%d,%u)" + " and the child (%d,%d,%u)", parent->level, parent->position, + parentPort, child->level, child->position, childPort); + parent->children[parentPort] = newLink; + child->parents[childPort] = newLink; - newLink = new FatTreeLink(cluster, parent, child, this->lowerLevelPortsNumber[parent->level]); - this->links.insert(make_pair(make_pair(parent->id, child->id), newLink)); + this->links.push_back(newLink); @@ -138,7 +393,7 @@ void AsClusterFatTree::parse_specific_arguments(sg_platf_cluster_cbarg_t } // The first parts of topo_parameters should be the levels number - this->levels = std::atoi(tmp[0].c_str()); // stoi() only in C++11... + this->levels = std::atoi(parameters[0].c_str()); // stoi() only in C++11... // Then, a l-sized vector standing for the childs number by level boost::split(tmp, parameters[1], boost::is_any_of(",")); @@ -181,16 +436,22 @@ void AsClusterFatTree::generateDotFile(const string& filename) const { file.open(filename.c_str(), ios::out | ios::trunc); if(file.is_open()) { - // That could also be greatly clarified with C++11 - std::map,FatTreeLink*>::const_iterator iter; file << "graph AsClusterFatTree {\n"; - for (iter = this->links.begin() ; iter != this->links.end() ; iter++ ) { - for (unsigned int j = 0 ; j < iter->second->ports ; j++) { - file << iter->second->source->id + for (unsigned int i = 0 ; i < this->nodes.size() ; i++) { + file << this->nodes[i]->id; + if(this->nodes[i]->id < 0) { + file << " [shape=circle];\n"; + } + else { + file << " [shape=hexagon];\n"; + } + } + + for (unsigned int i = 0 ; i < this->links.size() ; i++ ) { + file << this->links[i]->downNode->id << " -- " - << iter->second->destination->id + << this->links[i]->upNode->id << ";\n"; - } } file << "}"; file.close(); @@ -205,25 +466,33 @@ FatTreeNode::FatTreeNode(int id, int level, int position) : id(id), level(level), position(position){} -FatTreeLink::FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode *source, - FatTreeNode *destination, - unsigned int ports) : ports(ports), source(source), - destination(destination) { +FatTreeLink::FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode *downNode, + FatTreeNode *upNode) : upNode(upNode), + downNode(downNode) { + static int uniqueId = 0; s_sg_platf_link_cbarg_t linkTemplate; + memset(&linkTemplate, 0, sizeof(linkTemplate)); linkTemplate.bandwidth = cluster->bw; linkTemplate.latency = cluster->lat; linkTemplate.state = SURF_RESOURCE_ON; linkTemplate.policy = cluster->sharing_policy; // Maybe should we do sthg with that ? - - for(unsigned int i = 0 ; i < ports ; i++) { - NetworkLink* link; - linkTemplate.id = bprintf("link_from_%d_to_%d_%d_UP", source->id, destination->id, i); - sg_platf_new_link(&linkTemplate); - link = (NetworkLink*) xbt_lib_get_or_null(link_lib, linkTemplate.id, SURF_LINK_LEVEL); - this->linksUp.push_back(link); // check link? - linkTemplate.id = bprintf("link_from_%d_to_%d_%d_DOWN", source->id, destination->id, i); - sg_platf_new_link(&linkTemplate); + linkTemplate.id = bprintf("link_from_%d_to_%d_%d", downNode->id, upNode->id, uniqueId); + sg_platf_new_link(&linkTemplate); + NetworkLink* link; + if (cluster->sharing_policy == SURF_LINK_FULLDUPLEX) { + std::string tmpID; + tmpID = std::string(linkTemplate.id) + "_UP"; + link = (NetworkLink*) xbt_lib_get_or_null(link_lib, tmpID.c_str(), SURF_LINK_LEVEL); + this->upLink = link; // check link? + tmpID = std::string(linkTemplate.id) + "_DOWN"; + link = (NetworkLink*) xbt_lib_get_or_null(link_lib, tmpID.c_str(), SURF_LINK_LEVEL); + this->downLink = link; // check link ? + } + else { link = (NetworkLink*) xbt_lib_get_or_null(link_lib, linkTemplate.id, SURF_LINK_LEVEL); - this->linksDown.push_back(link); // check link ? + this->upLink = link; + this->downLink = link; } + uniqueId++; + } diff --git a/src/surf/surf_routing_cluster_fat_tree.hpp b/src/surf/surf_routing_cluster_fat_tree.hpp index 62f9354b4e..addb37e2b1 100644 --- a/src/surf/surf_routing_cluster_fat_tree.hpp +++ b/src/surf/surf_routing_cluster_fat_tree.hpp @@ -20,38 +20,39 @@ /* TODO : limiter link ? Loopback? * */ +class FatTreeNode; +class FatTreeLink; + class FatTreeNode { public: - int id; // ID as given by the user, should be unique - int level; // The 0th level represents the leafs of the PGFT - int position; // Position in the level - + int id; + unsigned int level; // The 0th level represents the leafs of the PGFT + unsigned int position; // Position in the level + std::vector label; /* We can see the sizes sum of the two following vectors as the device * ports number. If we use the notations used in Zahavi's paper, * children.size() = m_level and parents.size() = w_(level+1) * */ - std::vector children; // m, apply from lvl 0 to levels - 1 - std::vector parents; // w, apply from lvl 1 to levels + std::vector children; // m, apply from lvl 0 to levels - 1 + std::vector parents; // w, apply from lvl 1 to levels FatTreeNode(int id, int level=-1, int position=-1); }; class FatTreeLink { public: FatTreeLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode *source, - FatTreeNode *destination, unsigned int ports = 0); - unsigned int ports; + FatTreeNode *destination); + // unsigned int ports; /* Links are dependant of the chosen network model, but must implement * NetworkLink */ - std::vector linksUp; // From source to destination - std::vector linksDown; // From destination to source - /* As it is symetric, it might as well be first / second instead - * of source / destination - */ - FatTreeNode *source; - FatTreeNode *destination; + NetworkLink *upLink; + NetworkLink *downLink; + FatTreeNode *upNode; + FatTreeNode *downNode; + }; class AsClusterFatTree : public AsCluster { @@ -66,22 +67,29 @@ public: // double *latency) const; virtual void create_links(sg_platf_cluster_cbarg_t cluster); void parse_specific_arguments(sg_platf_cluster_cbarg_t cluster); - void addNodes(std::vector const& id); + void addProcessingNode(int id); void generateDotFile(const string& filename = "fatTree.dot") const; -protected: +private: //description of a PGFT (TODO : better doc) unsigned int levels; - std::vector lowerLevelNodesNumber; // number of children by node - std::vector upperLevelNodesNumber; // number of parents by node - std::vector lowerLevelPortsNumber; // ports between each level l and l-1 + std::vector lowerLevelNodesNumber; // number of children by node + std::vector upperLevelNodesNumber; // number of parents by node + std::vector lowerLevelPortsNumber; // ports between each level l and l-1 + std::map computeNodes; std::vector nodes; - std::map, FatTreeLink*> links; + std::vector links; std::vector nodesByLevel; - void addLink(sg_platf_cluster_cbarg_t cluster, FatTreeNode *parent, - FatTreeNode *child); - void getLevelPosition(const unsigned int level, int *position, int *size); + void addLink(sg_platf_cluster_cbarg_t cluster, + FatTreeNode *parent, unsigned int parentPort, + FatTreeNode *child, unsigned int childPort); + int getLevelPosition(const unsigned int level); + void generateLabels(); + void generateSwitches(); + int connectNodeToParents(sg_platf_cluster_cbarg_t cluster, FatTreeNode *node); + bool areRelated(FatTreeNode *parent, FatTreeNode *child); + bool isInSubTree(FatTreeNode *root, FatTreeNode *node); }; #endif diff --git a/src/surf/surf_routing_private.hpp b/src/surf/surf_routing_private.hpp index fa365c1518..4dbfad44c2 100644 --- a/src/surf/surf_routing_private.hpp +++ b/src/surf/surf_routing_private.hpp @@ -67,8 +67,8 @@ void model_floyd_parse_route(AS_t rc, sg_platf_route_cbarg_t route); /* ************** Cluster ROUTING **************** */ AsPtr model_cluster_create(void); /* create structures for cluster routing model */ -AsPtr model_torus_cluster_create(void); /* create structures for cluster routing model */ - +AsPtr model_torus_cluster_create(void); +AsPtr model_fat_tree_cluster_create(void); /* ************************************************** */ /* ************** Vivaldi ROUTING **************** */ diff --git a/src/surf/surfxml_parse.c b/src/surf/surfxml_parse.c index c0c04767d9..dafaab16b9 100644 --- a/src/surf/surfxml_parse.c +++ b/src/surf/surfxml_parse.c @@ -530,6 +530,9 @@ void ETag_surfxml_cluster(void){ case A_surfxml_cluster_topology_TORUS: cluster.topology= SURF_CLUSTER_TORUS ; break; + case A_surfxml_cluster_topology_FAT___TREE: + cluster.topology = SURF_CLUSTER_FAT_TREE; + break; default: surf_parse_error("Invalid cluster topology for cluster %s", cluster.id); diff --git a/src/surf/trace_mgr.c b/src/surf/trace_mgr.c index 8f44eaa95d..2f0478fe18 100644 --- a/src/surf/trace_mgr.c +++ b/src/surf/trace_mgr.c @@ -339,8 +339,9 @@ tmgr_trace_t tmgr_trace_new_from_file(const char *filename) } f = surf_fopen(filename, "r"); - xbt_assert(f != NULL, "Cannot open file '%s' (path=%s)", filename, - xbt_str_join(surf_path, ":")); + if (f == NULL) + xbt_die("Cannot open file '%s' (path=%s)", filename, + xbt_str_join(surf_path, ":")); tstr = xbt_str_from_file(f); fclose(f); diff --git a/src/surf/vm_workstation_hl13.cpp b/src/surf/vm_workstation_hl13.cpp index 92b02461a9..da4b1f2424 100644 --- a/src/surf/vm_workstation_hl13.cpp +++ b/src/surf/vm_workstation_hl13.cpp @@ -9,10 +9,10 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(surf_vm_workstation); -void surf_vm_workstation_model_init_current_default(void){ +void surf_vm_workstation_model_init_HL13(void){ if (surf_cpu_model_vm) { surf_vm_workstation_model = new WorkstationVMHL13Model(); - ModelPtr model = static_cast(surf_vm_workstation_model); + ModelPtr model = surf_vm_workstation_model; xbt_dynar_push(model_list, &model); xbt_dynar_push(model_list_invoke, &model); @@ -38,15 +38,16 @@ ActionPtr WorkstationVMHL13Model::communicate(WorkstationPtr src, WorkstationPtr /* ind means ''indirect'' that this is a reference on the whole dict_elm * structure (i.e not on the surf_resource_private infos) */ -void WorkstationVMHL13Model::createResource(const char *name, void *ind_phys_workstation) +WorkstationVMPtr WorkstationVMHL13Model::createWorkstationVM(const char *name, surf_resource_t ind_phys_workstation) { - WorkstationVMHL13Ptr ws = new WorkstationVMHL13(this, name, NULL, static_cast(ind_phys_workstation)); + WorkstationVMHL13Ptr ws = new WorkstationVMHL13(this, name, NULL, ind_phys_workstation); - xbt_lib_set(host_lib, name, SURF_WKS_LEVEL, static_cast(ws)); + xbt_lib_set(host_lib, name, SURF_WKS_LEVEL, ws); /* TODO: * - check how network requests are scheduled between distinct processes competing for the same card. */ + return ws; } static inline double get_solved_value(CpuActionPtr cpu_action) @@ -69,8 +70,8 @@ double WorkstationVMHL13Model::shareResources(double now) /* 0. Make sure that we already calculated the resource share at the physical * machine layer. */ { - ModelPtr ws_model = static_cast(surf_workstation_model); - ModelPtr vm_ws_model = static_cast(surf_vm_workstation_model); + ModelPtr ws_model = surf_workstation_model; + ModelPtr vm_ws_model = surf_vm_workstation_model; unsigned int index_of_pm_ws_model = xbt_dynar_search(model_list_invoke, &ws_model); unsigned int index_of_vm_ws_model = xbt_dynar_search(model_list_invoke, &vm_ws_model); xbt_assert((index_of_pm_ws_model < index_of_vm_ws_model), "Cannot assume surf_workstation_model comes before"); @@ -111,16 +112,16 @@ double WorkstationVMHL13Model::shareResources(double now) iter != WorkstationVMModel::ws_vms.end(); ++iter) { WorkstationVMPtr ws_vm = &*iter; - CpuPtr cpu = static_cast(ws_vm->p_cpu); + CpuPtr cpu = ws_vm->p_cpu; xbt_assert(cpu, "cpu-less workstation"); - double solved_value = get_solved_value(static_cast(ws_vm->p_action)); + double solved_value = get_solved_value(ws_vm->p_action); XBT_DEBUG("assign %f to vm %s @ pm %s", solved_value, ws_vm->getName(), ws_vm->p_subWs->getName()); // TODO: check lmm_update_constraint_bound() works fine instead of the below manual substitution. // cpu_cas01->constraint->bound = solved_value; - xbt_assert(cpu->getModel() == static_cast(surf_cpu_model_vm)); + xbt_assert(cpu->getModel() == surf_cpu_model_vm); lmm_system_t vcpu_system = cpu->getModel()->getMaxminSystem(); lmm_update_constraint_bound(vcpu_system, cpu->getConstraint(), virt_overhead * solved_value); } @@ -245,7 +246,7 @@ WorkstationVMHL13::WorkstationVMHL13(WorkstationVMModelPtr model, const char* na /* We can assume one core and cas01 cpu for the first step. * Do xbt_lib_set(host_lib, name, SURF_CPU_LEVEL, cpu) if you get the resource. */ - p_cpu = static_cast(surf_cpu_model_vm)->createResource(name, // name + p_cpu = surf_cpu_model_vm->createCpu(name, // name sub_cpu->getPowerPeakList(), // host->power_peak, sub_cpu->getPState(), 1, // host->power_scale, @@ -258,7 +259,7 @@ WorkstationVMHL13::WorkstationVMHL13(WorkstationVMModelPtr model, const char* na /* We create cpu_action corresponding to a VM process on the host operating system. */ /* FIXME: TODO: we have to peridocally input GUESTOS_NOISE to the system? how ? */ // vm_ws->cpu_action = surf_cpu_model_pm->extension.cpu.execute(ind_phys_workstation, GUESTOS_NOISE); - p_action = static_cast(sub_cpu->execute(0)); + p_action = sub_cpu->execute(0); /* The SURF_WKS_LEVEL at host_lib saves workstation_CLM03 objects. Please * note workstation_VM2013 objects, inheriting the workstation_CLM03 diff --git a/src/surf/vm_workstation_hl13.hpp b/src/surf/vm_workstation_hl13.hpp index 24d6175e70..a17605c3c8 100644 --- a/src/surf/vm_workstation_hl13.hpp +++ b/src/surf/vm_workstation_hl13.hpp @@ -13,8 +13,6 @@ #define GUESTOS_NOISE 100 // This value corresponds to the cost of the global action associated to the VM // It corresponds to the cost of a VM running no tasks. -void surf_vm_workstation_model_init(void); - /*********** * Classes * ***********/ @@ -25,10 +23,6 @@ typedef WorkstationVMHL13Model *WorkstationVMHL13ModelPtr; class WorkstationVMHL13; typedef WorkstationVMHL13 *WorkstationVMHL13Ptr; -/********* - * Tools * - *********/ - /********* * Model * *********/ @@ -36,7 +30,8 @@ class WorkstationVMHL13Model : public WorkstationVMModel { public: WorkstationVMHL13Model(); ~WorkstationVMHL13Model(){}; - void createResource(const char *name, void *ind_phys_workstation); + + WorkstationVMPtr createWorkstationVM(const char *name, surf_resource_t ind_phys_workstation); double shareResources(double now); void adjustWeightOfDummyCpuActions() {}; ActionPtr communicate(WorkstationPtr src, WorkstationPtr dst, double size, double rate); diff --git a/src/surf/vm_workstation_interface.hpp b/src/surf/vm_workstation_interface.hpp index 66a3e9da10..4479a7f643 100644 --- a/src/surf/vm_workstation_interface.hpp +++ b/src/surf/vm_workstation_interface.hpp @@ -12,8 +12,6 @@ #define GUESTOS_NOISE 100 // This value corresponds to the cost of the global action associated to the VM // It corresponds to the cost of a VM running no tasks. -void surf_vm_workstation_model_init(void); - /*********** * Classes * ***********/ @@ -68,15 +66,16 @@ public: */ ~WorkstationVMModel(){}; + WorkstationPtr createWorkstation(const char *name){DIE_IMPOSSIBLE;} + /** * @brief Create a new WorkstationVM - * + * * @param name The name of the new WorkstationVM * @param ind_phys_workstation The workstation hosting the VM - * + * */ - virtual void createResource(const char *name, void *ind_phys_workstation)=0; - + virtual WorkstationVMPtr createWorkstationVM(const char *name, surf_resource_t ind_phys_workstation)=0; void adjustWeightOfDummyCpuActions() {}; typedef boost::intrusive::list(surf_workstation_model)->createResource(host->id); -} - /********* * Model * *********/ @@ -31,10 +27,10 @@ void surf_workstation_model_init_current_default(void) surf_network_model_init_LegrandVelho(); surf_workstation_model->p_cpuModel = surf_cpu_model_pm; - ModelPtr model = static_cast(surf_workstation_model); + ModelPtr model = surf_workstation_model; xbt_dynar_push(model_list, &model); xbt_dynar_push(model_list_invoke, &model); - sg_platf_host_add_cb(workstation_new); + sg_platf_host_add_cb(workstation_parse_init); } void surf_workstation_model_init_compound() @@ -44,10 +40,10 @@ void surf_workstation_model_init_compound() xbt_assert(surf_network_model, "No network model defined yet!"); surf_workstation_model = new WorkstationCLM03Model(); - ModelPtr model = static_cast(surf_workstation_model); + ModelPtr model = surf_workstation_model; xbt_dynar_push(model_list, &model); xbt_dynar_push(model_list_invoke, &model); - sg_platf_host_add_cb(workstation_new); + sg_platf_host_add_cb(workstation_parse_init); } WorkstationCLM03Model::WorkstationCLM03Model() @@ -58,18 +54,13 @@ WorkstationCLM03Model::WorkstationCLM03Model() WorkstationCLM03Model::~WorkstationCLM03Model() {} -void WorkstationCLM03Model::parseInit(sg_platf_host_cbarg_t host){ - createResource(host->id); -} - -WorkstationPtr WorkstationCLM03Model::createResource(const char *name){ - +WorkstationPtr WorkstationCLM03Model::createWorkstation(const char *name){ WorkstationPtr workstation = new WorkstationCLM03(surf_workstation_model, name, NULL, (xbt_dynar_t)xbt_lib_get_or_null(storage_lib, name, ROUTING_STORAGE_HOST_LEVEL), (RoutingEdgePtr)xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL), static_cast(xbt_lib_get_or_null(host_lib, name, SURF_CPU_LEVEL))); XBT_DEBUG("Create workstation %s with %ld mounted disks", name, xbt_dynar_length(workstation->p_storage)); - xbt_lib_set(host_lib, name, SURF_WKS_LEVEL, static_cast(workstation)); + xbt_lib_set(host_lib, name, SURF_WKS_LEVEL, workstation); return workstation; } @@ -107,13 +98,15 @@ ActionPtr WorkstationCLM03Model::executeParallelTask(int workstation_nb, double *communication_amount, double rate){ #define cost_or_zero(array,pos) ((array)?(array)[pos]:0.0) + ActionPtr action =NULL; if ((workstation_nb == 1) - && (cost_or_zero(communication_amount, 0) == 0.0)) - return ((WorkstationCLM03Ptr)workstation_list[0])->execute(computation_amount[0]); - else if ((workstation_nb == 1) - && (cost_or_zero(computation_amount, 0) == 0.0)) - return communicate((WorkstationCLM03Ptr)workstation_list[0], (WorkstationCLM03Ptr)workstation_list[0],communication_amount[0], rate); - else if ((workstation_nb == 2) + && (cost_or_zero(communication_amount, 0) == 0.0)){ + action = ((WorkstationCLM03Ptr)workstation_list[0])->execute(computation_amount[0]); + } else if ((workstation_nb == 1) + && (cost_or_zero(computation_amount, 0) == 0.0)) { + action = communicate((WorkstationCLM03Ptr)workstation_list[0], + (WorkstationCLM03Ptr)workstation_list[0],communication_amount[0], rate); + } else if ((workstation_nb == 2) && (cost_or_zero(computation_amount, 0) == 0.0) && (cost_or_zero(computation_amount, 1) == 0.0)) { int i,nb = 0; @@ -125,13 +118,15 @@ ActionPtr WorkstationCLM03Model::executeParallelTask(int workstation_nb, value = cost_or_zero(communication_amount, i); } } - if (nb == 1) - return communicate((WorkstationCLM03Ptr)workstation_list[0], (WorkstationCLM03Ptr)workstation_list[1],value, rate); - } + if (nb == 1){ + action = communicate((WorkstationCLM03Ptr)workstation_list[0], + (WorkstationCLM03Ptr)workstation_list[1],value, rate); + } + } else + THROW_UNIMPLEMENTED; /* This model does not implement parallel tasks */ #undef cost_or_zero - - THROW_UNIMPLEMENTED; /* This model does not implement parallel tasks */ - return NULL; + xbt_free((WorkstationCLM03Ptr)workstation_list); + return action; } ActionPtr WorkstationCLM03Model::communicate(WorkstationPtr src, WorkstationPtr dst, double size, double rate){ diff --git a/src/surf/workstation_clm03.hpp b/src/surf/workstation_clm03.hpp index f471b16f5c..88b485435a 100644 --- a/src/surf/workstation_clm03.hpp +++ b/src/surf/workstation_clm03.hpp @@ -33,8 +33,7 @@ class WorkstationCLM03Model : public WorkstationModel { public: WorkstationCLM03Model(); ~WorkstationCLM03Model(); - void parseInit(sg_platf_host_cbarg_t host); - WorkstationPtr createResource(const char *name); + WorkstationPtr createWorkstation(const char *name); double shareResources(double now); void updateActionsState(double now, double delta); diff --git a/src/surf/workstation_interface.cpp b/src/surf/workstation_interface.cpp index 70f949c12b..00ecfdf261 100644 --- a/src/surf/workstation_interface.cpp +++ b/src/surf/workstation_interface.cpp @@ -4,6 +4,7 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include "simix/smx_private.h" #include "workstation_interface.hpp" #include "vm_workstation_interface.hpp" #include "cpu_cas01.hpp" @@ -25,6 +26,15 @@ surf_callback(void, WorkstationPtr) workstationDestructedCallbacks; surf_callback(void, WorkstationPtr, e_surf_resource_state_t, e_surf_resource_state_t) workstationStateChangedCallbacks; surf_callback(void, WorkstationActionPtr, e_surf_action_state_t, e_surf_action_state_t) workstationActionStateChangedCallbacks; +void workstation_parse_init(sg_platf_host_cbarg_t host) +{ + surf_workstation_model->createWorkstation(host->id); +} + +void workstation_add_traces(){ + surf_workstation_model->addTraces(); +} + /********* * Model * *********/ @@ -197,7 +207,7 @@ xbt_dynar_t Workstation::getAttachedStorageList() if(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL) != NULL) { StoragePtr storage = static_cast(xbt_lib_get_level(xbt_lib_get_elm_or_null(storage_lib, key), SURF_STORAGE_LEVEL)); if(!strcmp((const char*)storage->p_attach,this->getName())){ - xbt_dynar_push_as(result, void *,(void *)static_cast(storage)->getName()); + xbt_dynar_push_as(result, void *, (void*)storage->getName()); } } } diff --git a/src/surf/workstation_interface.hpp b/src/surf/workstation_interface.hpp index 0d50aff434..b4e2dd7b0b 100644 --- a/src/surf/workstation_interface.hpp +++ b/src/surf/workstation_interface.hpp @@ -33,30 +33,32 @@ typedef WorkstationAction *WorkstationActionPtr; * @brief Callbacks handler which emit the callbacks after Workstation creation * * @details Callback functions have the following signature: `void(WorkstationPtr)` */ -extern surf_callback(void, WorkstationPtr) workstationCreatedCallbacks; +XBT_PUBLIC_DATA(surf_callback(void, WorkstationPtr)) workstationCreatedCallbacks; /** @ingroup SURF_callbacks * @brief Callbacks handler which emit the callbacks after Workstation destruction * * @details Callback functions have the following signature: `void(WorkstationPtr)` */ -extern surf_callback(void, WorkstationPtr) workstationDestructedCallbacks; +XBT_PUBLIC_DATA(surf_callback(void, WorkstationPtr)) workstationDestructedCallbacks; /** @ingroup SURF_callbacks * @brief Callbacks handler which emit the callbacks after Workstation State changed * * @details Callback functions have the following signature: `void(WorkstationActionPtr action, e_surf_resource_state_t old, e_surf_resource_state_t current)` */ -extern surf_callback(void, WorkstationPtr, e_surf_resource_state_t, e_surf_resource_state_t) workstationStateChangedCallbacks; +XBT_PUBLIC_DATA(surf_callback(void, WorkstationPtr, e_surf_resource_state_t, e_surf_resource_state_t)) workstationStateChangedCallbacks; /** @ingroup SURF_callbacks * @brief Callbacks handler which emit the callbacks after WorkstationAction State changed * * @details Callback functions have the following signature: `void(WorkstationActionPtr action, e_surf_resource_state_t old, e_surf_resource_state_t current)` */ -extern surf_callback(void, WorkstationActionPtr, e_surf_action_state_t, e_surf_action_state_t) workstationActionStateChangedCallbacks; +XBT_PUBLIC_DATA(surf_callback(void, WorkstationActionPtr, e_surf_action_state_t, e_surf_action_state_t)) workstationActionStateChangedCallbacks; /********* * Tools * *********/ -extern WorkstationModelPtr surf_workstation_model; +XBT_PUBLIC_DATA(WorkstationModelPtr) surf_workstation_model; +XBT_PUBLIC(void) workstation_parse_init(sg_platf_host_cbarg_t host); +XBT_PUBLIC(void) workstation_add_traces(); /********* * Model * @@ -84,6 +86,9 @@ public: */ ~WorkstationModel(); + virtual WorkstationPtr createWorkstation(const char *name)=0; + void addTraces(){DIE_IMPOSSIBLE;} + /** * @brief [brief description] * @details [long description] diff --git a/src/surf/workstation_ptask_L07.cpp b/src/surf/workstation_ptask_L07.cpp index a2b4ac6607..f7b460abf8 100644 --- a/src/surf/workstation_ptask_L07.cpp +++ b/src/surf/workstation_ptask_L07.cpp @@ -14,17 +14,49 @@ static int ptask_host_count = 0; static xbt_dict_t ptask_parallel_task_link_set = NULL; lmm_system_t ptask_maxmin_system = NULL; + +/**************************************/ +/*** Resource Creation & Destruction **/ +/**************************************/ + +static void ptask_netlink_parse_init(sg_platf_link_cbarg_t link) +{ + netlink_parse_init(link); + current_property_set = NULL; +} + +static void ptask_define_callbacks() +{ + sg_platf_host_add_cb(cpu_parse_init); + sg_platf_host_add_cb(workstation_parse_init); + sg_platf_link_add_cb(ptask_netlink_parse_init); + sg_platf_postparse_add_cb(workstation_add_traces); +} + +void surf_workstation_model_init_ptask_L07(void) +{ + XBT_INFO("surf_workstation_model_init_ptask_L07"); + xbt_assert(!surf_cpu_model_pm, "CPU model type already defined"); + xbt_assert(!surf_network_model, "network model type already defined"); + ptask_define_callbacks(); + surf_workstation_model = new WorkstationL07Model(); + ModelPtr model = surf_workstation_model; + xbt_dynar_push(model_list, &model); + xbt_dynar_push(model_list_invoke, &model); +} + + WorkstationL07Model::WorkstationL07Model() : WorkstationModel("Workstation ptask_L07") { if (!ptask_maxmin_system) ptask_maxmin_system = lmm_system_new(1); surf_workstation_model = NULL; surf_network_model = new NetworkL07Model(); surf_cpu_model_pm = new CpuL07Model(); - routing_model_create(static_cast(surf_network_model->createResource("__loopback__", + routing_model_create(surf_network_model->createNetworkLink("__loopback__", 498000000, NULL, 0.000015, NULL, SURF_RESOURCE_ON, NULL, - SURF_LINK_FATPIPE, NULL))); + SURF_LINK_FATPIPE, NULL)); p_cpuModel = surf_cpu_model_pm; } @@ -207,7 +239,7 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, for (i = 0; i < workstation_nb; i++) lmm_expand(ptask_maxmin_system, - static_cast(static_cast(workstation_list[i])->p_cpu)->getConstraint(), + static_cast(workstation_list[i])->p_cpu->getConstraint(), action->getVariable(), computation_amount[i]); for (i = 0; i < workstation_nb; i++) { @@ -237,15 +269,10 @@ ActionPtr WorkstationL07Model::executeParallelTask(int workstation_nb, action->setRemains(0.0); } - return static_cast(action); + return action; } -ResourcePtr WorkstationL07Model::createResource(const char *name, double /*power_scale*/, - double /*power_initial*/, - tmgr_trace_t /*power_trace*/, - e_surf_resource_state_t /*state_initial*/, - tmgr_trace_t /*state_trace*/, - xbt_dict_t /*cpu_properties*/) +WorkstationPtr WorkstationL07Model::createWorkstation(const char *name) { WorkstationL07Ptr wk = NULL; xbt_assert(!surf_workstation_resource_priv(surf_workstation_resource_by_name(name)), @@ -256,7 +283,7 @@ ResourcePtr WorkstationL07Model::createResource(const char *name, double /*power static_cast(xbt_lib_get_or_null(host_lib, name, ROUTING_HOST_LEVEL)), static_cast(xbt_lib_get_or_null(host_lib, name, SURF_CPU_LEVEL))); - xbt_lib_set(host_lib, name, SURF_WKS_LEVEL, static_cast(wk)); + xbt_lib_set(host_lib, name, SURF_WKS_LEVEL, wk); return wk;//FIXME:xbt_lib_get_elm_or_null(host_lib, name); } @@ -269,8 +296,8 @@ ActionPtr WorkstationL07Model::communicate(WorkstationPtr src, WorkstationPtr ds double *communication_amount = xbt_new0(double, 4); ActionPtr res = NULL; - workstation_list[0] = static_cast(src); - workstation_list[1] = static_cast(dst); + workstation_list[0] = src; + workstation_list[1] = dst; communication_amount[1] = size; res = executeParallelTask(2, workstation_list, @@ -287,7 +314,7 @@ xbt_dynar_t WorkstationL07Model::getRoute(WorkstationPtr src, WorkstationPtr dst return route; } -CpuPtr CpuL07Model::createResource(const char *name, xbt_dynar_t powerPeak, +CpuPtr CpuL07Model::createCpu(const char *name, xbt_dynar_t powerPeak, int pstate, double power_scale, tmgr_trace_t power_trace, int core, e_surf_resource_state_t state_initial, @@ -295,20 +322,22 @@ CpuPtr CpuL07Model::createResource(const char *name, xbt_dynar_t powerPeak, xbt_dict_t cpu_properties) { double power_initial = xbt_dynar_get_as(powerPeak, pstate, double); + xbt_dynar_free(&powerPeak); // kill memory leak xbt_assert(!surf_workstation_resource_priv(surf_workstation_resource_by_name(name)), "Host '%s' declared several times in the platform file.", name); CpuL07Ptr cpu = new CpuL07(this, name, cpu_properties, - power_initial, power_scale, power_trace,state_initial, state_trace); + power_initial, power_scale, power_trace, + core, state_initial, state_trace); - xbt_lib_set(host_lib, name, SURF_CPU_LEVEL, static_cast(cpu)); + xbt_lib_set(host_lib, name, SURF_CPU_LEVEL, cpu); - return cpu;//FIXME:xbt_lib_get_elm_or_null(host_lib, name); + return cpu; } -NetworkLinkPtr NetworkL07Model::createResource(const char *name, +NetworkLinkPtr NetworkL07Model::createNetworkLink(const char *name, double bw_initial, tmgr_trace_t bw_trace, double lat_initial, @@ -329,7 +358,7 @@ NetworkLinkPtr NetworkL07Model::createResource(const char *name, state_initial, state_trace, policy); - xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, static_cast(nw_link)); + xbt_lib_set(link_lib, name, SURF_LINK_LEVEL, nw_link); return nw_link; } @@ -349,7 +378,7 @@ void WorkstationL07Model::addTraces() xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); - host->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(host)); + host->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, host); } xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) { @@ -359,7 +388,7 @@ void WorkstationL07Model::addTraces() xbt_assert(host, "Host %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); - host->p_powerEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(host)); + host->p_powerEvent = tmgr_history_add_trace(history, trace, 0.0, 0, host); } /* Connect traces relative to network */ @@ -370,7 +399,7 @@ void WorkstationL07Model::addTraces() xbt_assert(link, "Link %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); - link->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(link)); + link->p_stateEvent = tmgr_history_add_trace(history, trace, 0.0, 0, link); } xbt_dict_foreach(trace_connect_list_bandwidth, cursor, trace_name, elm) { @@ -380,7 +409,7 @@ void WorkstationL07Model::addTraces() xbt_assert(link, "Link %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); - link->p_bwEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(link)); + link->p_bwEvent = tmgr_history_add_trace(history, trace, 0.0, 0, link); } xbt_dict_foreach(trace_connect_list_latency, cursor, trace_name, elm) { @@ -390,7 +419,7 @@ void WorkstationL07Model::addTraces() xbt_assert(link, "Link %s undefined", elm); xbt_assert(trace, "Trace %s undefined", trace_name); - link->p_latEvent = tmgr_history_add_trace(history, trace, 0.0, 0, static_cast(link)); + link->p_latEvent = tmgr_history_add_trace(history, trace, 0.0, 0, link); } } @@ -427,23 +456,21 @@ double WorkstationL07::getConsumedEnergy() } CpuL07::CpuL07(CpuL07ModelPtr model, const char* name, xbt_dict_t props, - double power_initial, - double power_scale, tmgr_trace_t power_trace, - e_surf_resource_state_t state_initial, tmgr_trace_t state_trace) + double power_initial, double power_scale, tmgr_trace_t power_trace, + int core, e_surf_resource_state_t state_initial, tmgr_trace_t state_trace) : Cpu(model, name, props, lmm_constraint_new(ptask_maxmin_system, this, power_initial * power_scale), - 1, power_initial, power_scale) + core, power_initial, power_scale) { xbt_assert(m_powerScale > 0, "Power has to be >0"); if (power_trace) - p_powerEvent = tmgr_history_add_trace(history, power_trace, 0.0, 0, - static_cast(this)); + p_powerEvent = tmgr_history_add_trace(history, power_trace, 0.0, 0, this); else p_powerEvent = NULL; setState(state_initial); if (state_trace) - p_stateEvent = tmgr_history_add_trace(history, state_trace, 0.0, 0, static_cast(this)); + p_stateEvent = tmgr_history_add_trace(history, state_trace, 0.0, 0, this); } LinkL07::LinkL07(NetworkL07ModelPtr model, const char* name, xbt_dict_t props, @@ -458,13 +485,13 @@ LinkL07::LinkL07(NetworkL07ModelPtr model, const char* name, xbt_dict_t props, { m_bwCurrent = bw_initial; if (bw_trace) - p_bwEvent = tmgr_history_add_trace(history, bw_trace, 0.0, 0, static_cast(this)); + p_bwEvent = tmgr_history_add_trace(history, bw_trace, 0.0, 0, this); setState(state_initial); m_latCurrent = lat_initial; if (lat_trace) - p_latEvent = tmgr_history_add_trace(history, lat_trace, 0.0, 0, static_cast(this)); + p_latEvent = tmgr_history_add_trace(history, lat_trace, 0.0, 0, this); if (policy == SURF_LINK_FATPIPE) lmm_constraint_shared(getConstraint()); @@ -534,7 +561,7 @@ ActionPtr WorkstationL07::execute(double size) double *computation_amount = xbt_new0(double, 1); double *communication_amount = xbt_new0(double, 1); - workstation_list[0] = static_cast(this); + workstation_list[0] = this; communication_amount[0] = 0.0; computation_amount[0] = size; @@ -698,113 +725,3 @@ double WorkstationL07Action::getRemains() XBT_OUT(); return m_remains; } - -/*FIXME:remove static void ptask_finalize(void) -{ - xbt_dict_free(&ptask_parallel_task_link_set); - - delete surf_workstation_model; - surf_workstation_model = NULL; - delete surf_network_model; - surf_network_model = NULL; - - ptask_host_count = 0; - - if (ptask_maxmin_system) { - lmm_system_free(ptask_maxmin_system); - ptask_maxmin_system = NULL; - } - }*/ - -/**************************************/ -/******* Resource Private **********/ -/**************************************/ - -/**************************************/ -/*** Resource Creation & Destruction **/ -/**************************************/ - -static void ptask_parse_workstation_init(sg_platf_host_cbarg_t host) -{ - double power_peak = xbt_dynar_get_as(host->power_peak, host->pstate, double); - //cpu->power_peak = power_peak; - xbt_dynar_free(&(host->power_peak)); /* kill memory leak */ - static_cast(surf_workstation_model)->createResource( - host->id, - power_peak, - host->power_scale, - host->power_trace, - host->initial_state, - host->state_trace, - host->properties); -} - -static void ptask_parse_link_init(sg_platf_link_cbarg_t link) -{ - if (link->policy == SURF_LINK_FULLDUPLEX) { - char *link_id; - link_id = bprintf("%s_UP", link->id); - static_cast(surf_network_model)->createResource(link_id, - link->bandwidth, - link->bandwidth_trace, - link->latency, - link->latency_trace, - link->state, - link->state_trace, - link->policy, - link->properties); - xbt_free(link_id); - link_id = bprintf("%s_DOWN", link->id); - static_cast(surf_network_model)->createResource(link_id, - link->bandwidth, - link->bandwidth_trace, - link->latency, - link->latency_trace, - link->state, - link->state_trace, - link->policy, - NULL); /* FIXME: We need to deep copy the - * properties or we won't be able to free - * it */ - xbt_free(link_id); - } else { - static_cast(surf_network_model)->createResource(link->id, - link->bandwidth, - link->bandwidth_trace, - link->latency, - link->latency_trace, - link->state, - link->state_trace, - link->policy, - link->properties); - } - - current_property_set = NULL; -} - -static void ptask_add_traces(){ - static_cast(surf_workstation_model)->addTraces(); -} - -static void ptask_define_callbacks() -{ - sg_platf_host_add_cb(parse_cpu_init); - sg_platf_host_add_cb(ptask_parse_workstation_init); - sg_platf_link_add_cb(ptask_parse_link_init); - sg_platf_postparse_add_cb(ptask_add_traces); -} - -/**************************************/ -/*************** Generic **************/ -/**************************************/ -void surf_workstation_model_init_ptask_L07(void) -{ - XBT_INFO("surf_workstation_model_init_ptask_L07"); - xbt_assert(!surf_cpu_model_pm, "CPU model type already defined"); - xbt_assert(!surf_network_model, "network model type already defined"); - ptask_define_callbacks(); - surf_workstation_model = new WorkstationL07Model(); - ModelPtr model = static_cast(surf_workstation_model); - xbt_dynar_push(model_list, &model); - xbt_dynar_push(model_list_invoke, &model); -} diff --git a/src/surf/workstation_ptask_L07.hpp b/src/surf/workstation_ptask_L07.hpp index aea13ee620..364ed78a54 100644 --- a/src/surf/workstation_ptask_L07.hpp +++ b/src/surf/workstation_ptask_L07.hpp @@ -48,12 +48,7 @@ public: double shareResources(double now); void updateActionsState(double now, double delta); - ResourcePtr createResource(const char *name, double power_scale, - double power_initial, - tmgr_trace_t power_trace, - e_surf_resource_state_t state_initial, - tmgr_trace_t state_trace, - xbt_dict_t cpu_properties); + WorkstationPtr createWorkstation(const char *name); ActionPtr executeParallelTask(int workstation_nb, void **workstation_list, double *computation_amount, @@ -69,13 +64,7 @@ class CpuL07Model : public CpuModel { public: CpuL07Model() : CpuModel("cpuL07") {}; ~CpuL07Model() {surf_cpu_model_pm = NULL;}; - ResourcePtr createResource(const char *name, double power_scale, - double power_initial, - tmgr_trace_t power_trace, - e_surf_resource_state_t state_initial, - tmgr_trace_t state_trace, - xbt_dict_t cpu_properties); - CpuPtr createResource(const char *name, xbt_dynar_t powerPeak, + CpuPtr createCpu(const char *name, xbt_dynar_t powerPeak, int pstate, double power_scale, tmgr_trace_t power_trace, int core, e_surf_resource_state_t state_initial, @@ -90,7 +79,7 @@ class NetworkL07Model : public NetworkModel { public: NetworkL07Model() : NetworkModel() {}; ~NetworkL07Model() {surf_network_model = NULL;}; - NetworkLinkPtr createResource(const char *name, + NetworkLinkPtr createNetworkLink(const char *name, double bw_initial, tmgr_trace_t bw_trace, double lat_initial, @@ -131,9 +120,8 @@ class CpuL07 : public Cpu { tmgr_trace_event_t p_powerEvent; public: CpuL07(CpuL07ModelPtr model, const char* name, xbt_dict_t properties, - double power_scale, - double power_initial, tmgr_trace_t power_trace, - e_surf_resource_state_t state_initial, tmgr_trace_t state_trace); + double power_scale, double power_initial, tmgr_trace_t power_trace, + int core, e_surf_resource_state_t state_initial, tmgr_trace_t state_trace); bool isUsed(); //bool isUsed() {DIE_IMPOSSIBLE;}; void updateState(tmgr_trace_event_t event_type, double value, double date); diff --git a/src/xbt/config.c b/src/xbt/config.c index 49667ddf5e..60bf7a6d9a 100644 --- a/src/xbt/config.c +++ b/src/xbt/config.c @@ -741,6 +741,7 @@ void *xbt_cfg_set_as_string(xbt_cfg_t cfg, const char *key, const char *value) { case xbt_cfgelm_boolean: xbt_cfg_set_boolean(cfg, key, value); /* throws */ + ret = (char *)value + strlen(value); break; case xbt_cfgelm_peer: diff --git a/src/xbt/cunit.c b/src/xbt/cunit.c index 0a603bf564..08f52bb112 100644 --- a/src/xbt/cunit.c +++ b/src/xbt/cunit.c @@ -444,7 +444,6 @@ static int xbt_test_suite_run(xbt_test_suite_t suite, int verbosity) if (suite->unit_disabled) { fprintf(stderr, "%s%d disabled", (first ? "" : ", "), suite->unit_disabled); - first = 0; } fprintf(stderr, ")\n Tests: %.0f%% ok (%d tests: ", suite->nb_tests @@ -471,7 +470,6 @@ static int xbt_test_suite_run(xbt_test_suite_t suite, int verbosity) if (suite->test_expect) { fprintf(stderr, "%s%d expected to fail", (first ? "" : "; "), suite->test_expect); - first = 0; } fprintf(stderr, ")\n"); } @@ -647,7 +645,6 @@ int xbt_test_run(char *selection, int verbosity) if (_xbt_test_suite_ignore) { fprintf(stderr, "%s%d ignored", (first ? "" : ", "), _xbt_test_suite_ignore); - first = 0; } fprintf(stderr, ")\n Units: %.0f%% ok (%d units: ", _xbt_test_nb_units @@ -669,7 +666,6 @@ int xbt_test_run(char *selection, int verbosity) if (_xbt_test_unit_ignore) { fprintf(stderr, "%s%d ignored", (first ? "" : ", "), _xbt_test_unit_ignore); - first = 0; } fprintf(stderr, ")\n Tests: %.0f%% ok (%d tests: ", _xbt_test_nb_tests diff --git a/src/xbt/graphxml.c b/src/xbt/graphxml.c index d855f6556b..bfb40afc66 100644 --- a/src/xbt/graphxml.c +++ b/src/xbt/graphxml.c @@ -27,7 +27,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 39 +#define YY_FLEX_SUBMINOR_VERSION 37 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -160,15 +160,7 @@ typedef unsigned int flex_uint32_t; /* Size of default input buffer. */ #ifndef YY_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k. - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. - * Ditto for the __ia64__ case accordingly. - */ -#define YY_BUF_SIZE 32768 -#else #define YY_BUF_SIZE 16384 -#endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. @@ -207,13 +199,6 @@ extern FILE *xbt_graph_parse_in, *xbt_graph_parse_out; if ( xbt_graph_parse_text[yyl] == '\n' )\ --xbt_graph_parse_lineno;\ }while(0) - #define YY_LINENO_REWIND_TO(dst) \ - do {\ - const char *p;\ - for ( p = yy_cp-1; p >= (dst); --p)\ - if ( *p == '\n' )\ - --xbt_graph_parse_lineno;\ - }while(0) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ @@ -481,7 +466,7 @@ static yyconst flex_int16_t yy_accept[564] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 15, 0, 0, 13, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 15, 0, 14, 0 } ; @@ -1142,42 +1127,42 @@ const char graphxml_flexml_version[] = "1.9.6"; int graphxml_pcdata_ix; extern char *graphxml_bufferstack; #define graphxml_pcdata (graphxml_bufferstack + graphxml_pcdata_ix) -AT_graphxml_node_label AX_graphxml_node_label; -#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label) -short int graphxml_node_label_isset; -AT_graphxml_edge_length AX_graphxml_edge_length; -#define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length) -short int graphxml_edge_length_isset; -AT_graphxml_edge_source AX_graphxml_edge_source; -#define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source) -short int graphxml_edge_source_isset; -AT_graphxml_node_position___y AX_graphxml_node_position___y; -#define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y) -short int graphxml_node_position___y_isset; -AT_graphxml_edge_target AX_graphxml_edge_target; -#define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target) -short int graphxml_edge_target_isset; -AT_graphxml_node_data AX_graphxml_node_data; -#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data) -short int graphxml_node_data_isset; AT_graphxml_node_name AX_graphxml_node_name; #define A_graphxml_node_name (graphxml_bufferstack + AX_graphxml_node_name) short int graphxml_node_name_isset; -AT_graphxml_edge_data AX_graphxml_edge_data; -#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data) -short int graphxml_edge_data_isset; +AT_graphxml_node_data AX_graphxml_node_data; +#define A_graphxml_node_data (graphxml_bufferstack + AX_graphxml_node_data) +short int graphxml_node_data_isset; AT_graphxml_node_position___x AX_graphxml_node_position___x; #define A_graphxml_node_position___x (graphxml_bufferstack + AX_graphxml_node_position___x) short int graphxml_node_position___x_isset; -AT_graphxml_edge_label AX_graphxml_edge_label; -#define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label) -short int graphxml_edge_label_isset; +AT_graphxml_edge_source AX_graphxml_edge_source; +#define A_graphxml_edge_source (graphxml_bufferstack + AX_graphxml_edge_source) +short int graphxml_edge_source_isset; +AT_graphxml_edge_data AX_graphxml_edge_data; +#define A_graphxml_edge_data (graphxml_bufferstack + AX_graphxml_edge_data) +short int graphxml_edge_data_isset; AT_graphxml_graph_isDirected AX_graphxml_graph_isDirected; #define A_graphxml_graph_isDirected AX_graphxml_graph_isDirected short int graphxml_graph_isDirected_isset; AT_graphxml_edge_name AX_graphxml_edge_name; #define A_graphxml_edge_name (graphxml_bufferstack + AX_graphxml_edge_name) short int graphxml_edge_name_isset; +AT_graphxml_node_position___y AX_graphxml_node_position___y; +#define A_graphxml_node_position___y (graphxml_bufferstack + AX_graphxml_node_position___y) +short int graphxml_node_position___y_isset; +AT_graphxml_edge_length AX_graphxml_edge_length; +#define A_graphxml_edge_length (graphxml_bufferstack + AX_graphxml_edge_length) +short int graphxml_edge_length_isset; +AT_graphxml_edge_target AX_graphxml_edge_target; +#define A_graphxml_edge_target (graphxml_bufferstack + AX_graphxml_edge_target) +short int graphxml_edge_target_isset; +AT_graphxml_edge_label AX_graphxml_edge_label; +#define A_graphxml_edge_label (graphxml_bufferstack + AX_graphxml_edge_label) +short int graphxml_edge_label_isset; +AT_graphxml_node_label AX_graphxml_node_label; +#define A_graphxml_node_label (graphxml_bufferstack + AX_graphxml_node_label) +short int graphxml_node_label_isset; /* XML state. */ #ifdef FLEX_DEBUG @@ -1443,12 +1428,7 @@ static int input (void ); /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE -#ifdef __ia64__ -/* On IA-64, the buffer size is 16k, not 8k */ -#define YY_READ_BUF_SIZE 16384 -#else #define YY_READ_BUF_SIZE 8192 -#endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ @@ -1549,34 +1529,6 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! xbt_graph_parse_in ) - xbt_graph_parse_in = stdin; - - if ( ! xbt_graph_parse_out ) - xbt_graph_parse_out = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - xbt_graph_parse_ensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE ); - } - - xbt_graph_parse__load_buffer_state( ); - } - - { - /* Bypass Flex's default INITIAL state and begin by parsing the XML prolog. */ SET(PROLOG); reset_graphxml_parse_err_msg(); @@ -1628,6 +1580,32 @@ YY_DECL /* COMMENTS and PIs: handled uniformly for efficiency. */ + if ( !(yy_init) ) + { + (yy_init) = 1; + +#ifdef YY_USER_INIT + YY_USER_INIT; +#endif + + if ( ! (yy_start) ) + (yy_start) = 1; /* first start state */ + + if ( ! xbt_graph_parse_in ) + xbt_graph_parse_in = stdin; + + if ( ! xbt_graph_parse_out ) + xbt_graph_parse_out = stdout; + + if ( ! YY_CURRENT_BUFFER ) { + xbt_graph_parse_ensure_buffer_stack (); + YY_CURRENT_BUFFER_LVALUE = + xbt_graph_parse__create_buffer(xbt_graph_parse_in,YY_BUF_SIZE ); + } + + xbt_graph_parse__load_buffer_state( ); + } + while ( 1 ) /* loops until end-of-file is reached */ { yy_cp = (yy_c_buf_p); @@ -1644,7 +1622,7 @@ YY_DECL yy_match: do { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; + register 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; @@ -1753,7 +1731,7 @@ FAIL("Bad declaration %s.",xbt_graph_parse_text); case 13: /* rule 13 can match eol */ YY_RULE_SETUP -SET(ROOT_graphxml_node); +SET(ROOT_graphxml_edge); YY_BREAK case 14: /* rule 14 can match eol */ @@ -1763,7 +1741,7 @@ SET(ROOT_graphxml_graph); case 15: /* rule 15 can match eol */ YY_RULE_SETUP -SET(ROOT_graphxml_edge); +SET(ROOT_graphxml_node); YY_BREAK case 16: /* rule 16 can match eol */ @@ -1862,9 +1840,9 @@ FAIL("Unexpected character `%c': `' expected.",xbt_graph_parse_text[0]); YY_BREAK case YY_STATE_EOF(S_graphxml_graph_3): case YY_STATE_EOF(S_graphxml_graph): -case YY_STATE_EOF(S_graphxml_graph_1): -case YY_STATE_EOF(E_graphxml_graph): case YY_STATE_EOF(S_graphxml_graph_5): +case YY_STATE_EOF(E_graphxml_graph): +case YY_STATE_EOF(S_graphxml_graph_1): FAIL("Premature EOF: `' expected."); YY_BREAK @@ -1960,8 +1938,8 @@ YY_RULE_SETUP if (!AX_graphxml_node_name) FAIL("Required attribute `name' not set for `node' element."); LEAVE; STag_graphxml_node(); graphxml_pcdata_ix = 0; ETag_graphxml_node(); popbuffer(); /* attribute */ switch (YY_START) { - case S_graphxml_graph_3: case S_graphxml_graph: case S_graphxml_graph_2: SET(S_graphxml_graph_3); break; case ROOT_graphxml_node: SET(EPILOG); break; + case S_graphxml_graph: case S_graphxml_graph_2: case S_graphxml_graph_3: SET(S_graphxml_graph_3); break; } } YY_BREAK @@ -1985,8 +1963,8 @@ YY_RULE_SETUP ETag_graphxml_node(); popbuffer(); /* attribute */ switch (YY_START) { - case S_graphxml_graph_3: case S_graphxml_graph: case S_graphxml_graph_2: SET(S_graphxml_graph_3); break; case ROOT_graphxml_node: SET(EPILOG); break; + case S_graphxml_graph: case S_graphxml_graph_2: case S_graphxml_graph_3: SET(S_graphxml_graph_3); break; } } YY_BREAK @@ -2110,8 +2088,8 @@ YY_RULE_SETUP if (!AX_graphxml_edge_target) FAIL("Required attribute `target' not set for `edge' element."); LEAVE; STag_graphxml_edge(); graphxml_pcdata_ix = 0; ETag_graphxml_edge(); popbuffer(); /* attribute */ switch (YY_START) { - case S_graphxml_graph: case S_graphxml_graph_3: case S_graphxml_graph_1: case S_graphxml_graph_4: case S_graphxml_graph_5: SET(S_graphxml_graph_5); break; case ROOT_graphxml_edge: SET(EPILOG); break; + case S_graphxml_graph_5: case S_graphxml_graph: case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_4: SET(S_graphxml_graph_5); break; } } YY_BREAK @@ -2135,8 +2113,8 @@ YY_RULE_SETUP ETag_graphxml_edge(); popbuffer(); /* attribute */ switch (YY_START) { - case S_graphxml_graph: case S_graphxml_graph_3: case S_graphxml_graph_1: case S_graphxml_graph_4: case S_graphxml_graph_5: SET(S_graphxml_graph_5); break; case ROOT_graphxml_edge: SET(EPILOG); break; + case S_graphxml_graph_5: case S_graphxml_graph: case S_graphxml_graph_1: case S_graphxml_graph_3: case S_graphxml_graph_4: SET(S_graphxml_graph_5); break; } } YY_BREAK @@ -2406,7 +2384,6 @@ case YY_STATE_EOF(IMPOSSIBLE): "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ - } /* end of user's declarations */ } /* end of xbt_graph_parse_lex */ /* yy_get_next_buffer - try to read in a new buffer diff --git a/src/xbt/log.c b/src/xbt/log.c index b5bab4af52..374191a92c 100644 --- a/src/xbt/log.c +++ b/src/xbt/log.c @@ -420,6 +420,16 @@ The following example resets the additivity of the xbt category to true (which i option and specify the max file size. This would be a nice default for non-kernel applications. - Careful, category names are global variables. + - When writing a log format, you often want to use spaces. If you don't + protect these spaces, they are used as configuration elements separators. + For example, if you want to remove the date from the logs, you want to pass the following + argument on the command line. The outer quotes are here to protect the string from the shell + interpretation while the inner ones are there to prevent simgrid from splitting the string + in several log parameters (that would be invalid). + \verbatim --log="'root.fmt:%l: [%p/%c]: %m%n'"\endverbatim + Another option is to use the SimGrid-specific format directive \%e for + spaces, like in the following. + \verbatim --log="root.fmt:%l:%e[%p/%c]:%e%m%n"\endverbatim \section log_internals 4. Internal considerations @@ -1062,7 +1072,7 @@ void xbt_log_threshold_set(xbt_log_category_t cat, static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string) { - + const char *orig_control_string = control_string; xbt_log_setting_t set = xbt_new(s_xbt_log_setting_t, 1); const char *name, *dot, *eq; @@ -1085,7 +1095,7 @@ static xbt_log_setting_t _xbt_log_parse_setting(const char *control_string) control_string += strcspn(control_string, " "); xbt_assert(*dot == '.' && (*eq == '=' || *eq == ':'), - "Invalid control string '%s'", control_string); + "Invalid control string '%s'", orig_control_string); if (!strncmp(dot + 1, "threshold", (size_t) (eq - dot - 1))) { int i; diff --git a/src/xbt/parmap.c b/src/xbt/parmap.c index cdb6e916b6..1b0ab3d793 100644 --- a/src/xbt/parmap.c +++ b/src/xbt/parmap.c @@ -272,14 +272,14 @@ static void xbt_parmap_set_mode(xbt_parmap_t parmap, e_xbt_parmap_mode_t mode) */ void xbt_parmap_apply(xbt_parmap_t parmap, void_f_pvoid_t fun, xbt_dynar_t data) { - /* Assign resources to worker threads */ + /* Assign resources to worker threads (we are maestro here)*/ parmap->fun = fun; parmap->data = data; parmap->index = 0; - parmap->master_signal_f(parmap); - xbt_parmap_work(parmap); - parmap->master_wait_f(parmap); - XBT_DEBUG("Job done"); + parmap->master_signal_f(parmap); // maestro runs futex_wait to wake all the minions (the working threads) + xbt_parmap_work(parmap); // maestro works with its minions + parmap->master_wait_f(parmap); // When there is no more work to do, then maestro waits for the last minion to stop + XBT_DEBUG("Job done"); // ... and proceeds } /** diff --git a/src/xbt/xbt_replay.c b/src/xbt/xbt_replay.c index ffd80026a3..f3a9fbcb79 100644 --- a/src/xbt/xbt_replay.c +++ b/src/xbt/xbt_replay.c @@ -52,8 +52,8 @@ xbt_replay_reader_t xbt_replay_reader_new(const char *filename) { xbt_replay_reader_t res = xbt_new0(s_xbt_replay_reader_t,1); res->fp = fopen(filename, "r"); - xbt_assert(res->fp != NULL, "Cannot open %s: %s", filename, - strerror(errno)); + if (res->fp == NULL) + xbt_die("Cannot open %s: %s", filename, strerror(errno)); res->filename = xbt_strdup(filename); return res; } diff --git a/src/xbt/xbt_sg_synchro.c b/src/xbt/xbt_sg_synchro.c index 4907e6f246..724755b2ae 100644 --- a/src/xbt/xbt_sg_synchro.c +++ b/src/xbt/xbt_sg_synchro.c @@ -184,3 +184,47 @@ void xbt_cond_destroy(xbt_cond_t cond) { simcall_cond_destroy((smx_cond_t) cond); } + +/***** barrier related functions *****/ +typedef struct s_xbt_bar_ { + xbt_mutex_t mutex; + xbt_cond_t cond; + unsigned int arrived_processes; + unsigned int expected_processes; +} s_xbt_bar_; + +xbt_bar_t xbt_barrier_init(unsigned int count) +{ + xbt_bar_t bar = xbt_new0(s_xbt_bar_, 1); + bar->expected_processes = count; + bar->arrived_processes = 0; + bar->mutex = xbt_mutex_init(); + bar->cond = xbt_cond_init(); + return bar; +} + + +int xbt_barrier_wait(xbt_bar_t bar) +{ + int ret=0; + xbt_mutex_acquire(bar->mutex); + if (++bar->arrived_processes == bar->expected_processes) { + xbt_cond_broadcast(bar->cond); + xbt_mutex_release(bar->mutex); + ret=XBT_BARRIER_SERIAL_PROCESS; + bar->arrived_processes = 0; + } else { + xbt_cond_wait(bar->cond, bar->mutex); + xbt_mutex_release(bar->mutex); + } + + return ret; +} + +void xbt_barrier_destroy(xbt_bar_t bar) +{ + xbt_mutex_destroy(bar->mutex); + xbt_cond_destroy(bar->cond); + xbt_free(bar); +} + diff --git a/teshsuite/bug-17132/bug-17132.tesh b/teshsuite/bug-17132/bug-17132.tesh index a73b210f6e..16c5e008ae 100644 --- a/teshsuite/bug-17132/bug-17132.tesh +++ b/teshsuite/bug-17132/bug-17132.tesh @@ -1,6 +1,6 @@ $ ../../smpi_script/bin/smpirun -np 16 -platform ${srcdir:=.}/small_platform.xml -hostfile ${srcdir:=.}/hostfile.txt ./bug-17132 --cfg=smpi/cpu_threshold:-1 --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 2 processes in your hostfile... -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/teshsuite/mc/dwarf/dwarf.c b/teshsuite/mc/dwarf/dwarf.c index 059062d589..513e2ed772 100644 --- a/teshsuite/mc/dwarf/dwarf.c +++ b/teshsuite/mc/dwarf/dwarf.c @@ -129,7 +129,7 @@ int main(int argc, char** argv) { dw_variable_t var; dw_type_t type; - var = test_global_variable(mc_binary_info, "some_local_variable", &some_local_variable, sizeof(int)); + test_global_variable(mc_binary_info, "some_local_variable", &some_local_variable, sizeof(int)); var = test_global_variable(mc_binary_info, "test_some_array", &test_some_array, sizeof(test_some_array)); type = xbt_dict_get_or_null(mc_binary_info->types, var->type_origin); diff --git a/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.c b/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.c index 6dda8b5a96..20816633f1 100644 --- a/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.c +++ b/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.c @@ -114,6 +114,7 @@ int slave(int argc, char *argv[]) if (!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); MSG_task_cancel(task); continue; diff --git a/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.tesh b/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.tesh index c20f5ce770..07f0c68887 100644 --- a/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.tesh +++ b/teshsuite/msg/task_destroy_cancel/task_destroy_cancel.tesh @@ -9,10 +9,10 @@ $ ./task_destroy_cancel ${srcdir:=.}/task_destroy_cancel_p.xml ${srcdir:=.}/task > [Jupiter:slave:(2) 0.682345] [msg_test/INFO] Task "normal" done in 0.655342 (amount 0.000000) > [Jupiter:slave:(2) 0.709348] [msg_test/INFO] Handling task "cancel" > [Jupiter:worker1:(3) 0.709348] [msg_test/INFO] Start cancel -> [Jupiter:slave:(2) 0.709348] [msg_test/INFO] Canceling task "cancel" -> [Jupiter:worker1:(3) 0.710127] [msg_test/INFO] Task failed -> [Tremblay:master:(1) 0.736350] [msg_test/INFO] Goodbye now! -> [Jupiter:slave:(2) 0.736350] [msg_test/INFO] Handling task "finalize" -> [Jupiter:slave:(2) 0.736350] [msg_test/INFO] Destroying task "finalize" -> [Jupiter:slave:(2) 0.736350] [msg_test/INFO] I'm done. See you! -> [0.736350] [msg_test/INFO] Simulation time 0.73635 +> [Jupiter:slave:(2) 0.809348] [msg_test/INFO] Canceling task "cancel" +> [Jupiter:worker1:(3) 0.810127] [msg_test/INFO] Task failed +> [Tremblay:master:(1) 0.836350] [msg_test/INFO] Goodbye now! +> [Jupiter:slave:(2) 0.836350] [msg_test/INFO] Handling task "finalize" +> [Jupiter:slave:(2) 0.836350] [msg_test/INFO] Destroying task "finalize" +> [Jupiter:slave:(2) 0.836350] [msg_test/INFO] I'm done. See you! +> [0.836350] [msg_test/INFO] Simulation time 0.83635 diff --git a/teshsuite/simdag/CMakeLists.txt b/teshsuite/simdag/basic/CMakeLists.txt similarity index 87% rename from teshsuite/simdag/CMakeLists.txt rename to teshsuite/simdag/basic/CMakeLists.txt index 32d833481a..cc6c67d4a8 100644 --- a/teshsuite/simdag/CMakeLists.txt +++ b/teshsuite/simdag/basic/CMakeLists.txt @@ -9,7 +9,6 @@ add_executable(basic3 basic3.c) add_executable(basic4 basic4.c) add_executable(basic5 basic5.c) add_executable(basic6 basic6.c) -add_executable(incomplete incomplete.c) ### Add definitions for compile if(NOT WIN32) @@ -20,7 +19,6 @@ if(NOT WIN32) target_link_libraries(basic4 simgrid m pthread ) target_link_libraries(basic5 simgrid m pthread ) target_link_libraries(basic6 simgrid m pthread ) - target_link_libraries(incomplete simgrid m pthread ) else() target_link_libraries(basic0 simgrid) target_link_libraries(basic1 simgrid) @@ -29,7 +27,6 @@ else() target_link_libraries(basic4 simgrid) target_link_libraries(basic5 simgrid) target_link_libraries(basic6 simgrid) - target_link_libraries(incomplete simgrid) endif() set(tesh_files @@ -41,8 +38,6 @@ set(tesh_files ${CMAKE_CURRENT_SOURCE_DIR}/basic4.tesh ${CMAKE_CURRENT_SOURCE_DIR}/basic5.tesh ${CMAKE_CURRENT_SOURCE_DIR}/basic6.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/incomplete.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/simdag.tesh PARENT_SCOPE ) set(xml_files @@ -59,7 +54,6 @@ set(teshsuite_src ${CMAKE_CURRENT_SOURCE_DIR}/basic4.c ${CMAKE_CURRENT_SOURCE_DIR}/basic5.c ${CMAKE_CURRENT_SOURCE_DIR}/basic6.c - ${CMAKE_CURRENT_SOURCE_DIR}/incomplete.c PARENT_SCOPE ) set(bin_files diff --git a/teshsuite/simdag/basic0.c b/teshsuite/simdag/basic/basic0.c similarity index 100% rename from teshsuite/simdag/basic0.c rename to teshsuite/simdag/basic/basic0.c diff --git a/teshsuite/simdag/basic/basic0.tesh b/teshsuite/simdag/basic/basic0.tesh new file mode 100644 index 0000000000..004b5300d6 --- /dev/null +++ b/teshsuite/simdag/basic/basic0.tesh @@ -0,0 +1,3 @@ +$ ${bindir:=.}/basic0 basic_platform.xml "--log=root.fmt:[%10.6r]%e%m%n" +> [ 0.000000] surf_workstation_model_init_ptask_L07 +> [ 0.800100] Simulation time: 0.800100 diff --git a/teshsuite/simdag/basic1.c b/teshsuite/simdag/basic/basic1.c similarity index 100% rename from teshsuite/simdag/basic1.c rename to teshsuite/simdag/basic/basic1.c diff --git a/teshsuite/simdag/basic/basic1.tesh b/teshsuite/simdag/basic/basic1.tesh new file mode 100644 index 0000000000..45dfc06546 --- /dev/null +++ b/teshsuite/simdag/basic/basic1.tesh @@ -0,0 +1,3 @@ +$ ${bindir:=.}/basic1 basic_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (0:@) surf_workstation_model_init_ptask_L07 +> [ 16.000100] (0:@) Simulation time: 16.000100 diff --git a/teshsuite/simdag/basic2.c b/teshsuite/simdag/basic/basic2.c similarity index 100% rename from teshsuite/simdag/basic2.c rename to teshsuite/simdag/basic/basic2.c diff --git a/teshsuite/simdag/basic/basic2.tesh b/teshsuite/simdag/basic/basic2.tesh new file mode 100644 index 0000000000..4d17b7bb00 --- /dev/null +++ b/teshsuite/simdag/basic/basic2.tesh @@ -0,0 +1,3 @@ +$ ${bindir:=.}/basic2 basic_platform.xml "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" +> [ 0.000000] (0:@) surf_workstation_model_init_ptask_L07 +> [ 8.800100] (0:@) Simulation time: 8.800100 diff --git a/teshsuite/simdag/basic3.c b/teshsuite/simdag/basic/basic3.c similarity index 100% rename from teshsuite/simdag/basic3.c rename to teshsuite/simdag/basic/basic3.c diff --git a/teshsuite/simdag/basic3.tesh b/teshsuite/simdag/basic/basic3.tesh similarity index 74% rename from teshsuite/simdag/basic3.tesh rename to teshsuite/simdag/basic/basic3.tesh index f1afcbddb5..f17325f9df 100644 --- a/teshsuite/simdag/basic3.tesh +++ b/teshsuite/simdag/basic/basic3.tesh @@ -1,4 +1,4 @@ -$ simdag/basic3 ${srcdir:=.}/simdag/basic_platform.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e%m%n" --log=sd_kernel.thresh:verbose +$ ${bindir:=.}/basic3 basic_platform.xml "--log=root.fmt:[%10.6r]%e%m%n" --log=sd_kernel.thresh:verbose > [ 0.000000] surf_workstation_model_init_ptask_L07 > [ 0.000000] Starting simulation... > [ 0.000000] Run simulation for -1.000000 seconds diff --git a/teshsuite/simdag/basic4.c b/teshsuite/simdag/basic/basic4.c similarity index 100% rename from teshsuite/simdag/basic4.c rename to teshsuite/simdag/basic/basic4.c diff --git a/teshsuite/simdag/basic4.tesh b/teshsuite/simdag/basic/basic4.tesh similarity index 74% rename from teshsuite/simdag/basic4.tesh rename to teshsuite/simdag/basic/basic4.tesh index f7eda80721..9e78db6d5c 100644 --- a/teshsuite/simdag/basic4.tesh +++ b/teshsuite/simdag/basic/basic4.tesh @@ -1,4 +1,4 @@ -$ simdag/basic4 ${srcdir:=.}/simdag/basic_platform.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e%m%n" --log=sd_kernel.thresh:verbose +$ ${bindir:=.}/basic4 basic_platform.xml "--log=root.fmt:[%10.6r]%e%m%n" --log=sd_kernel.thresh:verbose > [ 0.000000] surf_workstation_model_init_ptask_L07 > [ 0.000000] Starting simulation... > [ 0.000000] Run simulation for -1.000000 seconds diff --git a/teshsuite/simdag/basic5.c b/teshsuite/simdag/basic/basic5.c similarity index 100% rename from teshsuite/simdag/basic5.c rename to teshsuite/simdag/basic/basic5.c diff --git a/teshsuite/simdag/basic/basic5.tesh b/teshsuite/simdag/basic/basic5.tesh new file mode 100644 index 0000000000..c3dd97fb19 --- /dev/null +++ b/teshsuite/simdag/basic/basic5.tesh @@ -0,0 +1,3 @@ +$ ${bindir:=.}/basic5 basic_platform.xml "--log=root.fmt:[%10.6r]%e%m%n" +> [ 0.000000] surf_workstation_model_init_ptask_L07 +> [ 0.002500] Simulation time: 0.002500 diff --git a/teshsuite/simdag/basic6.c b/teshsuite/simdag/basic/basic6.c similarity index 100% rename from teshsuite/simdag/basic6.c rename to teshsuite/simdag/basic/basic6.c diff --git a/teshsuite/simdag/basic/basic6.tesh b/teshsuite/simdag/basic/basic6.tesh new file mode 100644 index 0000000000..45cee0796c --- /dev/null +++ b/teshsuite/simdag/basic/basic6.tesh @@ -0,0 +1,3 @@ +$ ${bindir:=.}/basic6 ../network/p2p/platform_2p_1sl.xml "--log=root.fmt:[%10.6r]%e%m%n" +> [ 0.000000] surf_workstation_model_init_ptask_L07 +> [ 2.000000] Simulation time: 2.000000 diff --git a/teshsuite/simdag/basic_platform.xml b/teshsuite/simdag/basic/basic_platform.xml similarity index 100% rename from teshsuite/simdag/basic_platform.xml rename to teshsuite/simdag/basic/basic_platform.xml diff --git a/teshsuite/simdag/basic0.tesh b/teshsuite/simdag/basic0.tesh deleted file mode 100644 index 6229ec2b17..0000000000 --- a/teshsuite/simdag/basic0.tesh +++ /dev/null @@ -1,3 +0,0 @@ -$ simdag/basic0 ${srcdir:=.}/simdag/basic_platform.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e%m%n" -> [ 0.000000] surf_workstation_model_init_ptask_L07 -> [ 0.800100] Simulation time: 0.800100 diff --git a/teshsuite/simdag/basic1.tesh b/teshsuite/simdag/basic1.tesh deleted file mode 100644 index c2b666d502..0000000000 --- a/teshsuite/simdag/basic1.tesh +++ /dev/null @@ -1,3 +0,0 @@ -$ simdag/basic1 ${srcdir:=.}/simdag/basic_platform.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" -> [ 0.000000] (0:@) surf_workstation_model_init_ptask_L07 -> [ 16.000100] (0:@) Simulation time: 16.000100 diff --git a/teshsuite/simdag/basic2.tesh b/teshsuite/simdag/basic2.tesh deleted file mode 100644 index 9f15bc1886..0000000000 --- a/teshsuite/simdag/basic2.tesh +++ /dev/null @@ -1,3 +0,0 @@ -$ simdag/basic2 ${srcdir:=.}/simdag/basic_platform.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e(%i:%P@%h)%e%m%n" -> [ 0.000000] (0:@) surf_workstation_model_init_ptask_L07 -> [ 8.800100] (0:@) Simulation time: 8.800100 \ No newline at end of file diff --git a/teshsuite/simdag/basic5.tesh b/teshsuite/simdag/basic5.tesh deleted file mode 100644 index 19ba94862c..0000000000 --- a/teshsuite/simdag/basic5.tesh +++ /dev/null @@ -1,3 +0,0 @@ -$ simdag/basic5 ${srcdir:=.}/simdag/basic_platform.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e%m%n" -> [ 0.000000] surf_workstation_model_init_ptask_L07 -> [ 0.002500] Simulation time: 0.002500 diff --git a/teshsuite/simdag/basic6.tesh b/teshsuite/simdag/basic6.tesh deleted file mode 100644 index 04d782fa56..0000000000 --- a/teshsuite/simdag/basic6.tesh +++ /dev/null @@ -1,3 +0,0 @@ -$ simdag/basic6 ${srcdir:=.}/simdag/network/p2p/platform_2p_1sl.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e%m%n" -> [ 0.000000] surf_workstation_model_init_ptask_L07 -> [ 2.000000] Simulation time: 2.000000 diff --git a/teshsuite/simdag/incomplete/CMakeLists.txt b/teshsuite/simdag/incomplete/CMakeLists.txt new file mode 100644 index 0000000000..98bff3c5e8 --- /dev/null +++ b/teshsuite/simdag/incomplete/CMakeLists.txt @@ -0,0 +1,35 @@ +cmake_minimum_required(VERSION 2.6) + +set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + +add_executable(incomplete incomplete.c) + +### Add definitions for compile +if(NOT WIN32) + target_link_libraries(incomplete simgrid m pthread ) +else() + target_link_libraries(incomplete simgrid) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/incomplete.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(teshsuite_src + ${teshsuite_src} + ${CMAKE_CURRENT_SOURCE_DIR}/incomplete.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/teshsuite/simdag/incomplete.c b/teshsuite/simdag/incomplete/incomplete.c similarity index 100% rename from teshsuite/simdag/incomplete.c rename to teshsuite/simdag/incomplete/incomplete.c diff --git a/teshsuite/simdag/incomplete.tesh b/teshsuite/simdag/incomplete/incomplete.tesh similarity index 73% rename from teshsuite/simdag/incomplete.tesh rename to teshsuite/simdag/incomplete/incomplete.tesh index bd81be91a7..533641125a 100644 --- a/teshsuite/simdag/incomplete.tesh +++ b/teshsuite/simdag/incomplete/incomplete.tesh @@ -1,4 +1,4 @@ -$ simdag/incomplete ${srcdir:=.}/simdag/basic_platform.xml --cfg=path:${srcdir} "--log=root.fmt:[%10.6r]%e%m%n" +$ ${bindir:=.}/incomplete ../basic/basic_platform.xml "--log=root.fmt:[%10.6r]%e%m%n" > [ 0.000000] surf_workstation_model_init_ptask_L07 > [ 8.000100] Simulation is finished but 3 tasks are still not done > [ 8.000100] Task C is in SD_NOT_SCHEDULED state diff --git a/teshsuite/simdag/platforms/flatifier.c b/teshsuite/simdag/platforms/flatifier.c index 128b9b7857..5c33f70653 100644 --- a/teshsuite/simdag/platforms/flatifier.c +++ b/teshsuite/simdag/platforms/flatifier.c @@ -148,7 +148,7 @@ int main(int argc, char **argv) SD_workstation_get_power(hosts[i])); props = SD_workstation_get_properties(hosts[i]); if (SD_workstation_get_cores(hosts[i])>1) { - printf(" cores=\"%d\"", SD_workstation_get_cores(hosts[i])); + printf(" core=\"%d\"", SD_workstation_get_cores(hosts[i])); } if (props && !xbt_dict_is_empty(props)) { printf(">\n"); diff --git a/teshsuite/simdag/platforms/flatifier.tesh b/teshsuite/simdag/platforms/flatifier.tesh index fe5f803561..260c38edd2 100644 --- a/teshsuite/simdag/platforms/flatifier.tesh +++ b/teshsuite/simdag/platforms/flatifier.tesh @@ -143,11 +143,11 @@ $ ${bindir:=.}/flatifier$EXEEXT one_cluster_multicore.xml "--log=root.fmt:[%10.6 > > > -> -> -> -> -> +> +> +> +> +> > > > diff --git a/teshsuite/simdag/simdag.tesh b/teshsuite/simdag/simdag.tesh deleted file mode 100644 index 5d99382372..0000000000 --- a/teshsuite/simdag/simdag.tesh +++ /dev/null @@ -1,16 +0,0 @@ -#! ./tesh - -# Description of this tesh file -D This tesh file contains all the tesh files relative with SimDag - -# SimDag tesh suite - -! suite Simdag tests this suite contains all the tesh files relative with SimDag -! include basic0.tesh -! include basic1.tesh -! include basic2.tesh -! include basic3.tesh -! include basic4.tesh -! include basic5.tesh -! include basic6.tesh -! include incomplete.tesh diff --git a/teshsuite/simix/CMakeLists.txt b/teshsuite/simix/check_defaults/CMakeLists.txt similarity index 72% rename from teshsuite/simix/CMakeLists.txt rename to teshsuite/simix/check_defaults/CMakeLists.txt index 8a22a1af57..4c789622b0 100644 --- a/teshsuite/simix/CMakeLists.txt +++ b/teshsuite/simix/check_defaults/CMakeLists.txt @@ -5,26 +5,20 @@ set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") add_executable(check_defaults check_defaults.c) target_link_libraries(check_defaults simgrid) -add_executable(stack_overflow stack_overflow.c) -target_link_libraries(stack_overflow simgrid) - set(tesh_files ${tesh_files} ${CMAKE_CURRENT_SOURCE_DIR}/factory_raw.tesh ${CMAKE_CURRENT_SOURCE_DIR}/factory_thread.tesh ${CMAKE_CURRENT_SOURCE_DIR}/factory_ucontext.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/stack_overflow.tesh PARENT_SCOPE ) set(xml_files ${xml_files} - ${CMAKE_CURRENT_SOURCE_DIR}/stack_overflow.xml PARENT_SCOPE ) set(teshsuite_src ${teshsuite_src} ${CMAKE_CURRENT_SOURCE_DIR}/check_defaults.c - ${CMAKE_CURRENT_SOURCE_DIR}/stack_overflow.c PARENT_SCOPE ) set(bin_files diff --git a/teshsuite/simix/check_defaults.c b/teshsuite/simix/check_defaults/check_defaults.c similarity index 100% rename from teshsuite/simix/check_defaults.c rename to teshsuite/simix/check_defaults/check_defaults.c diff --git a/teshsuite/simix/factory_raw.tesh b/teshsuite/simix/check_defaults/factory_raw.tesh similarity index 76% rename from teshsuite/simix/factory_raw.tesh rename to teshsuite/simix/check_defaults/factory_raw.tesh index 7fc2525b19..7cfb7c196d 100644 --- a/teshsuite/simix/factory_raw.tesh +++ b/teshsuite/simix/check_defaults/factory_raw.tesh @@ -1,2 +1,2 @@ -$ ./simix/check_defaults +$ ${bindir:=.}/check_defaults > [simix_context/VERBOSE] Using raw contexts. Because the glibc is just not good enough for us. diff --git a/teshsuite/simix/factory_thread.tesh b/teshsuite/simix/check_defaults/factory_thread.tesh similarity index 66% rename from teshsuite/simix/factory_thread.tesh rename to teshsuite/simix/check_defaults/factory_thread.tesh index fdb9520fad..8acbd401e7 100644 --- a/teshsuite/simix/factory_thread.tesh +++ b/teshsuite/simix/check_defaults/factory_thread.tesh @@ -1,2 +1,2 @@ -$ ./simix/check_defaults +$ ${bindir:=.}/check_defaults > [simix_context/VERBOSE] Activating thread context factory diff --git a/teshsuite/simix/factory_ucontext.tesh b/teshsuite/simix/check_defaults/factory_ucontext.tesh similarity index 65% rename from teshsuite/simix/factory_ucontext.tesh rename to teshsuite/simix/check_defaults/factory_ucontext.tesh index bf4130af82..8652bb4f20 100644 --- a/teshsuite/simix/factory_ucontext.tesh +++ b/teshsuite/simix/check_defaults/factory_ucontext.tesh @@ -1,2 +1,2 @@ -$ ./simix/check_defaults +$ ${bindir:=.}/check_defaults > [simix_context/VERBOSE] Activating SYSV context factory diff --git a/teshsuite/simix/stack_overflow/CMakeLists.txt b/teshsuite/simix/stack_overflow/CMakeLists.txt new file mode 100644 index 0000000000..e03954506f --- /dev/null +++ b/teshsuite/simix/stack_overflow/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 2.6) + +set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + +add_executable(stack_overflow stack_overflow.c) +target_link_libraries(stack_overflow simgrid) + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/stack_overflow.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + ${CMAKE_CURRENT_SOURCE_DIR}/stack_overflow.xml + PARENT_SCOPE + ) +set(teshsuite_src + ${teshsuite_src} + ${CMAKE_CURRENT_SOURCE_DIR}/stack_overflow.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/teshsuite/simix/stack_overflow.c b/teshsuite/simix/stack_overflow/stack_overflow.c similarity index 100% rename from teshsuite/simix/stack_overflow.c rename to teshsuite/simix/stack_overflow/stack_overflow.c diff --git a/teshsuite/simix/stack_overflow.tesh b/teshsuite/simix/stack_overflow/stack_overflow.tesh similarity index 86% rename from teshsuite/simix/stack_overflow.tesh rename to teshsuite/simix/stack_overflow/stack_overflow.tesh index a0df41eb0f..aaff9b2de2 100644 --- a/teshsuite/simix/stack_overflow.tesh +++ b/teshsuite/simix/stack_overflow/stack_overflow.tesh @@ -1,5 +1,5 @@ ! expect signal SIGSEGV -$ ./simix/stack_overflow --cfg=contexts/stack_size:96 ${srcdir:=.}/simix/stack_overflow.xml +$ ${bindir:=.}/stack_overflow --cfg=contexts/stack_size:96 stack_overflow.xml > [Tremblay:master:(0) 0.000000] [test/INFO] Launching our nice bugged recursive function... > Access violation detected. > This can result from a programming error in your code or, although less likely, diff --git a/teshsuite/simix/stack_overflow.xml b/teshsuite/simix/stack_overflow/stack_overflow.xml similarity index 100% rename from teshsuite/simix/stack_overflow.xml rename to teshsuite/simix/stack_overflow/stack_overflow.xml diff --git a/teshsuite/smpi/CMakeLists.txt b/teshsuite/smpi/CMakeLists.txt index e24465cf88..e1316e536b 100644 --- a/teshsuite/smpi/CMakeLists.txt +++ b/teshsuite/smpi/CMakeLists.txt @@ -6,102 +6,12 @@ if(enable_smpi) else() set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") endif() - set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") - - include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") - add_executable(gather_coll gather_coll.c) - add_executable(allgather_coll allgather_coll.c) - add_executable(allgatherv_coll allgatherv_coll.c) - add_executable(alltoall2 alltoall2.c) - add_executable(alltoall_basic alltoall_basic.c) - add_executable(alltoall_coll alltoall_coll.c) - add_executable(alltoallv_coll alltoallv_coll.c) - add_executable(allreduce allreduce.c) - add_executable(allreduce_coll allreduce_coll.c) - add_executable(bcast bcast.c) - add_executable(bcast_coll bcast_coll.c) - add_executable(barrier_coll barrier.c ) - add_executable(compute compute.c) - add_executable(compute2 compute2.c) - add_executable(compute3 compute3.c) - add_executable(pingpong pingpong.c) - add_executable(scatter scatter.c) - add_executable(reduce reduce.c) - add_executable(reduce_coll reduce_coll.c) - add_executable(reduce_scatter_coll reduce_scatter_coll.c) - add_executable(split split.c) - add_executable(smpi_sendrecv sendrecv.c) - add_executable(ttest01 ttest01.c) - add_executable(vector_test vector_test.c) - add_executable(hvector_test hvector_test.c) - add_executable(indexed_test indexed_test.c) - add_executable(struct_test struct_test.c) - add_executable(dsend dsend.c) - - target_link_libraries(gather_coll simgrid) - target_link_libraries(allgather_coll simgrid) - target_link_libraries(allgatherv_coll simgrid) - target_link_libraries(alltoall2 simgrid) - target_link_libraries(alltoall_basic simgrid) - target_link_libraries(alltoall_coll simgrid) - target_link_libraries(alltoallv_coll simgrid) - target_link_libraries(allreduce simgrid) - target_link_libraries(allreduce_coll simgrid) - target_link_libraries(bcast simgrid) - target_link_libraries(bcast_coll simgrid) - target_link_libraries(barrier_coll simgrid) - target_link_libraries(compute simgrid) - target_link_libraries(compute2 simgrid) - target_link_libraries(compute3 simgrid) - target_link_libraries(pingpong simgrid) - target_link_libraries(scatter simgrid) - target_link_libraries(reduce simgrid) - target_link_libraries(reduce_coll simgrid) - target_link_libraries(reduce_scatter_coll simgrid) - target_link_libraries(split simgrid) - target_link_libraries(smpi_sendrecv simgrid) - target_link_libraries(ttest01 simgrid) - target_link_libraries(vector_test simgrid) - target_link_libraries(hvector_test simgrid) - target_link_libraries(indexed_test simgrid) - target_link_libraries(struct_test simgrid) - target_link_libraries(dsend simgrid) - - set_target_properties(smpi_sendrecv PROPERTIES RENAME sendrecv) - - if(NOT WIN32) - add_executable(shared shared.c) - target_link_libraries(shared simgrid) - endif() - endif() set(tesh_files ${tesh_files} - ${CMAKE_CURRENT_SOURCE_DIR}/gather_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/allgatherv_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll_large.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/alltoall_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/alltoallv_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/scatter_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/barrier_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/bcast.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/bcast_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/compute.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/shared.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/hvector.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/indexed.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/pt2pt.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/reduce.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/reduce_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/reduce_scatter_coll.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/struct.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/vector.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/TI_output.tesh PARENT_SCOPE ) set(xml_files @@ -110,38 +20,6 @@ set(xml_files ) set(examples_src ${examples_src} - ${CMAKE_CURRENT_SOURCE_DIR}/gather_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/allgatherv_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/alltoall_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/alltoallv_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/bcast_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/reduce_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/reduce_scatter_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/alltoallv_coll.c - ${CMAKE_CURRENT_SOURCE_DIR}/get_processor_name.c - ${CMAKE_CURRENT_SOURCE_DIR}/pingpong.c - ${CMAKE_CURRENT_SOURCE_DIR}/bcast.c - ${CMAKE_CURRENT_SOURCE_DIR}/allreduce.c - ${CMAKE_CURRENT_SOURCE_DIR}/alltoall_basic.c - ${CMAKE_CURRENT_SOURCE_DIR}/sendrecv.c - ${CMAKE_CURRENT_SOURCE_DIR}/reduce.c - ${CMAKE_CURRENT_SOURCE_DIR}/compute2.c - ${CMAKE_CURRENT_SOURCE_DIR}/shared.c - ${CMAKE_CURRENT_SOURCE_DIR}/split.c - ${CMAKE_CURRENT_SOURCE_DIR}/dsend.c - ${CMAKE_CURRENT_SOURCE_DIR}/ttest01.c - ${CMAKE_CURRENT_SOURCE_DIR}/compute.c - ${CMAKE_CURRENT_SOURCE_DIR}/compute3.c - ${CMAKE_CURRENT_SOURCE_DIR}/alltoall2.c - ${CMAKE_CURRENT_SOURCE_DIR}/scatter.c - ${CMAKE_CURRENT_SOURCE_DIR}/sendtest.c - ${CMAKE_CURRENT_SOURCE_DIR}/barrier.c - ${CMAKE_CURRENT_SOURCE_DIR}/vector_test.c - ${CMAKE_CURRENT_SOURCE_DIR}/hvector_test.c - ${CMAKE_CURRENT_SOURCE_DIR}/indexed_test.c - ${CMAKE_CURRENT_SOURCE_DIR}/struct_test.c PARENT_SCOPE ) set(bin_files diff --git a/teshsuite/smpi/allgather/CMakeLists.txt b/teshsuite/smpi/allgather/CMakeLists.txt new file mode 100644 index 0000000000..ecdaa81fc3 --- /dev/null +++ b/teshsuite/smpi/allgather/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(allgather_coll allgather_coll.c) + target_link_libraries(allgather_coll simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/allgather_coll.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/allgather_coll.c b/teshsuite/smpi/allgather/allgather_coll.c similarity index 100% rename from teshsuite/smpi/allgather_coll.c rename to teshsuite/smpi/allgather/allgather_coll.c diff --git a/teshsuite/smpi/allgather_coll.tesh b/teshsuite/smpi/allgather/allgather_coll.tesh similarity index 92% rename from teshsuite/smpi/allgather_coll.tesh rename to teshsuite/smpi/allgather/allgather_coll.tesh index 3e23a6b6e0..1908b13a6c 100644 --- a/teshsuite/smpi/allgather_coll.tesh +++ b/teshsuite/smpi/allgather/allgather_coll.tesh @@ -3,7 +3,7 @@ ! output sort p Test all to all -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./allgather_coll --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/allgather_coll --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter diff --git a/teshsuite/smpi/allgatherv/CMakeLists.txt b/teshsuite/smpi/allgatherv/CMakeLists.txt new file mode 100644 index 0000000000..8e1693c5fa --- /dev/null +++ b/teshsuite/smpi/allgatherv/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(allgatherv_coll allgatherv_coll.c) + target_link_libraries(allgatherv_coll simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/allgatherv_coll.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/allgatherv_coll.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/allgatherv_coll.c b/teshsuite/smpi/allgatherv/allgatherv_coll.c similarity index 100% rename from teshsuite/smpi/allgatherv_coll.c rename to teshsuite/smpi/allgatherv/allgatherv_coll.c diff --git a/teshsuite/smpi/allgatherv_coll.tesh b/teshsuite/smpi/allgatherv/allgatherv_coll.tesh similarity index 97% rename from teshsuite/smpi/allgatherv_coll.tesh rename to teshsuite/smpi/allgatherv/allgatherv_coll.tesh index a4a9e46ee7..beb6429fbf 100644 --- a/teshsuite/smpi/allgatherv_coll.tesh +++ b/teshsuite/smpi/allgatherv/allgatherv_coll.tesh @@ -3,7 +3,7 @@ ! output sort p Test allgatherv -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./allgatherv_coll --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/allgatherv_coll --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter diff --git a/teshsuite/smpi/allreduce/CMakeLists.txt b/teshsuite/smpi/allreduce/CMakeLists.txt new file mode 100644 index 0000000000..a4ad62cb9a --- /dev/null +++ b/teshsuite/smpi/allreduce/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(allreduce allreduce.c) + add_executable(allreduce_coll allreduce_coll.c) + target_link_libraries(allreduce simgrid) + target_link_libraries(allreduce_coll simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll_large.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/allreduce.c + ${CMAKE_CURRENT_SOURCE_DIR}/allreduce_coll.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/allreduce.c b/teshsuite/smpi/allreduce/allreduce.c similarity index 100% rename from teshsuite/smpi/allreduce.c rename to teshsuite/smpi/allreduce/allreduce.c diff --git a/teshsuite/smpi/allreduce_coll.c b/teshsuite/smpi/allreduce/allreduce_coll.c similarity index 100% rename from teshsuite/smpi/allreduce_coll.c rename to teshsuite/smpi/allreduce/allreduce_coll.c diff --git a/teshsuite/smpi/allreduce_coll.tesh b/teshsuite/smpi/allreduce/allreduce_coll.tesh similarity index 94% rename from teshsuite/smpi/allreduce_coll.tesh rename to teshsuite/smpi/allreduce/allreduce_coll.tesh index b797b2e0aa..e7aaae0d34 100644 --- a/teshsuite/smpi/allreduce_coll.tesh +++ b/teshsuite/smpi/allreduce/allreduce_coll.tesh @@ -3,7 +3,7 @@ ! output sort p Test allreduce -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./allreduce_coll --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/allreduce_coll --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter diff --git a/teshsuite/smpi/allreduce_coll_large.tesh b/teshsuite/smpi/allreduce/allreduce_coll_large.tesh similarity index 99% rename from teshsuite/smpi/allreduce_coll_large.tesh rename to teshsuite/smpi/allreduce/allreduce_coll_large.tesh index e13e40c43a..a96dc87666 100644 --- a/teshsuite/smpi/allreduce_coll_large.tesh +++ b/teshsuite/smpi/allreduce/allreduce_coll_large.tesh @@ -4,7 +4,7 @@ ! timeout 20 p Test allreduce -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./allreduce_coll 30000 --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/allreduce_coll 30000 --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter diff --git a/teshsuite/smpi/alltoall/CMakeLists.txt b/teshsuite/smpi/alltoall/CMakeLists.txt new file mode 100644 index 0000000000..371e7d6964 --- /dev/null +++ b/teshsuite/smpi/alltoall/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(alltoall2 alltoall2.c) + add_executable(alltoall_basic alltoall_basic.c) + add_executable(alltoall_coll alltoall_coll.c) + target_link_libraries(alltoall2 simgrid) + target_link_libraries(alltoall_basic simgrid) + target_link_libraries(alltoall_coll simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/alltoall_coll.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/alltoall_coll.c + ${CMAKE_CURRENT_SOURCE_DIR}/alltoall_basic.c + ${CMAKE_CURRENT_SOURCE_DIR}/alltoall2.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/alltoall2.c b/teshsuite/smpi/alltoall/alltoall2.c similarity index 100% rename from teshsuite/smpi/alltoall2.c rename to teshsuite/smpi/alltoall/alltoall2.c diff --git a/teshsuite/smpi/alltoall_basic.c b/teshsuite/smpi/alltoall/alltoall_basic.c similarity index 100% rename from teshsuite/smpi/alltoall_basic.c rename to teshsuite/smpi/alltoall/alltoall_basic.c diff --git a/teshsuite/smpi/alltoall_coll.c b/teshsuite/smpi/alltoall/alltoall_coll.c similarity index 100% rename from teshsuite/smpi/alltoall_coll.c rename to teshsuite/smpi/alltoall/alltoall_coll.c diff --git a/teshsuite/smpi/alltoall_coll.tesh b/teshsuite/smpi/alltoall/alltoall_coll.tesh similarity index 93% rename from teshsuite/smpi/alltoall_coll.tesh rename to teshsuite/smpi/alltoall/alltoall_coll.tesh index a99b590346..3946dc2def 100644 --- a/teshsuite/smpi/alltoall_coll.tesh +++ b/teshsuite/smpi/alltoall/alltoall_coll.tesh @@ -3,7 +3,7 @@ ! output sort p Test all to all -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./alltoall_coll -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/alltoall_coll -q --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter diff --git a/teshsuite/smpi/alltoallv/CMakeLists.txt b/teshsuite/smpi/alltoallv/CMakeLists.txt new file mode 100644 index 0000000000..00ba90cb9a --- /dev/null +++ b/teshsuite/smpi/alltoallv/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(alltoallv_coll alltoallv_coll.c) + target_link_libraries(alltoallv_coll simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/alltoallv_coll.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/alltoallv_coll.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/alltoallv_coll.c b/teshsuite/smpi/alltoallv/alltoallv_coll.c similarity index 100% rename from teshsuite/smpi/alltoallv_coll.c rename to teshsuite/smpi/alltoallv/alltoallv_coll.c diff --git a/teshsuite/smpi/alltoallv_coll.tesh b/teshsuite/smpi/alltoallv/alltoallv_coll.tesh similarity index 99% rename from teshsuite/smpi/alltoallv_coll.tesh rename to teshsuite/smpi/alltoallv/alltoallv_coll.tesh index 3346488ea1..7815af12ca 100644 --- a/teshsuite/smpi/alltoallv_coll.tesh +++ b/teshsuite/smpi/alltoallv/alltoallv_coll.tesh @@ -3,7 +3,7 @@ ! output sort p Test all to all -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./alltoallv_coll --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/alltoallv_coll --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter @@ -118,6 +118,6 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ > [15] sbuf: (#256): [1500][1501][1502][1503][1504][1505][1506][1507][1508][1509][1510][1511][1512][1513][1514][1515][1516][1517][1518][1519][1520][1521][1522][1523][1524][1525][1526][1527][1528][1529][1530][1531][1532][1533][1534][1535][1536][1537][1538][1539][1540][1541][1542][1543][1544][1545][1546][1547][1548][1549][1550][1551][1552][1553][1554][1555][1556][1557][1558][1559][1560][1561][1562][1563][1564][1565][1566][1567][1568][1569][1570][1571][1572][1573][1574][1575][1576][1577][1578][1579][1580][1581][1582][1583][1584][1585][1586][1587][1588][1589][1590][1591][1592][1593][1594][1595][1596][1597][1598][1599][1600][1601][1602][1603][1604][1605][1606][1607][1608][1609][1610][1611][1612][1613][1614][1615][1616][1617][1618][1619][1620][1621][1622][1623][1624][1625][1626][1627][1628][1629][1630][1631][1632][1633][1634][1635][1636][1637][1638][1639][1640][1641][1642][1643][1644][1645][1646][1647][1648][1649][1650][1651][1652][1653][1654][1655][1656][1657][1658][1659][1660][1661][1662][1663][1664][1665][1666][1667][1668][1669][1670][1671][1672][1673][1674][1675][1676][1677][1678][1679][1680][1681][1682][1683][1684][1685][1686][1687][1688][1689][1690][1691][1692][1693][1694][1695][1696][1697][1698][1699][1700][1701][1702][1703][1704][1705][1706][1707][1708][1709][1710][1711][1712][1713][1714][1715][1716][1717][1718][1719][1720][1721][1722][1723][1724][1725][1726][1727][1728][1729][1730][1731][1732][1733][1734][1735][1736][1737][1738][1739][1740][1741][1742][1743][1744][1745][1746][1747][1748][1749][1750][1751][1752][1753][1754][1755] > [15] scount: (#16): [0][1][2][3][4][5][6][7][8][9][10][11][12][13][14][15] > [15] sdisp: (#16): [0][1][3][6][10][15][21][28][36][45][55][66][78][91][105][120] -> +> > Alltoallv TEST COMPLETE. diff --git a/teshsuite/smpi/barrier/CMakeLists.txt b/teshsuite/smpi/barrier/CMakeLists.txt new file mode 100644 index 0000000000..2d7d550cca --- /dev/null +++ b/teshsuite/smpi/barrier/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(barrier_coll barrier.c ) + target_link_libraries(barrier_coll simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/barrier_coll.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/barrier.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/barrier.c b/teshsuite/smpi/barrier/barrier.c similarity index 100% rename from teshsuite/smpi/barrier.c rename to teshsuite/smpi/barrier/barrier.c diff --git a/teshsuite/smpi/barrier_coll.tesh b/teshsuite/smpi/barrier/barrier_coll.tesh similarity index 76% rename from teshsuite/smpi/barrier_coll.tesh rename to teshsuite/smpi/barrier/barrier_coll.tesh index a58751e5a2..e1e4b80bd0 100644 --- a/teshsuite/smpi/barrier_coll.tesh +++ b/teshsuite/smpi/barrier/barrier_coll.tesh @@ -3,7 +3,7 @@ ! output sort p Test barrier -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./barrier_coll --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/barrier_coll --log=smpi_kernel.thres:warning > ... Barrier .... > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) diff --git a/teshsuite/smpi/bcast/CMakeLists.txt b/teshsuite/smpi/bcast/CMakeLists.txt new file mode 100644 index 0000000000..0ad7183b57 --- /dev/null +++ b/teshsuite/smpi/bcast/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(bcast bcast.c) + add_executable(bcast_coll bcast_coll.c) + target_link_libraries(bcast simgrid) + target_link_libraries(bcast_coll simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/bcast.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/bcast_coll.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/bcast.c + ${CMAKE_CURRENT_SOURCE_DIR}/bcast_coll.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/bcast.c b/teshsuite/smpi/bcast/bcast.c similarity index 100% rename from teshsuite/smpi/bcast.c rename to teshsuite/smpi/bcast/bcast.c diff --git a/teshsuite/smpi/bcast.tesh b/teshsuite/smpi/bcast/bcast.tesh similarity index 79% rename from teshsuite/smpi/bcast.tesh rename to teshsuite/smpi/bcast/bcast.tesh index 352f56c78e..0065be4cbc 100644 --- a/teshsuite/smpi/bcast.tesh +++ b/teshsuite/smpi/bcast/bcast.tesh @@ -2,11 +2,11 @@ # (since we want to pass it to the child, it has to be redefined before each command) # Go for the first test p Test Broadcast with less processes than hosts -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 3 ./bcast -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 3 ${bindir:=.}/bcast -q --log=smpi_kernel.thres:warning > [rank 0] -> Tremblay > [rank 1] -> Jupiter > [rank 2] -> Fafard -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -15,13 +15,13 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ # second test p Test Broadcast with as much processes than hosts ! setenv LD_LIBRARY_PATH=../../lib -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 5 ./bcast -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 5 ${bindir:=.}/bcast -q --log=smpi_kernel.thres:warning > [rank 0] -> Tremblay > [rank 1] -> Jupiter > [rank 2] -> Fafard > [rank 3] -> Ginette > [rank 4] -> Bourassa -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -30,7 +30,7 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ # Another test p Test Broadcast with more processes than hosts ! setenv LD_LIBRARY_PATH=../../lib -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 12 ./bcast -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 12 ${bindir:=.}/bcast -q --log=smpi_kernel.thres:warning > You requested to use 12 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter @@ -44,7 +44,7 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ > [rank 9] -> Bourassa > [rank 10] -> Tremblay > [rank 11] -> Jupiter -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/teshsuite/smpi/bcast_coll.c b/teshsuite/smpi/bcast/bcast_coll.c similarity index 95% rename from teshsuite/smpi/bcast_coll.c rename to teshsuite/smpi/bcast/bcast_coll.c index c9d898e391..bceaf4087c 100644 --- a/teshsuite/smpi/bcast_coll.c +++ b/teshsuite/smpi/bcast/bcast_coll.c @@ -23,7 +23,7 @@ int main(int argc, char **argv) for (i = 0; i < count; i++) values[i] = (0 == rank) ? 17 : 3; - status = MPI_Bcast(values, count, MPI_INT, 0, MPI_COMM_WORLD); + MPI_Bcast(values, count, MPI_INT, 0, MPI_COMM_WORLD); int good = 0; for (i = 0; i < count; i++) diff --git a/teshsuite/smpi/bcast_coll.tesh b/teshsuite/smpi/bcast/bcast_coll.tesh similarity index 90% rename from teshsuite/smpi/bcast_coll.tesh rename to teshsuite/smpi/bcast/bcast_coll.tesh index 641e8d2dcf..6163065f74 100644 --- a/teshsuite/smpi/bcast_coll.tesh +++ b/teshsuite/smpi/bcast/bcast_coll.tesh @@ -2,7 +2,7 @@ p Test Broadcast with more processes than hosts ! setenv LD_LIBRARY_PATH=../../lib ! output sort -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./bcast_coll --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/bcast_coll --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter diff --git a/teshsuite/smpi/compute/CMakeLists.txt b/teshsuite/smpi/compute/CMakeLists.txt new file mode 100644 index 0000000000..1f259147b5 --- /dev/null +++ b/teshsuite/smpi/compute/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(compute compute.c) + add_executable(compute2 compute2.c) + add_executable(compute3 compute3.c) + target_link_libraries(compute simgrid) + target_link_libraries(compute2 simgrid) + target_link_libraries(compute3 simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/compute.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/compute.c + ${CMAKE_CURRENT_SOURCE_DIR}/compute2.c + ${CMAKE_CURRENT_SOURCE_DIR}/compute3.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/compute.c b/teshsuite/smpi/compute/compute.c similarity index 100% rename from teshsuite/smpi/compute.c rename to teshsuite/smpi/compute/compute.c diff --git a/teshsuite/smpi/compute.tesh b/teshsuite/smpi/compute/compute.tesh similarity index 71% rename from teshsuite/smpi/compute.tesh rename to teshsuite/smpi/compute/compute.tesh index 8e74bb9b7e..4864e4b842 100644 --- a/teshsuite/smpi/compute.tesh +++ b/teshsuite/smpi/compute/compute.tesh @@ -1,19 +1,19 @@ p Test compute ! timeout 5 -$ ../../smpi_script/bin/smpirun -platform ${srcdir:=.}/../../examples/msg/small_platform_with_routers.xml -hostfile ${srcdir:=.}/hostfile -np 3 --log=root.thres:warning ./compute 7 --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -hostfile ../hostfile -platform ../../../examples/msg/small_platform_with_routers.xml -np 3 --log=root.thres:warning ${bindir:=.}/compute 7 --log=smpi_kernel.thres:warning > 7 16.000000 > 7 16.000000 > 7 16.000000 p Test compute only once ! timeout 5 -$ ../../smpi_script/bin/smpirun -platform ${srcdir:=.}/../../examples/msg/small_platform_with_routers.xml -hostfile ${srcdir:=.}/hostfile -np 3 --log=root.thres:warning ./compute2 7 --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -hostfile ../hostfile -platform ../../../examples/msg/small_platform_with_routers.xml -np 3 --log=root.thres:warning ${bindir:=.}/compute2 7 --log=smpi_kernel.thres:warning > 7 16.000000 p Test compute and bench ! output sort ! timeout 45 -$ ../../smpi_script/bin/smpirun -platform ${srcdir:=.}/../../examples/msg/small_platform_with_routers.xml -hostfile ${srcdir:=.}/hostfile -np 3 --log=root.thres:warning ./compute3 quiet --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -hostfile ../hostfile -platform ../../../examples/msg/small_platform_with_routers.xml -np 3 --log=root.thres:warning ${bindir:=.}/compute3 quiet --log=smpi_kernel.thres:warning > (0) Run the first computation. It's globally benched, and I want no more than 4 benchmarks (thres<0) > (0) Run the first computation. It's globally benched, and I want no more than 4 benchmarks (thres<0) > (0) Run the first computation. It's globally benched, and I want no more than 4 benchmarks (thres<0) diff --git a/teshsuite/smpi/compute2.c b/teshsuite/smpi/compute/compute2.c similarity index 100% rename from teshsuite/smpi/compute2.c rename to teshsuite/smpi/compute/compute2.c diff --git a/teshsuite/smpi/compute3.c b/teshsuite/smpi/compute/compute3.c similarity index 100% rename from teshsuite/smpi/compute3.c rename to teshsuite/smpi/compute/compute3.c diff --git a/teshsuite/smpi/gather/CMakeLists.txt b/teshsuite/smpi/gather/CMakeLists.txt new file mode 100644 index 0000000000..386a6641fe --- /dev/null +++ b/teshsuite/smpi/gather/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(gather_coll gather_coll.c) + target_link_libraries(gather_coll simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/gather_coll.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/gather_coll.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/gather_coll.c b/teshsuite/smpi/gather/gather_coll.c similarity index 100% rename from teshsuite/smpi/gather_coll.c rename to teshsuite/smpi/gather/gather_coll.c diff --git a/teshsuite/smpi/gather_coll.tesh b/teshsuite/smpi/gather/gather_coll.tesh similarity index 84% rename from teshsuite/smpi/gather_coll.tesh rename to teshsuite/smpi/gather/gather_coll.tesh index 9498cf1db7..2ca27518a5 100644 --- a/teshsuite/smpi/gather_coll.tesh +++ b/teshsuite/smpi/gather/gather_coll.tesh @@ -4,7 +4,7 @@ ! timeout 30 p Test all to all -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./gather_coll --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/gather_coll --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter diff --git a/teshsuite/smpi/get_processor_name.c b/teshsuite/smpi/get_processor_name.c deleted file mode 100644 index 90b9a0bb0e..0000000000 --- a/teshsuite/smpi/get_processor_name.c +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (c) 2010, 2012-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 -#include - -int main(int argc, char **argv) -{ - int size, rank; - - char name[MPI_MAX_PROCESSOR_NAME]; - int len; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &size); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - MPI_Get_processor_name(name, &len); - printf("rank %d is running on host %s\n", rank, name); - MPI_Finalize(); - return 0; -} diff --git a/teshsuite/smpi/hvector/CMakeLists.txt b/teshsuite/smpi/hvector/CMakeLists.txt new file mode 100644 index 0000000000..fe240c2d74 --- /dev/null +++ b/teshsuite/smpi/hvector/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(hvector_test hvector_test.c) + target_link_libraries(hvector_test simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/hvector.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/hvector_test.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/hvector.tesh b/teshsuite/smpi/hvector/hvector.tesh similarity index 87% rename from teshsuite/smpi/hvector.tesh rename to teshsuite/smpi/hvector/hvector.tesh index b5f789e252..221eb599fd 100644 --- a/teshsuite/smpi/hvector.tesh +++ b/teshsuite/smpi/hvector/hvector.tesh @@ -1,9 +1,9 @@ p Test hvector ! setenv LD_LIBRARY_PATH=../../lib ! output sort -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 2 ./hvector_test -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 2 ${bindir:=.}/hvector_test -q --log=smpi_kernel.thres:warning > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/teshsuite/smpi/hvector_test.c b/teshsuite/smpi/hvector/hvector_test.c similarity index 100% rename from teshsuite/smpi/hvector_test.c rename to teshsuite/smpi/hvector/hvector_test.c diff --git a/teshsuite/smpi/indexed/CMakeLists.txt b/teshsuite/smpi/indexed/CMakeLists.txt new file mode 100644 index 0000000000..e6c9af4e82 --- /dev/null +++ b/teshsuite/smpi/indexed/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(indexed_test indexed_test.c) + target_link_libraries(indexed_test simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/indexed.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/indexed_test.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/indexed.tesh b/teshsuite/smpi/indexed/indexed.tesh similarity index 83% rename from teshsuite/smpi/indexed.tesh rename to teshsuite/smpi/indexed/indexed.tesh index f8777fb597..32d7378503 100644 --- a/teshsuite/smpi/indexed.tesh +++ b/teshsuite/smpi/indexed/indexed.tesh @@ -1,9 +1,9 @@ p Test indexed ! setenv LD_LIBRARY_PATH=../../lib ! output sort -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 2 ./indexed_test -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 2 ${bindir:=.}/indexed_test -q --log=smpi_kernel.thres:warning > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/teshsuite/smpi/indexed_test.c b/teshsuite/smpi/indexed/indexed_test.c similarity index 100% rename from teshsuite/smpi/indexed_test.c rename to teshsuite/smpi/indexed/indexed_test.c diff --git a/teshsuite/smpi/mpich3-test/comm/dup.c b/teshsuite/smpi/mpich3-test/comm/dup.c index a30975fb40..c9a06e6e79 100644 --- a/teshsuite/smpi/mpich3-test/comm/dup.c +++ b/teshsuite/smpi/mpich3-test/comm/dup.c @@ -33,7 +33,6 @@ int main( int argc, char **argv ) } /* Can we communicate with this new communicator? */ - dest = MPI_PROC_NULL; if (rank == 0) { dest = size - 1; a = rank; diff --git a/teshsuite/smpi/mpich3-test/comm/dup_with_info.c b/teshsuite/smpi/mpich3-test/comm/dup_with_info.c index e63acaaa94..c0472c0b4c 100644 --- a/teshsuite/smpi/mpich3-test/comm/dup_with_info.c +++ b/teshsuite/smpi/mpich3-test/comm/dup_with_info.c @@ -28,7 +28,6 @@ int run_tests(MPI_Comm comm) MPI_Barrier(comm); /* Can we communicate with this new communicator? */ - dest = MPI_PROC_NULL; if (rank == 0) { dest = size - 1; a = rank; diff --git a/teshsuite/smpi/mpich3-test/group/groupcreate.c b/teshsuite/smpi/mpich3-test/group/groupcreate.c index c8952d84e1..5e3a2f3b66 100644 --- a/teshsuite/smpi/mpich3-test/group/groupcreate.c +++ b/teshsuite/smpi/mpich3-test/group/groupcreate.c @@ -41,7 +41,7 @@ int main( int argc, char **argv ) else { /* Check that the group was created (and that any errors were caught) */ - rc = MPI_Group_size( group_array[i], &group_size ); + MPI_Group_size( group_array[i], &group_size ); if (group_size != size) { fprintf( stderr, "Group number %d not correct (size = %d)\n", i, size ); diff --git a/teshsuite/smpi/mpich3-test/pt2pt/sendall.c b/teshsuite/smpi/mpich3-test/pt2pt/sendall.c index 2f87e47eb0..d344e24f61 100644 --- a/teshsuite/smpi/mpich3-test/pt2pt/sendall.c +++ b/teshsuite/smpi/mpich3-test/pt2pt/sendall.c @@ -28,7 +28,6 @@ int main ( int argc, char *argv[] ) int i; int count, size; int self, npes; - double secs; MPI_Request request[MAXPES]; MPI_Status status; @@ -44,7 +43,6 @@ int main ( int argc, char *argv[] ) } for (size = 1; size <= MYBUFSIZE ; size += size) { - secs = -MPI_Wtime (); for (count = 0; count < NUM_RUNS; count++) { MPI_Barrier (MPI_COMM_WORLD); @@ -66,10 +64,8 @@ int main ( int argc, char *argv[] ) } MPI_Barrier (MPI_COMM_WORLD); - secs += MPI_Wtime (); if (self == 0) { - secs = secs / (double) NUM_RUNS; MTestPrintfMsg( 1, "length = %d ints\n", size ); } } diff --git a/teshsuite/smpi/pingpong/CMakeLists.txt b/teshsuite/smpi/pingpong/CMakeLists.txt new file mode 100644 index 0000000000..a7e154741c --- /dev/null +++ b/teshsuite/smpi/pingpong/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(pingpong pingpong.c) + add_executable(dsend dsend.c) + target_link_libraries(pingpong simgrid) + target_link_libraries(dsend simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/pt2pt.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/TI_output.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/dsend.c + ${CMAKE_CURRENT_SOURCE_DIR}/pingpong.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/TI_output.tesh b/teshsuite/smpi/pingpong/TI_output.tesh similarity index 71% rename from teshsuite/smpi/TI_output.tesh rename to teshsuite/smpi/pingpong/TI_output.tesh index 759f177171..2d0f1a50d0 100644 --- a/teshsuite/smpi/TI_output.tesh +++ b/teshsuite/smpi/pingpong/TI_output.tesh @@ -2,10 +2,10 @@ $ rm -rf ./out_ti.txt_files $ rm -rf ./out_in_ti.txt_files p Test output of time independent tracing -p generate a trace with pingpong, and replay itself, then check that output trace of the second run is the same as in the first (once sorted) +p generate a trace with pingpong, and replay itself, then check that output trace of the second run is the same as in the first (once sorted) ! setenv LD_LIBRARY_PATH=../../lib ! output sort -$ ../../smpi_script/bin/smpirun -trace-ti --cfg=tracing/filename:out_in_ti.txt --cfg=smpi/cpu_threshold:-1 -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 4 ./pingpong -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -trace-ti --cfg=tracing/filename:out_in_ti.txt --cfg=smpi/cpu_threshold:-1 -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 4 ${bindir:=.}/pingpong -q --log=smpi_kernel.thres:warning > *** Ping-pong test (MPI_Send/MPI_Recv) *** > == pivot=0 : pingpong [0] <--> [1] > == pivot=1 : pingpong [1] <--> [2] @@ -16,33 +16,33 @@ $ ../../smpi_script/bin/smpirun -trace-ti --cfg=tracing/filename:out_in_ti.txt - > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/format' to 'TI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/computing' to 'yes' -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'out_in_ti.txt' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'smpi/cpu_threshold' to '-1' -> [0] About to send 1st message '99' to process [1] -> [0] Received reply message '100' from process [1] -> [1] About to send 1st message '100' to process [2] -> [1] About to send back message '100' to process [0] -> [1] Received 1st message '99' from process [0] -> [1] Received reply message '101' from process [2] +> [0] About to send 1st message '99' to process [1] +> [0] Received reply message '100' from process [1] +> [1] About to send 1st message '100' to process [2] +> [1] About to send back message '100' to process [0] +> [1] Received 1st message '99' from process [0] +> [1] Received reply message '101' from process [2] > [1] increment message's value to '100' -> [2] About to send 1st message '101' to process [3] -> [2] About to send back message '101' to process [1] -> [2] Received 1st message '100' from process [1] -> [2] Received reply message '102' from process [3] +> [2] About to send 1st message '101' to process [3] +> [2] About to send back message '101' to process [1] +> [2] Received 1st message '100' from process [1] +> [2] Received reply message '102' from process [3] > [2] increment message's value to '101' -> [3] About to send back message '102' to process [2] -> [3] Received 1st message '101' from process [2] +> [3] About to send back message '102' to process [2] +> [3] Received 1st message '101' from process [2] > [3] increment message's value to '102' > [rank 0] -> Tremblay > [rank 1] -> Jupiter > [rank 2] -> Fafard > [rank 3] -> Ginette -$ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.:critical -trace-ti --cfg=tracing/filename:out_ti.txt --cfg=smpi/cpu_threshold:-1 -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 4 ../../examples/smpi/smpi_replay ./out_in_ti.txt --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -ext smpi_replay --log=replay.:critical -trace-ti --cfg=tracing/filename:out_ti.txt --cfg=smpi/cpu_threshold:-1 -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 4 ${bindir:=.}/../../../examples/smpi/smpi_replay ./out_in_ti.txt --log=smpi_kernel.thres:warning > [rank 0] -> Tremblay > [rank 1] -> Jupiter > [rank 2] -> Fafard @@ -52,7 +52,7 @@ $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.:critical -trace-t > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/format' to 'TI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/computing' to 'yes' -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -115,9 +115,9 @@ $ rm out_in_ti.txt p Same test, but only using one output file for all processes -p generate a trace with pingpong, and replay itself, then check that output trace of the second run is the same as in the first (once sorted) +p generate a trace with pingpong, and replay itself, then check that output trace of the second run is the same as in the first (once sorted) ! output sort -$ ../../smpi_script/bin/smpirun -trace-ti --cfg=tracing/filename:out_in_ti.txt --cfg=tracing/smpi/format/ti_one_file:yes -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 4 ./pingpong -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -trace-ti --cfg=tracing/filename:out_in_ti.txt --cfg=tracing/smpi/format/ti_one_file:yes -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 4 ${bindir:=.}/pingpong -q --log=smpi_kernel.thres:warning > *** Ping-pong test (MPI_Send/MPI_Recv) *** > == pivot=0 : pingpong [0] <--> [1] > == pivot=1 : pingpong [1] <--> [2] @@ -128,33 +128,33 @@ $ ../../smpi_script/bin/smpirun -trace-ti --cfg=tracing/filename:out_in_ti.txt - > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/format' to 'TI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/computing' to 'yes' -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/filename' to 'out_in_ti.txt' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/format/ti_one_file' to 'yes' -> [0] About to send 1st message '99' to process [1] -> [0] Received reply message '100' from process [1] -> [1] About to send 1st message '100' to process [2] -> [1] About to send back message '100' to process [0] -> [1] Received 1st message '99' from process [0] -> [1] Received reply message '101' from process [2] +> [0] About to send 1st message '99' to process [1] +> [0] Received reply message '100' from process [1] +> [1] About to send 1st message '100' to process [2] +> [1] About to send back message '100' to process [0] +> [1] Received 1st message '99' from process [0] +> [1] Received reply message '101' from process [2] > [1] increment message's value to '100' -> [2] About to send 1st message '101' to process [3] -> [2] About to send back message '101' to process [1] -> [2] Received 1st message '100' from process [1] -> [2] Received reply message '102' from process [3] +> [2] About to send 1st message '101' to process [3] +> [2] About to send back message '101' to process [1] +> [2] Received 1st message '100' from process [1] +> [2] Received reply message '102' from process [3] > [2] increment message's value to '101' -> [3] About to send back message '102' to process [2] -> [3] Received 1st message '101' from process [2] +> [3] About to send back message '102' to process [2] +> [3] Received 1st message '101' from process [2] > [3] increment message's value to '102' > [rank 0] -> Tremblay > [rank 1] -> Jupiter > [rank 2] -> Fafard > [rank 3] -> Ginette -$ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.:critical -trace-ti --cfg=tracing/filename:out_ti.txt --cfg=tracing/smpi/format/ti_one_file:yes -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 4 ../../examples/smpi/smpi_replay ./out_in_ti.txt --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -ext smpi_replay --log=replay.:critical -trace-ti --cfg=tracing/filename:out_ti.txt --cfg=tracing/smpi/format/ti_one_file:yes -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 4 ${bindir:=.}/../../../examples/smpi/smpi_replay ./out_in_ti.txt --log=smpi_kernel.thres:warning > [rank 0] -> Tremblay > [rank 1] -> Jupiter > [rank 2] -> Fafard @@ -164,7 +164,7 @@ $ ../../smpi_script/bin/smpirun -ext smpi_replay --log=replay.:critical -trace-t > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi' to 'yes' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/format' to 'TI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'tracing/smpi/computing' to 'yes' -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/teshsuite/smpi/dsend.c b/teshsuite/smpi/pingpong/dsend.c similarity index 100% rename from teshsuite/smpi/dsend.c rename to teshsuite/smpi/pingpong/dsend.c diff --git a/teshsuite/smpi/pingpong.c b/teshsuite/smpi/pingpong/pingpong.c similarity index 72% rename from teshsuite/smpi/pingpong.c rename to teshsuite/smpi/pingpong/pingpong.c index 7d2677f008..7adb6aea1f 100644 --- a/teshsuite/smpi/pingpong.c +++ b/teshsuite/smpi/pingpong/pingpong.c @@ -24,8 +24,8 @@ int main(int argc, char *argv[]) printf("MPI initialization failed!\n"); exit(1); } - err = MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ - err = MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ + MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ + MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ if (size < 2) { printf("run this program with exactly 2 processes (-np 2)\n"); MPI_Finalize(); @@ -43,27 +43,27 @@ int main(int argc, char *argv[]) pivot + 1); int dst = rank + 1; - printf("[%d] About to send 1st message '%d' to process [%d] \n", + printf("[%d] About to send 1st message '%d' to process [%d]\n", rank, msg, dst); - err = MPI_Send(&msg, 1, MPI_INT, dst, tag1, MPI_COMM_WORLD); + MPI_Send(&msg, 1, MPI_INT, dst, tag1, MPI_COMM_WORLD); - err = MPI_Recv(&msg, 1, MPI_INT, dst, tag2, MPI_COMM_WORLD, &status); /* Receive a message */ - printf("[%d] Received reply message '%d' from process [%d] \n", rank, + MPI_Recv(&msg, 1, MPI_INT, dst, tag2, MPI_COMM_WORLD, &status); /* Receive a message */ + printf("[%d] Received reply message '%d' from process [%d]\n", rank, msg, dst); } if ((pivot + 1) == rank) { int src = rank - 1; - err = MPI_Recv(&msg, 1, MPI_INT, src, tag1, MPI_COMM_WORLD, &status); /* Receive a message */ - printf("[%d] Received 1st message '%d' from process [%d] \n", rank, + MPI_Recv(&msg, 1, MPI_INT, src, tag1, MPI_COMM_WORLD, &status); /* Receive a message */ + printf("[%d] Received 1st message '%d' from process [%d]\n", rank, msg, src); msg++; printf("[%d] increment message's value to '%d'\n", rank, msg); - printf("[%d] About to send back message '%d' to process [%d] \n", + printf("[%d] About to send back message '%d' to process [%d]\n", rank, msg, src); - err = MPI_Send(&msg, 1, MPI_INT, src, tag2, MPI_COMM_WORLD); + MPI_Send(&msg, 1, MPI_INT, src, tag2, MPI_COMM_WORLD); } } - err = MPI_Finalize(); /* Terminate MPI */ + MPI_Finalize(); /* Terminate MPI */ return 0; } diff --git a/teshsuite/smpi/pt2pt.tesh b/teshsuite/smpi/pingpong/pt2pt.tesh similarity index 59% rename from teshsuite/smpi/pt2pt.tesh rename to teshsuite/smpi/pingpong/pt2pt.tesh index a67ee17558..cd3a00cb4f 100644 --- a/teshsuite/smpi/pt2pt.tesh +++ b/teshsuite/smpi/pingpong/pt2pt.tesh @@ -1,9 +1,9 @@ p Test dsend ! setenv LD_LIBRARY_PATH=../../lib ! output sort -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 2 ./dsend -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 2 ${bindir:=.}/dsend -q --log=smpi_kernel.thres:warning > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -16,30 +16,30 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ p Test pingpong ! setenv LD_LIBRARY_PATH=../../lib ! output sort -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 4 ./pingpong -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 4 ${bindir:=.}/pingpong -q --log=smpi_kernel.thres:warning > *** Ping-pong test (MPI_Send/MPI_Recv) *** > == pivot=0 : pingpong [0] <--> [1] > == pivot=1 : pingpong [1] <--> [2] > == pivot=2 : pingpong [2] <--> [3] > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' -> [0] About to send 1st message '99' to process [1] -> [0] Received reply message '100' from process [1] -> [1] About to send 1st message '100' to process [2] -> [1] About to send back message '100' to process [0] -> [1] Received 1st message '99' from process [0] -> [1] Received reply message '101' from process [2] +> [0] About to send 1st message '99' to process [1] +> [0] Received reply message '100' from process [1] +> [1] About to send 1st message '100' to process [2] +> [1] About to send back message '100' to process [0] +> [1] Received 1st message '99' from process [0] +> [1] Received reply message '101' from process [2] > [1] increment message's value to '100' -> [2] About to send 1st message '101' to process [3] -> [2] About to send back message '101' to process [1] -> [2] Received 1st message '100' from process [1] -> [2] Received reply message '102' from process [3] +> [2] About to send 1st message '101' to process [3] +> [2] About to send back message '101' to process [1] +> [2] Received 1st message '100' from process [1] +> [2] Received reply message '102' from process [3] > [2] increment message's value to '101' -> [3] About to send back message '102' to process [2] -> [3] Received 1st message '101' from process [2] +> [3] About to send back message '102' to process [2] +> [3] Received 1st message '101' from process [2] > [3] increment message's value to '102' > [rank 0] -> Tremblay > [rank 1] -> Jupiter diff --git a/teshsuite/smpi/reduce/CMakeLists.txt b/teshsuite/smpi/reduce/CMakeLists.txt new file mode 100644 index 0000000000..8e36392306 --- /dev/null +++ b/teshsuite/smpi/reduce/CMakeLists.txt @@ -0,0 +1,48 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(reduce reduce.c) + add_executable(reduce_coll reduce_coll.c) + add_executable(reduce_scatter_coll reduce_scatter_coll.c) + target_link_libraries(reduce simgrid) + target_link_libraries(reduce_coll simgrid) + target_link_libraries(reduce_scatter_coll simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/reduce.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/reduce_coll.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/reduce_scatter_coll.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/reduce.c + ${CMAKE_CURRENT_SOURCE_DIR}/reduce_coll.c + ${CMAKE_CURRENT_SOURCE_DIR}/reduce_scatter_coll.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/reduce.c b/teshsuite/smpi/reduce/reduce.c similarity index 98% rename from teshsuite/smpi/reduce.c rename to teshsuite/smpi/reduce/reduce.c index 92436c9021..09671e6781 100644 --- a/teshsuite/smpi/reduce.c +++ b/teshsuite/smpi/reduce/reduce.c @@ -11,7 +11,7 @@ * MESSAGE PASSING INTERFACE TEST CASE SUITE * * Copyright IBM Corp. 1995 - * + * * IBM Corp. hereby grants a non-exclusive license to use, copy, modify, and *distribute this software for any purpose and without fee provided that the *above copyright notice and the following paragraphs appear in all copies. @@ -117,7 +117,7 @@ int main(int argc, char **argv) MPI_Barrier(MPI_COMM_WORLD); if (0 == rank) - printf("** IBM Test Result: ... \n"); + printf("** IBM Test Result: ...\n"); if (!ibm_test(rank, size)) printf("\t[%d] failed.\n", rank); else if (!quiet) diff --git a/teshsuite/smpi/reduce.tesh b/teshsuite/smpi/reduce/reduce.tesh similarity index 80% rename from teshsuite/smpi/reduce.tesh rename to teshsuite/smpi/reduce/reduce.tesh index 1d3e74cf2c..1fe05f53cf 100644 --- a/teshsuite/smpi/reduce.tesh +++ b/teshsuite/smpi/reduce/reduce.tesh @@ -3,11 +3,11 @@ # Go for the first test p Test Reduce with 3 processes ! output sort -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 3 ./reduce -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 3 ${bindir:=.}/reduce -q --log=smpi_kernel.thres:warning > [rank 0] -> Tremblay > [rank 1] -> Jupiter > [rank 2] -> Fafard -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -16,7 +16,7 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ > [0] sum=6 ... validation ok. > [0] min=1 ... validation ok. > [0] max=3 ... validation ok. -> ** IBM Test Result: ... +> ** IBM Test Result: ... > ok. > ok. > ok. @@ -25,13 +25,13 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ ! setenv LD_LIBRARY_PATH=../../lib ! output sort p Test Reduce with 5 processes -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 5 ./reduce -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 5 ${bindir:=.}/reduce -q --log=smpi_kernel.thres:warning > [rank 0] -> Tremblay > [rank 1] -> Jupiter > [rank 2] -> Fafard > [rank 3] -> Ginette > [rank 4] -> Bourassa -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -40,7 +40,7 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ > [0] sum=15 ... validation ok. > [0] min=1 ... validation ok. > [0] max=5 ... validation ok. -> ** IBM Test Result: ... +> ** IBM Test Result: ... > ok. > ok. > ok. @@ -51,7 +51,7 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ ! output sort ! setenv LD_LIBRARY_PATH=../../lib p Test Reduce with 12 processes -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 12 ./reduce -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 12 ${bindir:=.}/reduce -q --log=smpi_kernel.thres:warning > You requested to use 12 processes, but there is only 5 processes in your hostfile... > [rank 0] -> Tremblay > [rank 1] -> Jupiter @@ -65,7 +65,7 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ > [rank 9] -> Bourassa > [rank 10] -> Tremblay > [rank 11] -> Jupiter -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' @@ -74,7 +74,7 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ > [0] sum=78 ... validation ok. > [0] min=1 ... validation ok. > [0] max=12 ... validation ok. -> ** IBM Test Result: ... +> ** IBM Test Result: ... > ok. > ok. > ok. diff --git a/teshsuite/smpi/reduce_coll.c b/teshsuite/smpi/reduce/reduce_coll.c similarity index 100% rename from teshsuite/smpi/reduce_coll.c rename to teshsuite/smpi/reduce/reduce_coll.c diff --git a/teshsuite/smpi/reduce_coll.tesh b/teshsuite/smpi/reduce/reduce_coll.tesh similarity index 91% rename from teshsuite/smpi/reduce_coll.tesh rename to teshsuite/smpi/reduce/reduce_coll.tesh index 0edfdc7a03..2612688325 100644 --- a/teshsuite/smpi/reduce_coll.tesh +++ b/teshsuite/smpi/reduce/reduce_coll.tesh @@ -3,7 +3,7 @@ ! output sort p Test allreduce -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./reduce_coll --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/reduce_coll --log=smpi_kernel.thres:warning > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) > [0] rcvbuf=[1920 1936 1952 1968 1984 2000 2016 2032 2048 2064 2080 2096 2112 2128 2144 2160 ] diff --git a/teshsuite/smpi/reduce_scatter_coll.c b/teshsuite/smpi/reduce/reduce_scatter_coll.c similarity index 100% rename from teshsuite/smpi/reduce_scatter_coll.c rename to teshsuite/smpi/reduce/reduce_scatter_coll.c diff --git a/teshsuite/smpi/reduce_scatter_coll.tesh b/teshsuite/smpi/reduce/reduce_scatter_coll.tesh similarity index 75% rename from teshsuite/smpi/reduce_scatter_coll.tesh rename to teshsuite/smpi/reduce/reduce_scatter_coll.tesh index 249f686ff9..5ef7ce1502 100644 --- a/teshsuite/smpi/reduce_scatter_coll.tesh +++ b/teshsuite/smpi/reduce/reduce_scatter_coll.tesh @@ -3,7 +3,7 @@ ! output sort p Test reduce_scatter -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./reduce_scatter_coll --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/reduce_scatter_coll --log=smpi_kernel.thres:warning > No Errors > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) diff --git a/teshsuite/smpi/scatter/CMakeLists.txt b/teshsuite/smpi/scatter/CMakeLists.txt new file mode 100644 index 0000000000..ca5efd0c64 --- /dev/null +++ b/teshsuite/smpi/scatter/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(scatter scatter.c) + target_link_libraries(scatter simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/scatter_coll.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/scatter.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/scatter.c b/teshsuite/smpi/scatter/scatter.c similarity index 96% rename from teshsuite/smpi/scatter.c rename to teshsuite/smpi/scatter/scatter.c index fda82e1724..94d88d355a 100644 --- a/teshsuite/smpi/scatter.c +++ b/teshsuite/smpi/scatter/scatter.c @@ -8,7 +8,7 @@ * MESSAGE PASSING INTERFACE TEST CASE SUITE * * Copyright IBM Corp. 1995 - * + * * IBM Corp. hereby grants a non-exclusive license to use, copy, modify, and *distribute this software for any purpose and without fee provided that the *above copyright notice and the following paragraphs appear in all copies. @@ -80,7 +80,7 @@ static int small_test(int rank, int size) int i; double *sndbuf = NULL; double rcvd; - int root = 0; // arbitrary choice + int root = 0; // arbitrary choice // on root, initialize sendbuf if (root == rank) { @@ -122,7 +122,7 @@ int main(int argc, char **argv) /* test 1 */ if (0 == rank) - printf("** Small Test Result: ... \n"); + printf("** Small Test Result: ...\n"); if (!small_test(rank, size)) printf("\t[%d] failed.\n", rank); else @@ -133,7 +133,7 @@ int main(int argc, char **argv) /* test 2 */ if (0 == rank) - printf("** IBM Test Result: ... \n"); + printf("** IBM Test Result: ...\n"); if (!ibm_test(rank, size)) printf("\t[%d] failed.\n", rank); else diff --git a/teshsuite/smpi/scatter_coll.tesh b/teshsuite/smpi/scatter/scatter_coll.tesh similarity index 79% rename from teshsuite/smpi/scatter_coll.tesh rename to teshsuite/smpi/scatter/scatter_coll.tesh index 043ec55a09..84a41c5f56 100644 --- a/teshsuite/smpi/scatter_coll.tesh +++ b/teshsuite/smpi/scatter/scatter_coll.tesh @@ -3,7 +3,7 @@ ! output sort p Test scatter -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ./scatter --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 16 --log=xbt_cfg.thres:critical ${bindir:=.}/scatter --log=smpi_kernel.thres:warning > [0] ok. > [0] ok. > [10] ok. @@ -36,8 +36,8 @@ $ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform $ > [8] ok. > [9] ok. > [9] ok. -> ** IBM Test Result: ... -> ** Small Test Result: ... +> ** IBM Test Result: ... +> ** Small Test Result: ... > You requested to use 16 processes, but there is only 5 processes in your hostfile... > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) > [rank 0] -> Tremblay diff --git a/teshsuite/smpi/sendrecv.c b/teshsuite/smpi/sendrecv.c deleted file mode 100644 index 5a55887039..0000000000 --- a/teshsuite/smpi/sendrecv.c +++ /dev/null @@ -1,70 +0,0 @@ -/* Copyright (c) 2009-2010, 2012-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 -#include "mpi.h" - -static int test(int myid, int numprocs) -{ -// The tags should match on the sender and receiver side. -// The distinction between sendtag and recvtag is mainly -// useful to make some other Recv or Send calls match the sendrecv. -#define TAG_RCV 999 -#define TAG_SND 999 - - -#define BUFLEN 10 - int left, right; - int buffer[BUFLEN], buffer2[BUFLEN]; - int i; - MPI_Status status; - - for (i = 0; i < BUFLEN; i++) { - buffer[i] = myid; - } - - right = (myid + 1) % numprocs; - left = myid - 1; - if (left < 0) - left = numprocs - 1; - - /* performs a right-to-left shift of vectors */ - MPI_Sendrecv(buffer, 10, MPI_INT, left, TAG_SND, buffer2, 10, MPI_INT, - right, TAG_RCV, MPI_COMM_WORLD, &status); - - for (i = 0; i < BUFLEN; i++) { - if (buffer2[i] != right) { - fprintf(stderr, "[%d] error: should have values %d, has %d\n", myid, - right, buffer2[i]); - return (0); - } - } - return (1); -} - -int main(int argc, char *argv[]) -{ - - int myid, numprocs; - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &numprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &myid); - - - if (0 == myid) - printf("\n *** MPI_Sendrecv test ***\n\n"); - - if (test(myid, numprocs)) { - fprintf(stderr, "[%d] ok.\n", myid); - } else { - fprintf(stderr, "[%d] failed.\n", myid); - } - - - MPI_Finalize(); - return 0; -} diff --git a/teshsuite/smpi/sendtest.c b/teshsuite/smpi/sendtest.c deleted file mode 100644 index bb5c4803d8..0000000000 --- a/teshsuite/smpi/sendtest.c +++ /dev/null @@ -1,92 +0,0 @@ -/* A simple example pingpong pogram to test MPI_Send and MPI_Recv */ - -/* Copyright (c) 2009-2010, 2012-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 -#include -#include -#include - -int main(int argc, char *argv[]) -{ - int rank; - int size; - MPI_Status status; - - int n = 0, m = 0, bytes = 0, workusecs = 0; - int currusecs; - - char *buf = NULL; - int i, j; - struct timeval start_time, stop_time; - struct timeval start_pause, curr_pause; - unsigned long usecs; - - MPI_Init(&argc, &argv); /* Initialize MPI */ - MPI_Comm_size(MPI_COMM_WORLD, &size); /* Get nr of tasks */ - MPI_Comm_rank(MPI_COMM_WORLD, &rank); /* Get id of this process */ - - if (size != 2) { - printf("run this program with exactly 2 processes (-np 2)\n"); - MPI_Finalize(); - exit(0); - } - - if (0 == rank) { - if (argc > 1 && isdigit(argv[1][0])) { - n = atoi(argv[1]); - } - if (argc > 2 && isdigit(argv[2][0])) { - m = atoi(argv[2]); - } - if (argc > 3 && isdigit(argv[3][0])) { - bytes = atoi(argv[3]); - } - if (argc > 4 && isdigit(argv[4][0])) { - workusecs = atoi(argv[4]); - } - buf = malloc(sizeof(char) * bytes); - for (i = 0; i < bytes; i++) buf[i] = i % 256; - MPI_Send(&n, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); - MPI_Send(&m, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); - MPI_Send(&bytes, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); - MPI_Send(&workusecs, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); - MPI_Barrier(MPI_COMM_WORLD); - gettimeofday(&start_time, NULL); - for (i = 0; i < n; i++) { - for (j = 0; j < m; j++) { - MPI_Send(buf, bytes, MPI_CHAR, 1, 0, MPI_COMM_WORLD); - gettimeofday(&start_pause, NULL); - currusecs = 0; - while (currusecs < workusecs) { - gettimeofday(&curr_pause, NULL); - currusecs = (curr_pause.tv_sec - start_pause.tv_sec) * 1e6 + curr_pause.tv_usec - start_pause.tv_usec; - } - } - MPI_Recv(buf, bytes, MPI_CHAR, 1, 0, MPI_COMM_WORLD, &status); - } - gettimeofday(&stop_time, NULL); - usecs = (stop_time.tv_sec - start_time.tv_sec) * 1e6 + stop_time.tv_usec - start_time.tv_usec; - printf("n: %d m: %d bytes: %d sleep: %d usecs: %u\n", n, m, bytes, workusecs, usecs); - } else { - MPI_Recv(&n, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&m, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&bytes, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&workusecs, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &status); - buf = malloc(sizeof(char) * bytes); - MPI_Barrier(MPI_COMM_WORLD); - for (i = 0; i < n; i++) { - for (j = 0; j < m; j++) { - MPI_Recv(buf, bytes, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status); - } - MPI_Send(buf, bytes, MPI_CHAR, 0, 0, MPI_COMM_WORLD); - } - } - free(buf); - MPI_Finalize(); - return 0; -} diff --git a/teshsuite/smpi/shared/CMakeLists.txt b/teshsuite/smpi/shared/CMakeLists.txt new file mode 100644 index 0000000000..0e44008dbc --- /dev/null +++ b/teshsuite/smpi/shared/CMakeLists.txt @@ -0,0 +1,42 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + if(NOT WIN32) + add_executable(shared shared.c) + target_link_libraries(shared simgrid) + endif() +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/shared.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/shared.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/shared.c b/teshsuite/smpi/shared/shared.c similarity index 100% rename from teshsuite/smpi/shared.c rename to teshsuite/smpi/shared/shared.c diff --git a/teshsuite/smpi/shared.tesh b/teshsuite/smpi/shared/shared.tesh similarity index 82% rename from teshsuite/smpi/shared.tesh rename to teshsuite/smpi/shared/shared.tesh index 64d932aace..16022df631 100644 --- a/teshsuite/smpi/shared.tesh +++ b/teshsuite/smpi/shared/shared.tesh @@ -2,9 +2,9 @@ p Test compute ! setenv LD_LIBRARY_PATH=../../lib ! output sort ! timeout 5 -$ ../../smpi_script/bin/smpirun -platform ${srcdir:=.}/../../examples/msg/small_platform_with_routers.xml -hostfile ${srcdir:=.}/hostfile -np 4 ./shared --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 4 ${bindir:=.}/shared --log=smpi_kernel.thres:warning > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/teshsuite/smpi/split.c b/teshsuite/smpi/split.c deleted file mode 100644 index 64a4a862d6..0000000000 --- a/teshsuite/smpi/split.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (c) 2009-2010, 2012-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 -#include - -int main(int argc, char *argv[]) -{ - int worldrank; - int localrank; - MPI_Comm localcomm; - - MPI_Init(&argc, &argv); - MPI_Comm_rank(MPI_COMM_WORLD, &worldrank); - MPI_Comm_split(MPI_COMM_WORLD, worldrank % 2, worldrank, &localcomm); - MPI_Comm_rank(localcomm, &localrank); - printf("node with world rank %d has local rank %d\n", worldrank, localrank); - MPI_Finalize(); - return 0; -} diff --git a/teshsuite/smpi/struct/CMakeLists.txt b/teshsuite/smpi/struct/CMakeLists.txt new file mode 100644 index 0000000000..b8b2a830aa --- /dev/null +++ b/teshsuite/smpi/struct/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(struct_test struct_test.c) + target_link_libraries(struct_test simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/struct.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/struct_test.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/struct.tesh b/teshsuite/smpi/struct/struct.tesh similarity index 77% rename from teshsuite/smpi/struct.tesh rename to teshsuite/smpi/struct/struct.tesh index ebeb8c65af..2e19b434b3 100644 --- a/teshsuite/smpi/struct.tesh +++ b/teshsuite/smpi/struct/struct.tesh @@ -1,11 +1,11 @@ p Test struct ! setenv LD_LIBRARY_PATH=../../lib ! output sort -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 2 ./struct_test -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 2 ${bindir:=.}/struct_test -q --log=smpi_kernel.thres:warning > Process 0 got -2 (-2?) and 8.000000 (8.0?), tab (should be all 0): 0 0 0 0 0 0 > Process 1 got -2 (-2?) and 8.000000 (8.0?), tab (should be all 0): 0 0 0 0 0 0 > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/teshsuite/smpi/struct_test.c b/teshsuite/smpi/struct/struct_test.c similarity index 100% rename from teshsuite/smpi/struct_test.c rename to teshsuite/smpi/struct/struct_test.c diff --git a/teshsuite/smpi/ttest01.c b/teshsuite/smpi/ttest01.c deleted file mode 100644 index c01db5b7a6..0000000000 --- a/teshsuite/smpi/ttest01.c +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2009-2010, 2012-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 -#include "mpi.h" -#include "instr/instr.h" - -#define DATATOSENT 100000000 - -int main(int argc, char *argv[]) -{ - MPI_Status status; - int rank, numprocs, tag = 0; - int *r = malloc(sizeof(int) * DATATOSENT); - - MPI_Init(&argc, &argv); - MPI_Comm_size(MPI_COMM_WORLD, &numprocs); - MPI_Comm_rank(MPI_COMM_WORLD, &rank); - - - int i; - for (i = 0; i < 10; i++) { - TRACE_smpi_set_category("A"); - if (rank == 0) { - MPI_Send(r, DATATOSENT, MPI_INT, 1, tag, MPI_COMM_WORLD); - } else if (rank == 1) { - MPI_Recv(r, DATATOSENT, MPI_INT, 0, tag, MPI_COMM_WORLD, &status); - } else { - //do nothing - } - - TRACE_smpi_set_category("B"); - if (rank == 0) { - MPI_Recv(r, DATATOSENT, MPI_INT, 1, tag, MPI_COMM_WORLD, &status); - } else if (rank == 1) { - MPI_Send(r, DATATOSENT, MPI_INT, 0, tag, MPI_COMM_WORLD); - } else { - //do nothing - } - } - TRACE_smpi_set_category("C"); - MPI_Barrier(MPI_COMM_WORLD); - MPI_Finalize(); - return 0; -} diff --git a/teshsuite/smpi/vector/CMakeLists.txt b/teshsuite/smpi/vector/CMakeLists.txt new file mode 100644 index 0000000000..0eb0ee2b25 --- /dev/null +++ b/teshsuite/smpi/vector/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.6) + +if(enable_smpi) + if(WIN32) + set(CMAKE_C_FLAGS "-include ${CMAKE_HOME_DIRECTORY}/include/smpi/smpi_main.h") + else() + set(CMAKE_C_COMPILER "${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc") + endif() + + set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + + include_directories("${CMAKE_HOME_DIRECTORY}/include/smpi") + add_executable(vector_test vector_test.c) + target_link_libraries(vector_test simgrid) +endif() + + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/vector.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(examples_src + ${examples_src} + ${CMAKE_CURRENT_SOURCE_DIR}/vector_test.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + + PARENT_SCOPE + ) diff --git a/teshsuite/smpi/vector.tesh b/teshsuite/smpi/vector/vector.tesh similarity index 87% rename from teshsuite/smpi/vector.tesh rename to teshsuite/smpi/vector/vector.tesh index e9a31a65db..95311e5d52 100644 --- a/teshsuite/smpi/vector.tesh +++ b/teshsuite/smpi/vector/vector.tesh @@ -1,9 +1,9 @@ p Test vector ! setenv LD_LIBRARY_PATH=../../lib ! output sort -$ ../../smpi_script/bin/smpirun -map -hostfile ${srcdir:=.}/hostfile -platform ${srcdir:=.}/../../examples/msg/small_platform.xml -np 2 ./vector_test -q --log=smpi_kernel.thres:warning +$ ${bindir:=.}/../../../bin/smpirun -map -hostfile ../hostfile -platform ../../../examples/msg/small_platform.xml -np 2 ${bindir:=.}/vector_test -q --log=smpi_kernel.thres:warning > [0.000000] [surf_config/INFO] Switching workstation model to compound since you changed the network and/or cpu model(s) -> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-9' +> [0.000000] [xbt_cfg/INFO] Configuration change: Set 'maxmin/precision' to '1e-3' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'surf/precision' to '1e-9' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/model' to 'SMPI' > [0.000000] [xbt_cfg/INFO] Configuration change: Set 'network/TCP_gamma' to '4194304' diff --git a/teshsuite/smpi/vector_test.c b/teshsuite/smpi/vector/vector_test.c similarity index 100% rename from teshsuite/smpi/vector_test.c rename to teshsuite/smpi/vector/vector_test.c diff --git a/teshsuite/xbt/CMakeLists.txt b/teshsuite/xbt/CMakeLists.txt deleted file mode 100644 index a7e923586f..0000000000 --- a/teshsuite/xbt/CMakeLists.txt +++ /dev/null @@ -1,50 +0,0 @@ -cmake_minimum_required(VERSION 2.6) - -set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") - -add_executable(log_large_test log_large_test.c) -add_executable(parallel_log_crashtest parallel_log_crashtest.c) -if(HAVE_MMALLOC) - add_executable(mmalloc_test mmalloc_test.c) -endif() -add_executable(parmap_test parmap_test.c) - - -### Add definitions for compile -target_link_libraries(log_large_test simgrid) -target_link_libraries(parallel_log_crashtest simgrid) -if(HAVE_MMALLOC) - target_link_libraries(mmalloc_test simgrid) -endif() -target_link_libraries(parmap_test simgrid) - -set(tesh_files - ${tesh_files} - ${CMAKE_CURRENT_SOURCE_DIR}/log_large_test.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/parallel_log_crashtest.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/xbt.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/mmalloc_64.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/mmalloc_32.tesh - ${CMAKE_CURRENT_SOURCE_DIR}/parmap_test.tesh - PARENT_SCOPE - ) -set(xml_files - ${xml_files} - PARENT_SCOPE - ) -set(teshsuite_src - ${teshsuite_src} - ${CMAKE_CURRENT_SOURCE_DIR}/log_large_test.c - ${CMAKE_CURRENT_SOURCE_DIR}/parallel_log_crashtest.c - ${CMAKE_CURRENT_SOURCE_DIR}/mmalloc_test.c - ${CMAKE_CURRENT_SOURCE_DIR}/parmap_test.c - PARENT_SCOPE - ) -set(bin_files - ${bin_files} - PARENT_SCOPE - ) -set(txt_files - ${txt_files} - PARENT_SCOPE - ) diff --git a/teshsuite/xbt/log_large/CMakeLists.txt b/teshsuite/xbt/log_large/CMakeLists.txt new file mode 100644 index 0000000000..120c86448c --- /dev/null +++ b/teshsuite/xbt/log_large/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 2.6) + +set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + +add_executable(log_large_test log_large_test.c) + +### Add definitions for compile +target_link_libraries(log_large_test simgrid) + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/log_large_test.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(teshsuite_src + ${teshsuite_src} + ${CMAKE_CURRENT_SOURCE_DIR}/log_large_test.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/teshsuite/xbt/log_large_test.c b/teshsuite/xbt/log_large/log_large_test.c similarity index 100% rename from teshsuite/xbt/log_large_test.c rename to teshsuite/xbt/log_large/log_large_test.c diff --git a/teshsuite/xbt/log_large_test.tesh b/teshsuite/xbt/log_large/log_large_test.tesh similarity index 99% rename from teshsuite/xbt/log_large_test.tesh rename to teshsuite/xbt/log_large/log_large_test.tesh index 2c749d5caf..32a8cf992c 100644 --- a/teshsuite/xbt/log_large_test.tesh +++ b/teshsuite/xbt/log_large/log_large_test.tesh @@ -1,6 +1,6 @@ p Check that the dynamic version of the log simple layout works -$ $SG_EXENV_TEST xbt/log_large_test "--log=root.fmt:%m%n" +$ $SG_EXENV_TEST ${bindir:=.}/log_large_test "--log=root.fmt:%m%n" > This is a very large message: > 0 > 1.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0 @@ -112,11 +112,11 @@ $ $SG_EXENV_TEST xbt/log_large_test "--log=root.fmt:%m%n" > 8.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0 > 9.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0 > 0.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0 -> +> > Done (strlen>10210) p Check that the dynamic version of the log formated layout works -$ $SG_EXENV_TEST xbt/log_large_test "--log=root.fmt:%m%n" +$ $SG_EXENV_TEST ${bindir:=.}/log_large_test "--log=root.fmt:%m%n" > This is a very large message: > 0 > 1.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0 @@ -228,5 +228,5 @@ $ $SG_EXENV_TEST xbt/log_large_test "--log=root.fmt:%m%n" > 8.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0 > 9.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0 > 0.........1.........2.........3.........4.........5.........6.........7.........8.........9.........0 -> +> > Done (strlen>10210) diff --git a/teshsuite/xbt/mmalloc/CMakeLists.txt b/teshsuite/xbt/mmalloc/CMakeLists.txt new file mode 100644 index 0000000000..729cb04202 --- /dev/null +++ b/teshsuite/xbt/mmalloc/CMakeLists.txt @@ -0,0 +1,32 @@ +cmake_minimum_required(VERSION 2.6) + +set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + +if(HAVE_MMALLOC) + add_executable(mmalloc_test mmalloc_test.c) + target_link_libraries(mmalloc_test simgrid) +endif() + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/mmalloc_64.tesh + ${CMAKE_CURRENT_SOURCE_DIR}/mmalloc_32.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(teshsuite_src + ${teshsuite_src} + ${CMAKE_CURRENT_SOURCE_DIR}/mmalloc_test.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/teshsuite/xbt/mmalloc_32.tesh b/teshsuite/xbt/mmalloc/mmalloc_32.tesh similarity index 98% rename from teshsuite/xbt/mmalloc_32.tesh rename to teshsuite/xbt/mmalloc/mmalloc_32.tesh index b64d9eccb7..449049d43b 100644 --- a/teshsuite/xbt/mmalloc_32.tesh +++ b/teshsuite/xbt/mmalloc/mmalloc_32.tesh @@ -1,4 +1,4 @@ -$ ./xbt/mmalloc_test --log=root.fmt:%m%n +$ ${bindir:=.}/mmalloc_test --log=root.fmt:%m%n > Allocating a new heap > HeapA allocated > 100 bytes allocated with offset 45000 diff --git a/teshsuite/xbt/mmalloc_64.tesh b/teshsuite/xbt/mmalloc/mmalloc_64.tesh similarity index 98% rename from teshsuite/xbt/mmalloc_64.tesh rename to teshsuite/xbt/mmalloc/mmalloc_64.tesh index 83108e6459..343e2a4a98 100644 --- a/teshsuite/xbt/mmalloc_64.tesh +++ b/teshsuite/xbt/mmalloc/mmalloc_64.tesh @@ -1,4 +1,4 @@ -$ ./xbt/mmalloc_test --log=root.fmt:%m%n +$ ${bindir:=.}/mmalloc_test --log=root.fmt:%m%n > Allocating a new heap > HeapA allocated > 100 bytes allocated with offset 39000 diff --git a/teshsuite/xbt/mmalloc_test.c b/teshsuite/xbt/mmalloc/mmalloc_test.c similarity index 100% rename from teshsuite/xbt/mmalloc_test.c rename to teshsuite/xbt/mmalloc/mmalloc_test.c diff --git a/teshsuite/xbt/parallel_log/CMakeLists.txt b/teshsuite/xbt/parallel_log/CMakeLists.txt new file mode 100644 index 0000000000..069181a9ae --- /dev/null +++ b/teshsuite/xbt/parallel_log/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 2.6) + +set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + +add_executable(parallel_log_crashtest parallel_log_crashtest.c) + +### Add definitions for compile +target_link_libraries(parallel_log_crashtest simgrid) + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/parallel_log_crashtest.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(teshsuite_src + ${teshsuite_src} + ${CMAKE_CURRENT_SOURCE_DIR}/parallel_log_crashtest.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/teshsuite/xbt/parallel_log_crashtest.c b/teshsuite/xbt/parallel_log/parallel_log_crashtest.c similarity index 100% rename from teshsuite/xbt/parallel_log_crashtest.c rename to teshsuite/xbt/parallel_log/parallel_log_crashtest.c diff --git a/teshsuite/xbt/parallel_log_crashtest.tesh b/teshsuite/xbt/parallel_log/parallel_log_crashtest.tesh similarity index 99% rename from teshsuite/xbt/parallel_log_crashtest.tesh rename to teshsuite/xbt/parallel_log/parallel_log_crashtest.tesh index cb7605e3d4..5715e7e4c2 100644 --- a/teshsuite/xbt/parallel_log_crashtest.tesh +++ b/teshsuite/xbt/parallel_log/parallel_log_crashtest.tesh @@ -1,7 +1,7 @@ ! timeout 20 p Try to crash the log mecanism by using it in parallel with a lot of threads -$ xbt/parallel_log_crashtest "--log=root.fmt:%m%n" +$ ${bindir:=.}/parallel_log_crashtest "--log=root.fmt:%m%n" > XXX (XX|XX|XX|XX|XX|XX|XX|XX|XX) > XXX (XX|XX|XX|XX|XX|XX|XX|XX|XX) > XXX (XX|XX|XX|XX|XX|XX|XX|XX|XX) diff --git a/teshsuite/xbt/parmap_test/CMakeLists.txt b/teshsuite/xbt/parmap_test/CMakeLists.txt new file mode 100644 index 0000000000..1f8d63daeb --- /dev/null +++ b/teshsuite/xbt/parmap_test/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 2.6) + +set(EXECUTABLE_OUTPUT_PATH "${CMAKE_CURRENT_BINARY_DIR}") + +add_executable(parmap_test parmap_test.c) + +### Add definitions for compile +target_link_libraries(parmap_test simgrid) + +set(tesh_files + ${tesh_files} + ${CMAKE_CURRENT_SOURCE_DIR}/parmap_test.tesh + PARENT_SCOPE + ) +set(xml_files + ${xml_files} + PARENT_SCOPE + ) +set(teshsuite_src + ${teshsuite_src} + ${CMAKE_CURRENT_SOURCE_DIR}/parmap_test.c + PARENT_SCOPE + ) +set(bin_files + ${bin_files} + PARENT_SCOPE + ) +set(txt_files + ${txt_files} + PARENT_SCOPE + ) diff --git a/teshsuite/xbt/parmap_test.c b/teshsuite/xbt/parmap_test/parmap_test.c similarity index 100% rename from teshsuite/xbt/parmap_test.c rename to teshsuite/xbt/parmap_test/parmap_test.c diff --git a/teshsuite/xbt/parmap_test.tesh b/teshsuite/xbt/parmap_test/parmap_test.tesh similarity index 77% rename from teshsuite/xbt/parmap_test.tesh rename to teshsuite/xbt/parmap_test/parmap_test.tesh index 2b85ff664a..d389a737f1 100644 --- a/teshsuite/xbt/parmap_test.tesh +++ b/teshsuite/xbt/parmap_test/parmap_test.tesh @@ -1,5 +1,5 @@ ! timeout 120 -$ ./xbt/parmap_test --log=root.fmt:%m%n +$ ${bindir:=.}/parmap_test --log=root.fmt:%m%n > Basic testing posix > Basic testing futex > Basic testing busy wait diff --git a/teshsuite/xbt/xbt.tesh b/teshsuite/xbt/xbt.tesh deleted file mode 100644 index 23c95332f9..0000000000 --- a/teshsuite/xbt/xbt.tesh +++ /dev/null @@ -1,6 +0,0 @@ -#! ./tesh - -# Description of this tesh file -! D This tesh file contains all the tesh files relative with the xbt framework - -! include parallel_log_crashtest.tesh