#1013032 ros2-osrf-testing-tools-cpp: ftbfs with GCC-12

#1013032#5
Date:
2022-06-16 12:13:30 UTC
From:
To:
[This bug is targeted to the upcoming bookworm release]

Please keep this issue open in the bug tracker for the package it
was filed for.  If a fix in another package is required, please
file a bug for the other package (or clone), and add a block in this
package. Please keep the issue open until the package can be built in
a follow-up test rebuild.

The package fails to build in a test rebuild on at least amd64 with
gcc-12/g++-12, but succeeds to build with gcc-11/g++-11. The
severity of this report will be raised before the bookworm release.

The full build log can be found at:
http://qa-logs.debian.net/2022/06/09/gcc12/ros2-osrf-testing-tools-cpp_1.5.1+ds-2_unstable_gcc12.log
The last lines of the build log are at the end of this report.

To build with GCC 11, either set CC=gcc-11 CXX=g++-11 explicitly,
or install the gcc, g++, gfortran, ... packages from experimental.

  apt-get -t=experimental install g++

Common build failures are new warnings resulting in build failures with
-Werror turned on, or new/dropped symbols in Debian symbols files.
For other C/C++ related build failures see the porting guide at
http://gcc.gnu.org/gcc-11/porting_to.html

GCC 11 defaults to the GNU++17 standard.  If your package installs
header files in /usr/include, please don't work around C++17 issues
by choosing a lower C++ standard for the package build, but fix these
issues to build with the C++17 standard.

