diff --git a/labs/catkin_ws/src/lab5/CMakeLists.txt b/labs/catkin_ws/src/lab5/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..83ab7ee37117a825b582f7b3eab26015e68ae8f0 --- /dev/null +++ b/labs/catkin_ws/src/lab5/CMakeLists.txt @@ -0,0 +1,227 @@ +cmake_minimum_required(VERSION 3.0.2) +project(lab5) + +## Compile as C++11, supported in ROS Kinetic and newer +add_compile_options(-std=c++11) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + roscpp + rospy + std_msgs + rviz +) + +catkin_package() + +include_directories( + ${PROJECT_SOURCE_DIR}/include + ${catkin_INCLUDE_DIRS} +) + +add_executable(goal ~/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/lab5/goal.cpp) + +#add_executable(wrap_rviz ~/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/lab2/wrap_rviz.h) + +add_dependencies(goal + ${${PROJECT_NAME}_EXPORTED_TARGETS} + ${catkin_EXPORTED_TARGETS} +) + +target_link_libraries(goal + ${catkin_LIBRARIES} +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a exec_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +# generate_messages( +# DEPENDENCIES +# std_msgs +# ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if your package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES lab5 +# CATKIN_DEPENDS gazebo roscpp rospy std_msgs +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +include_directories( +# include + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(${PROJECT_NAME} +# src/${PROJECT_NAME}/lab5.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +## With catkin_make all packages are built within a single CMake context +## The recommended prefix ensures that target names across packages don't collide +# add_executable(${PROJECT_NAME}_node src/lab5_node.cpp) + +## Rename C++ executable without prefix +## The above recommended prefix causes long target names, the following renames the +## target back to the shorter version for ease of user use +## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" +# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(${PROJECT_NAME}_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# catkin_install_python(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables for installation +## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html +# install(TARGETS ${PROJECT_NAME}_node +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark libraries for installation +## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html +# install(TARGETS ${PROJECT_NAME} +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_lab5.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/labs/catkin_ws/src/lab5/amcl.launch b/labs/catkin_ws/src/lab5/amcl.launch new file mode 100644 index 0000000000000000000000000000000000000000..5bc3c5cd5510561af70dd847fc001ea091cbeed3 --- /dev/null +++ b/labs/catkin_ws/src/lab5/amcl.launch @@ -0,0 +1,46 @@ +<launch> + <!-- Arguments --> + <arg name="scan_topic" default="scan"/> + <arg name="initial_pose_x" default="0.0"/> + <arg name="initial_pose_y" default="0.0"/> + <arg name="initial_pose_a" default="0.0"/> + + <!-- AMCL --> + <node pkg="amcl" type="amcl" name="amcl"> + + <param name="min_particles" value="500"/> + <param name="max_particles" value="3000"/> + <param name="kld_err" value="0.02"/> + <param name="update_min_d" value="0.20"/> + <param name="update_min_a" value="0.20"/> + <param name="resample_interval" value="1"/> + <param name="transform_tolerance" value="0.5"/> + <param name="recovery_alpha_slow" value="0.00"/> + <param name="recovery_alpha_fast" value="0.00"/> + <param name="initial_pose_x" value="$(arg initial_pose_x)"/> + <param name="initial_pose_y" value="$(arg initial_pose_y)"/> + <param name="initial_pose_a" value="$(arg initial_pose_a)"/> + <param name="gui_publish_rate" value="50.0"/> + + <remap from="scan" to="$(arg scan_topic)"/> + <param name="laser_max_range" value="3.5"/> + <param name="laser_max_beams" value="180"/> + <param name="laser_z_hit" value="0.5"/> + <param name="laser_z_short" value="0.05"/> + <param name="laser_z_max" value="0.05"/> + <param name="laser_z_rand" value="0.5"/> + <param name="laser_sigma_hit" value="0.2"/> + <param name="laser_lambda_short" value="0.1"/> + <param name="laser_likelihood_max_dist" value="2.0"/> + <param name="laser_model_type" value="likelihood_field"/> + + <param name="odom_model_type" value="diff"/> + <param name="odom_alpha1" value="0.1"/> + <param name="odom_alpha2" value="0.1"/> + <param name="odom_alpha3" value="0.1"/> + <param name="odom_alpha4" value="0.1"/> + <param name="odom_frame_id" value="odom"/> + <param name="base_frame_id" value="base_footprint"/> + + </node> +</launch> \ No newline at end of file diff --git a/labs/catkin_ws/src/lab5/ex1.launch b/labs/catkin_ws/src/lab5/ex1.launch new file mode 100644 index 0000000000000000000000000000000000000000..756be2e771056f3d2b0cc77d7fd04804f1c3790e --- /dev/null +++ b/labs/catkin_ws/src/lab5/ex1.launch @@ -0,0 +1,26 @@ + +<launch> + <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/> + <arg name="x_pos" default="-2.0"/> + <arg name="y_pos" default="-0.5"/> + <arg name="z_pos" default="0.0"/> + <arg name="world_file" default="~/3rdYear/RWR/Robot-With-Reflexes/labs/catkin_ws/src/lab5/worlds/lab5_world.world"/> + + <include file="$(find gazebo_ros)/launch/empty_world.launch"> + <arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_world.world"/> + <arg name="paused" value="false"/> + <arg name="use_sim_time" value="true"/> + <arg name="gui" value="true"/> + <arg name="headless" value="false"/> + <arg name="debug" value="false"/> + </include> + + <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" /> + + <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" /> + + <!-- Robot State Publisher --> + <node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"> + <param name="publish_frequency" type="double" value="30.0" /> + </node> +</launch> \ No newline at end of file diff --git a/labs/catkin_ws/src/lab5/ex2.launch b/labs/catkin_ws/src/lab5/ex2.launch new file mode 100644 index 0000000000000000000000000000000000000000..95c8477406e5d848d36f347ddc6bb38485d7d643 --- /dev/null +++ b/labs/catkin_ws/src/lab5/ex2.launch @@ -0,0 +1,42 @@ + +<launch> + <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/> + <arg name="x_pos" default="-2.0"/> + <arg name="y_pos" default="-0.5"/> + <arg name="z_pos" default="0.0"/> + <arg name="world_file" default="$(find lab5)/worlds/ex2.world"/> + <arg name="map_file" default="$(find lab5)/maps/ex2_map.yaml"/> + <arg name="amcl" default="$(find lab5)/amcl.launch"/> + <arg name="open_rviz" default="true"/> + <arg name="state_pub" default="true"/> + <arg name="move_forward_only" default="false"/> + + + <include file="$(find gazebo_ros)/launch/empty_world.launch"> + <arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_world.world"/> + <arg name="paused" value="false"/> + <arg name="use_sim_time" value="true"/> + <arg name="gui" value="true"/> + <arg name="headless" value="false"/> + <arg name="debug" value="false"/> + </include> + + <include file="$(find turtlebot3_navigation)/launch/move_base.launch"> + <arg name="model" value="$(arg model)" /> + <arg name="move_forward_only" value="$(arg move_forward_only)"/> + </include> + + <group if="$(arg open_rviz)"> + <node pkg="rviz" type="rviz" name="rviz" required="true" + args="-d $(find turtlebot3_navigation)/rviz/turtlebot3_navigation.rviz"/> + </group> + + <include file="$(find lab5)/amcl.launch"/> + + <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" /> + + <node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)"/> + + <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" /> + +</launch> \ No newline at end of file diff --git a/labs/catkin_ws/src/lab5/ex3.launch b/labs/catkin_ws/src/lab5/ex3.launch new file mode 100644 index 0000000000000000000000000000000000000000..95c8477406e5d848d36f347ddc6bb38485d7d643 --- /dev/null +++ b/labs/catkin_ws/src/lab5/ex3.launch @@ -0,0 +1,42 @@ + +<launch> + <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/> + <arg name="x_pos" default="-2.0"/> + <arg name="y_pos" default="-0.5"/> + <arg name="z_pos" default="0.0"/> + <arg name="world_file" default="$(find lab5)/worlds/ex2.world"/> + <arg name="map_file" default="$(find lab5)/maps/ex2_map.yaml"/> + <arg name="amcl" default="$(find lab5)/amcl.launch"/> + <arg name="open_rviz" default="true"/> + <arg name="state_pub" default="true"/> + <arg name="move_forward_only" default="false"/> + + + <include file="$(find gazebo_ros)/launch/empty_world.launch"> + <arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_world.world"/> + <arg name="paused" value="false"/> + <arg name="use_sim_time" value="true"/> + <arg name="gui" value="true"/> + <arg name="headless" value="false"/> + <arg name="debug" value="false"/> + </include> + + <include file="$(find turtlebot3_navigation)/launch/move_base.launch"> + <arg name="model" value="$(arg model)" /> + <arg name="move_forward_only" value="$(arg move_forward_only)"/> + </include> + + <group if="$(arg open_rviz)"> + <node pkg="rviz" type="rviz" name="rviz" required="true" + args="-d $(find turtlebot3_navigation)/rviz/turtlebot3_navigation.rviz"/> + </group> + + <include file="$(find lab5)/amcl.launch"/> + + <param name="robot_description" command="$(find xacro)/xacro --inorder $(find turtlebot3_description)/urdf/turtlebot3_$(arg model).urdf.xacro" /> + + <node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)"/> + + <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" /> + +</launch> \ No newline at end of file diff --git a/labs/catkin_ws/src/lab5/ex4.launch b/labs/catkin_ws/src/lab5/ex4.launch new file mode 100644 index 0000000000000000000000000000000000000000..b4b0d56f1cbd54911e3f0fb86b5968da49ff1181 --- /dev/null +++ b/labs/catkin_ws/src/lab5/ex4.launch @@ -0,0 +1,42 @@ + +<launch> + <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/> + <arg name="x_pos" default="-2.0"/> + <arg name="y_pos" default="-0.5"/> + <arg name="z_pos" default="0.0"/> + <arg name="world_file" default="$(find lab5)/worlds/ex2.world"/> + <arg name="map_file" default="$(find lab5)/maps/ex2_map.yaml"/> + <arg name="amcl" default="$(find lab5)/amcl.launch"/> + <arg name="open_rviz" default="true"/> + <arg name="state_pub" default="true"/> + <arg name="move_forward_only" default="false"/> + + + <include file="$(find gazebo_ros)/launch/empty_world.launch"> + <arg name="world_name" value="$(find turtlebot3_gazebo)/worlds/turtlebot3_world.world"/> + <arg name="paused" value="false"/> + <arg name="use_sim_time" value="true"/> + <arg name="gui" value="true"/> + <arg name="headless" value="false"/> + <arg name="debug" value="false"/> + </include> + + <include file="$(find turtlebot3_navigation)/launch/move_base.launch"> + <arg name="model" value="$(arg model)" /> + <arg name="move_forward_only" value="$(arg move_forward_only)"/> + </include> + + <group if="$(arg open_rviz)"> + <node pkg="rviz" type="rviz" name="rviz" required="true" + args="-d $(find turtlebot3_navigation)/rviz/turtlebot3_navigation.rviz"/> + </group> + + <include file="$(find lab5)/amcl.launch"/> + + <param name="robot_description" command="$(find xacro)/xacro --inorder $(find lab5)/urdf/turtlebot3_burger.urdf.xacro" /> + + <node pkg="map_server" name="map_server" type="map_server" args="$(arg map_file)"/> + + <node pkg="gazebo_ros" type="spawn_model" name="spawn_urdf" args="-urdf -model turtlebot3_$(arg model) -x $(arg x_pos) -y $(arg y_pos) -z $(arg z_pos) -param robot_description" /> + +</launch> \ No newline at end of file diff --git a/labs/catkin_ws/src/lab5/goal.cpp b/labs/catkin_ws/src/lab5/goal.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a0c63247efc70b8735165060b630a53b52999295 --- /dev/null +++ b/labs/catkin_ws/src/lab5/goal.cpp @@ -0,0 +1,38 @@ +#include <ros/ros.h> +#include <geometry_msgs/PoseStamped.h> + +int main(int argc, char ** argv) +{ + ros::init(argc, argv, "gloal_publisher"); + ros::NodeHandle nh; + + ros::Publisher pose_pub = nh.advertise<geometry_msgs::PoseStamped>("/move_base_simple/goal", 1000); + ros::Rate loop_rate(10); + int count = 0; + + while(ros::ok()) + { + geometry_msgs::PoseStamped msg; + msg.header.frame_id="map"; + msg.header.stamp=ros::Time::now(); + msg.header.seq=count++; + + msg.pose.orientation.x = 0.0; + msg.pose.orientation.y = 0.0; + msg.pose.orientation.z = 1.0; + + //msg.pose.orientation = + msg.pose.position.x = 1.0; + msg.pose.position.y = 0.0; + msg.pose.position.z = 0.0; + + pose_pub.publish(msg); + + ros::spinOnce(); + loop_rate.sleep(); + } + //working cmd on terminal + //rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped '{ header: { frame_id: "map"}, pose: { position: { x: 0.2, y: 0 }, orientation: { x: 0, y: 0, z: 0, w: 1 } } }' + + return 0; +} \ No newline at end of file diff --git a/labs/catkin_ws/src/lab5/maps/ex2_map.pgm b/labs/catkin_ws/src/lab5/maps/ex2_map.pgm new file mode 100644 index 0000000000000000000000000000000000000000..308d4c9f10ba3241b7c8d6bbbb1ad4cecdcae798 --- /dev/null +++ b/labs/catkin_ws/src/lab5/maps/ex2_map.pgm @@ -0,0 +1,5 @@ +P5 +# CREATOR: map_saver.cpp 0.050 m/pix +384 384 +255 +НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�����������Н�ННН�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН����������������������������������������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�юююююююююююююююююююююююю������������������ННН�юНННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю�НН�����������������������������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю�Н���ююю�юююю�юю���������������������������������Н�Н��НН�Н��Н�Н�Н��Н��������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю�������������������юю�юююююююююююююю������������������������������������������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююю������������������������������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���������������������������������������������������ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��������������������������������Н����������������������������������������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННю�ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����������������������������������������������������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююю���������������������������������������������������������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННю�ююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююю�����������������������ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННю�ююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююю�������юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююю����Ню�����юююююююююююююююююююююююююююююююююююююююююююю��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююю���НННННННН���юююююююююююююююююююююююююююююююююююююююююю���������������������юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююю���НННННННННН���ююююююююююююююююююю�����ююююююююююююююююю���ННННННННННННН��ю��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююю��НННННННННННН���юююююююююююююююю���������ююююююююююююююю���НННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююю��НННННННННННННН��ююююююююююююююю���ююНН�����ююююююююююююю���НННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююю��НННННННННННННННН��ююююююююююююю���ННННННН���ююююююююююююю���НННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююю��НННННННННННННННН��ююююююююююююю��ННННННННН���юююююююююююю���НННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююю�ННННННННННННННННН��юююююююююююю���НННННННННН��юююююююююююю���НННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�юююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююю��НННННННННННННННННН�юююююююююююю���ННННННННННН��ююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю���������������������ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююю��НННННННННННННННННН��ююююююююююю���ННННННННННН�юююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю����ю���ю�������������юююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююю��НННННННННННННННННН��ююююююююююю��НННННННННННН��ююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю���ННННННННННННННННН��юююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююю�НННННННННННННННННН��ююююююююююю���ННННННННННН��ююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю���ННННННННННННННННН��юююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююю�ННННННННННННННННН���ююююююююююю���ННННННННННН�юююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю���ННННННННННННННННН��юююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююю��НННННННННННННННН��ююююююююююююю��НННННННННН��юююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю���ННННННННННННННННН��юююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююю��ННННННННННННННН���ююююююююююююю���НННННННН���юююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю���ННННННННННННННННН��юююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююю��НННННННННННННН��ююююююююююююююю����ННН�Н���ююююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю���ННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююю��НННННННННННН��ююююююююююююююююю����������юююююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююю��НННННННННН��юююююююююююююююююююю�����ююююююююююююююююю��ННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююю���ННННН����ююююююююююююююююююююююююююююююююююююююююююю���������������������юююююююююююююююююююююююююююююююююююююююююююююююююююююююю���ННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююю����������юююююююююююююююююююююююююююююююююююююююююююю���������������������юююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��юююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю������юююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��юю�ююю�ююююю�ююННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ю�юю�юююююююНННННН�ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю�������������юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���������������������ююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю�����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю�����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю��ю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю��ю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю�����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю��ю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю�Ню��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���������ююююююююююююююююююююююююююююююююю��ю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН����������ююююююююююююююююююю�юю������������ю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННюююююююююююююююююююююююНННННННННННН���ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННю�ююююююююююююююююю��юНННННННННННННю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююю�ююююююююююююююююю��ююююННННННННННю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН������������ююююююююююююююююю��юююююююююю�ю�Ню��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН������������ююююююююююююююююю���������������Ню��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���ююююююююююююююююююююююююююююююююююююююююю�Н���ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю�Н���ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю�Н���ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю������������юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю���ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю�Н�ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю���юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю�Н�юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю��Н�юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�������������������������������������юююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННН���������������������������������������������������������������������ю���ююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННН������������������������������������������������������������������������������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННН�юююююююююююююююююююююююююююююююююююююю�����������������������������������������ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННН�ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННН�ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННН�ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���юююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ННю�ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю����ю�ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю������ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю�Н��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю������ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю�Н��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ююю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ююю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ююю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю�Н��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ююю��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю�Н��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��юНН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��ююююююююююююююююююююююююююююююююююююююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ююН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��������������������������������������ююююю����ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ююН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��������������������������������������������Н�������������������������юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ююН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ННННН��������������������������������������������������������������юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю��ююН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�ННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ННН�Н�Н���������������������������������������������������ююююююююююююююююююююююююююююююююююю��ююН��ююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН��юН�Н������������������������������������������ююююююююю��ююН�юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�НН���������������������������������НН���������������юююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН���������������������������������������������������������юююююююююююююююююююююю�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�Н��Н���������������������������������������������������НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН�ННН�НН�Н�НННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННННН \ No newline at end of file diff --git a/labs/catkin_ws/src/lab5/maps/ex2_map.yaml b/labs/catkin_ws/src/lab5/maps/ex2_map.yaml new file mode 100644 index 0000000000000000000000000000000000000000..db29864b2faec86f262296890564efdc2a58dac3 --- /dev/null +++ b/labs/catkin_ws/src/lab5/maps/ex2_map.yaml @@ -0,0 +1,7 @@ +image: ex2_map.pgm +resolution: 0.050000 +origin: [-10.000000, -10.000000, 0.000000] +negate: 0 +occupied_thresh: 0.65 +free_thresh: 0.196 + diff --git a/labs/catkin_ws/src/lab5/move_base.launch b/labs/catkin_ws/src/lab5/move_base.launch new file mode 100644 index 0000000000000000000000000000000000000000..c232f84a00a18477fa99c089619cc031ef90a877 --- /dev/null +++ b/labs/catkin_ws/src/lab5/move_base.launch @@ -0,0 +1,21 @@ +<launch> + <!-- Arguments --> + <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/> + <arg name="cmd_vel_topic" default="/cmd_vel" /> + <arg name="odom_topic" default="odom" /> + <arg name="move_forward_only" default="false"/> + + <!-- move_base --> + <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen"> + <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" /> + <rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="global_costmap" /> + <rosparam file="$(find turtlebot3_navigation)/param/costmap_common_params_$(arg model).yaml" command="load" ns="local_costmap" /> + <rosparam file="$(find turtlebot3_navigation)/param/local_costmap_params.yaml" command="load" /> + <rosparam file="$(find turtlebot3_navigation)/param/global_costmap_params.yaml" command="load" /> + <rosparam file="$(find turtlebot3_navigation)/param/move_base_params.yaml" command="load" /> + <rosparam file="$(find turtlebot3_navigation)/param/dwa_local_planner_params_$(arg model).yaml" command="load" /> + <remap from="cmd_vel" to="$(arg cmd_vel_topic)"/> + <remap from="odom" to="$(arg odom_topic)"/> + <param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" /> + </node> +</launch> \ No newline at end of file diff --git a/labs/catkin_ws/src/lab5/package.xml b/labs/catkin_ws/src/lab5/package.xml new file mode 100644 index 0000000000000000000000000000000000000000..28925090994fd55cba8638a6afcd6e3f260541cd --- /dev/null +++ b/labs/catkin_ws/src/lab5/package.xml @@ -0,0 +1,71 @@ +<?xml version="1.0"?> +<package format="2"> + <name>lab5</name> + <version>0.0.0</version> + <description>The lab5 package</description> + + <!-- One maintainer tag required, multiple allowed, one person per tag --> + <!-- Example: --> + <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> --> + <maintainer email="chris@todo.todo">chris</maintainer> + + + <!-- One license tag required, multiple allowed, one license per tag --> + <!-- Commonly used license strings: --> + <!-- BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 --> + <license>TODO</license> + + + <!-- Url tags are optional, but multiple are allowed, one per tag --> + <!-- Optional attribute type can be: website, bugtracker, or repository --> + <!-- Example: --> + <!-- <url type="website">http://wiki.ros.org/lab5</url> --> + + + <!-- Author tags are optional, multiple are allowed, one per tag --> + <!-- Authors do not have to be maintainers, but could be --> + <!-- Example: --> + <!-- <author email="jane.doe@example.com">Jane Doe</author> --> + + + <!-- The *depend tags are used to specify dependencies --> + <!-- Dependencies can be catkin packages or system dependencies --> + <!-- Examples: --> + <!-- Use depend as a shortcut for packages that are both build and exec dependencies --> + <!-- <depend>roscpp</depend> --> + <!-- Note that this is equivalent to the following: --> + <!-- <build_depend>roscpp</build_depend> --> + <!-- <exec_depend>roscpp</exec_depend> --> + <!-- Use build_depend for packages you need at compile time: --> + <!-- <build_depend>message_generation</build_depend> --> + <!-- Use build_export_depend for packages you need in order to build against this package: --> + <!-- <build_export_depend>message_generation</build_export_depend> --> + <!-- Use buildtool_depend for build tool packages: --> + <!-- <buildtool_depend>catkin</buildtool_depend> --> + <!-- Use exec_depend for packages you need at runtime: --> + <!-- <exec_depend>message_runtime</exec_depend> --> + <!-- Use test_depend for packages you need only for testing: --> + <!-- <test_depend>gtest</test_depend> --> + <!-- Use doc_depend for packages you need only for building documentation: --> + <!-- <doc_depend>doxygen</doc_depend> --> + <buildtool_depend>catkin</buildtool_depend> + <build_depend>gazebo</build_depend> + <build_depend>roscpp</build_depend> + <build_depend>rospy</build_depend> + <build_depend>std_msgs</build_depend> + <build_export_depend>gazebo</build_export_depend> + <build_export_depend>roscpp</build_export_depend> + <build_export_depend>rospy</build_export_depend> + <build_export_depend>std_msgs</build_export_depend> + <exec_depend>gazebo</exec_depend> + <exec_depend>roscpp</exec_depend> + <exec_depend>rospy</exec_depend> + <exec_depend>std_msgs</exec_depend> + + + <!-- The export tag contains other, unspecified, tags --> + <export> + <!-- Other tools can request additional information be placed here --> + + </export> +</package> diff --git a/labs/catkin_ws/src/lab5/urdf/turtlebot3_burger.gazebo.xacro b/labs/catkin_ws/src/lab5/urdf/turtlebot3_burger.gazebo.xacro new file mode 100644 index 0000000000000000000000000000000000000000..3e98e941f450e37b9a1708e1d5c2b11f5363c455 --- /dev/null +++ b/labs/catkin_ws/src/lab5/urdf/turtlebot3_burger.gazebo.xacro @@ -0,0 +1,135 @@ +<?xml version="1.0"?> +<robot name="turtlebot3_burger_sim" xmlns:xacro="http://ros.org/wiki/xacro"> + <xacro:arg name="laser_visual" default="false"/> + <xacro:arg name="imu_visual" default="false"/> + + <gazebo reference="base_link"> + <material>Gazebo/DarkGrey</material> + </gazebo> + + <gazebo reference="wheel_left_link"> + <mu1>0.1</mu1> + <mu2>0.1</mu2> + <kp>500000.0</kp> + <kd>10.0</kd> + <minDepth>0.001</minDepth> + <maxVel>0.1</maxVel> + <fdir1>1 0 0</fdir1> + <material>Gazebo/FlatBlack</material> + </gazebo> + + <gazebo reference="wheel_right_link"> + <mu1>0.1</mu1> + <mu2>0.1</mu2> + <kp>500000.0</kp> + <kd>10.0</kd> + <minDepth>0.001</minDepth> + <maxVel>0.1</maxVel> + <fdir1>1 0 0</fdir1> + <material>Gazebo/FlatBlack</material> + </gazebo> + + <gazebo reference="caster_back_link"> + <mu1>0.1</mu1> + <mu2>0.1</mu2> + <kp>1000000.0</kp> + <kd>100.0</kd> + <minDepth>0.001</minDepth> + <maxVel>1.0</maxVel> + <material>Gazebo/FlatBlack</material> + </gazebo> + + <gazebo reference="imu_link"> + <sensor type="imu" name="imu"> + <always_on>true</always_on> + <visualize>$(arg imu_visual)</visualize> + </sensor> + <material>Gazebo/FlatBlack</material> + </gazebo> + + <gazebo> + <plugin name="turtlebot3_burger_controller" filename="libgazebo_ros_diff_drive.so"> + <commandTopic>cmd_vel</commandTopic> + <odometryTopic>odom</odometryTopic> + <odometryFrame>odom</odometryFrame> + <odometrySource>world</odometrySource> + <publishOdomTF>true</publishOdomTF> + <robotBaseFrame>base_footprint</robotBaseFrame> + <publishWheelTF>false</publishWheelTF> + <publishTf>true</publishTf> + <publishWheelJointState>true</publishWheelJointState> + <legacyMode>false</legacyMode> + <updateRate>30</updateRate> + <leftJoint>wheel_left_joint</leftJoint> + <rightJoint>wheel_right_joint</rightJoint> + <wheelSeparation>0.160</wheelSeparation> + <wheelDiameter>0.066</wheelDiameter> + <wheelAcceleration>1</wheelAcceleration> + <wheelTorque>10</wheelTorque> + <rosDebugLevel>na</rosDebugLevel> + </plugin> + </gazebo> + + <gazebo> + <plugin name="imu_plugin" filename="libgazebo_ros_imu.so"> + <alwaysOn>true</alwaysOn> + <bodyName>imu_link</bodyName> + <frameName>imu_link</frameName> + <topicName>imu</topicName> + <serviceName>imu_service</serviceName> + <gaussianNoise>0.0</gaussianNoise> + <updateRate>0</updateRate> + <imu> + <noise> + <type>gaussian</type> + <rate> + <mean>0.0</mean> + <stddev>2e-4</stddev> + <bias_mean>0.0000075</bias_mean> + <bias_stddev>0.0000008</bias_stddev> + </rate> + <accel> + <mean>0.0</mean> + <stddev>1.7e-2</stddev> + <bias_mean>0.1</bias_mean> + <bias_stddev>0.001</bias_stddev> + </accel> + </noise> + </imu> + </plugin> + </gazebo> + + <gazebo reference="base_scan"> + <material>Gazebo/FlatBlack</material> + <sensor type="ray" name="lds_lfcd_sensor"> + <pose>0 0 0 0 0 0</pose> + <visualize>$(arg laser_visual)</visualize> + <update_rate>5</update_rate> + <ray> + <scan> + <horizontal> + <samples>360</samples> + <resolution>1</resolution> + <min_angle>0.0</min_angle> + <max_angle>6.28319</max_angle> + </horizontal> + </scan> + <range> + <min>0.120</min> + <max>3.5</max> + <resolution>0.015</resolution> + </range> + <noise> + <type>gaussian</type> + <mean>0.0</mean> + <stddev>0.01</stddev> + </noise> + </ray> + <plugin name="gazebo_ros_lds_lfcd_controller" filename="libgazebo_ros_laser.so"> + <topicName>scan</topicName> + <frameName>base_scan</frameName> + </plugin> + </sensor> + </gazebo> + +</robot> diff --git a/labs/catkin_ws/src/lab5/urdf/turtlebot3_burger.urdf.xacro b/labs/catkin_ws/src/lab5/urdf/turtlebot3_burger.urdf.xacro new file mode 100644 index 0000000000000000000000000000000000000000..27df31cad571a30a551de8daf03d101e3c275c18 --- /dev/null +++ b/labs/catkin_ws/src/lab5/urdf/turtlebot3_burger.urdf.xacro @@ -0,0 +1,166 @@ +<?xml version="1.0" ?> +<robot name="turtlebot3_burger" xmlns:xacro="http://ros.org/wiki/xacro"> + <xacro:include filename="$(find turtlebot3_description)/urdf/common_properties.xacro"/> + <xacro:include filename="$(find lab5)/urdf/turtlebot3_burger.gazebo.xacro"/> + <xacro:include filename="$(find lab5)/urdf/turtlebot3_burger_camera.urdf.xacro"/> + + <link name="base_footprint"/> + + <joint name="base_joint" type="fixed"> + <parent link="base_footprint"/> + <child link="base_link"/> + <origin xyz="0.0 0.0 0.010" rpy="0 0 0"/> + </joint> + + <link name="base_link"> + <visual> + <origin xyz="-0.032 0 0.0" rpy="0 0 0"/> + <geometry> + <mesh filename="package://turtlebot3_description/meshes/bases/burger_base.stl" scale="0.001 0.001 0.001"/> + </geometry> + <material name="light_black"/> + </visual> + + <collision> + <origin xyz="-0.032 0 0.070" rpy="0 0 0"/> + <geometry> + <box size="0.140 0.140 0.143"/> + </geometry> + </collision> + + <inertial> + <origin xyz="0 0 0" rpy="0 0 0"/> + <mass value="8.2573504e-01"/> + <inertia ixx="2.2124416e-03" ixy="-1.2294101e-05" ixz="3.4938785e-05" + iyy="2.1193702e-03" iyz="-5.0120904e-06" + izz="2.0064271e-03" /> + </inertial> + </link> + + <joint name="wheel_left_joint" type="continuous"> + <parent link="base_link"/> + <child link="wheel_left_link"/> + <origin xyz="0.0 0.08 0.023" rpy="-1.57 0 0"/> + <axis xyz="0 0 1"/> + </joint> + + <link name="wheel_left_link"> + <visual> + <origin xyz="0 0 0" rpy="1.57 0 0"/> + <geometry> + <mesh filename="package://turtlebot3_description/meshes/wheels/left_tire.stl" scale="0.001 0.001 0.001"/> + </geometry> + <material name="dark"/> + </visual> + + <collision> + <origin xyz="0 0 0" rpy="0 0 0"/> + <geometry> + <cylinder length="0.018" radius="0.033"/> + </geometry> + </collision> + + <inertial> + <origin xyz="0 0 0" /> + <mass value="2.8498940e-02" /> + <inertia ixx="1.1175580e-05" ixy="-4.2369783e-11" ixz="-5.9381719e-09" + iyy="1.1192413e-05" iyz="-1.4400107e-11" + izz="2.0712558e-05" /> + </inertial> + </link> + + <joint name="wheel_right_joint" type="continuous"> + <parent link="base_link"/> + <child link="wheel_right_link"/> + <origin xyz="0.0 -0.080 0.023" rpy="-1.57 0 0"/> + <axis xyz="0 0 1"/> + </joint> + + <link name="wheel_right_link"> + <visual> + <origin xyz="0 0 0" rpy="1.57 0 0"/> + <geometry> + <mesh filename="package://turtlebot3_description/meshes/wheels/right_tire.stl" scale="0.001 0.001 0.001"/> + </geometry> + <material name="dark"/> + </visual> + + <collision> + <origin xyz="0 0 0" rpy="0 0 0"/> + <geometry> + <cylinder length="0.018" radius="0.033"/> + </geometry> + </collision> + + <inertial> + <origin xyz="0 0 0" /> + <mass value="2.8498940e-02" /> + <inertia ixx="1.1175580e-05" ixy="-4.2369783e-11" ixz="-5.9381719e-09" + iyy="1.1192413e-05" iyz="-1.4400107e-11" + izz="2.0712558e-05" /> + </inertial> + </link> + + <joint name="caster_back_joint" type="fixed"> + <parent link="base_link"/> + <child link="caster_back_link"/> + <origin xyz="-0.081 0 -0.004" rpy="-1.57 0 0"/> + </joint> + + <link name="caster_back_link"> + <collision> + <origin xyz="0 0.001 0" rpy="0 0 0"/> + <geometry> + <box size="0.030 0.009 0.020"/> + </geometry> + </collision> + + <inertial> + <origin xyz="0 0 0" /> + <mass value="0.005" /> + <inertia ixx="0.001" ixy="0.0" ixz="0.0" + iyy="0.001" iyz="0.0" + izz="0.001" /> + </inertial> + </link> + + <joint name="imu_joint" type="fixed"> + <parent link="base_link"/> + <child link="imu_link"/> + <origin xyz="-0.032 0 0.068" rpy="0 0 0"/> + </joint> + + <link name="imu_link"/> + + <joint name="scan_joint" type="fixed"> + <parent link="base_link"/> + <child link="base_scan"/> + <origin xyz="-0.032 0 0.172" rpy="0 0 0"/> + </joint> + + <link name="base_scan"> + <visual> + <origin xyz="0 0 0.0" rpy="0 0 0"/> + <geometry> + <mesh filename="package://turtlebot3_description/meshes/sensors/lds.stl" scale="0.001 0.001 0.001"/> + </geometry> + <material name="dark"/> + </visual> + + <collision> + <origin xyz="0.015 0 -0.0065" rpy="0 0 0"/> + <geometry> + <cylinder length="0.0315" radius="0.055"/> + </geometry> + </collision> + + <inertial> + <mass value="0.114" /> + <origin xyz="0 0 0" /> + <inertia ixx="0.001" ixy="0.0" ixz="0.0" + iyy="0.001" iyz="0.0" + izz="0.001" /> + </inertial> + </link> + +</robot> diff --git a/labs/catkin_ws/src/lab5/urdf/turtlebot3_burger_camera.urdf.xacro b/labs/catkin_ws/src/lab5/urdf/turtlebot3_burger_camera.urdf.xacro new file mode 100644 index 0000000000000000000000000000000000000000..bc431dca725f8fcb17ef729fad58bfb75817384c --- /dev/null +++ b/labs/catkin_ws/src/lab5/urdf/turtlebot3_burger_camera.urdf.xacro @@ -0,0 +1,77 @@ +<?xml version="1.0"?> +<robot name="turtlebot3_burger_cam" xmlns:xacro="http://ros.org/wiki/xacro"> + + <xacro:property name="camera_link" value="0.01" /> <!-- Size of square 'camera' box --> + + <joint name="camera_joint" type="fixed"> + <axis xyz="0 1 0" /> + <origin xyz="0.0 0.0 0.005" rpy="0 0 0"/> + <parent link="base_scan"/> + <child link="camera_link"/> + </joint> + + <!-- Camera --> + <link name="camera_link"> + <collision> + <origin xyz="0 0 0" rpy="0 0 0"/> + <geometry> + <box size="${camera_link} ${camera_link} ${camera_link}"/> + </geometry> + </collision> + + <visual> + <origin xyz="0 0 0" rpy="0 0 0"/> + <geometry> + <box size="${camera_link} ${camera_link} ${camera_link}"/> + </geometry> + <material name="red"/> + </visual> + + <inertial> + <mass value="1e-5" /> + <origin xyz="0 0 0" rpy="0 0 0"/> + <inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" /> + </inertial> + </link> + + <!-- camera --> + <gazebo reference="camera_link"> + <sensor type="camera" name="camera1"> + <update_rate>30.0</update_rate> + <camera name="head"> + <horizontal_fov>1.3962634</horizontal_fov> + <image> + <width>800</width> + <height>800</height> + <format>R8G8B8</format> + </image> + <clip> + <near>0.02</near> + <far>300</far> + </clip> + <noise> + <type>gaussian</type> + <!-- Noise is sampled independently per pixel on each frame. + That pixel's noise value is added to each of its color + channels, which at that point lie in the range [0,1]. --> + <mean>0.0</mean> + <stddev>0.007</stddev> + </noise> + </camera> + <plugin name="camera_controller" filename="libgazebo_ros_camera.so"> + <alwaysOn>true</alwaysOn> + <updateRate>0.0</updateRate> + <cameraName>turtlebot3/camera</cameraName> + <imageTopicName>image_raw</imageTopicName> + <cameraInfoTopicName>camera_info</cameraInfoTopicName> + <frameName>camera_link</frameName> + <hackBaseline>0.07</hackBaseline> + <distortionK1>0.0</distortionK1> + <distortionK2>0.0</distortionK2> + <distortionK3>0.0</distortionK3> + <distortionT1>0.0</distortionT1> + <distortionT2>0.0</distortionT2> + </plugin> + </sensor> + </gazebo> +</robot> diff --git a/labs/catkin_ws/src/lab5/worlds/ex1_world b/labs/catkin_ws/src/lab5/worlds/ex1_world new file mode 100644 index 0000000000000000000000000000000000000000..a61594527a7612bfdfe425605f3b0b9632ebfa82 --- /dev/null +++ b/labs/catkin_ws/src/lab5/worlds/ex1_world @@ -0,0 +1,537 @@ +<sdf version='1.7'> + <world name='default'> + <scene> + <ambient>0.4 0.4 0.4 1</ambient> + <background>0.7 0.7 0.7 1</background> + <shadows>1</shadows> + </scene> + <light name='sun' type='directional'> + <cast_shadows>1</cast_shadows> + <pose>0 0 10 0 -0 0</pose> + <diffuse>0.8 0.8 0.8 1</diffuse> + <specular>0.2 0.2 0.2 1</specular> + <attenuation> + <range>1000</range> + <constant>0.9</constant> + <linear>0.01</linear> + <quadratic>0.001</quadratic> + </attenuation> + <direction>-0.5 0.1 -0.9</direction> + <spot> + <inner_angle>0</inner_angle> + <outer_angle>0</outer_angle> + <falloff>0</falloff> + </spot> + </light> + <model name='ground_plane'> + <static>1</static> + <link name='link'> + <collision name='collision'> + <geometry> + <plane> + <normal>0 0 1</normal> + <size>100 100</size> + </plane> + </geometry> + <surface> + <contact> + <collide_bitmask>65535</collide_bitmask> + <ode/> + </contact> + <friction> + <ode> + <mu>100</mu> + <mu2>50</mu2> + </ode> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <visual name='visual'> + <cast_shadows>0</cast_shadows> + <geometry> + <plane> + <normal>0 0 1</normal> + <size>100 100</size> + </plane> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Grey</name> + </script> + </material> + </visual> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + </model> + <physics type='ode'> + <real_time_update_rate>1000</real_time_update_rate> + <max_step_size>0.001</max_step_size> + <real_time_factor>1</real_time_factor> + <ode> + <solver> + <type>quick</type> + <iters>150</iters> + <precon_iters>0</precon_iters> + <sor>1.4</sor> + <use_dynamic_moi_rescaling>1</use_dynamic_moi_rescaling> + </solver> + <constraints> + <cfm>1e-05</cfm> + <erp>0.2</erp> + <contact_max_correcting_vel>2000</contact_max_correcting_vel> + <contact_surface_layer>0.01</contact_surface_layer> + </constraints> + </ode> + </physics> + <gravity>0 0 -9.8</gravity> + <magnetic_field>6e-06 2.3e-05 -4.2e-05</magnetic_field> + <atmosphere type='adiabatic'/> + <wind/> + <spherical_coordinates> + <surface_model>EARTH_WGS84</surface_model> + <latitude_deg>0</latitude_deg> + <longitude_deg>0</longitude_deg> + <elevation>0</elevation> + <heading_deg>0</heading_deg> + </spherical_coordinates> + <model name='turtlebot3_burger'> + <link name='base_footprint'> + <inertial> + <pose>-0.00429 0 0.030734 0 -0 0</pose> + <mass>0.944735</mass> + <inertia> + <ixx>0.00717896</ixx> + <ixy>-1.22941e-05</ixy> + <ixz>0.00057674</ixz> + <iyy>0.00721804</iyy> + <iyz>-5.01209e-06</iyz> + <izz>0.00413858</izz> + </inertia> + </inertial> + <collision name='base_footprint_fixed_joint_lump__base_link_collision'> + <pose>-0.032 0 0.08 0 -0 0</pose> + <geometry> + <box> + <size>0.14 0.14 0.143</size> + </box> + </geometry> + <surface> + <contact> + <ode/> + </contact> + <friction> + <ode/> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <collision name='base_footprint_fixed_joint_lump__caster_back_link_collision_1'> + <pose>-0.081 1e-06 0.005 -1.57 0 0</pose> + <geometry> + <box> + <size>0.03 0.009 0.02</size> + </box> + </geometry> + <surface> + <contact> + <ode> + <kp>1e+06</kp> + <kd>100</kd> + <max_vel>1</max_vel> + <min_depth>0.001</min_depth> + </ode> + </contact> + <friction> + <ode> + <mu>0.1</mu> + <mu2>0.1</mu2> + </ode> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <collision name='base_footprint_fixed_joint_lump__base_scan_collision_2'> + <pose>-0.017 0 0.1755 0 -0 0</pose> + <geometry> + <cylinder> + <length>0.0315</length> + <radius>0.055</radius> + </cylinder> + </geometry> + <surface> + <contact> + <ode/> + </contact> + <friction> + <ode/> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <visual name='base_footprint_fixed_joint_lump__base_link_visual'> + <pose>-0.032 0 0.01 0 -0 0</pose> + <geometry> + <mesh> + <scale>0.001 0.001 0.001</scale> + <uri>/opt/ros/noetic/share/turtlebot3_description/meshes/bases/burger_base.stl</uri> + </mesh> + </geometry> + <material> + <script> + <name>Gazebo/DarkGrey</name> + <uri>file://media/materials/scripts/gazebo.material</uri> + </script> + </material> + </visual> + <visual name='base_footprint_fixed_joint_lump__base_scan_visual_1'> + <pose>-0.032 0 0.182 0 -0 0</pose> + <geometry> + <mesh> + <scale>0.001 0.001 0.001</scale> + <uri>/opt/ros/noetic/share/turtlebot3_description/meshes/sensors/lds.stl</uri> + </mesh> + </geometry> + <material> + <script> + <name>Gazebo/FlatBlack</name> + <uri>file://media/materials/scripts/gazebo.material</uri> + </script> + </material> + </visual> + <velocity_decay/> + <velocity_decay/> + <velocity_decay/> + <sensor name='imu' type='imu'> + <always_on>1</always_on> + <visualize>0</visualize> + <pose>-0.032 0 0.078 0 -0 0</pose> + <imu/> + </sensor> + <gravity>1</gravity> + <velocity_decay/> + <sensor name='lds_lfcd_sensor' type='ray'> + <visualize>0</visualize> + <update_rate>5</update_rate> + <ray> + <scan> + <horizontal> + <samples>360</samples> + <resolution>1</resolution> + <min_angle>0</min_angle> + <max_angle>6.28319</max_angle> + </horizontal> + <vertical> + <samples>1</samples> + <min_angle>0</min_angle> + <max_angle>0</max_angle> + </vertical> + </scan> + <range> + <min>0.12</min> + <max>3.5</max> + <resolution>0.015</resolution> + </range> + <noise> + <type>gaussian</type> + <mean>0</mean> + <stddev>0.01</stddev> + </noise> + </ray> + <plugin name='gazebo_ros_lds_lfcd_controller' filename='libgazebo_ros_laser.so'> + <topicName>scan</topicName> + <frameName>base_scan</frameName> + <robotNamespace>/</robotNamespace> + </plugin> + <pose>-0.032 0 0.182 0 -0 0</pose> + </sensor> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <joint name='wheel_left_joint' type='revolute'> + <pose relative_to='base_footprint'>0 0.08 0.033 -1.57 0 0</pose> + <parent>base_footprint</parent> + <child>wheel_left_link</child> + <axis> + <xyz>0 0 1</xyz> + <limit> + <lower>-1e+16</lower> + <upper>1e+16</upper> + </limit> + <dynamics> + <spring_reference>0</spring_reference> + <spring_stiffness>0</spring_stiffness> + </dynamics> + </axis> + </joint> + <link name='wheel_left_link'> + <pose relative_to='wheel_left_joint'>0 0 0 0 -0 0</pose> + <inertial> + <pose>0 0 0 0 -0 0</pose> + <mass>0.0284989</mass> + <inertia> + <ixx>1.11756e-05</ixx> + <ixy>-4.23698e-11</ixy> + <ixz>-5.93817e-09</ixz> + <iyy>1.11924e-05</iyy> + <iyz>-1.44001e-11</iyz> + <izz>2.07126e-05</izz> + </inertia> + </inertial> + <collision name='wheel_left_link_collision'> + <pose>0 0 0 0 -0 0</pose> + <geometry> + <cylinder> + <length>0.018</length> + <radius>0.033</radius> + </cylinder> + </geometry> + <surface> + <contact> + <ode> + <kp>500000</kp> + <kd>10</kd> + <max_vel>0.1</max_vel> + <min_depth>0.001</min_depth> + </ode> + </contact> + <friction> + <ode> + <mu>0.1</mu> + <mu2>0.1</mu2> + <fdir1>1 0 0</fdir1> + </ode> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <visual name='wheel_left_link_visual'> + <pose>0 0 0 1.57 -0 0</pose> + <geometry> + <mesh> + <scale>0.001 0.001 0.001</scale> + <uri>/opt/ros/noetic/share/turtlebot3_description/meshes/wheels/left_tire.stl</uri> + </mesh> + </geometry> + <material> + <script> + <name>Gazebo/FlatBlack</name> + <uri>file://media/materials/scripts/gazebo.material</uri> + </script> + </material> + </visual> + <gravity>1</gravity> + <velocity_decay/> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <joint name='wheel_right_joint' type='revolute'> + <pose relative_to='base_footprint'>0 -0.08 0.033 -1.57 0 0</pose> + <parent>base_footprint</parent> + <child>wheel_right_link</child> + <axis> + <xyz>0 0 1</xyz> + <limit> + <lower>-1e+16</lower> + <upper>1e+16</upper> + </limit> + <dynamics> + <spring_reference>0</spring_reference> + <spring_stiffness>0</spring_stiffness> + </dynamics> + </axis> + </joint> + <link name='wheel_right_link'> + <pose relative_to='wheel_right_joint'>0 0 0 0 -0 0</pose> + <inertial> + <pose>0 0 0 0 -0 0</pose> + <mass>0.0284989</mass> + <inertia> + <ixx>1.11756e-05</ixx> + <ixy>-4.23698e-11</ixy> + <ixz>-5.93817e-09</ixz> + <iyy>1.11924e-05</iyy> + <iyz>-1.44001e-11</iyz> + <izz>2.07126e-05</izz> + </inertia> + </inertial> + <collision name='wheel_right_link_collision'> + <pose>0 0 0 0 -0 0</pose> + <geometry> + <cylinder> + <length>0.018</length> + <radius>0.033</radius> + </cylinder> + </geometry> + <surface> + <contact> + <ode> + <kp>500000</kp> + <kd>10</kd> + <max_vel>0.1</max_vel> + <min_depth>0.001</min_depth> + </ode> + </contact> + <friction> + <ode> + <mu>0.1</mu> + <mu2>0.1</mu2> + <fdir1>1 0 0</fdir1> + </ode> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <visual name='wheel_right_link_visual'> + <pose>0 0 0 1.57 -0 0</pose> + <geometry> + <mesh> + <scale>0.001 0.001 0.001</scale> + <uri>/opt/ros/noetic/share/turtlebot3_description/meshes/wheels/right_tire.stl</uri> + </mesh> + </geometry> + <material> + <script> + <name>Gazebo/FlatBlack</name> + <uri>file://media/materials/scripts/gazebo.material</uri> + </script> + </material> + </visual> + <gravity>1</gravity> + <velocity_decay/> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <plugin name='turtlebot3_burger_controller' filename='libgazebo_ros_diff_drive.so'> + <commandTopic>cmd_vel</commandTopic> + <odometryTopic>odom</odometryTopic> + <odometryFrame>odom</odometryFrame> + <odometrySource>world</odometrySource> + <publishOdomTF>1</publishOdomTF> + <robotBaseFrame>base_footprint</robotBaseFrame> + <publishWheelTF>0</publishWheelTF> + <publishTf>1</publishTf> + <publishWheelJointState>1</publishWheelJointState> + <legacyMode>0</legacyMode> + <updateRate>30</updateRate> + <leftJoint>wheel_left_joint</leftJoint> + <rightJoint>wheel_right_joint</rightJoint> + <wheelSeparation>0.160</wheelSeparation> + <wheelDiameter>0.066</wheelDiameter> + <wheelAcceleration>1</wheelAcceleration> + <wheelTorque>10</wheelTorque> + <rosDebugLevel>na</rosDebugLevel> + <robotNamespace>/</robotNamespace> + </plugin> + <static>0</static> + <plugin name='imu_plugin' filename='libgazebo_ros_imu.so'> + <alwaysOn>1</alwaysOn> + <topicName>imu</topicName> + <serviceName>imu_service</serviceName> + <gaussianNoise>0.0</gaussianNoise> + <updateRate>0</updateRate> + <imu> + <noise> + <type>gaussian</type> + <rate> + <mean>0.0</mean> + <stddev>2e-4</stddev> + <bias_mean>0.0000075</bias_mean> + <bias_stddev>0.0000008</bias_stddev> + </rate> + <accel> + <mean>0.0</mean> + <stddev>1.7e-2</stddev> + <bias_mean>0.1</bias_mean> + <bias_stddev>0.001</bias_stddev> + </accel> + </noise> + </imu> + <robotNamespace>/</robotNamespace> + <bodyName>base_footprint</bodyName> + <frameName>base_footprint</frameName> + <xyzOffset>0.064 0 -0.156</xyzOffset> + <rpyOffset>0 -0 0</rpyOffset> + </plugin> + <pose>0 0 0 0 -0 0</pose> + </model> + <state world_name='default'> + <sim_time>1917 702000000</sim_time> + <real_time>1951 130813068</real_time> + <wall_time>1634576508 460374941</wall_time> + <iterations>1917702</iterations> + <model name='ground_plane'> + <pose>0 0 0 0 -0 0</pose> + <scale>1 1 1</scale> + <link name='link'> + <pose>0 0 0 0 -0 0</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + </model> + <model name='turtlebot3_burger'> + <pose>-0.780997 1.40475 -0.001002 -1.4e-05 0.00771 -2.58512</pose> + <scale>1 1 1</scale> + <link name='base_footprint'> + <pose>-0.780997 1.40475 -0.001002 -1.4e-05 0.00771 -2.58512</pose> + <velocity>-0.092595 -0.057559 2.7e-05 -1.7e-05 0.000187 0.101693</velocity> + <acceleration>0.004753 -0.010206 -0.000946 0.00596 -0.011534 -0.011065</acceleration> + <wrench>0.00449 -0.009642 -0.000894 0 -0 0</wrench> + </link> + <link name='wheel_left_link'> + <pose>-0.738958 1.33668 0.031997 -1.56893 -1.13946 -2.58682</pose> + <velocity>-0.085667 -0.053284 1.2e-05 -1.51172 -0.521146 -3.03749</velocity> + <acceleration>0.003485 -0.009939 -0.001003 -0.125089 -0.071899 -0.025382</acceleration> + <wrench>9.9e-05 -0.000283 -2.9e-05 0 -0 0</wrench> + </link> + <link name='wheel_right_link'> + <pose>-0.823469 1.47254 0.031999 1.56987 -0.593345 0.556983</pose> + <velocity>-0.099483 -0.061878 3.4e-05 -1.25233 -0.104081 -3.03716</velocity> + <acceleration>0.006224 -0.010309 -0.00152 -0.130349 -0.096769 -0.018663</acceleration> + <wrench>0.000177 -0.000294 -4.3e-05 0 -0 0</wrench> + </link> + </model> + <light name='sun'> + <pose>0 0 10 0 -0 0</pose> + </light> + </state> + <gui fullscreen='0'> + <camera name='user_camera'> + <pose>2.09907 -1.1821 0.897675 0 0.275643 2.35619</pose> + <view_controller>orbit</view_controller> + <projection_type>perspective</projection_type> + </camera> + </gui> + </world> +</sdf> diff --git a/labs/catkin_ws/src/lab5/worlds/ex2.world b/labs/catkin_ws/src/lab5/worlds/ex2.world new file mode 100644 index 0000000000000000000000000000000000000000..ead28562883bfb7aad7fc44b58b1e932bbeeba32 --- /dev/null +++ b/labs/catkin_ws/src/lab5/worlds/ex2.world @@ -0,0 +1,1602 @@ +<sdf version='1.6'> + <world name='default'> + <light name='sun' type='directional'> + <cast_shadows>1</cast_shadows> + <pose frame=''>0 0 10 0 -0 0</pose> + <diffuse>0.8 0.8 0.8 1</diffuse> + <specular>0.2 0.2 0.2 1</specular> + <attenuation> + <range>1000</range> + <constant>0.9</constant> + <linear>0.01</linear> + <quadratic>0.001</quadratic> + </attenuation> + <direction>-0.5 0.1 -0.9</direction> + </light> + <model name='ground_plane'> + <static>1</static> + <link name='link'> + <collision name='collision'> + <geometry> + <plane> + <normal>0 0 1</normal> + <size>100 100</size> + </plane> + </geometry> + <surface> + <friction> + <ode> + <mu>100</mu> + <mu2>50</mu2> + </ode> + <torsional> + <ode/> + </torsional> + </friction> + <contact> + <ode/> + </contact> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <visual name='visual'> + <cast_shadows>0</cast_shadows> + <geometry> + <plane> + <normal>0 0 1</normal> + <size>100 100</size> + </plane> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Grey</name> + </script> + </material> + </visual> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + </model> + <gravity>0 0 -9.8</gravity> + <magnetic_field>6e-06 2.3e-05 -4.2e-05</magnetic_field> + <atmosphere type='adiabatic'/> + <physics name='default_physics' default='0' type='ode'> + <max_step_size>0.001</max_step_size> + <real_time_factor>1</real_time_factor> + <real_time_update_rate>1000</real_time_update_rate> + </physics> + <scene> + <ambient>0.4 0.4 0.4 1</ambient> + <background>0.7 0.7 0.7 1</background> + <shadows>1</shadows> + </scene> + <audio> + <device>default</device> + </audio> + <wind/> + <spherical_coordinates> + <surface_model>EARTH_WGS84</surface_model> + <latitude_deg>0</latitude_deg> + <longitude_deg>0</longitude_deg> + <elevation>0</elevation> + <heading_deg>0</heading_deg> + </spherical_coordinates> + <model name='flat'> + <pose frame=''>0.879143 0.065747 0 0 -0 0</pose> + <link name='Wall_10'> + <collision name='Wall_10_Collision'> + <geometry> + <box> + <size>6.47567 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_10_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>6.47567 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Bricks</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>-0.927592 -3.04296 0 0 -0 3.13003</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_12'> + <collision name='Wall_12_Collision'> + <geometry> + <box> + <size>4.25 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_12_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>4.25 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Bricks</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>4.28503 3.0632 0 0 -0 0</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_13'> + <collision name='Wall_13_Collision'> + <geometry> + <box> + <size>3.75 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_13_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>3.75 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Bricks</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>6.33503 1.2632 0 0 -0 -1.5708</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_14'> + <collision name='Wall_14_Collision'> + <geometry> + <box> + <size>4.25 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_14_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>4.25 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>4.28503 -0.536801 0 0 -0 3.14159</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_16'> + <collision name='Wall_16_Collision'> + <geometry> + <box> + <size>4.25 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_16_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>4.25 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Bricks</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>4.28503 -3.07954 0 0 -0 0</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_17'> + <collision name='Wall_17_Collision'> + <geometry> + <box> + <size>2.69274 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_17_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>2.69274 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Bricks</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>6.33503 -1.80817 0 0 -0 1.5708</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_19'> + <collision name='Wall_19_Collision'> + <geometry> + <box> + <size>2.39354 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_19_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>2.39354 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Bricks</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>-5.21199 3.08601 0 0 -0 3.12126</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_20'> + <collision name='Wall_20_Collision'> + <geometry> + <box> + <size>6.25 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_20_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>6.25 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Bricks</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>-6.33376 0.058826 0 0 -0 -1.5708</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_21'> + <collision name='Wall_21_Collision'> + <geometry> + <box> + <size>2.39359 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_21_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>2.39359 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Bricks</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>-5.21199 -2.99878 0 0 -0 -0.006779</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_23'> + <pose frame=''>-5.16676 0.166321 0 0 -0 3.14159</pose> + <visual name='Wall_23_Visual_0'> + <pose frame=''>-0.726963 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>0.796074 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_23_Collision_0'> + <geometry> + <box> + <size>0.796074 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>-0.726963 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_23_Visual_1'> + <pose frame=''>0.848037 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>0.553926 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_23_Collision_1'> + <geometry> + <box> + <size>0.553926 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0.848037 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_23_Visual_2'> + <pose frame=''>0.121074 0 2.25 0 -0 0</pose> + <geometry> + <box> + <size>0.9 0.15 0.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_23_Collision_2'> + <geometry> + <box> + <size>0.9 0.15 0.5</size> + </box> + </geometry> + <pose frame=''>0.121074 0 2.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_6'> + <pose frame=''>-4.09022 0.043617 0 0 -0 1.5708</pose> + <visual name='Wall_6_Visual_0'> + <pose frame=''>-2.65388 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>0.942236 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_6_Collision_0'> + <geometry> + <box> + <size>0.942236 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>-2.65388 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_6_Visual_1'> + <pose frame=''>0.921118 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>4.40776 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_6_Collision_1'> + <geometry> + <box> + <size>4.40776 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0.921118 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_6_Visual_2'> + <pose frame=''>-1.73276 0 2.25 0 -0 0</pose> + <geometry> + <box> + <size>0.9 0.15 0.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_6_Collision_2'> + <geometry> + <box> + <size>0.9 0.15 0.5</size> + </box> + </geometry> + <pose frame=''>-1.73276 0 2.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_8'> + <collision name='Wall_8_Collision'> + <geometry> + <box> + <size>6.49048 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_8_Visual'> + <pose frame=''>0 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>6.49048 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Bricks</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <pose frame=''>-0.919988 3.07841 0 0 -0 0.004797</pose> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='Wall_9'> + <pose frame=''>2.25024 -0.023381 0 0 -0 -1.56587</pose> + <visual name='Wall_9_Visual_0'> + <pose frame=''>-2.87798 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>0.56727 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_9_Collision_0'> + <geometry> + <box> + <size>0.56727 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>-2.87798 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_9_Visual_1'> + <pose frame=''>0.285145 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>2.25608 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_9_Collision_1'> + <geometry> + <box> + <size>2.25608 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>0.285145 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_9_Visual_2'> + <pose frame=''>2.7374 0 1.25 0 -0 0</pose> + <geometry> + <box> + <size>0.848434 0.15 2.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_9_Collision_2'> + <geometry> + <box> + <size>0.848434 0.15 2.5</size> + </box> + </geometry> + <pose frame=''>2.7374 0 1.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_9_Visual_3'> + <pose frame=''>-1.71862 0 2.25 0 -0 0</pose> + <geometry> + <box> + <size>1.75145 0.15 0.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_9_Collision_3'> + <geometry> + <box> + <size>1.75145 0.15 0.5</size> + </box> + </geometry> + <pose frame=''>-1.71862 0 2.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='Wall_9_Visual_4'> + <pose frame=''>1.86318 0 2.25 0 -0 0</pose> + <geometry> + <box> + <size>0.9 0.15 0.5</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + <ambient>1 1 1 1</ambient> + </material> + <meta> + <layer>0</layer> + </meta> + </visual> + <collision name='Wall_9_Collision_4'> + <geometry> + <box> + <size>0.9 0.15 0.5</size> + </box> + </geometry> + <pose frame=''>1.86318 0 2.25 0 -0 0</pose> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <static>1</static> + </model> + <model name='textured_shapes'> + <pose frame=''>-1.75529 0.665691 0.5 0 -0 0</pose> + <link name='box'> + <pose frame=''>0 -1.5 0 0 -0 0</pose> + <collision name='collision'> + <geometry> + <box> + <size>1 1 1</size> + </box> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual'> + <geometry> + <box> + <size>1 1 1</size> + </box> + </geometry> + <material> + <script> + <uri>model://textured_shapes/materials/scripts</uri> + <uri>model://textured_shapes/materials/textures</uri> + <name>TexturedShape/Squares</name> + </script> + </material> + </visual> + <self_collide>0</self_collide> + <inertial> + <inertia> + <ixx>1</ixx> + <ixy>0</ixy> + <ixz>0</ixz> + <iyy>1</iyy> + <iyz>0</iyz> + <izz>1</izz> + </inertia> + <mass>1</mass> + </inertial> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='sphere'> + <collision name='collision'> + <geometry> + <sphere> + <radius>0.5</radius> + </sphere> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual'> + <geometry> + <sphere> + <radius>0.5</radius> + </sphere> + </geometry> + <material> + <script> + <uri>model://textured_shapes/materials/scripts</uri> + <uri>model://textured_shapes/materials/textures</uri> + <name>TexturedShape/Squares</name> + </script> + </material> + </visual> + <self_collide>0</self_collide> + <inertial> + <inertia> + <ixx>1</ixx> + <ixy>0</ixy> + <ixz>0</ixz> + <iyy>1</iyy> + <iyz>0</iyz> + <izz>1</izz> + </inertia> + <mass>1</mass> + </inertial> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <link name='cylinder'> + <pose frame=''>0 1.5 0 0 -0 0</pose> + <collision name='collision'> + <geometry> + <cylinder> + <radius>0.5</radius> + <length>1</length> + </cylinder> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual'> + <geometry> + <cylinder> + <radius>0.5</radius> + <length>1</length> + </cylinder> + </geometry> + <material> + <script> + <uri>model://textured_shapes/materials/scripts</uri> + <uri>model://textured_shapes/materials/textures</uri> + <name>TexturedShape/Squares</name> + </script> + </material> + </visual> + <self_collide>0</self_collide> + <inertial> + <inertia> + <ixx>1</ixx> + <ixy>0</ixy> + <ixz>0</ixz> + <iyy>1</iyy> + <iyz>0</iyz> + <izz>1</izz> + </inertia> + <mass>1</mass> + </inertial> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + </model> + <model name='bookshelf'> + <static>1</static> + <link name='link'> + <inertial> + <mass>1</mass> + </inertial> + <collision name='back'> + <pose frame=''>0 0.005 0.6 0 -0 0</pose> + <geometry> + <box> + <size>0.9 0.01 1.2</size> + </box> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual1'> + <pose frame=''>0 0.005 0.6 0 -0 0</pose> + <geometry> + <box> + <size>0.9 0.01 1.2</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + </material> + </visual> + <collision name='left_side'> + <pose frame=''>0.45 -0.195 0.6 0 -0 0</pose> + <geometry> + <box> + <size>0.02 0.4 1.2</size> + </box> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual2'> + <pose frame=''>0.45 -0.195 0.6 0 -0 0</pose> + <geometry> + <box> + <size>0.02 0.4 1.2</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + </material> + </visual> + <collision name='right_side'> + <pose frame=''>-0.45 -0.195 0.6 0 -0 0</pose> + <geometry> + <box> + <size>0.02 0.4 1.2</size> + </box> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual3'> + <pose frame=''>-0.45 -0.195 0.6 0 -0 0</pose> + <geometry> + <box> + <size>0.02 0.4 1.2</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + </material> + </visual> + <collision name='bottom'> + <pose frame=''>0 -0.195 0.03 0 -0 0</pose> + <geometry> + <box> + <size>0.88 0.4 0.06</size> + </box> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual4'> + <pose frame=''>0 -0.195 0.03 0 -0 0</pose> + <geometry> + <box> + <size>0.88 0.4 0.06</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + </material> + </visual> + <collision name='top'> + <pose frame=''>0 -0.195 1.19 0 -0 0</pose> + <geometry> + <box> + <size>0.88 0.4 0.02</size> + </box> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual5'> + <pose frame=''>0 -0.195 1.19 0 -0 0</pose> + <geometry> + <box> + <size>0.88 0.4 0.02</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + </material> + </visual> + <collision name='low_shelf'> + <pose frame=''>0 -0.195 0.43 0 -0 0</pose> + <geometry> + <box> + <size>0.88 0.4 0.02</size> + </box> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual6'> + <pose frame=''>0 -0.195 0.43 0 -0 0</pose> + <geometry> + <box> + <size>0.88 0.4 0.02</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + </material> + </visual> + <collision name='high_shelf'> + <pose frame=''>0 -0.195 0.8 0 -0 0</pose> + <geometry> + <box> + <size>0.88 0.4 0.02</size> + </box> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual7'> + <pose frame=''>0 -0.195 0.8 0 -0 0</pose> + <geometry> + <box> + <size>0.88 0.4 0.02</size> + </box> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Wood</name> + </script> + </material> + </visual> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <pose frame=''>-2.39404 0.401827 0 0 -0 0</pose> + </model> + <model name='cube_20k'> + <link name='link'> + <pose frame=''>0 0 0.5 0 -0 0</pose> + <collision name='collision'> + <geometry> + <mesh> + <uri>model://cube_20k/meshes/cube_20k.stl</uri> + <scale>0.5 0.5 0.5</scale> + </mesh> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual'> + <geometry> + <mesh> + <uri>model://cube_20k/meshes/cube_20k.stl</uri> + <scale>0.5 0.5 0.5</scale> + </mesh> + </geometry> + </visual> + <self_collide>0</self_collide> + <inertial> + <inertia> + <ixx>1</ixx> + <ixy>0</ixy> + <ixz>0</ixz> + <iyy>1</iyy> + <iyz>0</iyz> + <izz>1</izz> + </inertia> + <mass>1</mass> + </inertial> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <pose frame=''>5.24325 1.64702 0 0 -0 0</pose> + </model> + <state world_name='default'> + <sim_time>381 955000000</sim_time> + <real_time>382 887443825</real_time> + <wall_time>1583594686 194713091</wall_time> + <iterations>381955</iterations> + <model name='bookshelf'> + <pose frame=''>-3.07852 0.456083 0 0 -0 1.55665</pose> + <scale>1 1 1</scale> + <link name='link'> + <pose frame=''>-3.07852 0.456083 0 0 -0 1.55665</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + </model> + <model name='cube_20k'> + <pose frame=''>5.24325 1.64702 -0 -0 -0 -2e-06</pose> + <scale>1 1 1</scale> + <link name='link'> + <pose frame=''>5.24325 1.64702 0.5 -0 -0 -2e-06</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>-1.07556 -0.034272 0.19878 -3.07094 -0.991638 -3.13739</acceleration> + <wrench>-1.07556 -0.034272 0.19878 0 -0 0</wrench> + </link> + </model> + <model name='flat'> + <pose frame=''>0.879143 0.065747 0 0 -0 0</pose> + <scale>1 1 1</scale> + <link name='Wall_10'> + <pose frame=''>-0.048449 -2.97721 0 0 -0 3.13003</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_12'> + <pose frame=''>5.16417 3.12895 0 0 -0 0</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_13'> + <pose frame=''>7.21417 1.32895 0 0 0 -1.5708</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_14'> + <pose frame=''>5.16417 -0.471054 0 0 -0 3.14159</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_16'> + <pose frame=''>5.16417 -3.01379 0 0 -0 0</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_17'> + <pose frame=''>7.21417 -1.74242 0 0 -0 1.5708</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_19'> + <pose frame=''>-4.33285 3.15176 0 0 -0 3.12126</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_20'> + <pose frame=''>-5.45462 0.124573 0 0 0 -1.5708</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_21'> + <pose frame=''>-4.33285 -2.93303 0 0 0 -0.006779</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_23'> + <pose frame=''>-4.28762 0.232068 0 0 -0 3.14159</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_6'> + <pose frame=''>-3.21108 0.109364 0 0 -0 1.5708</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_8'> + <pose frame=''>-0.040845 3.14416 0 0 -0 0.004797</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + <link name='Wall_9'> + <pose frame=''>3.12938 0.042366 0 0 0 -1.56587</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + </model> + <model name='ground_plane'> + <pose frame=''>0 0 0 0 -0 0</pose> + <scale>1 1 1</scale> + <link name='link'> + <pose frame=''>0 0 0 0 -0 0</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + </model> + <model name='textured_shapes'> + <pose frame=''>-0.146443 1.86647 0.5 0 -0 1.5946</pose> + <scale>1 1 1</scale> + <link name='box'> + <pose frame=''>1.35313 1.90218 0.5 0 -0 1.5946</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 -0 0 0 -0 0</acceleration> + <wrench>0 -0 0 0 -0 0</wrench> + </link> + <link name='cylinder'> + <pose frame=''>-1.64602 1.83076 0.499992 0 -0 1.5946</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 -9.8 0 -0 0</acceleration> + <wrench>0 0 -9.8 0 -0 0</wrench> + </link> + <link name='sphere'> + <pose frame=''>-0.146443 1.86647 0.5 0 -0 1.5946</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + </model> + <light name='sun'> + <pose frame=''>0 0 10 0 -0 0</pose> + </light> + </state> + <gui fullscreen='0'> + <camera name='user_camera'> + <pose frame=''>1.42594 -12.967 39.9953 -0 1.2538 1.49219</pose> + <view_controller>orbit</view_controller> + <projection_type>perspective</projection_type> + </camera> + </gui> + </world> +</sdf> diff --git a/labs/catkin_ws/src/lab5/worlds/lab5_world.world b/labs/catkin_ws/src/lab5/worlds/lab5_world.world new file mode 100644 index 0000000000000000000000000000000000000000..81e0cf4a74f16813f9bcb8265243345a9a886b53 --- /dev/null +++ b/labs/catkin_ws/src/lab5/worlds/lab5_world.world @@ -0,0 +1,603 @@ +<sdf version='1.7'> + <world name='default'> + <scene> + <ambient>0.4 0.4 0.4 1</ambient> + <background>0.7 0.7 0.7 1</background> + <shadows>1</shadows> + </scene> + <light name='sun' type='directional'> + <cast_shadows>1</cast_shadows> + <pose>0 0 10 0 -0 0</pose> + <diffuse>0.8 0.8 0.8 1</diffuse> + <specular>0.2 0.2 0.2 1</specular> + <attenuation> + <range>1000</range> + <constant>0.9</constant> + <linear>0.01</linear> + <quadratic>0.001</quadratic> + </attenuation> + <direction>-0.5 0.1 -0.9</direction> + <spot> + <inner_angle>0</inner_angle> + <outer_angle>0</outer_angle> + <falloff>0</falloff> + </spot> + </light> + <model name='ground_plane'> + <static>1</static> + <link name='link'> + <collision name='collision'> + <geometry> + <plane> + <normal>0 0 1</normal> + <size>100 100</size> + </plane> + </geometry> + <surface> + <contact> + <collide_bitmask>65535</collide_bitmask> + <ode/> + </contact> + <friction> + <ode> + <mu>100</mu> + <mu2>50</mu2> + </ode> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <visual name='visual'> + <cast_shadows>0</cast_shadows> + <geometry> + <plane> + <normal>0 0 1</normal> + <size>100 100</size> + </plane> + </geometry> + <material> + <script> + <uri>file://media/materials/scripts/gazebo.material</uri> + <name>Gazebo/Grey</name> + </script> + </material> + </visual> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + </model> + <physics type='ode'> + <real_time_update_rate>1000</real_time_update_rate> + <max_step_size>0.001</max_step_size> + <real_time_factor>1</real_time_factor> + <ode> + <solver> + <type>quick</type> + <iters>150</iters> + <precon_iters>0</precon_iters> + <sor>1.4</sor> + <use_dynamic_moi_rescaling>1</use_dynamic_moi_rescaling> + </solver> + <constraints> + <cfm>1e-05</cfm> + <erp>0.2</erp> + <contact_max_correcting_vel>2000</contact_max_correcting_vel> + <contact_surface_layer>0.01</contact_surface_layer> + </constraints> + </ode> + </physics> + <gravity>0 0 -9.8</gravity> + <magnetic_field>6e-06 2.3e-05 -4.2e-05</magnetic_field> + <atmosphere type='adiabatic'/> + <wind/> + <spherical_coordinates> + <surface_model>EARTH_WGS84</surface_model> + <latitude_deg>0</latitude_deg> + <longitude_deg>0</longitude_deg> + <elevation>0</elevation> + <heading_deg>0</heading_deg> + </spherical_coordinates> + <model name='turtlebot3_burger'> + <link name='base_footprint'> + <inertial> + <pose>-0.00429 0 0.030734 0 -0 0</pose> + <mass>0.944735</mass> + <inertia> + <ixx>0.00717896</ixx> + <ixy>-1.22941e-05</ixy> + <ixz>0.00057674</ixz> + <iyy>0.00721804</iyy> + <iyz>-5.01209e-06</iyz> + <izz>0.00413858</izz> + </inertia> + </inertial> + <collision name='base_footprint_fixed_joint_lump__base_link_collision'> + <pose>-0.032 0 0.08 0 -0 0</pose> + <geometry> + <box> + <size>0.14 0.14 0.143</size> + </box> + </geometry> + <surface> + <contact> + <ode/> + </contact> + <friction> + <ode/> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <collision name='base_footprint_fixed_joint_lump__caster_back_link_collision_1'> + <pose>-0.081 1e-06 0.005 -1.57 0 0</pose> + <geometry> + <box> + <size>0.03 0.009 0.02</size> + </box> + </geometry> + <surface> + <contact> + <ode> + <kp>1e+06</kp> + <kd>100</kd> + <max_vel>1</max_vel> + <min_depth>0.001</min_depth> + </ode> + </contact> + <friction> + <ode> + <mu>0.1</mu> + <mu2>0.1</mu2> + </ode> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <collision name='base_footprint_fixed_joint_lump__base_scan_collision_2'> + <pose>-0.017 0 0.1755 0 -0 0</pose> + <geometry> + <cylinder> + <length>0.0315</length> + <radius>0.055</radius> + </cylinder> + </geometry> + <surface> + <contact> + <ode/> + </contact> + <friction> + <ode/> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <visual name='base_footprint_fixed_joint_lump__base_link_visual'> + <pose>-0.032 0 0.01 0 -0 0</pose> + <geometry> + <mesh> + <scale>0.001 0.001 0.001</scale> + <uri>/opt/ros/noetic/share/turtlebot3_description/meshes/bases/burger_base.stl</uri> + </mesh> + </geometry> + <material> + <script> + <name>Gazebo/DarkGrey</name> + <uri>file://media/materials/scripts/gazebo.material</uri> + </script> + </material> + </visual> + <visual name='base_footprint_fixed_joint_lump__base_scan_visual_1'> + <pose>-0.032 0 0.182 0 -0 0</pose> + <geometry> + <mesh> + <scale>0.001 0.001 0.001</scale> + <uri>/opt/ros/noetic/share/turtlebot3_description/meshes/sensors/lds.stl</uri> + </mesh> + </geometry> + <material> + <script> + <name>Gazebo/FlatBlack</name> + <uri>file://media/materials/scripts/gazebo.material</uri> + </script> + </material> + </visual> + <velocity_decay/> + <velocity_decay/> + <velocity_decay/> + <sensor name='imu' type='imu'> + <always_on>1</always_on> + <visualize>0</visualize> + <pose>-0.032 0 0.078 0 -0 0</pose> + <imu/> + </sensor> + <gravity>1</gravity> + <velocity_decay/> + <sensor name='lds_lfcd_sensor' type='ray'> + <visualize>0</visualize> + <update_rate>5</update_rate> + <ray> + <scan> + <horizontal> + <samples>360</samples> + <resolution>1</resolution> + <min_angle>0</min_angle> + <max_angle>6.28319</max_angle> + </horizontal> + <vertical> + <samples>1</samples> + <min_angle>0</min_angle> + <max_angle>0</max_angle> + </vertical> + </scan> + <range> + <min>0.12</min> + <max>3.5</max> + <resolution>0.015</resolution> + </range> + <noise> + <type>gaussian</type> + <mean>0</mean> + <stddev>0.01</stddev> + </noise> + </ray> + <plugin name='gazebo_ros_lds_lfcd_controller' filename='libgazebo_ros_laser.so'> + <topicName>scan</topicName> + <frameName>base_scan</frameName> + <robotNamespace>/</robotNamespace> + </plugin> + <pose>-0.032 0 0.182 0 -0 0</pose> + </sensor> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <joint name='wheel_left_joint' type='revolute'> + <pose relative_to='base_footprint'>0 0.08 0.033 -1.57 0 0</pose> + <parent>base_footprint</parent> + <child>wheel_left_link</child> + <axis> + <xyz>0 0 1</xyz> + <limit> + <lower>-1e+16</lower> + <upper>1e+16</upper> + </limit> + <dynamics> + <spring_reference>0</spring_reference> + <spring_stiffness>0</spring_stiffness> + </dynamics> + </axis> + </joint> + <link name='wheel_left_link'> + <pose relative_to='wheel_left_joint'>0 0 0 0 -0 0</pose> + <inertial> + <pose>0 0 0 0 -0 0</pose> + <mass>0.0284989</mass> + <inertia> + <ixx>1.11756e-05</ixx> + <ixy>-4.23698e-11</ixy> + <ixz>-5.93817e-09</ixz> + <iyy>1.11924e-05</iyy> + <iyz>-1.44001e-11</iyz> + <izz>2.07126e-05</izz> + </inertia> + </inertial> + <collision name='wheel_left_link_collision'> + <pose>0 0 0 0 -0 0</pose> + <geometry> + <cylinder> + <length>0.018</length> + <radius>0.033</radius> + </cylinder> + </geometry> + <surface> + <contact> + <ode> + <kp>500000</kp> + <kd>10</kd> + <max_vel>0.1</max_vel> + <min_depth>0.001</min_depth> + </ode> + </contact> + <friction> + <ode> + <mu>0.1</mu> + <mu2>0.1</mu2> + <fdir1>1 0 0</fdir1> + </ode> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <visual name='wheel_left_link_visual'> + <pose>0 0 0 1.57 -0 0</pose> + <geometry> + <mesh> + <scale>0.001 0.001 0.001</scale> + <uri>/opt/ros/noetic/share/turtlebot3_description/meshes/wheels/left_tire.stl</uri> + </mesh> + </geometry> + <material> + <script> + <name>Gazebo/FlatBlack</name> + <uri>file://media/materials/scripts/gazebo.material</uri> + </script> + </material> + </visual> + <gravity>1</gravity> + <velocity_decay/> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <joint name='wheel_right_joint' type='revolute'> + <pose relative_to='base_footprint'>0 -0.08 0.033 -1.57 0 0</pose> + <parent>base_footprint</parent> + <child>wheel_right_link</child> + <axis> + <xyz>0 0 1</xyz> + <limit> + <lower>-1e+16</lower> + <upper>1e+16</upper> + </limit> + <dynamics> + <spring_reference>0</spring_reference> + <spring_stiffness>0</spring_stiffness> + </dynamics> + </axis> + </joint> + <link name='wheel_right_link'> + <pose relative_to='wheel_right_joint'>0 0 0 0 -0 0</pose> + <inertial> + <pose>0 0 0 0 -0 0</pose> + <mass>0.0284989</mass> + <inertia> + <ixx>1.11756e-05</ixx> + <ixy>-4.23698e-11</ixy> + <ixz>-5.93817e-09</ixz> + <iyy>1.11924e-05</iyy> + <iyz>-1.44001e-11</iyz> + <izz>2.07126e-05</izz> + </inertia> + </inertial> + <collision name='wheel_right_link_collision'> + <pose>0 0 0 0 -0 0</pose> + <geometry> + <cylinder> + <length>0.018</length> + <radius>0.033</radius> + </cylinder> + </geometry> + <surface> + <contact> + <ode> + <kp>500000</kp> + <kd>10</kd> + <max_vel>0.1</max_vel> + <min_depth>0.001</min_depth> + </ode> + </contact> + <friction> + <ode> + <mu>0.1</mu> + <mu2>0.1</mu2> + <fdir1>1 0 0</fdir1> + </ode> + <torsional> + <ode/> + </torsional> + </friction> + <bounce/> + </surface> + <max_contacts>10</max_contacts> + </collision> + <visual name='wheel_right_link_visual'> + <pose>0 0 0 1.57 -0 0</pose> + <geometry> + <mesh> + <scale>0.001 0.001 0.001</scale> + <uri>/opt/ros/noetic/share/turtlebot3_description/meshes/wheels/right_tire.stl</uri> + </mesh> + </geometry> + <material> + <script> + <name>Gazebo/FlatBlack</name> + <uri>file://media/materials/scripts/gazebo.material</uri> + </script> + </material> + </visual> + <gravity>1</gravity> + <velocity_decay/> + <self_collide>0</self_collide> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <plugin name='turtlebot3_burger_controller' filename='libgazebo_ros_diff_drive.so'> + <commandTopic>cmd_vel</commandTopic> + <odometryTopic>odom</odometryTopic> + <odometryFrame>odom</odometryFrame> + <odometrySource>world</odometrySource> + <publishOdomTF>1</publishOdomTF> + <robotBaseFrame>base_footprint</robotBaseFrame> + <publishWheelTF>0</publishWheelTF> + <publishTf>1</publishTf> + <publishWheelJointState>1</publishWheelJointState> + <legacyMode>0</legacyMode> + <updateRate>30</updateRate> + <leftJoint>wheel_left_joint</leftJoint> + <rightJoint>wheel_right_joint</rightJoint> + <wheelSeparation>0.160</wheelSeparation> + <wheelDiameter>0.066</wheelDiameter> + <wheelAcceleration>1</wheelAcceleration> + <wheelTorque>10</wheelTorque> + <rosDebugLevel>na</rosDebugLevel> + <robotNamespace>/</robotNamespace> + </plugin> + <static>0</static> + <plugin name='imu_plugin' filename='libgazebo_ros_imu.so'> + <alwaysOn>1</alwaysOn> + <topicName>imu</topicName> + <serviceName>imu_service</serviceName> + <gaussianNoise>0.0</gaussianNoise> + <updateRate>0</updateRate> + <imu> + <noise> + <type>gaussian</type> + <rate> + <mean>0.0</mean> + <stddev>2e-4</stddev> + <bias_mean>0.0000075</bias_mean> + <bias_stddev>0.0000008</bias_stddev> + </rate> + <accel> + <mean>0.0</mean> + <stddev>1.7e-2</stddev> + <bias_mean>0.1</bias_mean> + <bias_stddev>0.001</bias_stddev> + </accel> + </noise> + </imu> + <robotNamespace>/</robotNamespace> + <bodyName>base_footprint</bodyName> + <frameName>base_footprint</frameName> + <xyzOffset>0.064 0 -0.156</xyzOffset> + <rpyOffset>0 -0 0</rpyOffset> + </plugin> + <pose>0 0 0 0 -0 0</pose> + </model> + <state world_name='default'> + <sim_time>6920 871000000</sim_time> + <real_time>7020 561236528</real_time> + <wall_time>1634581577 890798027</wall_time> + <iterations>6920871</iterations> + <model name='Dumpster'> + <pose>3.69257 -2.55475 0.001376 2e-06 -0 0</pose> + <scale>1 1 1</scale> + <link name='link'> + <pose>3.69257 -2.55475 0.001376 2e-06 -0 0</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 -0.007852 -1.33307 -0.585996 0 0</acceleration> + <wrench>0 -0.007852 -1.33307 0 -0 0</wrench> + </link> + </model> + <model name='ground_plane'> + <pose>0 0 0 0 -0 0</pose> + <scale>1 1 1</scale> + <link name='link'> + <pose>0 0 0 0 -0 0</pose> + <velocity>0 0 0 0 -0 0</velocity> + <acceleration>0 0 0 0 -0 0</acceleration> + <wrench>0 0 0 0 -0 0</wrench> + </link> + </model> + <model name='turtlebot3_burger'> + <pose>0.872046 0.71298 -0.001002 -1.6e-05 0.007722 1.85821</pose> + <scale>1 1 1</scale> + <link name='base_footprint'> + <pose>0.872046 0.71298 -0.001002 -1.6e-05 0.007722 1.85821</pose> + <velocity>-0 -0 2e-05 7.9e-05 3.7e-05 6e-06</velocity> + <acceleration>-0 -0 0 0 -0 0</acceleration> + <wrench>-0 -0 0 0 -0 0</wrench> + </link> + <link name='wheel_left_link'> + <pose>0.795255 0.690546 0.031996 -1.55949 -1.50198 1.84692</pose> + <velocity>2e-06 -3e-06 1.4e-05 5.6e-05 7.3e-05 -3e-06</velocity> + <acceleration>-0 -0 -0 0 -0 0</acceleration> + <wrench>-0 -0 -0 0 -0 0</wrench> + </link> + <link name='wheel_right_link'> + <pose>0.948692 0.735902 0.031998 -1.55617 -1.51761 1.8436</pose> + <velocity>2e-06 -2e-06 1.5e-05 5.4e-05 7.1e-05 -1e-06</velocity> + <acceleration>-0 -0 0 0 -0 0</acceleration> + <wrench>-0 -0 0 0 -0 0</wrench> + </link> + </model> + <light name='sun'> + <pose>0 0 10 0 -0 0</pose> + </light> + </state> + <model name='Dumpster'> + <link name='link'> + <collision name='collision'> + <geometry> + <mesh> + <scale>1.5 1.5 1.5</scale> + <uri>model://dumpster/meshes/dumpster.dae</uri> + </mesh> + </geometry> + <max_contacts>10</max_contacts> + <surface> + <contact> + <ode/> + </contact> + <bounce/> + <friction> + <torsional> + <ode/> + </torsional> + <ode/> + </friction> + </surface> + </collision> + <visual name='visual'> + <geometry> + <mesh> + <scale>1.5 1.5 1.5</scale> + <uri>model://dumpster/meshes/dumpster.dae</uri> + </mesh> + </geometry> + <material> + <script> + <uri>model://dumpster/materials/scripts</uri> + <uri>model://dumpster/materials/textures</uri> + <name>Dumpster/Diffuse</name> + </script> + </material> + </visual> + <self_collide>0</self_collide> + <inertial> + <pose>0 0 0 0 -0 0</pose> + <inertia> + <ixx>1</ixx> + <ixy>0</ixy> + <ixz>0</ixz> + <iyy>1</iyy> + <iyz>0</iyz> + <izz>1</izz> + </inertia> + <mass>1</mass> + </inertial> + <enable_wind>0</enable_wind> + <kinematic>0</kinematic> + </link> + <pose>3.69257 -2.55475 0 0 -0 0</pose> + </model> + <gui fullscreen='0'> + <camera name='user_camera'> + <pose>15.4125 -5.93135 10.5521 0 0.439643 2.62019</pose> + <view_controller>orbit</view_controller> + <projection_type>perspective</projection_type> + </camera> + </gui> + </world> +</sdf> diff --git a/sim_ws/setupeventsim.sh b/sim_ws/setupeventsim.sh new file mode 100755 index 0000000000000000000000000000000000000000..77a95f14fe90c9bd4a8400b0ae1327953e070a34 --- /dev/null +++ b/sim_ws/setupeventsim.sh @@ -0,0 +1 @@ +source ~/3rdYear/RWR/Robot-With-Reflexes/sim_ws/devel/setup.bash \ No newline at end of file diff --git a/sim_ws/src/assimp_catkin b/sim_ws/src/assimp_catkin new file mode 160000 index 0000000000000000000000000000000000000000..45cfea6f558f9f06c00fb50e557c165606bc5aa0 --- /dev/null +++ b/sim_ws/src/assimp_catkin @@ -0,0 +1 @@ +Subproject commit 45cfea6f558f9f06c00fb50e557c165606bc5aa0 diff --git a/sim_ws/src/catkin_simple b/sim_ws/src/catkin_simple new file mode 160000 index 0000000000000000000000000000000000000000..0e62848b12da76c8cc58a1add42b4f894d1ac21e --- /dev/null +++ b/sim_ws/src/catkin_simple @@ -0,0 +1 @@ +Subproject commit 0e62848b12da76c8cc58a1add42b4f894d1ac21e diff --git a/sim_ws/src/eigen_catkin b/sim_ws/src/eigen_catkin new file mode 160000 index 0000000000000000000000000000000000000000..3323b388540fa95ec9da6f9cd887f70ead055edb --- /dev/null +++ b/sim_ws/src/eigen_catkin @@ -0,0 +1 @@ +Subproject commit 3323b388540fa95ec9da6f9cd887f70ead055edb diff --git a/sim_ws/src/eigen_checks b/sim_ws/src/eigen_checks new file mode 160000 index 0000000000000000000000000000000000000000..22a6247a3df11bc285d43d1a030f4e874a413997 --- /dev/null +++ b/sim_ws/src/eigen_checks @@ -0,0 +1 @@ +Subproject commit 22a6247a3df11bc285d43d1a030f4e874a413997 diff --git a/sim_ws/src/gflags_catkin b/sim_ws/src/gflags_catkin new file mode 160000 index 0000000000000000000000000000000000000000..fc38fc525f7d48881aebb27a7b9978453556bbd4 --- /dev/null +++ b/sim_ws/src/gflags_catkin @@ -0,0 +1 @@ +Subproject commit fc38fc525f7d48881aebb27a7b9978453556bbd4 diff --git a/sim_ws/src/glog_catkin b/sim_ws/src/glog_catkin new file mode 160000 index 0000000000000000000000000000000000000000..1b8eab2d071068c41aa10137370409e9bd2409ec --- /dev/null +++ b/sim_ws/src/glog_catkin @@ -0,0 +1 @@ +Subproject commit 1b8eab2d071068c41aa10137370409e9bd2409ec diff --git a/sim_ws/src/minkindr b/sim_ws/src/minkindr new file mode 160000 index 0000000000000000000000000000000000000000..c35cd2161829435733f48d10b8af0a1eb6c3008f --- /dev/null +++ b/sim_ws/src/minkindr @@ -0,0 +1 @@ +Subproject commit c35cd2161829435733f48d10b8af0a1eb6c3008f diff --git a/sim_ws/src/minkindr_ros b/sim_ws/src/minkindr_ros new file mode 160000 index 0000000000000000000000000000000000000000..8ef67b01c76e6dcba69dc5143692989b6a8dbc32 --- /dev/null +++ b/sim_ws/src/minkindr_ros @@ -0,0 +1 @@ +Subproject commit 8ef67b01c76e6dcba69dc5143692989b6a8dbc32 diff --git a/sim_ws/src/rpg_dvs_ros b/sim_ws/src/rpg_dvs_ros new file mode 160000 index 0000000000000000000000000000000000000000..95f08d565c3115b181a4763e1e350f4df0375c4b --- /dev/null +++ b/sim_ws/src/rpg_dvs_ros @@ -0,0 +1 @@ +Subproject commit 95f08d565c3115b181a4763e1e350f4df0375c4b diff --git a/sim_ws/src/rpg_esim b/sim_ws/src/rpg_esim new file mode 160000 index 0000000000000000000000000000000000000000..4cf0b8952e9f58f674c3098f1b027a4b6db53427 --- /dev/null +++ b/sim_ws/src/rpg_esim @@ -0,0 +1 @@ +Subproject commit 4cf0b8952e9f58f674c3098f1b027a4b6db53427 diff --git a/sim_ws/src/yaml_cpp_catkin b/sim_ws/src/yaml_cpp_catkin new file mode 160000 index 0000000000000000000000000000000000000000..6cad108c4d5a9b9ddc95edd6f7cb23b572926351 --- /dev/null +++ b/sim_ws/src/yaml_cpp_catkin @@ -0,0 +1 @@ +Subproject commit 6cad108c4d5a9b9ddc95edd6f7cb23b572926351 diff --git a/sim_ws/src/ze_oss b/sim_ws/src/ze_oss new file mode 160000 index 0000000000000000000000000000000000000000..9d11246d10715ea0356ace43b36827b08fdc1914 --- /dev/null +++ b/sim_ws/src/ze_oss @@ -0,0 +1 @@ +Subproject commit 9d11246d10715ea0356ace43b36827b08fdc1914 diff --git a/spotMicroCode/catkin_ws/src/spotMicro b/spotMicroCode/catkin_ws/src/spotMicro new file mode 160000 index 0000000000000000000000000000000000000000..2a34f5d303dff91b62180031b31ef512a672f3c3 --- /dev/null +++ b/spotMicroCode/catkin_ws/src/spotMicro @@ -0,0 +1 @@ +Subproject commit 2a34f5d303dff91b62180031b31ef512a672f3c3