[...]
make[3]: Entering directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /<<PKGBUILDDIR>>/osrf_testing_tools_cpp /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/test/test_runner /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/test/test_runner /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/test/test_runner/CMakeFiles/test_parse_environment_variable.dir/DependInfo.cmake --color=
make[3]: Entering directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /<<PKGBUILDDIR>>/osrf_testing_tools_cpp /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/test/test_runner /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/test/test_runner /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/test/test_runner/CMakeFiles/assert_env_vars.dir/DependInfo.cmake --color=
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
make  -f test/test_runner/CMakeFiles/assert_env_vars.dir/build.make test/test_runner/CMakeFiles/assert_env_vars.dir/build
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
make  -f src/memory_tools/CMakeFiles/memory_tools.dir/build.make src/memory_tools/CMakeFiles/memory_tools.dir/build
make  -f src/test_runner/CMakeFiles/test_runner.dir/build.make src/test_runner/CMakeFiles/test_runner.dir/build
make  -f test/test_runner/CMakeFiles/test_parse_environment_variable.dir/build.make test/test_runner/CMakeFiles/test_parse_environment_variable.dir/build
make[3]: Entering directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
make[3]: Entering directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
make[3]: Entering directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
make[3]: Entering directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
[ 28%] Building CXX object src/test_runner/CMakeFiles/test_runner.dir/main.cpp.o
[ 33%] Building CXX object src/memory_tools/CMakeFiles/memory_tools.dir/initialize.cpp.o
[ 28%] Building CXX object test/test_runner/CMakeFiles/test_parse_environment_variable.dir/test_parse_environment_variable.cpp.o
[ 33%] Building CXX object src/memory_tools/CMakeFiles/memory_tools.dir/custom_memory_functions.cpp.o
[ 33%] Building CXX object test/test_runner/CMakeFiles/assert_env_vars.dir/assert_env_vars.cpp.o
[ 33%] Building CXX object src/memory_tools/CMakeFiles/memory_tools.dir/is_working.cpp.o
[ 33%] Building CXX object src/memory_tools/CMakeFiles/memory_tools.dir/implementation_monitoring_override.cpp.o
[ 38%] Building CXX object src/memory_tools/CMakeFiles/memory_tools.dir/memory_tools_service.cpp.o
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/src/memory_tools && /usr/bin/c++ -DBACKWARD_HAS_BACKTRACE=0 -DBACKWARD_HAS_BACKTRACE_SYMBOL=1 -DBACKWARD_HAS_BFD=0 -DBACKWARD_HAS_DW=0 -DBACKWARD_HAS_DWARF=0 -DBACKWARD_HAS_LIBUNWIND=0 -DBACKWARD_HAS_UNWIND=1 -DOSRF_TESTING_TOOLS_CPP_MEMORY_TOOLS_BUILDING_DLL -Dmemory_tools_EXPORTS -I/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/include -isystem /usr/lib/backward -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -MD -MT src/memory_tools/CMakeFiles/memory_tools.dir/custom_memory_functions.cpp.o -MF CMakeFiles/memory_tools.dir/custom_memory_functions.cpp.o.d -o CMakeFiles/memory_tools.dir/custom_memory_functions.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/custom_memory_functions.cpp
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/test/test_runner && /usr/bin/c++   -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -DGTEST_HAS_PTHREAD=1 -MD -MT test/test_runner/CMakeFiles/test_parse_environment_variable.dir/test_parse_environment_variable.cpp.o -MF CMakeFiles/test_parse_environment_variable.dir/test_parse_environment_variable.cpp.o.d -o CMakeFiles/test_parse_environment_variable.dir/test_parse_environment_variable.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/test/test_runner/test_parse_environment_variable.cpp
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/src/test_runner && /usr/bin/c++   -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -MD -MT src/test_runner/CMakeFiles/test_runner.dir/main.cpp.o -MF CMakeFiles/test_runner.dir/main.cpp.o.d -o CMakeFiles/test_runner.dir/main.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/test_runner/main.cpp
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/test/test_runner && /usr/bin/c++   -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -DGTEST_HAS_PTHREAD=1 -MD -MT test/test_runner/CMakeFiles/assert_env_vars.dir/assert_env_vars.cpp.o -MF CMakeFiles/assert_env_vars.dir/assert_env_vars.cpp.o.d -o CMakeFiles/assert_env_vars.dir/assert_env_vars.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/test/test_runner/assert_env_vars.cpp
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/src/memory_tools && /usr/bin/c++ -DBACKWARD_HAS_BACKTRACE=0 -DBACKWARD_HAS_BACKTRACE_SYMBOL=1 -DBACKWARD_HAS_BFD=0 -DBACKWARD_HAS_DW=0 -DBACKWARD_HAS_DWARF=0 -DBACKWARD_HAS_LIBUNWIND=0 -DBACKWARD_HAS_UNWIND=1 -DOSRF_TESTING_TOOLS_CPP_MEMORY_TOOLS_BUILDING_DLL -Dmemory_tools_EXPORTS -I/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/include -isystem /usr/lib/backward -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -MD -MT src/memory_tools/CMakeFiles/memory_tools.dir/implementation_monitoring_override.cpp.o -MF CMakeFiles/memory_tools.dir/implementation_monitoring_override.cpp.o.d -o CMakeFiles/memory_tools.dir/implementation_monitoring_override.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/implementation_monitoring_override.cpp
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/src/memory_tools && /usr/bin/c++ -DBACKWARD_HAS_BACKTRACE=0 -DBACKWARD_HAS_BACKTRACE_SYMBOL=1 -DBACKWARD_HAS_BFD=0 -DBACKWARD_HAS_DW=0 -DBACKWARD_HAS_DWARF=0 -DBACKWARD_HAS_LIBUNWIND=0 -DBACKWARD_HAS_UNWIND=1 -DOSRF_TESTING_TOOLS_CPP_MEMORY_TOOLS_BUILDING_DLL -Dmemory_tools_EXPORTS -I/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/include -isystem /usr/lib/backward -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -MD -MT src/memory_tools/CMakeFiles/memory_tools.dir/initialize.cpp.o -MF CMakeFiles/memory_tools.dir/initialize.cpp.o.d -o CMakeFiles/memory_tools.dir/initialize.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/initialize.cpp
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/src/memory_tools && /usr/bin/c++ -DBACKWARD_HAS_BACKTRACE=0 -DBACKWARD_HAS_BACKTRACE_SYMBOL=1 -DBACKWARD_HAS_BFD=0 -DBACKWARD_HAS_DW=0 -DBACKWARD_HAS_DWARF=0 -DBACKWARD_HAS_LIBUNWIND=0 -DBACKWARD_HAS_UNWIND=1 -DOSRF_TESTING_TOOLS_CPP_MEMORY_TOOLS_BUILDING_DLL -Dmemory_tools_EXPORTS -I/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/include -isystem /usr/lib/backward -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -MD -MT src/memory_tools/CMakeFiles/memory_tools.dir/is_working.cpp.o -MF CMakeFiles/memory_tools.dir/is_working.cpp.o.d -o CMakeFiles/memory_tools.dir/is_working.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/is_working.cpp
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/src/memory_tools && /usr/bin/c++ -DBACKWARD_HAS_BACKTRACE=0 -DBACKWARD_HAS_BACKTRACE_SYMBOL=1 -DBACKWARD_HAS_BFD=0 -DBACKWARD_HAS_DW=0 -DBACKWARD_HAS_DWARF=0 -DBACKWARD_HAS_LIBUNWIND=0 -DBACKWARD_HAS_UNWIND=1 -DOSRF_TESTING_TOOLS_CPP_MEMORY_TOOLS_BUILDING_DLL -Dmemory_tools_EXPORTS -I/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/include -isystem /usr/lib/backward -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -MD -MT src/memory_tools/CMakeFiles/memory_tools.dir/memory_tools_service.cpp.o -MF CMakeFiles/memory_tools.dir/memory_tools_service.cpp.o.d -o CMakeFiles/memory_tools.dir/memory_tools_service.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/memory_tools_service.cpp
[ 42%] Building CXX object src/memory_tools/CMakeFiles/memory_tools.dir/monitoring.cpp.o
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/src/memory_tools && /usr/bin/c++ -DBACKWARD_HAS_BACKTRACE=0 -DBACKWARD_HAS_BACKTRACE_SYMBOL=1 -DBACKWARD_HAS_BFD=0 -DBACKWARD_HAS_DW=0 -DBACKWARD_HAS_DWARF=0 -DBACKWARD_HAS_LIBUNWIND=0 -DBACKWARD_HAS_UNWIND=1 -DOSRF_TESTING_TOOLS_CPP_MEMORY_TOOLS_BUILDING_DLL -Dmemory_tools_EXPORTS -I/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/include -isystem /usr/lib/backward -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -MD -MT src/memory_tools/CMakeFiles/memory_tools.dir/monitoring.cpp.o -MF CMakeFiles/memory_tools.dir/monitoring.cpp.o.d -o CMakeFiles/memory_tools.dir/monitoring.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/monitoring.cpp
[ 47%] Building CXX object src/memory_tools/CMakeFiles/memory_tools.dir/register_hooks.cpp.o
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/src/memory_tools && /usr/bin/c++ -DBACKWARD_HAS_BACKTRACE=0 -DBACKWARD_HAS_BACKTRACE_SYMBOL=1 -DBACKWARD_HAS_BFD=0 -DBACKWARD_HAS_DW=0 -DBACKWARD_HAS_DWARF=0 -DBACKWARD_HAS_LIBUNWIND=0 -DBACKWARD_HAS_UNWIND=1 -DOSRF_TESTING_TOOLS_CPP_MEMORY_TOOLS_BUILDING_DLL -Dmemory_tools_EXPORTS -I/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/include -isystem /usr/lib/backward -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -Wall -Wextra -Wpedantic -Wformat=2 -Wconversion -Woverloaded-virtual -Wshadow -Wnon-virtual-dtor -MD -MT src/memory_tools/CMakeFiles/memory_tools.dir/register_hooks.cpp.o -MF CMakeFiles/memory_tools.dir/register_hooks.cpp.o.d -o CMakeFiles/memory_tools.dir/register_hooks.cpp.o -c /<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/register_hooks.cpp
/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/is_working.cpp: In function ‘void osrf_testing_tools_cpp::memory_tools::guaranteed_malloc(const std::string&)’:
/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/is_working.cpp:37:3: error: ‘memcpy’ was not declared in this scope
   37 |   memcpy(some_memory, str.c_str(), str.length());
      |   ^~~~~~
/<<PKGBUILDDIR>>/osrf_testing_tools_cpp/src/memory_tools/is_working.cpp:20:1: note: ‘memcpy’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
   19 | #include "osrf_testing_tools_cpp/memory_tools/register_hooks.hpp"
  +++ |+#include <cstring>
   20 |
make[3]: *** [src/memory_tools/CMakeFiles/memory_tools.dir/build.make:121: src/memory_tools/CMakeFiles/memory_tools.dir/is_working.cpp.o] Error 1
make[3]: *** Waiting for unfinished jobs....
[ 52%] Linking CXX executable test_runner
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/src/test_runner && /usr/bin/cmake -E cmake_link_script CMakeFiles/test_runner.dir/link.txt --verbose=1
/usr/bin/c++ -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-z,relro CMakeFiles/test_runner.dir/main.cpp.o -o test_runner
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
[ 52%] Built target test_runner
[ 57%] Linking CXX executable test_parse_environment_variable
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/test/test_runner && /usr/bin/cmake -E cmake_link_script CMakeFiles/test_parse_environment_variable.dir/link.txt --verbose=1
/usr/bin/c++ -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-z,relro CMakeFiles/test_parse_environment_variable.dir/test_parse_environment_variable.cpp.o -o test_parse_environment_variable  /usr/lib/x86_64-linux-gnu/libgtest_main.a /usr/lib/x86_64-linux-gnu/libgtest.a -lpthread
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
[ 57%] Built target test_parse_environment_variable
[ 61%] Linking CXX executable assert_env_vars
cd /<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp/test/test_runner && /usr/bin/cmake -E cmake_link_script CMakeFiles/assert_env_vars.dir/link.txt --verbose=1
/usr/bin/c++ -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -Wl,-z,relro CMakeFiles/assert_env_vars.dir/assert_env_vars.cpp.o -o assert_env_vars  /usr/lib/x86_64-linux-gnu/libgtest_main.a /usr/lib/x86_64-linux-gnu/libgtest.a -lpthread
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
[ 61%] Built target assert_env_vars
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
make[2]: *** [CMakeFiles/Makefile2:963: src/memory_tools/CMakeFiles/memory_tools.dir/all] Error 2
make[2]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
make[1]: *** [Makefile:149: all] Error 2
make[1]: Leaving directory '/<<PKGBUILDDIR>>/obj-x86_64-linux-gnu/osrf_testing_tools_cpp'
dh_auto_build: error: cd obj-x86_64-linux-gnu/osrf_testing_tools_cpp && make -j8 "INSTALL=install --strip-program=true" VERBOSE=1 returned exit code 2
dh_auto_install: error: rosbuilder --sourcedir . --builddir obj-x86_64-linux-gnu --destdir /<<BUILDDIR>>/ros2-osrf-testing-tools-cpp-1.5.1\+ds/debian/tmp returned exit code 25
make: *** [debian/rules:6: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2

#1013032#14
Date:
2022-07-08 10:41:16 UTC
From:
To:
close 1012921
close 1013032
close 1013033
thanks